1、使用spark-submit方式提交代码
注:由于通过Spark on yarn,使用该命令时候需要指定 --master
2、编写提交Yarn的wordcount程序
其中:standalon代码的区别: 没有conf配置信息,所有的配置和资源通过yarn来完成
package spark
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
/**
* Spark on yarn 模式单词计数,并倒序排序
* @author shenfl
*/
object WordCountSparkOnYarn {
def main(args: Array[String]): Unit = {
if(args.length!=2){
println("Usage: spark-submit --class spark.WordCountSparkOnYarn wordCount.jar inputpath outputpath ")
System.exit(0);
}
val sc = new SparkContext;
val files = sc.textFile(args(0));
files.flatMap( (_.split("\t")) ).map( (_,1) ).reduceByKey(_ + _)
.map( x => (x._2,x._1) ).sortByKey(false)
.map( x =>(x._2,x._1))
.repartition(1)
.saveAsTextFile(args(1))
}
}
3、Spark on yarn 模式下运行
3.1 编译成jar包 testSpark-1.0-SNAPSHOT.jar
3.2 上传服务器并通过spark submit在yarn上运行
spark-submit --class spark.WordCountSparkOnYarn --master yarn-cluster testSpark-1.0-SNAPSHOT.jar wc.txt output3
注: wc.txt 的数据为:
通过执行hdfs dfs -cat wc.txt命令,查看hdfs上数据为:
hello you
hello m
3.3 检查结果
hdfs dfs -cat output4/part*
(hello,2)
(you,1)
(me,1)
注意: 程序引入reduceByKey(_ + _) 出错是因为没有导入对应的包,例如:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext
._