Spark ---Spark 的基本使用

Spark 的基本使用 

1、执行第一个 Spark 程序 

利用 Spark 自带的例子程序执行一个求 PI(蒙特卡洛算法)的程序: 

$SPARK_HOME/bin/spark-submit \ 
--class org.apache.spark.examples.SparkPi \ 
--master spark://hadoop02:7077 \ 
--executor-memory 512m \ 
--total-executor-cores 2 \ 
$SPARK_HOME/examples/jars/spark-examples_2.11-2.3.0.jar \ 
100 

2、启动 Spark Shell 

启动命令: 

$SPARK_HOME/bin/spark-shell \ 
--master spark://hadoop02:7077,hadoop04:7077 \ 
--executor-memory 512M \ 
--total-executor-cores 2

Spark ---Spark 的基本使用

注意上图中的 cores 参数,是 0,那么以后这个 spark shell 中运行的代码是不能执行成功的。 千万注意。必要要把 cpu cores 和 memory 设置合理 

1、 executor memory 不能超过虚拟机的内存 

2、 cpu cores 不要超过 spark 集群能够提供的总 cpu cores,否则会使用全部。最好不要使用全部。否则其他程序由于没有 cpu core 可用,就不能正常运行 

 参数说明:

--master spark://hadoop02:7077   指定 Master 的地址 

--executor-memory 2G     指定每个 worker 可用内存为 2G

--total-executor-cores 2    指定整个集群使用的 cup 核数为 2 个 

注意:

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

Spark-2.X:

Spark Shell 中已经默认将 SparkContext 类初始化为对象 sc。

Spark Shell 中已经默认将 SparkSession 类初始化为对象 spark。

用户代码如果需要用到,则直接应用 sc,spark 即可

Spark-1.X:

Spark Shell 中已经默认将 SparkContext 类初始化为对象 sc。

Spark Shell 中已经默认将 SQLContext 类初始化为对象 sqlContext。

用户代码如果需要用到,则直接应用 sc,sqlContext 即可 

Spark ---Spark 的基本使用

3、在 Spark Shell 中编写 WordCount 程序 

在提交 WordCount 程序之前,先在 HDFS 集群中的准备一个文件用于做单词统计: 

words.txt 内容如下: 

hello huangbo

hello xuzheng

hello wangbaoqiang 

把该文件上传到 HDFS 文件系统中: 

[[email protected] ~]$ hadoop fs -mkdir -p /spark/wc/input

[[email protected] ~]$ hadoop fs -put words.txt /spark/wc/input 

在 Spark Shell 中提交 WordCOunt 程序: 

Spark ---Spark 的基本使用

执行最后的结果: 

Spark ---Spark 的基本使用说明:

sc 是 SparkContext 对象,该对象时提交 spark 程序的入口

textFile("hdfs://myha01/spark/wc/input/words.txt")是从 HDFS 中读取数据

flatMap(_.split(" "))先 map 再压平

map((_,1))将单词和 1 构成元组(word,1)

reduceByKey(_+_)按照 key 进行 reduce,并将 value 累加

saveAsTextFile("hdfs://myha01/spark/wc/output")将结果写入到 HDFS 对应输出目录中