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 ._