這篇文章包括以下內容
(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)驗證
好了,到此結束,加油騷年