Spark集群搭建

来源:互联网 发布:知乎 长青春痘 编辑:程序博客网 时间:2024/06/01 07:55

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下,解压后目录结构如下:

spark目录结构

进入conf目录下,需要配置的文件总共有三个,如下图:

配置文件

  • 1)配置spark-env.sh

    spark-env.sh主要配置spark集群启动时的相关参数,执行

cp spark-env.sh.template spark-env.shvi spark-env.sh//配置以下信息#指定jdkexport JAVA_HOME=/home/hadoop/app/jdk1.8.0_131#指定masterexport 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既做主节点,又做从节点

node1node2node3

三、启动spark集群

spark-2.2.0-bin-hadoop2.6/sbin 目录下

//启动master和slavesstart-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打印详细的调试信息

以上都是自己在学习过程中的总结整理,如果有错误的地方,欢迎留言指正。