在看完下面的细节之后,就会发现,spark的开发,只需要hdfs加上带有scala的IDEA环境即可。
当run运行程序时,很快就可以运行结束。
为了可以看4040界面,需要将程序加上暂定程序,然后再去4040上看程序的执行。
新建的两种方式,第一种是当时老师教的,现在感觉有些土,但是毕竟是以前写的,不再删除,就自己在后面添加了第二种新建方式。
一:通过maven命令行命令创建一个最初步的scala开发环境
1.打开cmd
通过maven命令创建一个最初步的scala开发环境。
mvn archetype:generate -DarchetypeGroupId=org.scala-tools.archetypes -DarchetypeArtifactId=scala-archetype-simple -DremoteRepositories=http://scala-tools.org/repo-releases -DgroupId=com.ibeifeng.bigdata.spark.app -DartifactId=logs-analyzer -Dversion=1.0
分两个部分,前面是scala项目需要的插件,后面是确定一个maven工程。
2.等待创建
这样就表示创建成功。
3.生成的项目在F盘
因为在cmd的时候,进入的是F盘。
4.使用open导入
一种IDEA的使用打开方式。
5.在pom.xml中添加dependency
HDFS ,Spark core ,Spark SQL ,Spark Streaming
这个里面重要的部分是有scala的插件。
1 25 4.0.0 6 7sacla 8scalaTest 91.0-SNAPSHOT 10 1112 18 191.5 131.5 14UTF-8 151.6.1 162.5.0 1720 21 58 5922 27 28org.apache.spark 23spark-core_2.10 24${spark.version} 25compile 2629 34 35org.apache.spark 30spark-sql_2.10 31${spark.version} 32compile 3336 41 42org.apache.spark 37spark-streaming_2.10 38${spark.version} 39compile 4043 48 49 50org.apache.hadoop 44hadoop-client 45${hadoop.version} 46compile 4751 56 57junit 52junit 534.8.1 54test 5560 99 100src/main/scala 6162 9863 82org.scala-tools 64maven-scala-plugin 652.15.0 6667 8168 8069 72compile 70testCompile 7173 7974 78-make:transitive 75-dependencyfile 76${project.build.directory}/.scala_dependencies 7783 97org.apache.maven.plugins 84maven-surefire-plugin 852.6 8687 96false 88true 89 90 9192 95**/*Test.* 93**/*Suite.* 94
二:第二种方式
这种方式,比较实用。
1.直接新建一个Maven工程
需要在pom中添加scala的插件。
2.新建scala文件夹
原本生成的maven项目只有java与resources。
在project Stucture中新建scala文件夹,然后将scala文件夹编程sources。
3.完成
这个截图还是第一种方式下的截图,但是意思没问题。
4.在resources中拷贝配置文件
需要连接到HDFS的配置文件。
5.新建包
6.新建类
因为有了scala插件,就可以直接新建scala 的 object。
7.启动hdfs
因为需要hdfs上的文件,不建议使用本地的文件进行数据处理。
8.书写程序
这是一个简单的单词统计。
重点的地方有两个,一个是setMaster,一个是setAppName。如果没有设置,将会直接报错。
1 package com.scala.it 2 3 import org.apache.spark.{SparkConf, SparkContext} 4 5 object TopN { 6 def main(args: Array[String]): Unit = { 7 val conf=new SparkConf() 8 .setMaster("local[*]") 9 .setAppName("top3");10 val sc=new SparkContext(conf)11 val path="/user/beifeng/mapreduce/wordcount/input/wc.input"12 val rdd=sc.textFile(path)13 val N=314 val topN=rdd15 .filter(_.length>0)16 .flatMap(_.split(" ").map((_,1)))17 .reduceByKey((a,b)=>a+b)18 .top(N)(ord = new Ordering[(String,Int)] {19 override def compare(x: (String, Int), y: (String, Int)) : Int={20 val tmp=x._2.compareTo(y._2)21 if (tmp==0)x._1.compareTo(y._1)22 else tmp23 }24 })25 topN.foreach(println)26 27 sc.stop()28 29 }30 }
9.直接运行的结果
因为是local模式,所以不需要启动关于spark的服务。
又因为hdfs的服务已经启动。
所以,直接运行run即可。
二:注意的问题
1.path问题
程序中的path默认是hdfs路径。
当然,可以使用windows本地文件,例如在D盘下有abc.txt文件,这时候path="file:///D:/abc.txt"