首家大数据培训挂牌机构 股票代码:837906 | EN CN
【小牛原创】Spark SQL 从入门到实战 -- spark sql 1.6版本相关api
【小牛原创】Spark SQL 从入门到实战 -- 概述
Spark Streaming:大规模流式数据处理
spark RDD 相关需求
spark RDD 高级应用
Spark手册 - load&save
Spark手册 - debug
Spark手册 - cache&checkpoint
Spark手册 - RDD Action API
Spark手册 - Partitioner源码
Spark手册 - RDD Transformation API
Spark手册 - RDD的依赖关系
Spark手册 - RDD入门
Spark手册 - 远程debug
Spark手册 - 在IDEA中编写WordCount程序(3)
Spark手册 - 在IDEA中编写WordCount程序(2)
Spark手册 - 在IDEA中编写WordCount程序(1)
Spark手册 - 执行Spark程序
Spark手册 - 集群安装
20页PPT|视频类网站大数据生态 Spark在爱奇艺的应用实践
Spark机器学习入门实例——大数据集(30+g)二分类
Spark官方文档中文翻译:Spark SQL 之 Data Sources
使用Spark MLlib来训练并服务于自然语言处理模型
Spark知识体系完整解读
案例 :Spark应用案例现场分享(IBM Datapalooza)
最全的Spark基础知识解答
Spark在GrowingIO数据无埋点全量采集场景下的实践
Apache Spark探秘:三种分布式部署方式比较
Apache Spark探秘:多进程模型还是多线程模型?
Apache Spark探秘:实现Map-side Join和Reduce-side Join
Apache Spark探秘:利用Intellij IDEA构建开发环境
spark on yarn的技术挑战
Apache Spark学习:将Spark部署到Hadoop 2.2.0上
Hadoop与Spark常用配置参数总结
基于Spark Mllib,SparkSQL的电影推荐系统
spark作业调优秘籍,解数据倾斜之痛
Spark入门必学:预测泰坦尼克号上的生还情况
小牛学堂浅谈基于Spark大数据平台日志审计系统的设计与实现
【Hadoop Summit Tokyo 2016】使用基于Lambda架构的Spark的近实时的网络异常检测和流量分析
Spark编程环境搭建经验分享
Spark技术在京东智能供应链预测的应用
spark中textFile、groupByKey、collect、flatMap、map结合小案例
Spark中DataFrame的schema讲解
深度剖析Spark分布式执行原理
【Spark Summit East 2017】从容器化Spark负载中获取的经验
内存分析技术哪家强?Spark占几何
Spark系列之一:Spark,一种快速数据分析替代方案
6种最常见的Hadoop和Spark项目
Hadoop vs Spark
Hadoop与Spark常用配置参数总结
Spark RPC通信层设计原理分析
Spark Standalone架构设计要点分析
Spark UnifiedMemoryManager内存管理模型分析
网易的Spark技术分享

Spark手册 - 集群安装

于2017-06-16由小牛君创建

分享到:


1.  Spark集群安装

1.1.   机器部署

准备两台以上Linux服务器,安装好JDK

image.png

image.png

1.2.   下载Spark安装包

image.png

 

上传spark-安装包到Linux

解压安装包到指定位置

tar -zxvf spark-2.1.0-bin-hadoop2.6.tgz -C /usr/local/app

 

注意:spark根目录下的RELEASE文本文件不能删除,否则会出现类型如下的错误:

ls: 无法访问/usr/local/app/spark-1.6.3-bin-hadoop2.6/assembly/target/scala-2.10:   没有那个文件或目录

Failed to find Spark assembly in   /usr/local/app/spark-1.6.3-bin-hadoop2.6/assembly/target/scala-2.10.

You need to build Spark before running   this program.

 

starting   org.apache.spark.deploy.master.Master, logging to   /usr/local/app/spark-1.6.3-bin-hadoop2.6/logs/spark-root-org.apache.spark.deploy.master.Master-1-mini1.com.out

failed to launch   org.apache.spark.deploy.master.Master:

  Failed to find Spark assembly in   /usr/local/app/spark-1.6.3-bin-hadoop2.6/assembly/target/scala-2.10.

    You need to build Spark before running this program.

full log in   /usr/local/app/spark-1.6.3-bin-hadoop2.6/logs/spark-root-org.apache.spark.deploy.master.Master-1-mini1.com.out

 

mini1:   starting org.apache.spark.deploy.worker.Worker, logging to   /usr/local/app/spark-1.6.3-bin-hadoop2.6/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-mini1.com.out

mini1: failed to launch   org.apache.spark.deploy.worker.Worker:

mini1:     Failed to find Spark assembly in   /usr/local/app/spark-1.6.3-bin-hadoop2.6/assembly/target/scala-2.10.

mini1:     You need to build Spark before running this program.

mini1:   full log in /usr/local/app/spark-1.6.3-bin-hadoop2.6/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-mini1.com.out

 

1.3.   配置Spark

进入到Spark安装目录

cd /usr/local/app/spark-2.1.0-bin-hadoop2.6

进入conf目录并重命名并修改spark-env.sh.template文件

cd conf/

cp spark-env.sh.template spark-env.sh

vi spark-env.sh

 

在该配置文件中添加如下配置

1.3.1.   不使用zk,指定MASTER_IP模式

export JAVA_HOME=/usr/local/jdk1.7.0_79

export SPARK_MASTER_IP=mini1

export SPARK_MASTER_PORT=7077

 

1.3.2.   使用zkHA高可用模式

export JAVA_HOME=/usr/local/jdk1.7.0_79

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=mini1,mini2,mini3 -Dspark.deploy.zookeeper.dir=/spark"

export SPARK_MASTER_PORT=7077

 

注:SPARK_MASTER_IP的目的是让worker知道master在哪,worker会主动连接master

或者worker通过zookeeper获取master地址

 

在该文件中添加子节点所在的位置(Worker节点)

vi slaves

mini1

mini2

mini3

 

将配置好的Spark拷贝到其他节点上

scp -r spark-2.1.0-bin-hadoop2.6/ mini2:/usr/local/

scp -r spark-2.1.0-bin-hadoop2.6/ mini3:/usr/local/

 

若绑定了ip,则只能在该ip对应机器上启动master

而配置zk后,则可以在任何想作为master的机器上启动,第一个启动的机器作为主节点,其他机器都作为备份主节点

sbin/start-master.sh

可以在配置slaves的任意机器上启动work

sbin/start-slaves.sh

start-slaves.sh会读取slaves节点列表,逐个节点发送ssh启动work

 

也可以使用批量启动脚本

sbin/start-all.sh

该脚本会先启动start-master.sh然后启动start-slaves.sh脚本

 

启动后执行jps命令,主节点上有Master进程,其他子节点上有Work进行:

image.png

image.png

image.png

MasterWorker是两个Java进程  他们启动的时候会加载spark-env.sh里的一些环境变量

 

登录Spark管理界面查看集群状态(主节点):

http://mini1:8080/

image.png

 

1.4.   spark on yarn

1.安装hadoop:需要安装HDFS模块和YARN模块,HDFS必须安装,spark运行时要把jar包存放到HDFS上。

2.启动HDFSYARN

3.修改spark-env.sh配置文件,spark程序将作为YARN的客户端用于提交任务

export JAVA_HOME=/usr/local/jdk1.7.0_79

export HADOOP_CONF_DIR=/usr/local/app/hadoop-2.6.0/etc/hadoop/

 

执行任务

spark-submit cluster模式

/usr/local/app/spark-2.1.0-bin-hadoop2.6/bin/spark-submit   \

--class org.apache.spark.examples.SparkPi   \

--master yarn \

--deploy-mode cluster \

--executor-memory 1G \

--total-executor-cores 2 \

/usr/local/app/spark-2.1.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.1.0.jar   \

100

spark-submit client模式

 

/usr/local/app/spark-2.1.0-bin-hadoop2.6/bin/spark-submit   \

--class org.apache.spark.examples.SparkPi   \

--master yarn \

--deploy-mode client \

--executor-memory 1G \

--total-executor-cores 2 \

/usr/local/app/spark-2.1.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.1.0.jar   \

100

 

 

 

spark-shell client模式(必须使用client模式)

bin/spark-shell --master yarn   --deploy-mode client

 

 

1.4.1.   cluster模式

Driver程序在YARN中运行,应用的运行结果不能在客户端显示,所以最好运行那些将结果最终保存在外部存储介质(如HDFSRedisMysql)而非stdout输出的应用程序,客户端的终端显示的仅是作为YARNjob的简单运行状况。

image.png

Spark Driver首先作为一个ApplicationMasterYARN集群中启动,客户端提交给ResourceManager的每一个job都会在集群的NodeManager节点上分配一个唯一的ApplicationMaster,由该ApplicationMaster管理全生命周期的应用。具体过程:

 

1. clientResourceManager提交请求,并上传jarHDFS

这期间包括四个步骤:

a).连接到RM

b).RMASMApplicationsManager )中获得metricqueueresource等信息。

c). upload app jar and spark-assembly jar

d).设置运行环境和container上下文(launch-container.sh等脚本)

 

2. ResouceManagerNodeManager申请资源,创建Spark ApplicationMaster(每个SparkContext都有一个ApplicationMaster

3. NodeManager启动ApplicationMaster,并向ResourceManager AsM注册

4. ApplicationMasterHDFS中找到jar文件,启动SparkContextDAGschedulerYARN Cluster Scheduler

5. ResourceManagerResourceManager AsM注册申请container资源

6. ResourceManager通知NodeManager分配Container,这时可以收到来自ASM关于container的报告。(每个container对应一个executor

7. Spark ApplicationMaster直接和containerexecutor)进行交互,完成这个分布式任务。

 

1.4.2.   client模式

Driver运行在Client上,应用程序运行结果会在客户端显示,所有适合运行结果有输出的应用程序(如spark-shell

 

image.png

client模式下,Driver运行在Client上,通过ApplicationMasterRM获取资源。本地Driver负责与所有的executor container进行交互,并将最后的结果汇总。结束掉终端,相当于kill掉这个spark应用。一般来说,如果运行的结果仅仅返回到terminal上时需要配置这个。

 

客户端的Driver将应用提交给Yarn后,Yarn会先后启动ApplicationMasterexecutor,另外ApplicationMasterexecutor 是装载在container里运行,container默认的内存是1GApplicationMaster分配的内存是driver- memoryexecutor分配的内存是executor-memory。同时,因为Driver在客户端,所以程序的运行结果可以在客户端显 示,Driver以进程名为SparkSubmit的形式存在。

 

 

 

1.5.   spark WEBUI_PORT端口修改

vim sbin/start-master.sh

image.png

image.png

修改SPARK_MASTER_WEBUI_PORT=8080即可

vi conf/spark-env.sh

增加

export SPARK_MASTER_WEBUI_PORT=8880

 

 

1.6.   spark-env.sh常见配置说明

SPARK_MASTER_PORT        从另外一个端口启动master(默认: 7077)

SPARK_MASTER_WEBUI_PORT  Masterweb UI端口

SPARK_WORKER_PORT       启动Spark worker 的专用端口(默认:随机)

SPARK_WORKER_DIR     伸缩空间和日志输入的目录路径(默认: SPARK_HOME/work);

SPARK_WORKER_CORES      作业可用的CPU内核数量(默认: 所有可用的);

SPARK_WORKER_MEMORY      作业可使用的内存容量,默认格式1000M或者 2G (默认: 所有RAM去掉给操作系统用的1 GB);注意:每个作业自己的内存空间由SPARK_MEM决定。

SPARK_WORKER_WEBUI_PORT  worker web UI 启动端口(默认: 8081)

SPARK_WORKER_INSTANCES  每台机器上运行worker数量 (默认: 1). 当你有一个非常强大的计算机的时候和需要多个Spark worker进程的时候你可以修改这个默认值大于1.如果你设置了这个值。要确保SPARK_WORKER_CORE 明确限制每一个r worker的核心数,否则每个worker 将尝试使用所有的核心

SPARK_DAEMON_MEMORY      分配给Spark master worker 守护进程的内存空间 (默认: 512m)

SPARK_DAEMON_JAVA_OPTS  Spark master worker守护进程的JVM 选项(默认: none)

SPARK_JAVA_OPTS

export SPARK_JAVA_OPTS="-verbose:gc -XX:-PrintGCDetails -XX:+PrintGCTimeStamps"(用来设置GC参数)

注意:SPARK_WORKER_CORES*SPARK_WORKER_INSTANCES = 每台机器总cores