spark集群搭建需要使用到Hadoop环境,所以在搭建spark集群之前,需要先搭建Hadoop环境,可以参考之前写的 Hadoop—HA集群搭建
一、准备工作
除了上面所说的Hadoop环境外,spark集群搭建还需要配置scala环境,scala环境的配置类似于jdk配置,比较简单,只需下载对应版本的包,解压,在配置文件中添加SCALA_HOME环境变量就可以了,这里就不在做详细说明。
搭建环境:CentOS release 6.5 (Final) + jdk1.8.0_131 + scala-2.11.7
这里使用三台服务器来搭建,分别为node1、node2、node3;
对应的ip为:192.168.1.11、192.168.1.12、192.168.1.13
二、spark具体配置
我这里使用的是spark-2.2.0-bin-hadoop2.6,对应的是Hadoop2.6的版本,首先去spark官网:http://spark.apache.org/downloads.html下载所需的版本,解压到指定目录,我这里是解压到/home/hadoop/app下,解压后目录结构如下:
进入conf目录下,需要配置的文件总共有三个,如下图:
1)配置spark-env.sh
spark-env.sh主要配置spark集群启动时的相关参数,执行
cp spark-env.sh.template spark-env.sh
vi spark-env.sh
//配置以下信息
#指定jdk
export JAVA_HOME=/home/hadoop/app/jdk1.8.0_131
#指定master
export SPARK_MASTER_IP=node1
#指定结点使用内核数
export SPARK_WORKER_CORES=2
#指定结点使用内存数
export SPARK_WORKER_MEMORY=1g
#配置hadoop的配置路径
export HADOOP_CONF_DIR=/home/hadoop/app/hadoop-2.6.5/etc/hadoop
这里采用最简配置,其他参数设置均采用默认值,需要设置其他的可参考下面参数配置信息:
#本机ip或hostname
SPARK_LOCAL_IP=node1
#配置spark的local目录
SPARK_LOCAL_DIRS=/home/hadoop/app/
#master节点ip或hostname
SPARK_MASTER_IP=node1
#web页面端口
SPARK_MASTER_WEBUI_PORT=8080
#spark-shell启动使用核数
export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=4"
#Worker的cpu核数
SPARK_WORKER_CORES=2
#worker内存大小
SPARK_WORKER_MEMORY=8g
#worker目录
SPARK_WORKER_DIR=/opt/data/spark/work
#worker自动清理及清理时间间隔
export SPARK_WORKER_OPTS=
"-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.appDataTtl=604800"
#history server页面端口、备份数、log日志在HDFS的位置
export SPARK_HISTORY_OPTS=
"-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://node1:9000/tmp/spark/applicationHistory"
#配置Spark的log日志目录
SPARK_LOG_DIR=/opt/data/spark/log
#配置java路径
export JAVA_HOME=/usr/local/jdk1.8.0_91/
#配置scala路径
export SCALA_HOME=/usr/local/scala-2.10.4/
#配置hadoop的lib路径
export HADOOP_HOME=/home/hadoop/app/hadoop-2.6.5/lib/native
#配置hadoop的配置路径
export HADOOP_CONF_DIR=/home/hadoop/app/hadoop-2.6.5/etc/hadoop
2)配置spark-defaults.conf
spark-defaults.conf主要用于配置spark集群自己的相关信息,执行
cp spark-defaults.conf.template spark-defaults.conf
vi spark-defaults.conf
里面的默认配置信息为:
# spark.master spark://master:7077
# spark.eventLog.enabled true
# spark.eventLog.dir hdfs://namenode:8021/directory
# spark.serializer org.apache.spark.serializer.KryoSerializer
# spark.driver.memory 5g
# spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
在采用最简配置时,上述配置都不需要修改,其他参数设置参考如下:
#eventLog是否生效(建议开启,可以对已完成的任务记录其详细日志)
spark.eventLog.enabled true
#eventLog是否启用压缩(cpu性能好的情况下建议开启,以减少内存等的占用)
spark.eventLog.compress true
#eventLog的文件存放位置,与spark-env.sh中的history server配置位置一致,这两个位置必须手动创建
# hadoop fs -mkdir -p /tmp/spark/applicationHistory,否则spark启动失败
spark.eventLog.dir hdfs://node1:9000/tmp/spark/applicationHistory
#广播块大小
spark.broadcast.blockSize 8m
#Executor的cpu核数
spark.executor.cores 1
#Executor的内存大小
spark.executor.memory 512m
#Executor心跳交换时间间隔
spark.executor.heartbeatInterval 20s
#文件抓取的timeout
spark.files.fetchTimeout 120s
#作业最大失败次数(达到此次数后,该作业不再继续执行,运行失败)
spark.task.maxFailures 6
#设置序列化机制(默认使用java的序列化,但是速度很慢,建议使用Kryo)
spark.serializer org.apache.spark.serializer.KryoSerializer
#序列化缓冲大小
spark.kryoserializer.buffer.max 256m
#Akka调度帧大小
spark.akka.frameSize 128
#默认并行数
spark.default.parallelism 20
#最大网络延时
spark.network.timeout 300s
#Spark推测机制(建议开启)
spark.speculation true
3)配置slaves文件
配置结点信息,由于机器数量限制,这里node1既做主节点,又做从节点
node1
node2
node3
三、启动spark集群
spark-2.2.0-bin-hadoop2.6/sbin 目录下
//启动master和slaves
start-all.sh
//停止master和slaves
stop-all.sh
jps检查是否运行成功,如果master节点出现Master,worker节点出现Worker说明运行成功!
四、spark-submit提交作业任务
代码需要提交到spark运行,使用命令
./spark-submit --class cn.test.TestDemo --master spark:node1:7077 --executor-memory 2g --num-executors 5 /home/hadoop/jobs/testdemo-0.0.1-SNAPSHOT.jar
spark-submit 在默认情况下它会从Spark文件夹的conf/spark-defaults.conf读取参数,如果配置了spark.master, 你就可以不用在调用spark-submit脚本时设置–master参数,如果你不清楚配置项来自哪里,你可以使用–verbose打印详细的调试信息
以上都是自己在学习过程中的总结整理,如果有错误的地方,欢迎留言指正。