我的大数据学习总结
学习的体系
在开始学习大数据时,我参考过许多学习路线的建议,但觉得直接照搬别人的学习顺序未必适合自己。最后结合工作需要和个人经历,我制定了一套适合自己的学习路线:开始学习 Linux 命令和系统基本概念。然后分别学习 Java、Python 以及 Scala 这几种在大数据开发中常用的编程语言。然后着重学习 Hadoop 核心技术如 HDFS 和 MapReduce;接触数据库 Hive 后,学习数据流技术 Kafka 和分布式协调服务 Zookeeper。深入研究 Yarn 和求执行引擎 Spark。此外还了解其他技术如 HBase、Sqoop 等。同时学习计算机网络知识和操作系统原理。后面再系统学习关系数据库 MySQL 和数据仓库理论。学习分布式原理和架构也很重要。这个学习顺序参考了我之前的工作和学习经历情况后订定。需要注意,大数据领域的技术很多很广,如 Flink 也值得研究。本人给出的仅作为一个参考案例,学习者还需结合实际情况选择合适的学习路径。
学习难点与总结(例举)
这里举一个我学习 Spark 时遇到的难点例子, alongside 相关代码。学习难点:Spark 中 RDD 的转换和行动操作在开始学习 Spark 时,理解 RDD 的转换和行动操作是一个难点。RDD 本身是一个不可变的分布式数据集,它支持两类基础操作:转换操作(transformation):转换 RDD 会产生新的 RDD。例如:map、filter、 flatMap 等。行动操作(action):RDD 的转换操作是惰性计算的,只有在行动操作时才会真正触发任务的执行。这给我带来一定困惑:RDD 转换不会执行计算,它们会记录要运行的操作而不运行它们。那么转换产生的 RDD 是存储在 Driver 还是 Executor 中?当有多个转换操作时,它们如何串联执行?行动操作什么时候和怎样触发转换操作的执行?为了解答这些问题,我打印日志观察执行过程,并写了以下代码测试:
通过观察日志,我看到转换操作记录在 Driver 中而不执行,直到 collect 触发,此时串行所有转换操作在 Executor 上执行。这样解答了我之前的疑问,也巩固了 RDD 基本概念。这个例子帮助我理解 Spark 的运行机制。
再比如我学习 SparkSQL 时遇到的难点例子。学习难点: SQL on RDD 与 SQL on Dataset/DataFrame 的区别。在学习 SparkSQL 时,我发现它支持两种 SQL 查询方式:使用 SQL 对 RDD 进行查询,以及使用 SQL 对 Dataset/DataFrame 进行查询。区分两个概念变得很重要。为了理解区别,我编写了以下代码进行测试:
通过观察执行计划,我发现:对 RDD 进行 SQL 查询,内部需要进行对象-关系映射的转换。而 DataFrame/Dataset 由结构化数据表示,可以直接支持 Catalyst 优化执行计划。这解答了我 SQL 两种方式执行效率的不同之处。这个实践例子帮助我真正理解了 SparkSQL 的运作机制。
再比如如何进行大数据的实时计算和分析。以实时交易数据分析为例,需要对每笔交易进行实时计算和分析,找出异常交易模式。这里使用 Spark Streaming 来处理这个需求:设置 Spark Streaming 环境,创建 StreamingContext 对象,设置批处理时间窗口为 1 秒
从 Kafkatopic 中读取交易数据流
对每笔记录进行结构化,解析成 Case 类对象
实时计算策略,如交易额是否超过一定阈值等
最后将结果写回其他存储系统如 Redis。
总结
感谢这次分享的机会,它让我对数据与技术 review 了一遍并且有了新的认识。我对大数据还有很深的兴趣,未来还会继续研究相关领域。
评论