Spark部署模式另类详解(内附大数据教程)

一, Spark的运行模式讲解

Spark运行模式有很多种,本文主要是将local,Standalone,yarn。因为平时生产中用的最多的也是yarn,所以,我们后面也重点讲解基于yarn的。其实,原因很简单,集群服务角色越多,越难运维,所以,统一调度系统,也是降低运维难度,减少故障源。

1, local模式

这种模式,主要是用来简单的逻辑验证类的,也可以进行对Spark应用进行debug。实际生产中我们可以用client模式进行验证性测试。使用方法很简单,我们只需要指定Master为local即可,此时要强调的是local[n],这个n代表线程数,也即它决定了你本地模式的并发度(能并行几个task),local内部不指定默认线程数为1,local[*]代表当前cpu的核心数个线程。

Spark部署模式另类详解(内附大数据教程)

2, Standalone模式

所谓Standalone模式,就是采用Spark的master-worker进行资源管理和应用的调度。

Spark部署模式另类详解(内附大数据教程)

3, Spark On yarn

所谓yarn模式,就是资源管理和app调度交给了yarn来做。此时常见的两种模式,就是yarn-client,yarn-cluster。主要区别就是Driver这个Spark App的应用内部角色运行的位置,运行在submit提交的进程中也即客户端成为client模式,与AppMaster一起运行在非client进程中成为cluster模式。Yarn-client模式,明显的缺点就是客户端断开APP就会死掉,主要用来调试。

Spark部署模式另类详解(内附大数据教程)
Spark部署模式另类详解(内附大数据教程)

二, Spark local模式的使用

Spark部署模式另类详解(内附大数据教程)

这种模式,既可以使用Spark-shell进行测试,也可以采用idea进行本地测试。

1, 准备

首先解压Spark2.1.2(spark-2.1.2-bin-hadoop2.7.tgz),并配置环境变量。

Spark部署模式另类详解(内附大数据教程)

2, Spark-shell本地测试

输入spark-shell --master local[4]

2.1并行化数据集

val data = Array(1, 2, 3, 4, 5)

val distData = sc.parallelize(data)

Spark部署模式另类详解(内附大数据教程)

2.2读取本地文件

读取$SPARK_HOME/LICENSE文件

Spark部署模式另类详解(内附大数据教程)

简单的wordCount并排序的程序

Spark部署模式另类详解(内附大数据教程)

2.3 读取hdfs上文件

由于我们前面的关于/etc/profile配置已经包含了hadoop的配置,Spark直接可以找到hadoop配置,所以只要我们不加file前缀,就默认读取的是hdfs的数据,当然,也可以指定绝对路径(hdfs://Luffy.OnePiece.com:8020/user/root/input/wc.txt)。

Spark部署模式另类详解(内附大数据教程)
Spark部署模式另类详解(内附大数据教程)

三, Spark Standalone模式的使用

Spark部署模式另类详解(内附大数据教程)

1, 配置

slaves spark-defaults.conf spark-env.sh这三个文件,原来后面都带.template,重命名。slaves修改内容为:Luffy.OnePiece.com,这里面应该是要启动的worker的主机名列表。spark-defaults.conf,主要是一些默认配置,在这里需要指定

spark.master spark://Luffy.OnePiece.com:7077

spark-env.sh配置,主要是添加以下

Spark部署模式另类详解(内附大数据教程)

export JAVA_HOME=/opt/modules/jdk1.8.0_121

SPARK_MASTER_HOST=Luffy.OnePiece.com

SPARK_MASTER_PORT=7077

SPARK_WORKER_CORES=4

SPARK_WORKER_MEMORY=8000m

SPARK_WORKER_PORT=7078

SPARK_WORKER_INSTANCES=1

Spark部署模式另类详解(内附大数据教程)

然后这配置就算完成了

2, 启动

启动master

start-master.sh

启动worker,本机

start-slave.sh spark://Luffy.OnePiece.com:7077

也可以执行启动所有机器的Worker命令

start-slaves.sh,不过这个要配置包括本机在内的免秘钥登录。

启动完成之后

Spark部署模式另类详解(内附大数据教程)

3, 读取本地文件

还是那spark-shell(启动的时候可以指定master不指定的话会读取spark-defaults.conf)使用为例,读取本地文件,启动后在浏览器上查看

http://luffy.onepiece.com:8080/

Spark部署模式另类详解(内附大数据教程)
Spark部署模式另类详解(内附大数据教程)

val distFile = sc.textFile("file:///opt/modules/spark-2.1.2/LICENSE")

distFile.flatMap(_.split("\s+")).map((_,1)).reduceByKey(_+_).map(each=>(each._2,each._1)).sortByKey(false)

res0.take(10).foreach(println)

Spark部署模式另类详解(内附大数据教程)
Spark部署模式另类详解(内附大数据教程)

4, 读取hadoop文件

只需换掉3,步骤中的file://就好,没有带hdfs的文件系统头(hdfs://Luffy.OnePiece.com:8020/user/root/input/wc.txt),原因也是因为我们在/etc/profile配置了hadoop的配置。

Spark部署模式另类详解(内附大数据教程)
Spark部署模式另类详解(内附大数据教程)

四, Spark On yarn的使用

Spark部署模式另类详解(内附大数据教程)

在on yarn模式的时候,实际上就不需要启动spark的master和worker了,spark只需要找到yarn的配置即可,主要去掉虚拟内存检测,分配虚假cpu和内存。yarn-site.xml配置内容如下:

Spark部署模式另类详解(内附大数据教程)

<property>

<name>yarn.nodemanager.vmem-check-enabled</name>

<value>false</value>

</property>

<property>

<name>yarn.nodemanager.resource.memory-mb</name>

<value>13968</value>

<description>64G. Physical memory, in MB, to be made available to running containers.</description>

</property>

<property>

<name>yarn.nodemanager.resource.cpu-vcores</name>

<value>6</value>

<description>Number of CPU cores that can be allocated for containers.</description>

</property>

<property>

<name>yarn.resourcemanager.hostname</name>

<value>Luffy.OnePiece.com</value>

</property>

<property>

<name>yarn.log-aggregation-enable</name>

<value>true</value>

</property>

<property>

<description>Classpath for typical applications.</description>

<name>yarn.application.classpath</name>

<value>/opt/modules/spark-2.1.2/jars/*,$HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/share/hadoop/common/*,$HADOOP_COMMON_HOME/share/hadoop/common/lib/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/*,

$HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,$HADOOP_YARN_HOME/share/hadoop/yarn/*,$HADOOP_YARN_HOME/share/hadoop/yarn/lib/*

</value>

</property>

Spark部署模式另类详解(内附大数据教程)

hdfs-site.xml要加上去掉权限检查

Spark部署模式另类详解(内附大数据教程)

<property>

<name>dfs.permissions</name>

<value>false</value>

</property>

Spark部署模式另类详解(内附大数据教程)

再就是要讲hdfs-site.xml和core-site.xml复制到spark的conf/目录下,假如要使用hive表功能的话hive-site.xml也要添加进去

spark-defaults.conf配置内容如下(依赖的jar都可以放到此处,避免每次copy):

Spark部署模式另类详解(内附大数据教程)

spark.driver.extraClassPath /opt/modules/spark-2.1.2/jars/*:/opt/modules/hadoop-2.7.4/share/hadoop/hdfs/*:/opt/modules/hadoop-2.7.4/share/hadoop/common/*:/opt/modules/hadoop-2.7.4/share/hadoop/common/lib/*:/opt/modules/hadoop-2.7.4/share/hadoop/yarn/*:/opt/modules/hadoop-2.7.4/share/hadoop/yarn/lib/*:/opt/modules/spark-2.1.2/jars/*:/opt/modules/hive-1.2.1/lib/*:/opt/modules/hbase-1.2.0/lib/*

spark.executor.extraClassPath /opt/modules/spark-2.1.2/jars/*:/opt/modules/hadoop-2.7.4/share/hadoop/hdfs/*:/opt/modules/hadoop-2.7.4/share/hadoop/common/*:/opt/modules/hadoop-2.7.4/share/hadoop/common/lib/*:/opt/modules/hadoop-2.7.4/share/hadoop/yarn/*:/opt/modules/hadoop-2.7.4/share/hadoop/yarn/lib/*:/opt/modules/spark-2.1.2/jars/*:/opt/modules/hive-1.2.1/lib/*:/opt/modules/hbase-1.2.0/lib/*

Spark部署模式另类详解(内附大数据教程)

spark-env.sh的配置内容如下:

Spark部署模式另类详解(内附大数据教程)

export JAVA_HOME=/opt/modules/jdk1.8.0_121

export HADOOP_HOME=/opt/modules/hadoop-2.7.4/

export HADOOP_PREFIX=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_YARN_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

Spark部署模式另类详解(内附大数据教程)

首先就是要启动yarn相关的服务。

Spark部署模式另类详解(内附大数据教程)

再次以spark-shell的使用为例,我们让其以yarn-client的模式(其实,也只能运行于该模式)

Spark-shell on yarn读取hdfs上文件

Spark部署模式另类详解(内附大数据教程)

Spark-shell local模式读取本地文件

Spark部署模式另类详解(内附大数据教程)

提交Spark的pi运行案例

Spark部署模式另类详解(内附大数据教程)

spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --driver-memory 4g --executor-memory 2g --executor-cores 1 examples/jars/spark-examples*.jar 10

Spark部署模式另类详解(内附大数据教程)

启动spark-sql的时候要先删除,

rm -rf jars/derby-10.12.1.1.jar

否则会报错误。

Spark部署模式另类详解(内附大数据教程)

五, 总结Spark在生产中的场景

Spark在企业中的应用场景。

1, Spark Streaming的准实时处理。

2, Spark core/sql的离线处理。

3, Spark sql+hive的metastore做仓库。

4, Spark mllib/ml/TensorFlow/deeplearning4j等做机器学习。

5, Spark也可以代替sqoop进行RMDBS和hadoop集群数据导入导出

给大家来一波福利,大数据项视频教程和实战项目:

Spark部署模式另类详解(内附大数据教程)
Spark部署模式另类详解(内附大数据教程)
Spark部署模式另类详解(内附大数据教程)

每天只限100人,快来私信小编(学习)来进行领取!

相关推荐