package com.shujia.core
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Demo02WordCountOnYarn {
/**
* 将程序提交到Yarn上的流程:
* 1、setMaster不能指定为local本地方式运行
* 2、将输入输出路径换成HDFS的路径
* 3、将程序打成jar包(如果运行时出现依赖问题,可以添加打包依赖的插件)
* 4、执行提交Spark程序的命令
* 5、spark-submit --class com.shujia.core.Demo02WordCountOnYarn --master yarn-client --executor-memory 512m --num-executors 1 --executor-cores 1 Spark-1.0-SNAPSHOT.jar
* spark-submit 用于提交Spark任务的命令
* --class 主类名
* --master 运行的模式
* --executor-memory 指定每个executor的内存
* --num-executors 指定executor的个数
* --executor-cores 指定每个executor的核数
* Spark-1.0-SNAPSHOT.jar 运行的jar包
*/
def main(args: Array[String]): Unit = {
//初始化Spark环境
//创建Spark配置对象
val conf: SparkConf = new SparkConf()
//配置任务的名称
conf.setAppName("Demo02WordCountOnYarn")
//配置Spark的运行方式 local表示本地运行
// conf.setMaster("local")
//1、创建Spark上下文对象 即Spark的入口
val sc: SparkContext = new SparkContext(conf)
//2、读取文件 将文件构建成RDD
/**
* RDD:弹性分布式数据集
* “暂时”可以将其理解为Scala中的一个集合,使用起来类似List
* 实际上RDD是Spark中提供的一个编程模型
*
* Spark并没有自己的读文件的方式 使用的还是MR的切片、格式化数据的方式 是基于TextInputFormat类
*/
val linesRDD: RDD[String] = sc.textFile("/data/wc/input")
//3、对每行数据进行切分 并对切分后的结果进行扁平化处理
//flatMap等其他跟RDD相关的方法在Spark中统称为“算子”
val wordsRDD: RDD[String] = linesRDD.flatMap(line => line.split(","))
//4、按照单词进行分组
/**
* Iterable迭代器跟List区别?
* 1、迭代器只能被遍历
* 2、迭代器的数据不在内存中 当使用时才会逐条加载到内存里
*/
val groupRDD: RDD[(String, Iterable[String])] = wordsRDD.groupBy(word => word)
//5、统计每个单词的数量 并整理最后输出的结果
val wordCntRDD: RDD[String] = groupRDD.map(kv => s"${kv._1}, ${kv._2.size}")
//6、打印或保存最后的结果
// wordCntRDD.foreach(println)
wordCntRDD.saveAsTextFile("/data/wc/output")
}
}
[root@master jars]# spark-submit --class com.shujia.core.Demo02WordCountOnYarn --master yarn-client --executor-memory 512m --num-executors 1 --executor-cores 1 Spark-1.0-SNAPSHOT.jar
[root@master jars]# hdfs dfs -cat /data/wc/output/part-r-00000
c++ 1
datax 4
hbase 4
hive 4
kettle 4
mysql 4
spark 4
[root@master jars]# hdfs dfs -cat /data/wc/output/part-r-00001
c 1
flume 4
hadoop 4
kafka 4
python 1
sql 1
[root@master jars]# hdfs dfs -cat /data/wc/output/part-r-00002
flink 8
java 1
phoenix 4
redis 4
scale 1
springboot 4
sqoop 4