Spark 和Hadoop 的根本差异是多个作业之间的数据通信问题 : Spark 多个作业之间数据通信是基于内存,而 Hadoop 是基于磁盘。
Spark 核心模块:Spark Core,Spark SQL,Spark Streaming,Spark MLlib,Spark GraphX
Spark 运行环境:Local 模式、Standalone 模式、Yarn 模式
部署模式对比
端口号
➢ Spark 查看当前 Spark-shell 运行任务情况端口号:4040(计算)
➢ Spark Master 内部通信服务端口号:7077
➢ Standalone 模式下,Spark Master Web 端口号:8080(资源)
➢ Spark 历史服务器端口号:18080
➢ Hadoop YARN 任务运行情况查看端口号:8088
案例 WordCount
object Spark02_WordCount {def main(args: Array[String]): Unit = {// Application// Spark框架// TODO 建立和Spark框架的连接// JDBC: Connection// 使用val关键字声明的变量是不可变变量val sparkConf = new SparkConf().setMaster("local").setAppName("WordCount")val sc = new SparkContext(sparkConf)// TODO 执行业务操作// 1.读取文件,获取一行一行的数据// hello worldval lines: RDD[String] = sc.textFile("F:/bigData/idea_workspace5/sparkcore/src/main/java/com/sparkcore_study/wc/datas")// 2.将一行数据进行拆分,形成一个一个的单词(分词)// 扁平化:将整体拆分成个体的操作// "hello world" => hello, world, hello, worldval words: RDD[String] = lines.flatMap(_.split(" "))// 3.将单词进行结构的转换,方便统计// (hello, hello, hello), (world, world)val wordToOne = words.map(word=>(word,1))// 4.将转换后的数据进行分组聚合// 相同key的value进行聚合操作// (word, 1) => (word, sum)val wordToSum: RDD[(String, Int)] = wordToOne.reduceByKey(_+_)// 5.将转换结果采集到控制台打印出来val array: Array[(String, Int)] = wordToSum.collect()array.foreach(println)// TODO 关闭连接sc.stop()}}
