2.0-Spark完全分布式集群安装

来源:互联网 发布:linux mint中文输入法 编辑:程序博客网 时间:2024/06/02 18:21

本次安装是之前的Hadoop完全分布式集群的基础之上进行,相关软件版本如下:
Linux系统:CentOS release 6.5 final x86-64
Jdk:jdk1.8.0_141
hadoop: Yarn的hadoop2.6
scala:scala-2.10.6
spark:spark-1.6.0-bin-hadoop2.6

此处省略jdk和hadoop的安装。
具体过程可参考之前的博客:http://blog.csdn.net/yyl424525/article/details/55097022

一.下载spark安装包
这里写图片描述
二.安装步骤
1. 将下载好的spark安装包放到linux上面(hdp-node-01上面)
2. 解压安装包到指定位置
tar -zxvf spark-1.6.0-bin-hadoop2.6.tgz -C /usr/local/yyl
3.进入到spark安装目录,进行相关配置 :
cd /usr/local/yyl/spark-1.6.0-bin-hadoop2.6/conf
3.1 修改spark-env.sh
mv spark-env.sh.template spark-env.sh
(不保存退出 :q!)
vi spark-env.sh
vi /usr/local/yyl/spark-1.6.0-bin-hadoop2.6/conf/spark-env.sh
在该配置文件下配置如下配置:

  export JAVA_HOME=/usr/local/yyl/jdk1.8  export SPARK_MASTER_IP=hdp-node-01  export SPARK_MASTER_PORT=7077

3.2添加slaves节点
重命名并修改slaves.template文件
mv slaves.template slaves
vi /usr/local/yyl/spark-1.6.0-bin-hadoop2.6/conf/slaves
在该文件中添加子节点所在的位置(Worker节点)
(删除localhost)

hdp-node-02hdp-node-03

4.修改相关目录权限,否则spark集群无法启动
修改$SPARK_HOME的权限,赋予其他用户读写权限

chmod 777 $SPARK_HOME

修改$SPARK_HOME下logs和data目录的权限,赋予其他用户读写权限:

chmod 777 $SPARK_HOME/logschmod 777 $SPARK_HOME/data

5 . 将配置好的Spark拷贝到其他节点上
cd /usr/local/yyl
scp -r spark-1.6.0-bin-hadoop2.6/ hdp-node-02:/usr/local/yyl
scp -r spark-1.6.0-bin-hadoop2.6/ hdp-node-03:/usr/local/yyl
注意:保证各节点文件路径要相完全同,相关文件夹权限要相同,环境变量配置也要完全相同

三、spark 安装包文件夹说明
1. bin : 里面存放的是操作spark集群的命令
2. conf: 存放的是配置文件,文件的配置包括slaves , spark运行环境配置等等
3. data: 存放的是机器学习demo会用到的数据
4. ec2: 文件夹下面包含了spark-ec2脚本,用来在Amazon EC2环境下启动spark集群
5. examples: spark自带的小demo,建议大家学完spark以后一个一个去研究
6. lib: 存放的都是jar包
7. Licenses :存放的都是许可文件(这个文件夹不用关心)
8. logs: 运行时生成的文件夹,存放的都是运行期的日志
9. python: 对python的支持
10. R: 对R语言的支持
11. sbin: 关闭、打开集群的shell
12. work: 工作目录,运行后生成。存放的就是提交的应用记录

四、启动测试
1.验证启动
1、启动后执行jps命令,主节点上有Master进程,其他子节点上有Work进行,用以下命令启动或关闭(可不启动Hadoop)
(启动集群):
/usr/local/yyl/spark-1.6.0-bin-hadoop2.6/sbin/start-all.sh
(关闭集群):
/usr/local/yyl/spark-1.6.0-bin-hadoop2.6/sbin/stop-all.sh
这里写图片描述

2、登录Spark管理界面查看集群状态(主节点):http://192.168.33.101:8080/

2.验证客户端连接(启动Spark Shell)
进入hdp-node-01节点,进入spark的bin目录,使用spark-shell连接集群

$cd /usr/local/yyl/spark-1.6.0-bin-hadoop2.6/bin$./spark-shell --master spark://hdp-node-01:7077 --executor-memory 500m

(不能少了./,表示当前目录,否则命令找不到异常)
在命令中只指定了内存大小并没有指定核数,所以该客户端将占用该集群所有核并在每个节点分配500M内存

浏览器查看:http://192.168.33.101:8080/

这里写图片描述

5 运行WordCount脚本
上传数据到HDFS中
把hadoop配置文件core-site.xml文件作为测试文件上传到HDFS中

$hadoop fs -mkdir -p  /user/hadoop/testdata$hadoop fs -put  /usr/local/yyl/hadoop-2.6.5/etc/hadoop/core-site.xml /user/hadoop/testdatahadoop fs -ls /user/hadoop/testdata/

下面就是WordCount的执行脚本,该脚本是scala编写,以下为一行实现:

scala>sc.textFile("hdfs://hdp-node-01:9000/user/hadoop/testdata/core-site.xml").flatMap(_.split(" ")).map(x=>(x,1)).reduceByKey(_+_).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1)).take(10)

为了更好看到实现过程,下面将逐行进行实现:

scala>val rdd=sc.textFile("hdfs://hdp-node-01:9000/user/hadoop/testdata/core-site.xml")scala>rdd.cache()scala>val wordcount=rdd.flatMap(_.split(" ")).map(x=>(x,1)).reduceByKey(_+_)scala>wordcount.take(10)scala>val wordsort=wordcount.map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1))scala>wordsort.take(10)

统计结果如下:

scala> wordsort.take(10)res2: Array[(String, Int)] = Array(("",25), (the,7), (in,3), (License,3), (under,3), (See,2), (License.,2), (<!--,2), (distributed,2), (may,2))

观察运行情况
http://192.168.33.101:8080/

这里写图片描述
通过点击客户端运行任务ID,可以看到该任务在hadoop2和hadoop3节点上运行,在hadoop1上并没有运行,主要是由于hadoop1为NameNode和Spark客户端造成内存占用过大造成

原创粉丝点击