Hadoop和Spark的统一部署
Spark三种部署方式
Spark应用程序在集群上部署运行时,可以由不同的组件为其提供资源管理调度服务(资源包括CPU、内存等)。比如,可以使用自带的独立集群管理器(standalone),或者使用YARN,也可以使用Mesos。因此,Spark包括三种不同类型的集群部署方式,包括standalone、Spark on Mesos和Spark on YARN。
1.standalone模式
与MapReduce1.0框架类似,Spark框架本身也自带了完整的资源调度管理服务,可以独立部署到一个集群中,而不需要依赖其他系统来为其提供资源管理调度服务。在架构的设计上,Spark与MapReduce1.0完全一致,都是由一个Master和若干个Slave构成,并且以槽(slot)作为资源分配单位。不同的是,Spark中的槽不再像MapReduce1.0那样分为Map 槽和Reduce槽,而是只设计了统一的一种槽提供给各种任务来使用。
2.Spark on Mesos模式
Mesos是一种资源调度管理框架,可以为运行在它上面的Spark提供服务。Spark on Mesos模式中,Spark程序所需要的各种资源,都由Mesos负责调度。由于Mesos和Spark存在一定的血缘关系,因此,Spark这个框架在进行设计开发的时候,就充分考虑到了对Mesos的充分支持,因此,相对而言,Spark运行在Mesos上,要比运行在YARN上更加灵活、自然。目前,Spark官方推荐采用这种模式,所以,许多公司在实际应用中也采用该模式。
3. Spark on YARN模式
Spark可运行于YARN之上,与Hadoop进行统一部署,即“Spark on YARN”,资源管理和调度依赖YARN,分布式存储则依赖HDFS。
Hadoop和Spark的统一部署
一方面,由于Hadoop生态系统中的一些组件所实现的功能,目前还是无法由Spark取代的,比如,Storm可以实现毫秒级响应的流计算,但是,Spark则无法做到毫秒级响应。另一方面,企业中已经有许多现有的应用,都是基于现有的Hadoop组件开发的,完全转移到Spark上需要一定的成本。因此,在许多企业实际应用中,Hadoop和Spark的统一部署是一种比较现实合理的选择。
由于Hadoop MapReduce、HBase、Storm和Spark等,都可以运行在资源管理框架YARN之上,因此,可以在YARN之上进行统一部署。这些不同的计算框架统一运行在YARN中,可以带来如下好处:
计算资源按需伸缩;
不用负载应用混搭,集群利用率高;
共享底层存储,避免数据跨集群迁移。
Hadoop单机/伪分布配置
1.创建hadoop用户: sudo useradd -m hadoop -s /bin/bash
设置密码: sudo passwd hadoop
为hadoop用户增加管理员权限:sudo adduser hadoop sudo
2.安装SSH、配置SSH无密码登陆:
集群、单节点模式都需要用到 SSH 登陆:sudo apt-get install openssh-server
SSH登陆:ssh localhost (注意配置SSH免密登陆)
3.安装JAVA环境
解压文件到指定目录。
使用vim编辑器打开了hadoop这个用户的环境变量配置文件:vim ~/.bashrc
保存.bashrc文件并退出,使配置立即生效:source ~/.bashrc
查看是否安装成功:java -version
4.安装Hadoop
下载解压文件
修改权限:sudo chown -R hadoop ./hadoop
检查版本信息:./bin/hadoop version
Hadoop伪分布式配置:
通过 gedit 编辑core-site.xml文件: gedit ./etc/hadoop/core-site.xml
配置完成,执行NameNode格式化:./bin/hdfs namenode -format
启动SSH:./sbin/start-dfs.sh
5.安装Spark(python)
下载和解压Spark文件
修改Spark的配置文件spark-env.sh,在第一行添加配置信息:
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
有了上面的配置信息以后,Spark就可以把数据存储到Hadoop分布式文件系统HDFS中,也可以从HDFS中读取数据。如果没有配置上面信息,Spark就只能读写本地数据,无法读写HDFS数据。
修改环境变量:vim ~/.bashrc 在.bashrc文件中添加如下内容
PYTHONPATH环境变量主要是为了在Python3中引入pyspark库,PYSPARK_PYTHON变量主要是设置pyspark运行的python版本。
让环境变量生效:source ~/.bashrc
配置完成后就可以直接使用,不需要像Hadoop运行启动命令。如果在使用Spark的过程中需要用到 HDFS,就要首先启动 Hadoop。
启动pyspark: bin/pyspark
参考链接:http://dblab.xmu.edu.cn/blog/1689-2/