这篇文章包括以下内容
(1)IDEA中scala的安装
(2)hdfs简单的使用,没有写它的部署
(3) 使用scala编写简单的wordcount,输入文件和输出文件使用参数传递
(4)IDEA打包和提交方法
一 IDEA中scala的安装
(1) 下载IEDA 装jdk
(2) 启动应用程序 选择插件(pluigin)查看scala版本,然后去对应的网站下载https://plugins.jetbrains.com/plugin/1347-scala
(4) 将刚才下载的scala zip文件移动到IDEA的plugin下面
(5) 回到启动页面 选择plugin
选择从磁盘安装,然后重启
(6)新建项目 scala项目 如果没有scala sdk 那么windows下一个导入进去(注意版本一致)
二 提交wordcount并提交jar
(1) 新建Maven项目
file->project->maven->next-->设置工程名称和路径(路径不要为中文)--->完成
(2)将pol导入依赖,粘贴下面代码以后,需要点击右侧的maven project并刷新
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.xuebusi</groupId> 8 <artifactId>spark</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 11 <properties> 12 <maven.compiler.source>1.7</maven.compiler.source> 13 <maven.compiler.target>1.7</maven.compiler.target> 14 <encoding>UTF-8</encoding> 15 16 <!-- 这里对jar包版本做集中管理 --> 17 <scala.version>2.10.6</scala.version> 18 <spark.version>1.6.2</spark.version> 19 <hadoop.version>2.6.4</hadoop.version> 20 </properties> 21 22 <dependencies> 23 <dependency> 24 <!-- scala语言核心包 --> 25 <groupId>org.scala-lang</groupId> 26 <artifactId>scala-library</artifactId> 27 <version>${scala.version}</version> 28 </dependency> 29 <dependency> 30 <!-- spark核心包 --> 31 <groupId>org.apache.spark</groupId> 32 <artifactId>spark-core_2.10</artifactId> 33 <version>${spark.version}</version> 34 </dependency> 35 36 <dependency> 37 <!-- hadoop的客户端,用于访问HDFS --> 38 <groupId>org.apache.hadoop</groupId> 39 <artifactId>hadoop-client</artifactId> 40 <version>${hadoop.version}</version> 41 </dependency> 42 </dependencies> 43 44 <build> 45 <sourceDirectory>src/main/scala</sourceDirectory> 46 <testSourceDirectory>src/test/scala</testSourceDirectory> 47 <plugins> 48 <plugin> 49 <groupId>net.alchim31.maven</groupId> 50 <artifactId>scala-maven-plugin</artifactId> 51 <version>3.2.2</version> 52 <executions> 53 <execution> 54 <goals> 55 <goal>compile</goal> 56 <goal>testCompile</goal> 57 </goals> 58 <configuration> 59 <args> 60 <arg>-make:transitive</arg> 61 <arg>-dependencyfile</arg> 62 <arg>${project.build.directory}/.scala_dependencies</arg> 63 </args> 64 </configuration> 65 </execution> 66 </executions> 67 </plugin> 68 69 <plugin> 70 <groupId>org.apache.maven.plugins</groupId> 71 <artifactId>maven-shade-plugin</artifactId> 72 <version>2.4.3</version> 73 <executions> 74 <execution> 75 <phase>package</phase> 76 <goals> 77 <goal>shade</goal> 78 </goals> 79 <configuration> 80 <filters> 81 <filter> 82 <artifact>*:*</artifact> 83 <excludes> 84 <exclude>META-INF/*.SF</exclude> 85 <exclude>META-INF/*.DSA</exclude> 86 <exclude>META-INF/*.RSA</exclude> 87 </excludes> 88 </filter> 89 </filters> 90 <!-- 由于我们的程序可能有很多,所以这里可以不用指定main方法所在的类名,我们可以在提交spark程序的时候手动指定要调用那个main方法 --> 91 <!-- 92 <transformers> 93 <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 94 <mainClass>com.xuebusi.spark.WordCount</mainClass> 95 </transformer> 96 </transformers> 97 --> 98 99 </configuration> 100 </execution> 101 </executions> 102 </plugin> 103 </plugins> 104 </build> 105 </project>
这个时候在左侧的依赖就会出现很多maven包,注意要有网络哈
(2)修改pol部分内容如下,错误的内容会出现红色的字样哦
在pom.xml文件中还有错误提示,因为src/main/和src/test/这两个目录下面没有scala目录。
(3) 右击项目src,新建scala class,选择object
(4) 编写代码
1 import org.apache.spark.rdd.RDD 2 import org.apache.spark.{SparkConf, SparkContext} 3 4 /** 5 * Created by SYJ on 2017/1/23. 6 */ 7 object WordCount { 8 def main(args: Array[String]) { 9 //创建SparkConf 10 val conf: SparkConf = new SparkConf() 11 //创建SparkContext 12 val sc: SparkContext = new SparkContext(conf) 13 //从文件读取数据 14 val lines: RDD[String] = sc.textFile(args(0)) 15 //按空格切分单词 16 val words: RDD[String] = lines.flatMap(_.split(" ")) 17 //单词计数,每个单词每出现一次就计数为1 18 val wordAndOne: RDD[(String, Int)] = words.map((_, 1)) 19 //聚合,统计每个单词总共出现的次数 20 val result: RDD[(String, Int)] = wordAndOne.reduceByKey(_+_) 21 //排序,根据单词出现的次数排序 22 val fianlResult: RDD[(String, Int)] = result.sortBy(_._2, false) 23 //将统计结果保存到文件 24 fianlResult.saveAsTextFile(args(1)) 25 //释放资源 26 sc.stop() 27 } 28 }
(5) 打包
将编写好的WordCount程序使用Maven插件打成jar包,打包的时候也要保证电脑能够联网,因为Maven可能会到中央仓库中下载一些依赖:
双击package
打包成功提示
(6) 在jar包上面右击 copy path找到jar在win下的路径并上传到集群
(7) 启动hdfs 因为只用到hdfs,创建一个目录 hdfs dfs -mkdir /wc 然后创建一个txt文件
/hadoop/sbin/start-dfs.sh
(8)启动集群
/spark/sbin/start-all.sh
(9) jps查看master和worker是否都起来
(10) 提交给集群 后面两个参数分别为输入输出文件
bin/spark-submit --class spark.wordCount --executor-memory 512m --total-executor-cores 2 /home/hadoop/hadoop/spark-2.3.1-bin-hadoop2.7/spark_testJar/ljSparkCount-1.0-SNAPSHOT.jar hdfs://slave104:9000/wc hdfs://slave104:9000/wc/output
(11)验证
好了,到此结束,加油骚年