环境:Spark1.6.1+Hadoop2.6.4+Scala2.10.6
目标:自己用Scala开发一个word count小程序,并上传到spark集群运行成功。
步骤:
1、本地开发代码。
1.1、配置pom
4.0.0 com.xhj.scalafirst scalafirst 1.0-SNAPSHOT 1.8 1.8 UTF-8 2.10.6 1.6.1 2.6.4 org.scala-lang scala-library ${scala.version} org.apache.spark spark-core_2.10 ${spark.version} org.apache.hadoop hadoop-client ${hadoop.version} src/main/scala src/test/scala net.alchim31.maven scala-maven-plugin 3.2.2 compile testCompile -make:transitive -dependencyfile ${project.build.directory}/.scala_dependencies org.apache.maven.plugins maven-shade-plugin 2.4.3 package shade *:* META-INF/*.SF META-INF/*.DSA META-INF/*.RSA com.qf.spark.WordCount
1.2、写代码
package scalapackage.testsparkimport org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}import scala.collection.mutable/** * Created by Germmy on 2018/5/3. */object SparkWC { def main(args: Array[String]) { val sparkConf: SparkConf = new SparkConf().setAppName("SparkWC")//.setMaster("local[*]") val sc: SparkContext = new SparkContext(sparkConf) val lines: RDD[String] = sc.textFile(args(0)) val by: RDD[(String, Int)] = lines.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).sortBy(_._2)// val toBuffer: mutable.Buffer[(String, Int)] = by.collect().toBuffer// println(toBuffer) by.saveAsTextFile(args(1)) sc.stop() }}
注:
1)、setMaster(local[*])表示是本地CPU开多线程模拟Spark集群的,本地调通后,在上传Spark集群之前,需要将其注释掉
2)、此程序接受2个参数,一个是从哪里读,一个是结果写到哪里去
2、打包。
2.1、运行命令(当然用手点击Intellij右边的maven插件也可以)
mvn clean package
2.2、产生2个jar,一个很小,一个超大如下图所示
2.3、将较大的那个改成wcg.jar,用winscp上传至node01节点上
2.4、在spark集群中运行如下命令:
./bin/spark-submit --class scalapackage.testspark.SparkWC --master spark://node01:7077 --executor-memory 1g --total-executor-cores 2 /home/germmy/wcg.jar hdfs://node01:9000/myinput/a.txt hdfs://node01:9000/output/08
注:
1)、scalapackage.testspark.SparkWC 表示程序的入口类,类似jar包的Main Class
2)、hdfs://node01:9000/myinput/a.txt表示从哪里读文件
3)、hdfs://node01:9000/output/08表示结果存在哪,注:不能重复,否则会报错
2.4.1、运行时,可以观察web监控页面
2.4.2、运行后node01节点控制台显示
2.4.3、查看hdfs中的内容
3、中途遇到的问题解决
3.1、本地运行SparkWC时,报could not locate executable null bin winutils.exe in the hadoop binaries
原因:因为windows没有配HADOOP_HOME环境变量。
解决:需要先下载hadoop的,在环境变量中配上HADOOP_HOME=D:\software_package\work_related\bigdata\hadoop-common-2.2.0-bin-master,并将path配置成$HADOOP_HOME\bin
注意:Intellij必须在配置环境变量后重启,否则可能会读取不到环境变量。因为你开Intellij在先,配置环境在后,是读不到的,这是有的。
3.2、exitCode: 1 due to: Exception from container-launch.
这是因为mapred-site.xml中的jobhistory服务器配置的不对导致的,改成正确主机名问题解决。