扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这里以一个scala版本的word count 程序为例:
①创建一个maven项目:
②填写maven的GAV:
③填写项目名称:
④ 创建好 maven 项目后,点击 Enable Auto-Import
⑤配置pom.xml文件:
成都创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的贵定网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
UTF8
1.8
1.8
UTF-8
2.11.8
2.3.1
2.7.6
2.11
org.scala-lang
scala-library
${scala.version}
org.apache.spark
spark-core_2.11
${spark.version}
org.apache.spark
spark-sql_2.11
${spark.version}
org.apache.spark
spark-streaming_2.11
${spark.version}
org.apache.spark
spark-graphx_2.11
${spark.version}
org.apache.spark
spark-mllib_2.11
${spark.version}
org.apache.hadoop
hadoop-client
${hadoop.version}
编写代码:
object WordCount {
def main(args: Array[String]): Unit = {
//获取集群入口
val conf: SparkConf = new SparkConf()
conf.setAppName("WordCount")
val sc = new SparkContext(conf)
//从 HDFS 中读取文件
val lineRDD: RDD[String] = sc.textFile("hdfs://zzy/data/input/words.txt")
//做数据处理
val wordRDD: RDD[String] = lineRDD.flatMap(line=>line.split("\\s+"))
val wordAndCountRDD: RDD[(String, Int)] = wordRDD.map(word=>(word,1))
//将结果写入到 HDFS 中
wordAndCountRDD.reduceByKey(_+_).saveAsTextFile("hdfs://zzy/data/output")
//关闭编程入口
sc.stop()
}
}
打jar包:
在pom.xml中加入相应的插件:
maven-clean-plugin
3.1.0
maven-resources-plugin
3.0.2
maven-compiler-plugin
3.8.0
maven-surefire-plugin
2.22.1
maven-jar-plugin
3.0.2
maven-install-plugin
2.5.2
maven-deploy-plugin
2.8.2
maven-site-plugin
3.7.1
maven-project-info-reports-plugin
3.0.0
然后:
将jar包上传到集群中运行:
spark-submit \
--class com.zy.scala.WordCount \
--master yarn \
--deploy-mode cluster \
--driver-memory 200M \
--executor-memory 200M \
--total-executor-cores 1 \
hdfs://zzy/data/jar/ScalaTest-1.0-SNAPSHOT.jar \
此时在yarn的web就能查看相应的程序的运行进度。
这时候,程序总是异常的结束:
我就使用:
yarn logs -applicationId application_1522668922644_40211查看了一下报错信息。
结果:not fount class :scala.WordCount.
然后我就在想是不是jar包出现了问题,我就打开了,之前上传的jar包,果然根本找不到 我打jar的程序,只有一个,META-INF,此时 我就百思不得不得解,然后由重新反复尝试了很多次,还是解决不了。后来吃个饭回来,突然想到是不是maven不能将scala编写的程序打成jar包,后来通过百度,发现了:
maven 默认只编译java 的文件,而不会编译scala 文件。但是maven 提供了 能够编译scala 的类库。
好心的博主:scala 在IDEA打jar包相关问题:https://blog.csdn.net/freecrystal_alex/article/details/78296851
然后 我修改了pom.xml文件:
http://down.51cto.com/data/2457588
按照上述的步骤,重新的向集群提交了一次任务,结果不尽人意,又出错了:
但是这一次错误和上次的不同(说明上一个问题已经解决):
这才明白,原来是Driver进程分配的内存太小了,最少应该大于450M,之后我又修改了 --driver-memory 512M--executor-memory 512M,重新提交任务。结果运行成功!!!
注意:
这里使用的是yarn的任务调用,不是spark自带的standalone,需要加入的参数:
--master yarn
--deploy-mode cluster
这里的--deploy-mode,使用的是cluster集群模式,client是客户端模式。
二者的区别是:client表示,在哪个节点提交,Driver就哪里启动,而cluster模式表示当将Driver放入到集群中启动。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流