版本:Spark2.4.7 Scala2.11.12 Hadoop 2.7.3
学习过程中遇到的问题,作为记录保存在此;不多说,上源码!
package com.spark.scala.example
import org.apache.spark.{SparkConf, SparkContext}
object WorldCount {
def main(args: Array[String]): Unit = {
// 设置提交任务的用户
System.setProperty("HADOOP_USER_NAME","root")
var ymaster = "spark://集群IP:7077" // 远程模式
var lmaster = "local" // 本地模式
var conf = new SparkConf().setAppName("WordCount")
// 序列化设置
.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.set("spark.kryo.registrationRequired", "true")
// 远程方式运行
.setMaster(ymaster)
//本地方式运行
// .setMaster(lmaster)
// 设置executor的个数
.set("spark.executor.instance","2")
// 设置executor的内存大小
.set("spark.executor.memory", "1024M")
// 设置driver的ip地址(指定本机IP地址)
.set("spark.driver.host","本机IP")
// 设置jar路径,此jar为当前代码打包jar;本地模式请注释掉
.setJars(List("E:\\code\\java\\spark\\com-spark-scala-worldcount\\target\\com-spark-scala-worldcount.jar")) // 远程提交运行时需要,本地运行不需要
//Spark程序的编写都是从SparkContext开始的
var sc = new SparkContext(conf)
var data = sc.textFile("hdfs://集群IP:9000/input/LICENSE.txt")
data.flatMap(_.split(" "))//下划线是占位符,flatMap是对行操作的方法,对读入的数据进行分割
.map((_,1))//将每一项转换为key-value,数据是key,value是1
.reduceByKey(_+_).collect()//将具有相同key的项相加合并成一个
.foreach(println)// 循环输出
}
}
输出结果:
远程模式 如有报以下错误:
我是通过重启spark集群后,运行通过的;不知具体的原因及如何解决,如有大神知道还请告知
本地模式没有问题