1.Spark概念和特点
Spark是什么
- Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎
- 是开源的,基于内存计算的大数据并行计算框架
- 由UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室) 开发
- 拥有Hadoop MapReduce的优点, 同时避免读写HDFS
Spark和Hadoop MR的关系
- Spark 启用了内存分布数据集,提供交互式查询,优化迭代工作负载
- Hadoop MR在map端需要将输出写入文件,产生大量的读写操作,不支持交互,仅提供批处理方式
- Spark基于Scala语言,这是一种面向函数语言,更便于操作分布式数据集
- Hadoop MR基于Java语言,编程难度大,开发效率低
- Spark可以看作Hadoop的补充,通过YARN管理集群,操作HDFS上存储的数据
Spark优点
- 速度: 使用DAG(有向无环图)执行引擎; 内存计算比Hadoop快100倍,磁盘计算也要比Hadoop快
- 易用: RDD提供了80多个高级运算符(算子),支持交互式查询和复杂算法;支持多种语言, 包括Java,Python,R,Scala和Scala Shell交互式编程
- 通用: 丰富的库, 包括SQL,MLib,GraphX,Streaming; 丰富的API接口;
- 简洁: 不必像Hadoop那样同时维护多个工具
- 运行: 既可独立运行,也可与Hadoop结合, 支持访问HDFS,Hive,HBase等数据源
Spark组件
- Core; 核心,实现RDD,API等相关操作,是其他组件的基础
- SQL: 基于HiveQL与Spark交互的API,其中一个数据库表看作一个RDD
- Streaming: 对实时数据流进行处理和控制,以RDD的方式
- MLib: 常用的机器学习算法库, 将算法的实现转为对RDD的操作
- GraphX: 实现控制图、创建子图、访问路径上所有顶点等操作
Spark基本运行架构
- 包含Spark上下文的驱动
- 集群资源管理器
- 工作节点
- 任务控制节点
- 具体任务执行进程
2. RDD概念和特点
RDD是什么
- Resilient Distributed Datasets 弹性分布式数据集
- 分布式内存的抽象概念,提供高度受限的共享内存模型
RDD特点
- 只读不可改
- 元素可以为键值对或其他数据
- 函数包括转换Transformations和动作Actions 两类
- 可基于HDFS文件,本地文件,并行集合,JSON文件等多种方式创建
- 延迟计算(懒加载): 转换不执行计算,动作才执行计算;运行时优化提高性能
RDD操作分类
- 转换: 旧RDD转换为新RDD, RDD不可改,只能生成新RDD
- 动作: 对RDD进行计算返回结果
3. RDD基本命令
WordCount
- sc上下文调用textFile方法打开HDFS上的文件
- flatMap按空格全部切割后返回字符串集合
- map将每个字符串加入元组(单词,1)
- reduceByKey完成按key分组后的值累加操作
- sortBy按值降序排序,完成wordcount
- collect将RDD转为集合的动作函数,此时执行计算,最终foreach打印所有元素
sc.textFile("hdfs://ghym:9000/word.txt").flatMap(_.split("\\s+")).map((_,1)).reduceByKey(_+_).sortBy(_._2,false).collect.foreach(println)