Spark之本地模式与集群模式

Spark之本地模式与集群模式

1.spark-shell的本地模式和集群模式

1.1 local本地模式

直接启动spark-shell命令窗口

脚本启动后,会生成一个SparkContext的上下文对象sc。并且启动的是本地模式(local)。如图:

image

1.1.1 加载本地数据

sc.textFile("file:///home/hadoop/words.txt").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).sortBy(_._2,true).collect()

image

1.1.2 加载hdfs数据

# 因为在spark-env.sh中配置了HADOOP_CONF_DIR目录,所以默认使用hdfs文件系统。
# /spark/words.txt:表示hdfs文件系统目录
sc.textFile("/spark/words.txt").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).sortBy(_._2,true).collect()

image

1.2 集群模式

1.2.1 启动集群模式的spark-shell窗口

spark-shell --master spark://server01:7077 --total-executor-cores 3 --executor-memory 1g

参数介绍:

--master spark://server01:7077:指定master进程的机器

--total-executor-cores 3:指定executor的核数(worker数量)

--executor-memory 1g:指定executor执行的内存大小

image

1.2.2 代码执行

sc.textFile("/spark/words.txt").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).sortBy(_._2).collect()

image

1.2.3 结果查看

image

通过集群模式提交的任务,在web页面上是有展示的

本地模式(local)和集群模式的区别

1.本地模式不运行在集群上,运行在当前执行的机器上

2.本地模式的任务不会在web页面显示

3.本地模式是采用线程来模拟集群的worker进程


2. scala api实现的本地模式和集群模式

3.1 local本地模式

object WordCountLocal {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("wordcount").setMaster("local[2]")
    val sc = new SparkContext(conf)
    sc.textFile("file:///d:/a.txt").flatMap(_.split(",")).map((_, 1)).reduceByKey(_ + _).sortBy(_._2).saveAsTextFile("file:///d:/out")
  }
}

因为本地安装了spark,所以可以直接在本地运行,在本地运行。

setMaster("local[2]")local表示本地运行,[2]表示是使用2个线程。

3.2 生成jar提交到集群

代码:

object WordCountMaster {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("WordCountMaster")
    val sparkContext = new SparkContext(conf)
    sparkContext.textFile(args(0)).flatMap(_.split(",")).map((_, 1)).reduceByKey(_ + _).sortBy(_._2).saveAsTextFile(args(1))
  }
}

提交到集群:

spark-submit \
--master spark://server01:7077 \
--executor-memory 1g \
--total-executor-cores 2 \
--class com.yundoku.spark.WordCountMaster \
/home/hadoop/sparkscalawordcount.jar \
/spark/words.txt \
/spark/scala_wordcount_out

参数讲解:

--master:指定集群的master

--executor-memory:executor的内存大小(worker)

--total-executor-cores 2:executor核数为2(worker的执行个数)

--class com.yundoku.spark.WordCountMaster:包含main的类,程序的入口

/home/hadoop/sparkscalawordcount.jar :jar文件

/spark/words.txt:输入参数1

/spark/scala_wordcount_out:输入参数2

运行结果:

image

这里会生成part-000000part-0000012个结果文件,表示有2个分区。

原因是,在spark的读取文件时默认是使用的最小分区为2

image

defaultMinPartitions的值初始化,如下图所示

image

猜你喜欢

转载自blog.csdn.net/qq_33689414/article/details/80232605