Architecture Phase1 Week12:Summarize
本周主要讲解了大数据Hadoop中得各模组得关系,HDFS分布式文件存储系统,MapReduce大数据处理框架,基于ZooKeeper协议得高可用HDFS框架,基于YARN得事务调度系统,以及Hive得简化MapReduce操作得类SQL转换器。
HDFS 为了做到可靠性(reliability)创建了多份数据块(data blocks)的复制(replicas
),并将它们放置在服务器群的计算节点中(compute nodes),MapReduce 就可以
在它们所在的节点上处理这些数据了。
文件切分成块(默认大小64M),以块为单位,每个块有多个副本存储在不同的机器上,
副本数可在文件生成时指定(默认3)
NameNode 是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时
间,副本数,文件权限),以及每个文件的块列表以及块所在的 DataNode 等等
DataNode 在本地文件系统存储文件块数据,以及块数据的校验和
可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容
NameNode 是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户
端对文件的访问。
文件操作,NameNode 负责文件元数据的操作,DataNode 负责处理文件内容的读写请
求,跟文件内容相关的数据流不经过 NameNode,只会询问它跟那个 DataNode 联系,
否则 NameNode 会成为系统的瓶颈。
DataNode
一个数据块在 DataNode 以文件存储在磁盘上,包括两个文件,一个是数据本身,一个
是元数据包括数据块的长度,块数据的校验和,以及时间戳。
DataNode 启动后向 NameNode 注册,通过后,周期性(1小时)的向 NameNode 上
报所有的块信息。
心跳是每3秒一次,心跳返回结果带有 NameNode 给该 DataNode 的命令如复制块数据
到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个 DataNode 的心跳,
则认为该节点不可用。
集群运行中可以安全加入和退出一些机器
使用 HDFS 提供的客户端开发库 Client,向远程的 NameNode 发起 RPC 请求;
NameNode 会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文
件创建一个记录,否则会让客户端抛出异常;
当客户端开始写入文件的时候,开发库会将文件切分成多个 packets,并在内部以数据队列
" data queue "的形式管理这些 packets,并向 NameNode 申请新的 blocks,获取用来存储
replicas 的合适的 datanodes 列表,列表的大小根据在 NameNode 中对 replication 的设置
而定。
开始以 pipeline(管道)的形式将 packet 写入所有的 replicas 中。开发库把 packet 以流的
方式写入第一个 datanode,该 datanode 把该 packet 存储之后,再将其传递给在此
pipeline 中的下一个 datanode,直到最后一个 datanode,这种写数据的方式呈流水线的形
式。
最后一个 datanode 成功存储之后会返回一个 ack packet,在 pipeline 里传递至客户端,在
客户端的开发库内部维护着 “ack queue” ,成功收到 datanode 返回的 ack packet 后会从
“ack queue” 移除相应的 packet。
如果传输过程中,有某个 datanode 出现了故障,那么当前的 pipeline 会被关闭,出现故障
的 datanode 会从当前的 pipeline 中移除,剩余的 block 会继续剩下的 datanode 中继续以
pipeline 的形式传输,同时 NameNode 会分配一个新的 datanode,保持 replicas 设定的数
量。
使用 HDFS 提供的客户端开发库 Client,向远程的 NameNode 发起 RPC 请求;
NameNode 会视情况返回文件的部分或者全部 block 列表,对于每个 block,
NameNode 都会返回有该 block 拷贝的 DataNode 地址;
客户端开发库 Client 会选取离客户端最接近的 DataNode 来读取 block;如果客户端
本身就是 DataNode,那么将从本地直接获取数据。
读取完当前 block 的数据后,关闭与当前的 DataNode 连接,并为读取下一个 block
寻找最佳的 DataNode;
当读完列表的 block 后,且文件读取还没有结束,客户端开发库会继续向 NameNode
获取下一批的 block 列表。
读取完一个 block 都会进行 checksum 验证,如果读取 DataNode 时出现错误,客户
端会通知 NameNode,然后再从下一个拥有该 block 拷贝的 DataNode 继续读。
MapReduce特性
自动实现分布式并行计算
容错
提供状态监控工具
模型抽象简洁,程序员易用
YARN:Yet Another Resource Negotiator
MapReduce 的架构,在 MapReduce 应用程序的启动过程中,最重要的就是要把
MapReduce 程序分发到大数据集群的服务器上,在 Hadoop 1 中,这个过程主要是通
过 TaskTracker 和 JobTracker 通信来完成。
这种架构方案的主要缺点是,服务器集群资源调度管理和 MapReduce 执行过程耦合在
一起,如果想在当前集群中运行其他计算任务,比如 Spark 或者 Storm,就无法统一使
用集群中的资源了。
MRv2 最基本的设计思想是将 JobTracker 的两个主要功能,即资源管理和作业管理分成
两个独立的进程。
在该解决方案中包含两个组件:全局的ResourceManager(RM)和与每个应用相关的
ApplicationMaster(AM)
这里的“应用”指一个单独的 MapReduce 作业或者 DAG 作业
我们向 Yarn 提交应用程序,包括 MapReduce ApplicationMaster、我们的
MapReduce 程序,以及 MapReduce Application 启动命令。
ResourceManager 进程和 NodeManager 进程通信,根据集群资源,为用户程序分
配第一个容器,并将 MapReduce ApplicationMaster 分发到这个容器上面,并在容
器里面启动 MapReduce ApplicationMaster。
MapReduce ApplicationMaster 启动后立即向 ResourceManager 进程注册,并为自
己的应用程序申请容器资源。
MapReduce ApplicationMaster 申请到需要的容器后,立即和相应的 NodeManager
进程通信,将用户 MapReduce 程序分发到 NodeManager 进程所在服务器,并在容
器中运行,运行的就是 Map 或者 Reduce 任务。
Map 或者 Reduce 任务在运行期和 MapReduce ApplicationMaster 通信,汇报自己
的运行状态,如果运行结束,MapReduce ApplicationMaster 向 ResourceManager
进程注销并释放所有的容器资源。
Hive
如何合并Join
版权声明: 本文为 InfoQ 作者【phylony-lu】的原创文章。
原文链接:【http://xie.infoq.cn/article/00d38fbb4cbc5fb81f866a530】。文章转载请联系作者。
评论