初始Spark程序、shell命令执行Spark程序、Spark-shell完成wordcount 05

1. 普通模式提交任务

该算法是利用蒙特·卡罗算法求圆周率PI,通过计算机模拟大量的随机数,最终会计算出比较精确的π

bin/spark-submit 
--class org.apache.spark.examples.SparkPi \
--master spark://node01:7070 \
--executor-memory 1G \
--total-executor-cores 2 \
examples/jars/spark-examples_2.11-2.1.3.jar \
10
  • executor-memory 1G 所有executor总共内存是1G
  • total-executor-cores 2 每个executor需要2核

2. 高可用模式提交任务

  • 在高可用模式下,因为涉及到多个Master,所以对于应用程序的提交就有了一点变化。
  • 因为应用程序需要知道当前的Master的IP地址和端口。
  • 这种HA方案处理这种情况很简单,只需要在SparkContext指向一个Master列表就可以了,如spark://host1:port1,host2:port2,host3:port3,应用程序会轮训列表,找到活着的Master。
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node01:7077,node02:7077,node03:7077
--executor-memory 1G \
--total-executor-cores 2 \
example/jars/spark-examples_2.11-2.1.3jar \
10

3. 启动Spark-shell

spark-shell是Spark自带的交互式Shell程序,方便用户进行交互式编程,用户可以在该命令下用scala编写spark程序

3.1 运行spark-shell–master local[N]读取本地文件

单机模式:通过本地N个线程跑任务,只运行一个SparkSubmit进程。

  1. 需求
    读取本地文件,实现文件内的单词计数。本地文件words.txt内容如下
hello me
hello you
hello her
  1. 运行spark-shell --master local[2]
    初始Spark程序、shell命令执行Spark程序、Spark-shell完成wordcount 05_第1张图片
    观察启动的进程:
    多了一个SparkSubmit
    在这里插入图片描述
  2. 编写scala代码
sc.textFile("file:///root///words.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect

代码说明
sc:Spark-Shell中已经默认将SparkContext类初始化为对象sc,用户代码如果需要用到,则直接用sc即可。
textFile:读取数据文件
flatMap:对文件中的每一行数据进行压平切分,这里按照空格分割。
map:对出现的每一个单词记为1,组成新的元组(word,1)
reduceByKey:对相同的单词出现的次数进行累加
collect:触发任务执行,收集结果数据。
4. 观察结果
在这里插入图片描述

3.2 运行spark-shell --master local[N]读取hdfs加粗样式**s上数据

  1. 整合Spark和hdfs,修改配置文件
    spark-env.sh,添加HADOOP_CONF_DIR配置,指明了hadoop的配置文件后,默认它就是使用hdfs上的文件
    export HADOOP_CONF_DIR=/export/servers/hadoop/etc/hadoop
  2. 再启动hdfs,然后重启spark集群
  3. 向hdfs上传一个文件到hdfs://node001:8020/words.txt
    在这里插入图片描述
  4. 在spark shell中使用scala语言编写spark程序
sc.textFile("/words.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect

3.3 运行spark-shell 指定具体的Master地址

  1. 需求
    Spark-shell运行是指定具体的Master地址,读取hdfs上的数据,做单词计数,然后将结果保存在hdfs上。
  2. 执行启动命令
spark-shell \
--master spark://node01:7070 \
--executor-memory 1g \
--total-executor-cores 2

初始Spark程序、shell命令执行Spark程序、Spark-shell完成wordcount 05_第2张图片
初始Spark程序、shell命令执行Spark程序、Spark-shell完成wordcount 05_第3张图片
参数说明:
–master spark://node1:7077 指定Master的地址
–executor-memory 1g 指定每个worker可用内存为1g
–total-executor-cores 2 指定整个集群使用的cup核数为2个

注意:
如果启动spark shell时没有指定master地址,但是也可以正常启动spark shell和执行spark shell中的程序,其实是启动了spark的local模式,该模式仅在本机启动一个进程,没有与集群建立联系。

  1. 编写scala代码
sc.textFile("/words.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).saveAsTextFile("/wc")

saveAsTextFile:保存结果数据到文件中
4. 查看hdfs上结果
初始Spark程序、shell命令执行Spark程序、Spark-shell完成wordcount 05_第4张图片

你可能感兴趣的:(Spark社区)