Spark2.1.0 on Hadoop 2.7.0

来源:互联网 发布:pkpm施工技术软件 编辑:程序博客网 时间:2024/05/21 14:06

Spark2.1.0 on Hadoop 2.7.0 Setup handbook

 部署完成后可以采用Standalone模式(本文的测试环节)、on Yarn模式运行spark作业

1        环境

VitualBox 5.0.24

CentOS-7-x86_64-Minimal-161:http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1611.iso

JDK 1.7u75:网盘

Hadoop-2.7.0-bin.tar.gz:http://mirrors.hust.edu.cn/apache/hadoop/common/

 

主要参考资料:

本地运行:http://www.cnblogs.com/dasn/articles/5644919.html

分布式运行(包括Standalone、on HDFS 和 on Yarn):http://sofar.blog.51cto.com/353572/1352713/

 

*安装spark前,Hadoop2.7.0已经部署在VM集群上,$HADOOP_HOME = /usr/hadoop/ (参见上一篇文档《Hadoop2.7-setup-distributed》:http://blog.csdn.net/wingter92)

*本文档实质上是spark的standalone模式,即在spark自身的master/slave架构上进行计算任务分配。Spark也可以运行在yarn、mesos之上,取决于启动参数。

*spark-standalone架构详解:http://blog.csdn.net/zhumr/article/details/52518506

 

 

2        安装spark

下载spark安装包

http://spark.apache.org/downloads.html

选择对应的Hadoop环境-Hadoop2.7.0,这里选择下载spark2.1.0

下载得到spark-2.1.0-bin-hadoop2.7

 

 

解压:

#tar –zxvf spark-2.1.0-bin-hadoop2.7.tgz –C/usr

#mv /usr/spark-2.1.0 /usr/spark

 

设置环境变量:

#vim /etc/profile.d/spark.sh

export SPARK_HOME=/usr/spark

export PATH=$PATH:$ SPARK_HOME/bin

 

设置spark配置文件:

#cd $SPARK_HOME/conf
# mv spark-env.sh.template spark-env.sh

#vim spark-env.sh
export JAVA_HOME=/usr/local/jdk
export SCALA_HOME=/usr/local/scala
export HADOOP_HOME=/usr/local/hadoop

export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoopclasspath)

 

##worker节点的主机名列表
# vim slaves
hadoop.slave1
hadoop.slave2

 

配置日志设置(默认是没有日志文件的,输出目标只有console):

#cd $SPARK_HOME

#mkdir logs/    #用来存放日志

 

#cd $SPARK_HOME/conf/

#mv log4j.properties.templatelog4j.properties

 

修改conf目录下log4j.properties文件,增加log目标FILE及其相关设置:

#vim log4j.properties
log4j.rootCategory= INFO, console, FILE
#
Set everything to belogged to the …


# log file settings

log4j.appender.FILE=org.apache.log4j.FileAppender

log4j.appender.FILE.File=/usr/spark/logs/spark.log

log4j.appender.FILE.layout=org.apache.log4j.PatternLayout

log4j.appender.FILE.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] [%C{1}:%M:%L] %m%n

 

# Set the default spark-shell log level…

现在log级别是INFO,冗余信息比较多(可以调节至WARN或DEBUG),日志内容会同时输出到console和指定的文件中。

 

 

3        测试Spark

3.1    本地测试

测试示例程序:

#cd $SPARK_HOME
#./bin/run-example SparkPi 10

 

本地测试spark-shell(其实就是一个application):

测试Spark-shell(Spark-shell的启动依赖HDFS,必须先启动HDFS,否则各种报错,比如连不到hadoop.master:9000)

#start-dfs.sh
#./bin/spark-shell --master local
#--master参数如果写local[线程数]则代表本地运行任务,若指定master位置(e.g., spark://hadoop.master:7077则分布式运行

启动后还可以在web界面查看到这个spark-shell的application id。打开http://192.168.1.103:4040,点击Environment:



读取本地的文件到RDD,并做一次action:

textFile.count() // RDD 中的 item 数量,对于文本文件,就是总行数

 

读取HDFS上的文件,并做一次wordcount:

scala> val file = sc.textFile("hdfs://hadoop.master:9000/testdata/wikipedia.txt")scala> val count = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_+_)scala> count.collect()scala> :quit

 

 

3.2    集群测试

复制spark所有文件到hadoop.slave1和hadoop.slave2上:

#scp –r /usr/spark/root@hadoop.slave1:/usr/

#scp –r /usr/spark/root@hadoop.slave1:/usr/

 

 

配置master上的conf/slaves文件:

# cd $SPARK_HOME/conf
# mv slaves_template slaves
# vim slaves

hadoop.slave1

hadoop.slave2

 

分布式运行要先启动spark守护进程(在7077端口运行):

# cd /usr/spark && .sbin/start-all.sh
# jps

Master节点:

 

Slave节点:

 

*从启动信息看出,以standalone模式(master/slave架构)启动了Spark之后,日志输出在各个节点的$SPARK_HOME/logs/*.out,应该和之前在log4j.properties中的设置有关。

 

启动spark-shell:

#./bin/spark-shell --master spark://hadoop.master:7077  

# 指定master为spark://,说明是standalone模式

 

--------------------------------------------------------------------------------------------------------------------------------

附:如果以On yarn模式启动spark-shell,启动命令是:

#cd $SPARK_HOME/bin
#./spark-shell --master yarn-client --executor-memory 1G --num-executors 10

--------------------------------------------------------------------------------------------------------------------------------

 

 

依旧用wordcount逻辑+HDFS测试:

scala> val file = sc.textFile("hdfs://Hadoop.master:9000/testdata/wikipedia.txt")scala> val count = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_+_)scala> count.collect()scala> :quit

执行完成,查看一下master上的log:

#less spark-root-org.apache.spark.deploy.master.Master-1-hadoop.master.out  # +G

启动spark-shell后的日志如下:

17/07/06 15:24:16 INFO Master: Registeringapp Spark shell

17/07/06 15:24:16 INFO Master: Registeredapp Spark shell with ID app-20170706152416-0000

17/07/06 15:24:16 INFO Master: Launchingexecutor app-20170706152416-0000/0 on worker worker-20170706150950-192.168.1.105-34345

17/07/06 15:24:16 INFO Master: Launchingexecutor app-20170706152416-0000/1 on workerworker-20170706150950-192.168.1.104-33568

 

在spark-shell中的命令执行过程没有记录,可能日志记录的粒度就是app(spark-shell is actually an application)。

 

 

关闭spark standalone的守护进程:

#cd $SPARK_HOME/sbin/

#./stop-all.sh  #关闭master和slave进程特别快,比stop-dfs快得多

#记得加上./,否则因为PATH的原因会执行Hadoop的stop-all.sh

原创粉丝点击