8/15
学习了Spark和Tez两种DAG计算引擎,并对比它们与MapReduce的差异。Spark方面我部署了Standalone集群,通过spark-shell交互式环境运行了Scala版本的WordCount,仔细观察了RDD的依赖关系和Stage划分逻辑,窄依赖和宽依赖的区别在实战中变得清晰起来——宽依赖会产生Shuffle,而窄依赖则可以实现流水线式计算。随后我深入研究了Spark SQL,将之前爬取的热词JSON数据加载为DataFrame,利用内置函数完成了词频统计和初步的类别聚合,按照出现频率将词汇划分为热门、新兴和长尾三大类。Tez的引入则是为了优化Hive的执行效率,我在hive-site.xml中切换执行引擎为Tez后,重新跑了一遍TPC-H的几个典型查询,响应时间比MR引擎缩短了近一半,Container复用的设计确实减少了任务启动开销。本周的总学习时长约14小时,Scala和Spark SQL的代码编写占7小时,而解决内存溢出和序列化故障耗时3小时,特别是Spark默认的Java序列化遇到自定义类时频繁报错,通过registerKryoClasses注册后问题才得以解决。Tez方面则遇到了Container内存泄漏,我调整了tez.task.resource.memory.mb参数并限制了并发Container数量才稳定下来。目前的一个技术盲点是Spark的Broadcast变量和累加器的使用场景还不够清晰,下周我计划通过Ambari重新部署一套完整的HDP集群,学习其Blueprint自动化配置能力,同时将热词分类作业进一步细化,增加“技术领域-应用场景-发展趋势”的三级标签体系,让分类结果更具解释性和实用价值。

浙公网安备 33010602011771号