下载IDEA 后,安装scala
下载spark 安装包,下载地址:http://d3kbcqa49mib13.cloudfront.net/spark-1.6.0-bin-hadoop2.6.tgz
解压后将spark jar 文件导入到eclisp 中的jar依赖。
如图
程序代码如下:
package cn.tan.spark.dt
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
object WordCount {
def main(args: Array[String]){
/*
* 1、 创建sparkConf 配置对象sparkConf,配置spark 运行时的配置信息,设置要连接spark master 的 的url,
* 如果设置为local则代表本地运行
*
*/
val conf = new SparkConf();
conf.setAppName("my spark");
// conf.setMaster("local");
conf.setMaster("spark://node11:7077"); //在集群上运行
/**
* 2、创建sparkContext 对象,sparkContext 是所有spark 功能唯一入口
* 作用spark 运行所需要的额核心组件,包括DAGScheduler,TaskScheduler,SchedulerBackend
* 还负责spark集群往Master注册,
* 是spark 程序中最为重要的一个对象
*/
val sc = new SparkContext(conf) //通过传入sparkConf参数,来定制spark 运行的具体参数设置
/**3
* 根据具体的数据来源(HDFS,local,HBase),通过sparkContext创建RDD
* RDD 创建3种方式:根据外部数据来源例如HDFS、根据scala 其他集合、 根据其他RDD
* 数据会被分成一系列的Partitions(并行度),分配到每个partition的数据属于一个Task范畴
*/
// val lines = sc.textFile("C://t2.txt", 1) //partition 并行度是根据机器来写的
val lines = sc.textFile("hdfs://node11:9000/profile", 1) //partition 并行度是根据机器来写的
/**
* 4、对初始RDD进行Transformation级别的处理:例如Map, filter等高阶函数的编程.来进行具体的函数计算
*
* 每一行的字符串拆分成单词
*/
//4.1对每一行的所有行进行拆分,并把所有行的拆分结果通过flat合并成为一个大的单词集
val words = lines.flatMap { lines => lines.split(" ") }
println("words:" + words)
//4.2在单词拆分的基础上对单词进行统计 word =>(word, 1)
val paris = words.map { word => (word, 1) }
//4.3 在每个单词计数为1基础上统计单词在全文终出现的次数
val wordCounts = paris.reduceByKey(_+_)
wordCounts.collect.foreach(wordNumPair => println(wordNumPair._1 +":" + wordNumPair._2))
sc.stop()
}
}
打包到服务器运行:
./spark-submit --class cn.tan.spark.dt.WordCount --master spark://node11:7077 /home/word.jar
运行结果: