一、IDEA新建scala应用
Create New Project
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL9MGVNp3Zq10dRRVT3V1MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLxMTM4ITOzUTMzITMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
选择scala,IDEA,点击next
项目名称:sparkApp,选择JDK,选择Scala SDK,点击finish
等待加载项目,项目目录结构如下
打开file下的 Project structure
新建目录和设置属性:
把src设置为source;
在src下新建2个目录,main和test,其中main设置为source,test设置为test;
在main和test目录下分别新建3个目录:java,resource,scala;
main目录下的java和scala设置为source,resource设置为resource;
test目录下的java和scala设置为test,resource设置为test resource;
二、新建scala object类
引入spark必须的包;
再次打开project struct,libraries,
选择 spark-1.3.0-bin-2.5.0-cdh5.3.6/lib 目录下的所有 jar包;点击 ok
可以在外部包看到引入的lib
在Scala 目录下新建package:com.spark.app
新建scala object:SparkDemo;
从hdfs读取文件生成rdd,处理完后保存结果到hdfs;
package com.spark.app
import org.apache.spark.{SparkConf, SparkContext}
/*
scala的main方法必须在 object 中
*/
object SparkDemo {
def main(args: Array[String]): Unit = {
val inputFile = "hdfs://hadoop-senior.ibeifeng.com:8020/user/root/mapreduce/wordcount/input/wc.input" // Should be some file on your system
val outputFile = "hdfs://hadoop-senior.ibeifeng.com:8020/user/root/mapreduce/wordcount/sparkOutput"
val conf = new SparkConf().setAppName("Simple Application") //.setMaster("local")
val sc = new SparkContext(conf)
val rdd = sc.textFile(inputFile);
val wordCount = rdd.flatMap(line => line.split(" ")).map(x => (x, 1)).reduceByKey((x, y) => (x + y))
wordCount.saveAsTextFile(outputFile)
sc.stop()
}
}
右键运行 SparkDemo;查看hdfs上生成的文件;
bin/hdfs dfs -text /user/root/mapreduce/wordcount/sparkOutput/part-00000
(hive,3)
(hadoop,3)
(sqoop,2)
(hbase,2)
三、打包
再次打开project structure;选择artifacts,点击 + 号;选择JAR,点击 “from modules with dependencies”
选择主类,SparkDemo;点击 ok
删除jar包,选中jar包,点击 - 号删除;
删除后,点击ok
找到build -> build artifacts
选中上文设置的jar,再点击build
在根目录下有新的目录out,在下级目录可以找到生成的 sparkApp.jar
四、发布到spark运行
把sparkApp.jar 用 filezilla 上传到 spark-1.3.0-bin-2.5.0-cdh5.3.6/jars 目录下
spark-submit 入门了解,如果是多行,每一行最后的反斜杆 \ 不可以省略;
bin/spark-submit \
--class <main-class> \ -- jar包的主类,在打包时已经设置主类,所以这一个配置可以删除
--master <master-url> \ -- 集群管理器所在的节点
--deploy-mode <deploy-mode> \ -- 部署模式,可以是client或cluster
--conf <key>=<value> \ -- 配置的参数
... # other options
<application-jar> \ -- jar包名称
[application-arguments] -- 启动应用的参数
sparkApp.jar 启动的 spark-submit 命令应该为:
bin/spark-submit \
--master spark://hadoop-senior.ibeifeng.com:7077 \
jars/sparkApp.jar
由于在上文已经运行 sparkDemo,在hdfs上有生成输出的文件;所以要先删除该目录
bin/hdfs dfs -rm -r mapreduce/wordcount/sparkOutput
在 spark-1.3.0-bin-2.5.0-cdh5.3.6 目录下运行 spark-submit 命令
运行命令后;检验是否成功执行sparkDemo;
在hdfs上,/user/root/mapreduce/wordcount/sparkOutput 有新生成文件
说明有执行成功。