安装Spark

Spark是什么

Spark是一个集群计算系统,可以在集群上部署和运行并行的应用,Spark初始是运行Scala应用,但是也支持Java,Python,R。
Spark不但可以作为独立的集群管理器,也可以使用Yarn或者Mesos的集群管理器。

安装之前的准备

  1. 安装和配置三节点的Hadoop集群,一个节点是master节点(包含HDFS NameNode和YARN ResourceManager)。另两个节点是slave节点(HDFS DataNode和YARN NodeManager),分别是node1和node2.
  2. 运行jps,确保HDFS和YARN正常运行。

下载和安装Spark

  1. 安装Spark到/opt目录下
  2. 配置SPARK_HOME环境变量到~/.bashrc
  3. 配置$SPARK_HOME/bin到PATH环境变量

集成Spark和Yarn

为了连接Yarn资源管理器,Spark必须知道Hadoop的配置文件,可以通过HADOOP_CONF_DIR环境变量来实现。

  1. 在~/.bashrc中添加如下内容
export HADOOP_CONF_DIR=$HADOOP_HOME/etct/hadoop
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH
  1. 重命名Spark的spark-defaults.conf.template
mv $SPARK_HOME/conf/spark-defaults.conf.template $SPARK_HOME/conf/spark-defaults.conf
  1. 编辑spark-defaults.conf
spark.master yarn

理解client和cluster模式

Spark job可以在Yarn中以两种模式运行,cluster模式和client模式,理解这两种模式的不同,对于使用合适的内存分配配置是非常重要的。
一个Spark job包含两部分,Spark Executors执行实际的任务,Spark Driver用来调度Executors。

  • Cluster模式:一切都运行在集群上,例如,你从你的笔记本电脑开启一个job,尽管你关闭你的电脑,但是job还会继续运行。在这种模式下,Spark Driver是在Yarn Application Master中的。
  • Client模式:Spark Driver运行在客户端,例如你的笔记本电脑,如果客户端关闭,那么job会失败,Spark Executors仍然运行在集群上,为了调用一切,一个小的Yarn Application Master被创建。
    客户端模式很适合交互式的jobs,但是如果客户端停止的话,那么applications将会失败。对于运行时间比较长的jobs,cluster模式会更适合一点。

配置内存分配

如果内存分配没有合理的配置,那么Spark容器会失败。对于小于4G内存的节点,默认的配置是不合适的,因为可能会触发交换和差的性能,甚至可能会导致初始化应用失败,由于内存的缺失。
在编辑Spark内存设置之前,一定要理解Yarn如何管理内存分配。这样才能更好的利用Yarn的能力。

给予Yarn容器最大允许的内存

如果请求的内存超过了允许的最大大限,那么Yarn将会拒绝容器的创建,Spark应用将不会开启。

  1. 在$HADOOP_CONF_DIR/yarn-site.xml中的yarn.scheduler.maximum-allocation-mb的值是决定单个容器允许的最大内存,以MB为单位。
  2. 确保接下来配置的Spark内存分配小于yarn.scheduler.maximum-allocation-mb的值。

在cluster模式下配置Spark Driver内存

在cluster模式下,Spark Driver运行在Yarn Application Master中。在初始化过程中,Spark请求的内存大小可以在spark-defaults.conf或者命令行配置。

  • spark-defaults.conf
    在cluster模式下,分配给Spark Driver的内存(默认是1G)可以以下进行设置:
spark.driver.memory 512m
  • 命令行
    使用--driver-memory参数来配置spark-submit请求的内存

命令行中的值会覆盖在spark-defaults.conf中的值

在client模式下,配置Spark Application Master的内存

在client模式下,Spark Driver不运行在集群上,上面的配置将会无效。一个Yarn Application Master需要被创建是为了调度Spark executor,你可以设置它的内存大小。
在client模式下,通过使用spark.yarn.am.memory参数来application master的内存大小。

  • spark-defaults.conf
    spark.yarn.am.memory 512m
    这个值不能通过命令行来进行设置

配置Spark Executors的内存

Spark Executors的内存是基于在spark-defaults.conf中的两个参数决定的。

  • spark.executor.memory: 设置使用在计算上的内存
  • spark.yarn.executor.memoryOverhead:添加到spark.executor.memory内存上,默认是spark.executor.memory值的7%,但是最小值是384MB。

确保Executor请求的内存(包括overhead内存)小于Yarn最大允许的内存,否则Spark应用将不能初始化
例如:spark.executor.memory的值是1G,必要的内存大小是1024 + 384 = 1408MB。对于512MB内存来说,必要的内存大小是512+384=896MB。
为了设置executor内存为512MB,编辑spark-defaults.conf

spark.executor.memory 512m

如何提交Spark应用到Yarn集群上

使用spark-submit命令提交spark应用,spark安装目录包含样本应用,可以进行测试

spark-submit --deploy-mode client \
               --class org.apache.spark.examples.SparkPi \
               $SPARK_HOME/examples/jars/spark-examples_2.11-2.2.0.jar 10

--deploy-mode配置使用哪种模式,client或者cluster。

监控Spark应用

当你提交一个job时,Spark Driver会自动开启一个端口是4040的web UI,显示关于应用的信息,但是当执行完成时,web UI将不能再访问了。
Spark提供history server,收集来自于HDFS的应用日志,在一个web UI上显示。下面的步骤是开启在HDFS上的日志持久化.

  1. 编辑spark-defaults.conf文件
spark.eventLog.enabled  true
spark.eventLog.dir hdfs://node-master:9000/spark-logs
  1. 在HDFS上创建目录
hdfs dfs  -mkdir /spark-logs
  1. 在spark-defaults.conf文件中配置关于History Server的属性
spark.history.provider            org.apache.spark.deploy.history.FsHistoryProvider
spark.history.fs.logDirectory     hdfs://node-master:9000/spark-logs
spark.history.fs.update.interval  10s
spark.history.ui.port             18080

你可能会使用不同的spark.history.fs.update.interval的值,如果配置的值比较高,将会增大应用实时的状态和History Server的延迟。如果使用比较小的值,将会增加HDFS上的I/O

  1. 运行History Server
$SPARK_HOME/sbin/start-history-server.sh
  1. 重复上面计算Pi的例子,将会在HDFS上形成日志
  2. 在浏览器上通过http://node-master:18080 访问

运行Spark Shell

Spark shell提供交互式的方式进行工作

spark-shell
var input = spark.read.textFile("inputs/alice.txt")
// Count the number of non blank lines
input.filter(line => line.length()>0).count()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容