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

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/

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配置内容如下:

<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要加上去掉权限检查

<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):

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的配置内容如下:

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

原文发布于微信公众号 - Spark学习技巧(bigdatatip)

原文发表时间:2017-11-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏加米谷大数据

技术干货 | Hadoop3.0稳定版安装攻略来啦!

第一次安装Apache Hadoop3.0.0是不是状况百出?没关系安装攻略来啦! ? Apache Hadoop 3.0.0在前一个主要发行版本(hadoop...

5259
来自专栏Hadoop实操

如何将CDH从企业版降级为免费版

在使用CDH企业版时,当License过期后,在CM顶部总是会有一个红色的banner条显示License已过期。我们有时会觉得它影响美观,想要考虑将CDH从企...

8115
来自专栏牛肉圆粉不加葱

YARN 设计理念与基本架构

ResourceManager 是一个全局的资源管理器,负责整个集群的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(App...

991
来自专栏Hadoop实操

如何在CDH集群外配置Kerberos环境的Spark2和Kafka客户端环境

2643
来自专栏星汉技术

原 Spark的架构

3315
来自专栏用户画像

DMA方式

DMA方式是一种完全由硬件进行组信息传送的控制方式。具有程序中断方式的优点,即在数据准备阶段,CPU与外设并行工作。DMA方式在外设与内存之间开辟一条“直接数据...

901
来自专栏Hadoop实操

在同时使用Hive+Sentry,因HMS死锁导致的高并发写入工作负载时,查询速度缓慢或者停滞

1725
来自专栏LhWorld哥陪你聊算法

【Sqoop篇】----Sqoop从搭建到应用案例

今天开始讲解Sqoo的用法搭建和使用。Sqoop其实功能非常简单。主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进...

1301
来自专栏Hadoop实操

CDH5.14和CM5.14的新功能

Fayson在2017年的10月12日介绍了《CDH5.13和CM5.13的新功能》,今天1月26日,Cloudera正式发布了CDH5.14。三个月零几天,2...

1.8K6
来自专栏Hadoop实操

如何在Hue中调优Impala和Hive查询

Hue中使用Hive和Impala进行查询,在使用完Hue后退出登录,会出现Hive和Impala的暂用的资源未释放。本篇文章Fayson主要针对该问题在Hue...

1.1K4

扫码关注云+社区

领取腾讯云代金券