Idea中编写并运行Spark集群(WordCount)
1. 安装SBT、Scala、SBT-Excutor
在File-> Settings -> Plugins
安装SBT、SBT Executor、Scala(可以下载安装包本地安装的)
2. 创建scala项目并导入Libraries:
File->Project Structure -> Libraries -> + -> java
然后选择$SPARK_HOME/lib/spark-assembly-1.3.1-hadoop2.6.0.jar导入。
如果没有导入scala顺便也导入
3. 建立src文件夹
(笔者是因为不能自动构建工作文件夹,故自己创建文件夹来进行单文件函数测试。),
再在src中创建package:main.scala.com.spark.firstapp
4. 在这包下面新建scala文件(选择object)
5. 在WordCount写入下面代码:
package main.scala.com.spark.firstapp
/**
* Created by hadoop on 16-7-30.
*/
import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.SparkContext._
object WordCount {
def main(args: Array[String]) {
if (args.length < 2) {
System.err.println("Usage: <file>")
System.exit(1)
}
val conf = new SparkConf().setMaster("spark://master:7070")
val sc = new SparkContext(conf)
val line = sc.textFile(args(0))
//output to file
line.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).saveAsTextFile(args(1))
//output to screen
line.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).collect().foreach(println)
sc.stop()
}
}
6. 编辑运行设置:
上方的Run-> Edit Configurations:(当然这些都可以在代码中动态修改)
(1). Main class: WordCount
(2). VM options: -Dspark.master=local 或者 -Dspark.master=saprk://master:7070 后者为集群运行。
(3). Program arguments:hdfs://master:9000/input/README.txt (这个需要提前在hdfs中放置有文件)
Apply OK
7. 运行集群:
对着WordCount文件右键Run即可。
8. 也可以打包,在终端执行:
File->Project Structure -> Artifacts-> + -> JAR -> Frommodules with dependencies...
接着选择刚刚的Main Class ,Apply OK
然后再build文件
Build -> Build Artifact -> scalascala.jar -> Build (如果是第二次之后,则选择Rebuild)
等待几十秒即可编译完毕。
此时可以在该项目文件夹的 ./out/artifacts/scalascala_jar/中即可找到打包后的文件。
9. 集群中运行:
将jar包发到集群中。(笔者将其放在共享文件夹中,即/mnt/hgfs/中(集群中的机器均能访问)
在运行:
$SPARK_HOME/bin/spark-submit --master spark://master:7077 --classmain.scala.com.spark.firstapp.WordCount --executor-memory 500m /mnt/hgfs/ubuntu/rthings/idea/jar_test/scalascala.jar hdfs://master:9000/input/README.txthdfs://master:9000/output/test_7_30/
(在此之前笔者在hdfs://master:9000/input放置有README.txt文件),而hdfs://master:9000/output/test_7_30/必须是未创建的文件夹,且上面的是500m。也可以为1g,看配置的内存大小而定)
运行状态:
参考:http://blog.csdn.net/bahaidong/article/details/44241101