最近学习了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中执行。
hive与pig的主要区别是hive能提供SQL风格数据库表操作,而pig使用自定义的Latin脚本来直接操作数据,pig更轻量。
7、hbase是一个按列存储的分布式数据库,它的表不满足关系数据库模式且不支持SQL查询,可以将数据存储在HDFS上。
hbase与hive的主要区别,一是hbase是一个分布式数据库易于水平扩展,而hive不是。
二是hbase的数据按列存储因而能够灵活的随机读写,而hive本身不改变数据存储格式,只给数据增加了表元数据从而支持关系数据库表操作。
8、zookeeper封装了一套分布式服务所需使用的通用机制,自身的实现是通过多台服务器冗余来实现高可用,能够自动选举出领导者来服务于用户的写请求,并自动同步到半数的跟随者,领导者和跟随者都可以服务于用户读请求。
应用场景包括:高可用分布式配置存储、分布式对象状态更新订阅通知、分布式锁、分布式集群领导者选举。
(完)