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
注意上图中的 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 即可
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 程序:
执行最后的结果:
说明:
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 对应输出目录中