实验目的
1、了解Spark Standalone模式的安装
2、了解Spark Standalone模式运行原理
实验环境
1、Linux Ubuntu 14.04
2、jdk1.7
3、hadoop-2.6.0-cdh5.4.5
4、scala-2.10.4.tgz安装包
5、spark-1.6.0-bin-hadoop2.6.tgz安装包
实验内容
Spark的standalone安装模式,可以使spark以集群的方式运行。
在单节点或多节点集群上 ,安装spark Standalone模式。
实验步骤
1、Spark的运行依赖jdk,hadoop,scala。在这里默认已安装jdk以及hadoop伪分布模式。
2、上传所需的Spark的安装包spark-1.6.0-bin-hadoop2.6.tgz及scala安装包Scala2.10.4,到/apps/toolbox目录下。
此处建议使用scala-2.10.4版本。官网中支出,若要使用scala2.11版本,则需要重新编译spark,并且编译时,需要指定scala版本的类型。
关于spark版本,没有严格要求。所以我们使用spark1.6版本。
3、安装Scala。切换目录到/apps/toolbox目录下,将/apps/toolbox目录下scala-2.10.4.tgz,解压缩到/apps目录下。并将解压后的目录名改为/apps/scala
- cd /apps/toolbox/
- tar -xzvf /apps/toolbox/scala-2.10.4.tgz -C /apps/
- cd /apps
- mv /apps/scala-2.10.4/ /apps/scala
使用vim打开用户环境变量~/.bashrc
- vim ~/.bashrc
将scala的环境变量,追加的用户环境变量中。
- export SCALA_HOME=/apps/scala
- export PATH=$SCALA_HOME/bin:$PATH
执行source命令,使系统环境变量生效。
- source ~/.bashrc
4、切换目录到/apps/toolbox目录下,将spark的安装包spark-1.6.0-bin-hadoop2.6.tgz,解压缩到/apps目录下,并将解压后的目录名,重命名为spark
- cd /apps/toolbox
- tar -xzvf /apps/toolbox/spark-1.6.0-bin-hadoop2.6.tgz -C /apps/
- cd /apps/
- mv /apps/spark-1.6.0-bin-hadoop2.6/ /apps/spark
使用vim打开用户环境变量~/.bashrc
- vim ~/.bashrc
将Spark的配置信息追加到用户环境变量中。
- #spark
- export SPARK_HOME=/apps/spark
- export PATH=$SPARK_HOME/bin:$PATH
执行source命令,使用户环境变量生效。
- source ~/.bashrc
5、切换目录到/apps/spark/conf目录下,将conf目录下的配置文件slaves.template重命名为slaves。
- mv slaves.template slave
在slave中,存储了所有worker节点的的ip或主机名。使用vim打开slaves文件,将所有worker节点的ip添加进去。由于目前只有一台节点,所以是
- 127.0.0.1
6、将/apps/spark-env.sh.template文件,重命名为/apps/spark-env.sh
- mv spark-env.sh.template spark-env.sh
使用vim,打开/apps/spark/conf/spark-env.sh文件,添加如下配置
- JAVA_HOME=/apps/java
- HADOOP_CONF_DIR=/apps/hadoop/etc/hadoop
- SPARK_MASTER_IP=127.0.0.1
- SPARK_MASTER_PORT=7077
- SPARK_MASTER_WEBUI_PORT=8080
- SPARK_WORKER_CORES=1
- SPARK_WORKER_MEMORY=1g
- SPARK_WORKER_PORT=7078
- SPARK_WORKER_WEBUI_PORT=8081
- SPARK_EXECUTOR_INSTANCES=1
SPARK_MASTER_IP、SPARK_MASTER_PORT、SPARK_MASTER_WEBUI_PORT,分别指spark集群中,master节点的ip地址、端口号、提供的web接口的端口。
SPARK_WORKER_CORES、SPARK_WORKER_MEMORY:worker节点的内核数、内存大小。
这里的workder节点的内存大小,为1024MB,此处可用根据自己机器配置调高,设置为1g,2g或其他。
7、若spark集群,是由多台服务器构成,则需要对每台服务器配置jdk环境变量、安装Scala、修改环境变量。并将以上配置完毕的spark的安装包,拷贝到各个服务器上。各个服务器安装包位置,尽量保持一致。
8、启动hadoop,首先需要保证hadoop进程已启动。切换目录到/apps/spark/sbin目录下,启动spark。
- cd /apps/spark/sbin
- ./start-all.sh
执行jps,查看进程变化
- jps
- 5144 NodeManager
- 5555 Master
- 4690 DataNode
- 4868 SecondaryNameNode
- 5691 Jps
- 5041 ResourceManager
- 4562 NameNode
- zhangyu@0ed3f46ad512:~$
9、切换目录到/apps/spark/bin目录下,使用spark shell客户端,访问服务端,验证安装完的spark是否可用。
- cd /apps/spark/bin
- ./spark-shell --master spark://localhost:7077
进入命令行模式
- 16/12/05 09:50:42 INFO repl.SparkILoop: Created sql context (with Hive support)..
- SQL context available as sqlContext.
- scala>
执行测试
在spark shell中,使用scala执行个例子。在HDFS上的/spark/1/目录下,放有一个文件,名为sample_data。首先将文件转变为RDD。
- var mytxt = sc.textFile("hdfs://localhost:9000/spark/1/sample_data");
统计文件的行数
- mytxt.count();
可用看到输出为
- res3: Long = 4
表明安装正确。
注意:在刚才执行统计过程中,由于Log4j的日志输出级别为info级别,所以会在屏幕上输出很多的log,很难定位程序的输出结果。
切换目录到/apps/spark/sbin目录下,停止spark。
- cd /apps/spark/sbin
- ./stop-all.sh
再切换目录到/apps/spark/conf目录下,将目录下log4j.properties.template重命名为log4j.properties
- cd /apps/spark/conf
- mv /apps/spark/conf/log4j.properties.template /apps/spark/conf/log4j.properties
使用vim打开log4j.properties文件,修改log4j.rootCategory内容为
- log4j.rootCategory=WARN, console
再次启动spark
- cd /apps/spark/sbin
- ./start-all.sh
执行spark-shell命令
- scala> val mytxt = sc.textFile("hdfs://localhost:9000/myspark/mywordcount")
- mytxt: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[1] at textFile at <console>:27
- scala> mytxt.count
- res0: Long = 4
- scala>
可以看到输出的内容相对于调整log4j日志级别前,更加精简了。