本周我同步推进 MapReduce 分布式编程学习与 Python 语言入门两大板块,两项内容交叉进行,既避免了单一内容学习的疲劳,也保证了整体学习进度。
大数据技术方面,我系统学习了 MapReduce 的核心编程思想与完整运行流程,深入理解了 “分而治之” 的分布式计算理念,重点攻克了 Shuffle 机制的完整流程,包括分区、排序、Combiner 合并、归并排序等核心环节。实操层面,我独立编写并运行了大数据入门经典案例 WordCount 单词统计,自定义了 Mapper 类与 Reducer 类,重写了 map 与 reduce 方法,实现了文本文件的单词频次统计,对 InputFormat 输入格式、OutputFormat 输出格式、上下文对象的使用有了清晰的掌握。在此基础上,我完成了天气案例的开发,实现了按年份月份分组统计最高气温的需求,通过自定义 Bean 对象实现序列化比较,自定义分组比较器完成分组逻辑,对 MapReduce 的自定义开发有了更深的理解。此外,我还学习了 YARN 资源调度框架的核心组件,理解了 ResourceManager、NodeManager、ApplicationMaster、Container 的角色与职责,梳理了 MapReduce 任务提交到 YARN 上运行的完整流程。
Python 语言方面,我从基础语法开始系统学习,掌握了变量定义、数据类型、运算符、条件判断、循环语句等基础语法,重点学习了列表、元组、字典、集合四大核心数据结构的常用操作方法。我练习了 Python 的文件读写操作,掌握了 with 上下文管理器的使用,能够实现文本文件的读取、写入与追加。同时我学习了函数的定义、参数传递与返回值,能够封装简单的工具函数。为了巩固知识点,我完成了猜数字小游戏、学生成绩统计两个小型练习,对 Python 简洁的语法特点有了直观的感受。
本周总学习时长约 43 小时,平均每天学习 6 小时左右。其中代码编写与调试时间约 24 小时,主要用于 MapReduce 案例开发、集群提交任务调试与 Python 语法练习;问题排查解决时间约 9 小时,剩余 10 小时用于原理学习与 API 文档查阅。
下周我将正式启动 Python 信息化领域热词分类分析大作业,完成热词数据的采集、清洗与预处理工作,搭建分类分析的核心代码框架。同时我会继续学习 Hadoop 生态体系的其他组件,强化 MapReduce 的编程熟练度,并且正式开启软件设计师职业资格考试的第一轮备考。
本周遇到的问题涵盖了两个技术方向。大数据方面,MapReduce 任务提交到 YARN 后频繁报错,提示容器内存超出限制被杀死,经过排查是默认的容器内存配置过小,无法满足任务运行需求,我调整了 mapreduce.map.memory.mb 与 mapreduce.reduce.memory.mb 的参数大小,同时调大了 YARN 的容器内存上限,任务得以正常运行。Python 方面,最常见的问题是缩进语法错误,由于 Python 靠缩进划分代码块,一开始混用空格和 Tab 导致频繁出现 IndentationError,后来我设置了编辑器统一用 4 个空格代替 Tab,开启空白字符显示,逐步养成了规范的编码习惯。另外一个问题是 Python 读取中文文本文件时出现 UnicodeDecodeError 编码错误,通过在 open 函数中指定 encoding='utf-8' 参数后解决。目前我对 MapReduce 复杂业务场景的编程还不够熟练,后续会增加案例练习量,提升分布式编程思维。