前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spark部署模式另类详解

Spark部署模式另类详解

作者头像
Spark学习技巧
发布2018-01-31 11:20:25
1.4K0
发布2018-01-31 11:20:25
举报
文章被收录于专栏:Spark学习技巧Spark学习技巧

一, Spark的运行模式讲解

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

1, local模式

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

2, Standalone模式

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

3, Spark On yarn

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

二, Spark local模式的使用

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

1, 准备

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

2, Spark-shell本地测试

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

2.1并行化数据集

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

val distData = sc.parallelize(data)

2.2读取本地文件

读取$SPARK_HOME/LICENSE文件

简单的wordCount并排序的程序

2.3 读取hdfs上文件

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

三, Spark Standalone模式的使用

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配置,主要是添加以下

代码语言:js
复制
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

然后这配置就算完成了

2, 启动

启动master

start-master.sh

启动worker,本机

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

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

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

启动完成之后

3, 读取本地文件

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

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

代码语言:js
复制
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)

4, 读取hadoop文件

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

四, Spark On yarn的使用

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

代码语言:js
复制
<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>

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

代码语言:js
复制
<property>
  <name>dfs.permissions</name>
  <value>false</value>
</property>

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

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

代码语言:js
复制
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-env.sh的配置内容如下:

代码语言:js
复制
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

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

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

Spark-shell on yarn读取hdfs上文件

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

提交Spark的pi运行案例

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-sql的时候要先删除,

rm -rf jars/derby-10.12.1.1.jar

否则会报错误。

五, 总结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集群数据导入导出。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浪尖聊大数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档