最近学习Spark,因此想把相关内容记录下来,方便他人参考,也方便自己回忆吧

spark开发环境的介绍资料很多,大同小异,很多不能一次配置成功,我以自己的实际操作过程为准,详细记录下来。

1、基本运行环境

     spark的运行需要java和scala的支持,因此首先需要配置java、scala运行环境,网上资料很多,也很简单

     详细内容参见上一篇博客()

     我使用的是jdk1.8.0_91,scala-2.10.4,下载地址分别为

     http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    http://www.scala-lang.org/download/2.10.4.html


2、配置hadoop和spark

     我是用的是hadoop2.6.0和spark-1.6.1-bin-hadoop2.6.tgz

     下载地址分别是:

      https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz

      http://d3kbcqa49mib13.cloudfront.net/spark-2.0.1-bin-hadoop2.7.tgz

      spark配置环境见上一篇博客(),hadoop配置方式相同

       

3、集群机器无密钥访问设置

      因为集群机器需要能够互相访问,因此需要设置无密钥直连权限,可以通过配置公钥实现

     我使用了三台机器,为了方便可以修改主机名,也可以直接使用ip,我这里修改了ip到主机名的映射

      修改文件/etc/hosts(或者/etc/sysconfig/network),添加以下内容:

        注意:主机名必须和hosts文件中的名称保持一致,主机名host_name_i可以自己定义!   

       

首先确保机器安装了ssh,如果没有可以通过以下命令安装:
              yum install -y openssh-server
       然后生成密钥,如果已经生成过,可以跳过该步骤继续:

             ssh-keygen -t rsa -P 
ssh-copy-id host_name_2, ssh-copy-id host_name_3
              将该台机器的公钥拷贝到要免密码登录的机器上,ssh host_name_2,可以测试是否成功
4、hadoop集群环境
       我使用三台机器因此其中一台为namenode,两台datanode,每台机器添加host
        网络资料大多是要创建hadoop账户配置,这里我并没有创建新的hadoop账户,而是在当前普通用户下配置的。
        首先创建hadoop需要用到的目录:
/usr/local/hadoop/tmp
        mkdir /usr/local/hadoop/dfs/name
        mkdir /usr/lib/hadoop/dfs/data
        我的hadoop放在/usr/local/目录下因此 接下来修改该目录下hadoop的配置文件,路径/usr/local/hadoop
   
        一共需要配置四个文件分别是:
etc/hadoop/core-site.xml
etc/hadoop/hdfs-site.xml
etc/hadoop/mapred-site.xml
        /usr/local/hadoop/etc/hadoop/yarn-site.xml
        core-site.xml内容如下:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://host_name_1:9000</value>
</property>
 
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value> <!-- 这里目录可以自己指定-->
</property>
 
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
</configuration>
 

hdfs-site.xm内容如下:
         
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/hadoop/dfs/name</value><!-- 这里目录可以自己指定-->
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/lib/hadoop/dfs/data</value><!-- 这里目录可以自己指定-->
</property>
<property>
<name>dfs.nameservices</name>
<value>h1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>h1m1:50090</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
mapred-site.xml内容如下:
 
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<property>
<name>mapreduce.jobtracker.http.address</name>
<value>host_name_1:50030</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>host_name_1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>host_name_1:19888</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://host_name_1:9001</value>
</property>
</configuration>
         
yarn-site.xml配置如下 
 
<configuration>
<!-- Site specific YARN configurationproperties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>host_name_1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>host_name_1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>host_name_1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>host_name_1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>host_name_1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>host_name_1:8088</value>
</property>
</configuration>
将本机配置拷贝至其他机器
scp -r /usr/local/hadoop host_name_2
scp -r /usr/local/hadoop host_name_3
开始格式化hdfs:
hdfs namenode -format
启动hadoop
sbin/start-dfs.sh
启动yarn
 sbin/start-yarn.sh
验证成功:输入 jps,显示如下表示启动成功!
23568 NodeManager
           23315 ResourceManager
          23828 Jps
          22300 DataNode
          22141 NameNodehost_name_2,host_name_3显示如下:
38832 DataNode                                                                                                                                                                                                                                                                                                            
           30499 Jps
           39007 NodeManager至此Hadoop集群搭建完毕
5、spark集群环境
      之前spark基本运行环境已经配置好,这里需要配置集群运行环境
首先新建好spark用到的目录:
/opt/data/spark/local (递归创建)
        mkdir -p /opt/data/spark/log
        mkdir -p /opt/data/spark/work
        添加目录读写权限
        chmod -R 777 /opt/data/  
配置spark-env.sh, spark-defaults.conf, conf/slaves(/usr/local/spark/conf/目录)三个文件
        cp conf/spark-env.sh.template conf/spark-env.sh
        spark-env.sh内容如下:
SPARK_LOCAL_IP=10.*.*.41                                   #本机ip或hostname
        SPARK_LOCAL_DIRS=/opt/data/spark/local           #配置spark的local目录
        SPARK_MASTER_IP=10.*.*.41                                #master节点ip或hostname
        SPARK_MASTER_WEBUI_PORT=8080                  #web页面端口

       export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=4"    #spark-shell启动使用核数
       SPARK_WORKER_CORES=2                                                             #Worker的cpu核数
       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"  #worker自动清理及清理时间间隔
       export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -             Dspark.history.fs.logDirectory=hdfs://10.*.*.41:9000/tmp/spark/applicationHistory"    #history server页面端口、备份数、log日志在HDFS的位置
       SPARK_LOG_DIR=/opt/data/spark/log                                                 #配置Spark的log日志目录

       export JAVA_HOME=/usr/local/jdk1.8.0_91/                                        #配置java路径
       export SCALA_HOME=/usr/local/scala-2.10.4/                                    #配置scala路径

       export SPARK_MASTER_IP=10.*.*.41
       export SPARK_WORKER_MEMORY=10240m       export HADOOP_HOME=/home/lscm/hadoop/hadoop/lib/native              #配置hadoop的lib路径
       export HADOOP_CONF_DIR=/home/lscm/hadoop/hadoop/etc/hadoop/  #配置hadoop的配置路径 

        spark-defaults.conf内容如下
eventLog是否生效(建议开启,可以对已完成的任务记录其详细日志)
       spark.eventLog.compress         true   #eventLog是否启用压缩(cpu性能好的情况下建议开启,以减少内存等的占用)
       spark.eventLog.dir              hdfs://10.30.96.41:9000/tmp/spark/applicationHistory    #eventLog的文件存放位置,与spark-env.sh中的history server配置位置一致,这两个位置必须手动创建 hadoop fs -mkdir -p /tmp/spark/applicationHistory,否则spark启动失败
       spark.broadcast.blockSize       8m               #广播块大小
       spark.executor.cores            1                      #Executor的cpu核数
       spark.executor.memory           512m            #Executor的内存大小
       spark.executor.heartbeatInterval        20s    #Executor心跳交换时间间隔


       spark.files.fetchTimeout        120s                #文件抓取的timeout
       spark.task.maxFailures          6                     #作业最大失败次数(达到此次数后,该作业不再继续执行,运行失败)
       spark.serializer                org.apache.spark.serializer.KryoSerializer    #设置序列化机制(默认使用java的序列化,但是速度很慢,建议使用Kryo)
       spark.kryoserializer.buffer.max         256m    #序列化缓冲大小
       spark.akka.frameSize            128                  #Akka调度帧大小
       spark.default.parallelism       20                     #默认并行数
       spark.network.timeout           300s                 #最大网络延时
       spark.speculation               true                      #Spark推测机制(建议开启)      slaves配置
        host_name_1
        host_name_2
        host_name_3
在相应的主机创建对应的spark软链接,并将spark-env.sh中SPARK_LOCAL_IP改为对应的ip即可。
        启动集群
        start-all.sh                    //启动master和slaves
      stop-all.sh                    //停止master和slaves
      jps检查是否运行成功,如果master节点出现Master,worker节点出现Worker说明运行成功!
首先确保机器安装了ssh,如果没有可以通过以下命令安装:
              yum install -y openssh-server
       然后生成密钥,如果已经生成过,可以跳过该步骤继续:

             ssh-keygen -t rsa -P 
ssh-copy-id host_name_2, ssh-copy-id host_name_3
              将该台机器的公钥拷贝到要免密码登录的机器上,ssh host_name_2,可以测试是否成功
4、hadoop集群环境
       我使用三台机器因此其中一台为namenode,两台datanode,每台机器添加host
        网络资料大多是要创建hadoop账户配置,这里我并没有创建新的hadoop账户,而是在当前普通用户下配置的。
        首先创建hadoop需要用到的目录:
/usr/local/hadoop/tmp
        mkdir /usr/local/hadoop/dfs/name
        mkdir /usr/lib/hadoop/dfs/data
        我的hadoop放在/usr/local/目录下因此 接下来修改该目录下hadoop的配置文件,路径/usr/local/hadoop
   
        一共需要配置四个文件分别是:
etc/hadoop/core-site.xml
etc/hadoop/hdfs-site.xml
etc/hadoop/mapred-site.xml
        /usr/local/hadoop/etc/hadoop/yarn-site.xml
        core-site.xml内容如下:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://host_name_1:9000</value>
</property>
 
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value> <!-- 这里目录可以自己指定-->
</property>
 
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
</configuration>
 

hdfs-site.xm内容如下:
         
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/hadoop/dfs/name</value><!-- 这里目录可以自己指定-->
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/lib/hadoop/dfs/data</value><!-- 这里目录可以自己指定-->
</property>
<property>
<name>dfs.nameservices</name>
<value>h1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>h1m1:50090</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
mapred-site.xml内容如下:
 
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<property>
<name>mapreduce.jobtracker.http.address</name>
<value>host_name_1:50030</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>host_name_1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>host_name_1:19888</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://host_name_1:9001</value>
</property>
</configuration>
         
yarn-site.xml配置如下 
 
<configuration>
<!-- Site specific YARN configurationproperties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>host_name_1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>host_name_1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>host_name_1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>host_name_1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>host_name_1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>host_name_1:8088</value>
</property>
</configuration>
将本机配置拷贝至其他机器
scp -r /usr/local/hadoop host_name_2
scp -r /usr/local/hadoop host_name_3
开始格式化hdfs:
hdfs namenode -format
启动hadoop
sbin/start-dfs.sh
启动yarn
 sbin/start-yarn.sh
验证成功:输入 jps,显示如下表示启动成功!
23568 NodeManager
           23315 ResourceManager
          23828 Jps
          22300 DataNode
          22141 NameNodehost_name_2,host_name_3显示如下:
38832 DataNode                                                                                                                                                                                                                                                                                                            
           30499 Jps
           39007 NodeManager至此Hadoop集群搭建完毕
5、spark集群环境
      之前spark基本运行环境已经配置好,这里需要配置集群运行环境
首先新建好spark用到的目录:
/opt/data/spark/local (递归创建)
        mkdir -p /opt/data/spark/log
        mkdir -p /opt/data/spark/work
        添加目录读写权限
        chmod -R 777 /opt/data/  
配置spark-env.sh, spark-defaults.conf, conf/slaves(/usr/local/spark/conf/目录)三个文件
        cp conf/spark-env.sh.template conf/spark-env.sh
        spark-env.sh内容如下:
SPARK_LOCAL_IP=10.*.*.41                                   #本机ip或hostname
        SPARK_LOCAL_DIRS=/opt/data/spark/local           #配置spark的local目录
        SPARK_MASTER_IP=10.*.*.41                                #master节点ip或hostname
        SPARK_MASTER_WEBUI_PORT=8080                  #web页面端口

       export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=4"    #spark-shell启动使用核数
       SPARK_WORKER_CORES=2                                                             #Worker的cpu核数
       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"  #worker自动清理及清理时间间隔
       export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -             Dspark.history.fs.logDirectory=hdfs://10.*.*.41:9000/tmp/spark/applicationHistory"    #history server页面端口、备份数、log日志在HDFS的位置
       SPARK_LOG_DIR=/opt/data/spark/log                                                 #配置Spark的log日志目录

       export JAVA_HOME=/usr/local/jdk1.8.0_91/                                        #配置java路径
       export SCALA_HOME=/usr/local/scala-2.10.4/                                    #配置scala路径

       export SPARK_MASTER_IP=10.*.*.41
       export SPARK_WORKER_MEMORY=10240m       export HADOOP_HOME=/home/lscm/hadoop/hadoop/lib/native              #配置hadoop的lib路径
       export HADOOP_CONF_DIR=/home/lscm/hadoop/hadoop/etc/hadoop/  #配置hadoop的配置路径 

        spark-defaults.conf内容如下
eventLog是否生效(建议开启,可以对已完成的任务记录其详细日志)
       spark.eventLog.compress         true   #eventLog是否启用压缩(cpu性能好的情况下建议开启,以减少内存等的占用)
       spark.eventLog.dir              hdfs://10.30.96.41:9000/tmp/spark/applicationHistory    #eventLog的文件存放位置,与spark-env.sh中的history server配置位置一致,这两个位置必须手动创建 hadoop fs -mkdir -p /tmp/spark/applicationHistory,否则spark启动失败
       spark.broadcast.blockSize       8m               #广播块大小
       spark.executor.cores            1                      #Executor的cpu核数
       spark.executor.memory           512m            #Executor的内存大小
       spark.executor.heartbeatInterval        20s    #Executor心跳交换时间间隔


       spark.files.fetchTimeout        120s                #文件抓取的timeout
       spark.task.maxFailures          6                     #作业最大失败次数(达到此次数后,该作业不再继续执行,运行失败)
       spark.serializer                org.apache.spark.serializer.KryoSerializer    #设置序列化机制(默认使用java的序列化,但是速度很慢,建议使用Kryo)
       spark.kryoserializer.buffer.max         256m    #序列化缓冲大小
       spark.akka.frameSize            128                  #Akka调度帧大小
       spark.default.parallelism       20                     #默认并行数
       spark.network.timeout           300s                 #最大网络延时
       spark.speculation               true                      #Spark推测机制(建议开启)      slaves配置
        host_name_1
        host_name_2
        host_name_3
在相应的主机创建对应的spark软链接,并将spark-env.sh中SPARK_LOCAL_IP改为对应的ip即可。
        启动集群
        start-all.sh                    //启动master和slaves
      stop-all.sh                    //停止master和slaves
      jps检查是否运行成功,如果master节点出现Master,worker节点出现Worker说明运行成功!

 6、spark-submit提交作业

        代码需要提交到spark运行,使用命令 spark-submit --master spark://master:7077 test.py

在默认情况下它会从Spark文件夹的conf/spark-defaults.conf读取参数

如果配置了spark.master, 你就可以不用在调用spark-submit脚本时设置--master参数

如果你不清楚配置项来自哪里,你可以使用--verbose打印详细的调试信息6、spark-submit提交作业


参考内容

1、http://baike.xsoftlab.net/view/295.html#1

2、

3、

4、http://www.linuxidc.com/Linux/2015-08/120947.htm

5、