Spark 2.x管理与开发-执行Spark Demo程序(二)使用Spark Shell
spark-shell是Spark自带的交互式Shell程序,方便用户进行交互式编程,用户可以在该命令行下用scala编写spark程序。
操作过程概述:(1)启动Spark Shell:spark-shell :quit)也可以使用以下参数: 参数说明: --master spark://spark81:7077 指定Master的地址 --executor-memory 2g 指定每个worker可用内存为2G --total-executor-cores 2 指定整个集群使用的cup核数为2个 例如: spark-shell --master spark://spark81:7077 --executor-memory 2g --total-executor-cores 2 [root@bigdata111 spark-2.1.0-bin-hadoop2.7]# ./bin/spark-shell --master spark://bigdata111:7077 (2)注意:如果启动spark shell时没有指定master地址,但是也可以正常启动spark shell和执行spark shell中的程序,其实是启动了spark的local模式,该模式仅在本机启动一个进程,没有与集群建立联系。 请注意local模式和集群模式的日志区别: (3)在Spark Shell中编写WordCount程序程序如下: sc.textFile("hdfs://192.168.88.111:9000/data/data.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://192.168.88.111:9000/output/spark/wc") 说明:
|
**************自己操练************
Spark Shell相当于REPL命令行工具,作为一个独立的Application运行。
启动Spark Shell
[root@bigdata111 bin]# ./spark-shell --master spark://bigdata111:7077
1.两种模式:
1)本地模式:
不需要连接到spark集群上,在本地直接运行,用于开发和测试。
现在关闭Spark集群:
本地模式执行Spark shell (后面不指定master时为本地模式)
[root@bigdata111 spark-2.1.0-bin-hadoop2.7]# ./bin/spark-shell
2)集群模式(常用)
(1)先将Spark集群启动起来
[root@bigdata111 spark-2.1.0-bin-hadoop2.7]# ./sbin/start-all.sh
(2)Spark shell后面需要指定master
[root@bigdata111 spark-2.1.0-bin-hadoop2.7]# ./bin/spark-shell --master spark://bigdata111:7077
2.具体操作
1)上传测试数据文件
新建一个tmp_files目录:/usr/local/tmp_files
上传测试文件到此目录下(以后也是)
2)在spark shell中开发WordCount程序
- 处理本地文件,将结果打印到屏幕上:
- 处理HDFS上的文件
(1)启动Hadoop(全分布式)
[root@bigdata111 tmp_files]# start-dfs.sh
[root@bigdata112 ~]# start-yarn.sh
(2)启动Zookeeper(三台可同步启动)、查看状态
[root@bigdata111 tmp_files]# zkServer.sh start
(3)jps查看状态
查看Hadoop可视化界面:
(4)往HDFS上上传数据文件
首先,新建两个目录tmp_files、tmp_outputFiles:
[root@bigdata111 tmp_files]# hadoop fs -mkdir -p /tmp_files
[root@bigdata111 tmp_files]# hadoop fs -mkdir -p /tmp_outputFiles
接下来,将测试的数据文件上传到此目录下(以后也是)
[root@bigdata111 tmp_files]# hadoop fs -put /usr/local/tmp_files/A.txt /tmp_files
tmp_outputFiles目录下存放的就是测试后的结果文件(以后都是)
(5)在Spark shell上写命令行
注-1: 这里的9000是自己安装部署Hadoop时,core-site.xml文件内设置的HDFS-NameNode所在的端口号, 注-2:saveAsTextFile()可以将结果文件存入本地,但是分情况。 如果Spark是伪分布式(Master和Slave在一个节点上),是没问题的; 但是如果有多个slave,那在写数据的时候就会往本地的多个路径上写数据(因为本地有多台主机),就有可能出现问题。 |
(6)查看HDFS上的结果文件
(7)单步运行WordCount
rdd1-rdd4都是RDD:
对rdd1-rdd4进行.collect操作:
这样就都能打印出他们的值了,因为数据都由RDD转变成了Array
所以由此看看来,RDD的确是Spark的核心,因为所有的操作都是由RDD来做的。