Spark 和Hadoop 的根本差异是多个作业之间的数据通信问题 : Spark 多个作业之间数据通信是基于内存,而 Hadoop 是基于磁盘。
    Spark 核心模块:Spark Core,Spark SQL,Spark Streaming,Spark MLlib,Spark GraphX
    Spark 运行环境:Local 模式、Standalone 模式、Yarn 模式
    部署模式对比
    image.png
    端口号
    ➢ Spark 查看当前 Spark-shell 运行任务情况端口号:4040(计算)
    ➢ Spark Master 内部通信服务端口号:7077
    ➢ Standalone 模式下,Spark Master Web 端口号:8080(资源)
    ➢ Spark 历史服务器端口号:18080
    ➢ Hadoop YARN 任务运行情况查看端口号:8088
    案例 WordCount

    1. object Spark02_WordCount {
    2. def main(args: Array[String]): Unit = {
    3. // Application
    4. // Spark框架
    5. // TODO 建立和Spark框架的连接
    6. // JDBC: Connection
    7. // 使用val关键字声明的变量是不可变变量
    8. val sparkConf = new SparkConf().setMaster("local").setAppName("WordCount")
    9. val sc = new SparkContext(sparkConf)
    10. // TODO 执行业务操作
    11. // 1.读取文件,获取一行一行的数据
    12. // hello world
    13. val lines: RDD[String] = sc.textFile("F:/bigData/idea_workspace5/sparkcore/src/main/java/com/sparkcore_study/wc/datas")
    14. // 2.将一行数据进行拆分,形成一个一个的单词(分词)
    15. // 扁平化:将整体拆分成个体的操作
    16. // "hello world" => hello, world, hello, world
    17. val words: RDD[String] = lines.flatMap(_.split(" "))
    18. // 3.将单词进行结构的转换,方便统计
    19. // (hello, hello, hello), (world, world)
    20. val wordToOne = words.map(word=>(word,1))
    21. // 4.将转换后的数据进行分组聚合
    22. // 相同key的value进行聚合操作
    23. // (word, 1) => (word, sum)
    24. val wordToSum: RDD[(String, Int)] = wordToOne.reduceByKey(_+_)
    25. // 5.将转换结果采集到控制台打印出来
    26. val array: Array[(String, Int)] = wordToSum.collect()
    27. array.foreach(println)
    28. // TODO 关闭连接
    29. sc.stop()
    30. }
    31. }