Spark on Yarn集群搭建

软件环境:

linux系统: CentOS6.7
Hadoop版本: 2.6.5
zookeeper版本: 3.4.8

</br>

主机配置:

一共m1, m2, m3这五部机, 每部主机的用户名都为centos
192.168.179.201: m1 
192.168.179.202: m2 
192.168.179.203: m3 

m1: Zookeeper, Namenode, DataNode, ResourceManager, NodeManager, Master, Worker
m2: Zookeeper, Namenode, DataNode, ResourceManager, NodeManager, Worker
m3: Zookeeper, DataNode, NodeManager, Worker

</br>

一.编译Spark源码

参考资料:

spark源码编译教程
    http://blog.csdn.net/yanran1991326/article/details/46506595

</br>

1.安装Maven: (Linux下,若使用Spark自带的编译器可跳过此步)
 Maven教程:
    http://wiki.jikexueyuan.com/project/maven/
  1. 下载Maven安装包
  2. 解压Maven到指定位置
  3. 编辑/etc/profile文件
export M2_HOME=/home/centos/soft/maven
PATH=$PATH:$M2_HOME/bin
  1. 刷新一下/etc/profile文件
source /etc/profile
  1. 检验是否安装成功,输入以下指令
mvn -v
  1. 设置maven内存大小
    (1)Linux下:
    配置环境变量,编辑/etc/profile文件
export MAVEN_OPTS=-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m

(2)Windows下:
配置环境变量:
新建变量:MAVEN_OPTS, 并将变量MAVEN_OPTS的值设置成-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m

</br>

2.编译spark源码:
spark源码下载官方地址:
    http://spark.apache.org/downloads.html
spark源码编译官方指南:
    http://spark.apache.org/docs/1.5.0/building-spark.html
spark源码编译教程:
    http://blog.csdn.net/yanran1991326/article/details/46506595
1. 下载spark源码
2. 使用spark源码编译: (推荐使用第一种方案, 因为第二种方案亲测编译成功后各种缺包)
  1. 方案一:使用maven编译: Linux下 (推荐使用这种方法)
    (1)编译指令:
    如果想生成一个用scala2.1.2编译的spark 部署包,则要先执行change-scala-version.sh文件: ./dev/change-scala-version.sh 2.10(若要指定scala的编译版本时, 必须先执行该指令)
mvn -Phadoop-2.6 -Pyarn -Dhadoop.version=2.6.5 -Dyarn.version=2.6.5 -Dscala-2.10 -DskipTests clean package

指令参数使用介绍:

–Phadoop-$系列:                     打包时所用的Hadoop系列号,不加此参数时hadoop为pom.xml的默认系列。 
-Dhadoop.version=$版本号:          打包时所用的Hadoop版本号,不加此参数时不可从HDFS上读取数据。 
–Pyarn:                           是否支持Hadoop YARN,不加参数时为不支持yarn。 
-Dyarn.version=$版本号:               是否支持Hadoop YARN,不加参数时为不支持yarn调度。 
–Phive:                              是否在Spark SQL中支持hive,不加此参数时为不支持hive。(若要使用Hive on Spark功能时, 不能添加次参数)
-Dscala-$版本号:                     打包时所用的Scala系列号,不加此参数时Scala版本为pom.xml的默认版本, 在使用此函数之前必须先执行./dev/change-scala-version.sh 2.10指令,否则无效 
-DskipTests:                          是否在编译的过程中略过测试,加此参数时为略过。 

(2)编译成功:
编译成功后的Spark引用包的存放位置:

$Spark源码目录/assembly/target/scala-2.10/spark-assembly-1.6.3-hadoop2.6.5.jar

该包的只是一个引用包, 应把tgz解压安装的$SPARK_HOME/lib目录下的assembly删除, 然后将该包放入到$SPARK_HOME/lib目录下

  1. 方案二:使用spark源码包中自带的make-distribution编译工具
    (1)编译指令:
    先编译Spark源码(若需要用到parquet功能,则带上parquet-provided参数)
    Spark2.0版本之前(hadoop版本可随实际情况修改)
./make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.4,parquet-provided"
Spark2.0版本之后(hadoop版本可随实际情况修改)
./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided"

(2)编译成功
编译成功后的Spark安装包的存放位置:

$Spark源码目录/spark-1.6.0-bin-hadoop2-without-hive-src.tgz

该包是一个安装包, 用tar解压出安装即可, 不推荐使用


</br>
</br>

二.搭建Spark集群

0.安装准备
  1. 下载Scala
http://www.scala-lang.org/download/
  1. 下载Spark
http://spark.apache.org/downloads.html

</br>

1.集群规划(在m1上操作,然后在分发到其他主机)
Master  m1
Slaves  m3, m4, m5

</br>

2.解压Scala,Spark安装包
tar -zxvf scala-2.10.6/ -C /home/centos/soft/scala
tar -zxvf spark-1.6.0-bin-hadoop2.6/ -C /home/centos/soft/spark

</br>

3.配置环境变量
vi /etc/profile
## Spark
export SCALA_HOME=/home/centos/soft/scala
export SPARK_HOME=/home/centos/soft/spark
export CLASSPATH=$CLASSPATH:$SPARK_HOME/lib
export PATH=$PATH:$SCALA_HOME/bin:$SPARK_HOME/sbin:$SPARK_HOME/bin
source /etc/profile

</br>

4.拷贝hdfs-site.xml, yarn-site.xml, hive-site.xml文件拷贝到spark的配置目录下
cp /home/centos/soft/hadoop/etc/hadoop/hdfs-site.xml    /home/centos/soft/spark/conf
cp /home/centos/soft/hadoop/etc/hadoop/yarn-site.xml    /home/centos/soft/spark/conf
cp /home/centos/soft/hive/conf/hive-site.xml            /home/centos/soft/spark/conf

</br>

5.编辑$/SPARK_HOME/conf/spark-env.sh文件
Spark官方配置参考:
    https://spark.apache.org/docs/1.2.0/configuration.html
Hive On Spark配置参考:
    https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties#ConfigurationProperties-Spark
vi  $SPARK_HOME/conf/spark-env.sh
export JAVA_HOME=/home/centos/soft/jdk1.7.0_67
export HADOOP_HOME=/home/centos/soft/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SCALA_HOME=/home/centos/soft/scala
export SPARK_HOME=/home/centos/soft/spark
export SPARK_LOCAL_DIRS=$SPARK_HOME/tmp                 ## spark相关的临时文件
export SPARK_DIST_CLASSPATH=$(/home/centos/soft/hadoop/bin/hadoop classpath)
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$HADOOP_HOME/lib:$SCALA_HOME/lib:$SPARK_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin

export SPARK_MASTER_IP=m1
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_WEBUI_PORT=8080
export SPARK_WORKER_CORES=3                                     ## 允许Spark应用程序在每台机器上使用的内核总数
export SPARK_WORKER_MEMORY=512m                                 ## 允许Spark应用程序在每台机器上使用的总内存量,例如1000m,2g(默认值:总内存为1 GB);请注意,每个应用程序的单独内存都使用其spark.executor.memory属性配置
export SPARK_WORKER_INSTANCES=1                              ## 在每台计算机上运行的工作程序实例数(默认值:1)。如果你有非常大的机器,并且想要多个Spark工作进程,你可以使它超过1。如果你这样设置,确保显式地设置SPARK_WORKER_CORES以限制每个工人的核心,否则每个工人将尝试使用所有核心。
export SPARK_DAEMON_MEMORY=512m                                 ## 要分配给Spark主服务器和工作程序守护程序本身的内存(默认值:512m)。
export SPARK_EXECUTOR_CORES=1                                   ## 每个Executor使用的CPU核数,每个Exector使用的总核心spark.max.cores在spark-default.conf中设置
export SPARK_EXECUTOR_MEMORY=512m                               ## 每个Executor使用多大的内存
export SPARK_DRIVER_MEMORY=512m
export SPARK_YARN_AM_CORES=1
export SPARK_YARN_AM_MEMORY=512m
export SPARK_YARN_AM_WAITTIME=200ms
export SPARK_YARN_APP_NAME=Spark_On_Yarn
export SPARK_YARN_EXECUTOR_MEMORYOVERHEAD=75
export SPARK_TESTING_MEMORY=536870912

export SPARK_WORKER_DIR=$SPARK_HOME/logs/workerDir
export SPARK_LOG_DIR=$SPARK_HOME/logs/logDir
export SPARK_PID_DIR=$SPARK_HOME/logs/pidDir

export HIVE_SERVER2_THRIFT_PORT=10000
export HIVE_SERVER2_THRIFT_BIND_HOST=0.0.0.0

</br>

6.编辑$SPARK_HOME/conf/spark-default.conf文件
vi   $SPARK_HOME/conf/spark-default.conf
spark.master                          spark://master:7077
spark.shuffle.service.port            7337   
spark.eventLog.enabled                true
spark.eventLog.compress               true
spark.eventlog.dir                    /home/centos/soft/spark/logs/spark.log
spark.serializer                      org.apache.spark.serializer.KryoSerializer
spark.driver.memory                   5g
spark.executor.extraJavaOptions      -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"

spark.sql.parquet.binaryAsString              true
spark.sql.parquet.mergeSchema                 true
spark.sql.parquet.cacheMetadata               false
spark.sql.hive.convertMetastoreParquet        false

spark.dynamicAllocation.enabled                                 true    # 开启动态资源分配
spark.dynamicAllocation.minExecutors                            1       # 每个Application最小分配的executor数
spark.dynamicAllocation.maxExecutors                            30      # 每个Application最大并发分配的executor数
spark.dynamicAllocation.schedulerBacklogTimeout                 1s
spark.dynamicAllocation.sustainedSchedulerBacklogTimeout        5s

spark.scheduler.mode                    FAIR      # 调度模式
spark.executor.instances                1         # standalone模式下限制每个Executor最大核心数
spark.cores.max                         3         # Yarn模式下限制每个Executor最大核心数

</br>

7.实现Spark动态分配资源功能
  1. $SPARK_HOME/conf/spark-default.conf配置文件中将spark.dynamicAllocation.enabled配置项改为true
  2. $SPARK_HOME/lib/spark-1.6.0-yarn-shuffle.jar拷贝到每台NodeManager节点的${HADOOP_HOME}/share/hadoop/yarn/lib/

</br>

8.编辑$SPARK_HOME/conf/slaves文件
m3
m4
m5

</br>

9.将安装文件分发到其他主机上
scp -r   /home/centos/soft/scala   m3:/home/centos/soft/
scp -r   /home/centos/soft/scala   m4:/home/centos/soft/
scp -r   /home/centos/soft/scala   m5:/home/centos/soft/

</br>

10.启动spark集群(注意: 启动spark集群之前,需先启动YARN)
  1. 在m1, m2上分别启动YARN集群
start-yarn.sh
  1. 在WebUI上查看启动情况
m1:8088
  1. 在m1主机上启动主从节点:
start-master.sh      ## 启动主节点: 
start-slaves.sh      ## 启动从节点: 
  1. 在WebUI上查看启动情况
m1:8080

</br>

11.测试实例
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --driver-memory 1g --executor-memory 1g --executor-cores 1 --queue thequeue lib/spark-assembly-1.6.0-hadoop2.6.0.jar 10

</br>
</br>
</br>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容