Spark Shell是一个交互式的命令行,提供了一种学习API的简单方式,以及一个能够进行交互式分析数据的强大工具,他也是一个客户端,可以使用scala编写(scala运行与Java虚拟机可以使用现有的Java库)或使用Python编写。方便学习和测试,用于提交spark应用程序。
spark-shell的本质是在后台调用了spark-submit脚本来启动应用程序的。
启动spark-shell,命令如下:
/spark-2.2.0-bin-hadoop2.7/bin/spark-shell
注意:这种方式启动spark shell时没有指定master地址,但是也可以正常启动spark shell和执行spark shell中的程序,其实是启动了spark的local模式,该模式仅在本机启动一个进程,没有与集群建立联系。
/spark-2.2.0-bin-hadoop2.7/bin/spark-shell --master spark://node-4:7077,node-5:7077 --executor-memory 2g --total-executor-cores 2
参数说明:
--master spark://node-4:7077,node-5:7077 指定Master的地址
--executor-memory 2g 指定每个worker可用内存为2G
--total-executor-cores 2 指定整个集群使用的cup核数为2个
上面是指定了master的地址,那么就会将任务提交到集群,开始时sparksubmit(客户端)要连接Master,并申请计算资源(内存和核数),Master进行资源调度(就是让那些Worker启动Executor),在准备工作时,这些进程都已经创建好了。
启动spark shell后,查看UI管理界面,会发现Application ID多了一个正在运行的spark shell进程。
1. 启动HDFS(上传数据到hdfs)
2. 通过上述方式启动spark shell(客户端)
3. 进入scala交互式命令行,执行
scala> val textFile = sc.textFile("hdfs://node-4:9000/wc").flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).sortBy(_._2, false).collect
这里的sc是spark core(RDD)的执行入口。