软件环境:

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



##主机配置:
######一共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


4. 刷新一下/etc/profile文件

source /etc/profile


5. 检验是否安装成功,输入以下指令

mvn -v


6. 设置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```目录下

2. 方案二:使用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/

2. 下载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


2. 在WebUI上查看启动情况

m1:8088

3. 在m1主机上启动主从节点:

start-master.sh ## 启动主节点:

start-slaves.sh ## 启动从节点:

4. 在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>

Spark on Yarn集群搭建的更多相关文章

  1. hadoop - spark on yarn 集群搭建

    一.环境准备 1. 机器: 3 台虚拟机 机器 角色  l-qta3.sp.beta.cn0 NameNode,ResourceManager,spark的master l-querydiff1.sp ...

  2. Spark高可用集群搭建

    Spark高可用集群搭建 node1    node2    node3   1.node1修改spark-env.sh,注释掉hadoop(就不用开启Hadoop集群了),添加如下语句 export ...

  3. Spark on Yarn 集群运行要点

    实验版本:spark-1.6.0-bin-hadoop2.6 本次实验主要是想在已有的Hadoop集群上使用Spark,无需过多配置 1.下载&解压到一台使用spark的机器上即可 2.修改配 ...

  4. 一文读懂spark yarn集群搭建

    文是超简单的spark yarn配置教程: yarn是hadoop的一个子项目,目的是用于管理分布式计算资源,在yarn上面搭建spark集群需要配置好hadoop和spark.我在搭建集群的时候有3 ...

  5. spark高可用集群搭建及运行测试

    文中的所有操作都是在之前的文章spark集群的搭建基础上建立的,重复操作已经简写: 之前的配置中使用了master01.slave01.slave02.slave03: 本篇文章还要添加master0 ...

  6. [spark]-Spark2.x集群搭建与参数详解

    在前面的Spark发展历程和基本概念中介绍了Spark的一些基本概念,熟悉了这些基本概念对于集群的搭建是很有必要的.我们可以了解到每个参数配置的作用是什么.这里将详细介绍Spark集群搭建以及xml参 ...

  7. spark完全分布式集群搭建

    最近学习Spark,因此想把相关内容记录下来,方便他人参考,也方便自己回忆吧 spark开发环境的介绍资料很多,大同小异,很多不能一次配置成功,我以自己的实际操作过程为准,详细记录下来. 1.基本运行 ...

  8. Spark —— 高可用集群搭建

    一.集群规划 这里搭建一个3节点的Spark集群,其中三台主机上均部署Worker服务.同时为了保证高可用,除了在hadoop001上部署主Master服务外,还在hadoop002和hadoop00 ...

  9. spark教程(一)-集群搭建

    spark 简介 建议先阅读我的博客 大数据基础架构 spark 一个通用的计算引擎,专门为大规模数据处理而设计,与 mapreduce 类似,不同的是,mapreduce 把中间结果 写入 hdfs ...

随机推荐

  1. 【Codeforces 158B】Taxi

    [链接] 我是链接,点我呀:) [题意] 每辆车可以载重4个人. 一共有n个组,每个组分别有s[i]个人. 要求每个组的人都在同一辆车里面. 问最少需要多少辆车 [题解] 将每个组的人数从小到大排序. ...

  2. 同余方程 2012年NOIP全国联赛提高组

    时间限制: 1 s   空间限制: 128000 KB 题目描述 Description 求关于 x 同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入描述 Input Descriptio ...

  3. Linux imooc learning

    https://www.imooc.com/video/3529 Windows Vs Linux Linux: (other linux overall   https://onedrive.liv ...

  4. ddl in PL/SQL

    If you write DDL directly in PL/SQL. You will hit error. 1 DECLARE 2 str_sql varchar2(500); 3 begin ...

  5. git tag打标签常用命令

    # 创建轻量标签$ git tag v0.1.2-light 切换到标签 与切换分支命令相同,用git checkout [tagname]查看标签信息用git show命令可以查看标签的版本信息:$ ...

  6. Loadrunner | 录制脚本时弹不出IE的解决办法

    Loadrunner在录制脚本的时候有时候会遇到弹不出IE的问题,那怎么解决呢?别急,按照以下几个步骤操作,一般就可以解决这个问题. 1. IE浏览器取消勾选[启用第三方浏览器扩展] 启动IE,从[工 ...

  7. CSS之实现二级菜单动态出现

    一直觉得二级菜单的出现效果仅仅有js才干控制.今天研究了一下阿里巴巴站点的首页,才发现,原来二级菜单的动态显示也能够使用CSS来控制,原来对CSS是静态的东西一直是误解它了,CSS也能够实现动态的效果 ...

  8. 【九章算法免费讲座第一期】转专业找CS工作的“打狗棒法”

    讲座时间: 美西时间6月5日18:30-20:00(周五) 北京时间6月6日09:30-11:00(周六a.m) 讲座安排: 免费在线直播讲座 报名网址: http://t.cn/R2XgMSH,或猛 ...

  9. 初探Java中的异常处理

      Java中的异常有以下几种: 1) Error:Java运行时的内部错误. 2) Exception:程序中应该捕获的异常.          RuntimeException:因为编程产生的错误 ...

  10. JavaScript探秘:强大的原型和原型链

    // foo 变量是上例中的 for(var i in foo) { if (foo.hasOwnProperty(i)) { console.log(i); } } JavaScript 不包括传统 ...