写点什么

第十二周总结

用户头像
alpha
关注
发布于: 2020 年 12 月 13 日

大数据三驾马车:分布式文件系统,分布式计算框架,数据库系统。

纯用 Java 编写的 Hadoop 软件,其实并没有什么高深的技术难点,使用的也都是一些最基础的编程技巧,也没有什么出奇之处,但是它却给社会带来巨大的影响,甚至带动一场深刻的科技革命,推动了人工智能的发展与进步。


大数据平台技术栈:数据分析、数据挖掘、机器学习、离线批处理、流处理、NoSQL,存储。

数据分析:Hive、SparkSQL。

数据挖掘和机器学习:Mahout、MLlib、TenserFlow。

批处理:MapReduce、Spark。

流处理:Storm、Flink、SparkStreaming。

NoSQL:Hbase,Cassandra。

存储:Hdfs。


Hdfs 架构:


高可用设计:任何一个节点失效,有 NameNode 通知其他节点,进行数据复制。如果 NameNode 挂了,两种方式:一种是通过操作日志+Fsimage 进行恢复。第二种是做主从,主节点挂了之后,副节点升级为 Master 节点提供服务。


写一个数据块流程:

使用 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 继续读。


用户头像

alpha

关注

还未添加个人签名 2019.01.09 加入

还未添加个人简介

评论

发布
暂无评论
第十二周总结