最近学习了hadoop这个框架,把自己的理解总结如下:
1、hadoop通过一个jobtracker分派任务到一系列tasktracker来运行,tasktracker同时向jobtracker返回任务运行结果。
jobtracker对作业的输入数据进行分片,然后为每个分片创建一个map任务,同时创建一定数量的reduce任务,并指派空闲的tasktracker来执行这些任务。
tasktracker从jobtracker处获取任务jar包以及分片的输入数据,然后新建jvm来执行,并定期反馈执行进度情况。
2、map任务就是进行原始数据的提取工作,提取数据后进行sufflix排序,排序后的数据作为reduce的输入,然后经过reduce的统计计算得到最后结果。
3、hdfs对数据进行分块,然后存储在datanote里,datanote向namenode报告自己存储的文件块,客户端通过访问namenode来得知构成文件的各个数据块的具体存放datanote,进而从datanote中读取整个文件。
4、hadoop作业的输入数据必须在作业执行前是固定的,然后才能进行数据的分片,所以不能胜任增量的流式数据处理作业。
5、mapreduce本身需要编写java代码,优化起来也比较复杂,而pig可以让用户通过脚本语句Latin来操作数据,并将脚本语句转换成mapreduce来在hadoop中执行,pig并不要求被操作的数据满足关系数据库模式。
6、hive构建于hadoop的数据仓库,能够对存储在HDFS中的数据增加元数据,从而提供SQL风格的数据操作,再将操作翻译成mapreduce来在hadoop中执行。