咨询热线:18837802055 联系人:余扬 地址:海南省海口市龙昆北路昌信公寓
Spark源码解析(一) —— Spark-shell浅析
来源:沙皇leon国际 发布时间:2019-11-12 点击量:253
1.准备工作
1.1 安装spark,并配置spark-env.sh
使用spark-shell前需要安装spark,详情可以参考http://www.cnblogs.com/swordfall/p/7903678.html
如果只用一个节点,可以不用配置slaves文件,spark-env.sh文件只需配置为master_ip和local_ip两个属性
spark-env.sh添加如下配置:
export SPARK_MASTER_IP=hadoop1export SPARK_LOCAL_IP=hadoop1
注意:hadoop1是这台虚拟机的ip地址,或者用127.0.0.1代替hadoop1也行。spark-shell浅析是基于spark-2.2.0-bin-hadoop2.7版本进行的。
1.2 启动spark-shell
输入spark安装目录的bin下,执行spark-shell命令
cd /opt/app/spark-2.2.0-bin-hadoop2.7/bin/./spark-shell
最后我们会看到spark启动的过程,如图所示:
2. 执行word count 范例
通过word count例子来感受下spark任务的执行过程,启动spark-shell后,会打开scala命令行,然后按照以下步骤输入脚本。
1) 输入val lines = sc.textFile("../README.md", 2)
2) 输入val words = lines.flatMap(line => line.split(" "))
3) 输入val ones = words.map(w => (w, 1))
4) 输入val counts = ones.reduceByKey(_ + _)
5) 输入counts.foreach(println)
3. 剖析spark-shell
通过word count在spark-shell中执行的过程,看看spark-shell做了什么。spark-shell中有以下一段脚本
我们看到脚本spark-shell里执行了spark-submit脚本,打开spark-submit脚本,发现其中包含以下脚本:
脚本spark-submit在执行spark-class脚本时,给它增加了参数SparkSubmit。打开spark-class脚本,其中包含以下脚本:
读到这里,可知spark-class里面首先加载spark-env.sh里面的配置属性,然后获取jdk的java命令,接着拿到spark_home的jars目录。至此,Spark启动了以SparkSubmit为主类的jvm进程。
为便于在本地对Spark进程使用远程监控,给SPARK_HOME目录conf/spark-defaults.conf配置文件追加以下jmx配置:
#driver端监控spark.driver.extraJavaOptions=-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10207 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false#executor端监控,暂时注释#spark.executor.extraJavaOptions=-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=0 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
注意:使用远程监控前,如果spark-shell在运行中需要先停止,配置好监控参数,再需要运行spark-shell命令,否则jvisualvm找不到该线程。上面的两条命令都是一行的,不是两行,两行会导致jvisualvm连接不上,报“无法使用 service:jmx:rmi:///jndi/rmi://192.168.187.201:8009/jmxrmi 连接到 192.168.187.201:8009”错误。
在本地JAVA_HOME/bin目录下打开jvisualvm,添加远程主机,如图;右击已添加的远程主机,添加JMX连接,如图:
单击右侧的“线程”选项卡,选择main线程,然后单击“线程Dump”按钮,如图:
从dump的内容中找到线程main的信息,如图:
main线程dump信息
从main线程的栈信息中可以看出程序的调用顺序:SparkSubmit.main -> repl.Main -> ILoop.process。org.apache.spark.repl.SparkILoop类继承ILoop类,ILoop的process方法调用SparkILoop的loadFiles(settings)与printWelcome()方法。SparkILoop的loadFiles(settings)方法中又调用了自身的initializeSpark方法,initializeSpark的实现如下:
initializationCommands是一个命令集合,见代码:
从代码中可以看到,命令集合中会调用org.apache.spark.repl.Main的createSparkSession()方法创建sparkSession类,如图:
从上述代码可以看到builder是SparkSession里面的属性,IDEA工具使用“ctrl+鼠标点击”操作,可以进入到builder.getOrCreate()方法里面查看SparkSession如何创建,如图:
从上述代码可以看到SparkContext首先创建,再创建SparkSession。SparkContext的创建代码如下:
这里使用SparkConf、SparkContext和SparkSession来完成初始化,代码分析中涉及的repl主要用于与Spark实时交互。
至此,Spark-shell解析完毕。
, 1, 0, 9);相关产品
-
亲爱的飞红,谢谢你的无私与坚强,命运给你那么多的坎坷,你却用包容与感恩来回馈,我们都为你骄傲,为你感动,请你不要熄灭心中希望的火苗,我们会为你加油,用微笑为你赶走这个世界的阴霾。
-
陈凯歌表示,自己少年时候是当兵的,二十多个大男人都住在同一个屋子,彼此就隔着一个蚊帐,“我可能比较迟钝。人家一跟我说‘基’情,我就糊涂了。我说是啊,非常激情啊这两人。我昨天看到郭富城和张震那张‘比爱心’的照片,那个有点意思”。
-
在保养方面,广汽三菱劲炫ASX享受厂家提供的五年或10万公里整车质保,厂家建议该车保养周期为5000公里,小保养(更换机油,机滤)的费用在400元左右,大保养(更换机油,三滤)的费用在700元左右。具体价格以4S经销商为准。
-
对于未来景况,相关业者并不看好。李奇岳认为,9月应该和8月情况差不多,10月虽然因为长假会稍微好些,但远远无法与去年同期相比。
-
车身侧面,新车整体线条相比现款车型同样变化较大,C柱后方的车身线条趋于平缓,看起来更加硬朗、大气。同时新车周围还新增了黑色包围,给该车增添了一丝越野气息。尾部方面,其采用了全新的尾灯设计,在夜晚点亮后具有较高的辨识度。
-
“行政院”表示,灾害应变中心已经完成一级开设,“行政院副院长”杜紫军和张善政已经分别在4时50分和5时抵达应变中心,搜整各地回报的灾情状况。
-
皮内痣与交界痣同时存在。这种黑痣须细心观察,假若发现黑痣色素加深、变大,或有瘙痒、疼痛、破溃时,应及时到专科医院接受正规手术,同时送病理学检查。要高度警惕恶变成为恶性黑色素瘤。
-
海峡两岸的融合,不仅仅是经济的融,更是两岸民众心灵的融合。当下,互联网已融入两岸普通民众生活的方方面面,两岸网络空间的融合显的更为重要。
热点资讯
- 又是一场兄弟之战出色的小将朱荣振今晚能否再度建功?2019-11-07
- 我都花钱买游戏了,为什么还要再花时间玩?2019-11-08
- 称节目上线前遭豆瓣网友诋毁,爱奇艺诉豆瓣网侵犯名誉权2019-07-01
- 外汇局:我国外汇市场总体呈现双向波动、基本稳定的格局2019-07-01
- 한국,독일전전반전0-0종료…훨씬나아진움직임2019-07-01
- 为什么MySpace输给了Facebook?2019-07-01
- 明年有望播出的10部韩剧:经典日剧被翻拍,僵尸题材有点刺激2019-11-06
- 《王者荣耀》国际邀请赛总决赛落幕:QGhappy成功卫冕2019-11-09