想写点东西的初衷

本文分享了一种有效的技术学习方法——通过总结与归纳来加深理解。作者提出将日常遇到的技术问题及其解决方案记录在博客上,以便日后回顾并不断完善自己的知识体系。

我一直认为在技术道路上,一个很好的学习方式就是总结与归纳.

此前,一直都是把问题记录在自己电脑上,也只是自己知道而已.

呵呵,现在想把自己遇到的问题,别人问我的问题,都记录下来,记录在blog上,没事的时候上来翻翻.

也许有太多的不成熟,就当是写日记吧.

难得坚持下来!

### HDFS 读流程详解 #### HDFS 数据流程 HDFS 的数据流程是一个复杂的过程,涉及客户端、NameNode (NN) 和 DataNode (DN),具体如下: 1. **客户端发起请求** 客户端通过 API 向 NameNode 发起入文件的请求。NameNode 验证客户端是否有权限,并检查目标文件是否存在。如果验证失败,则返回错误;否则继续处理。 2. **文件切片** 文件被分割成固定大小的块(默认为 128MB),这些块将作为基本单位存储在分布式环境中[^5]。 3. **获取存储位置** 对于每一个块,客户端再次向 NameNode 请求可用的 DataNode 列表。NameNode 基于副本机制、负载均衡原则以及机架感知策略决定存储位置[^5]。 4. **创建传输管道** 客户端根据获得的 DataNode 列表顺序连接第一个 DataNode 并建立传输通道。随后依次与其他节点建立链路,最终形成一条完整的传输管道[^5]。 5. **数据流与确认机制** 数据按照 `客户端 -> DN1 -> DN2 -> DN3` 的方式逐级传递至各副本所在的 DataNode 上。与此同时,每一步都伴随着反向应答机制 (`ACK`) 来确保数据完整性。只有当所有接收方均反馈成功后,当前阶段才算完成。 6. **重复以上步骤直到结束** 当前块完成后,回到第三步重新申请下一个块的目标地址,直至整个文件全部上传完毕为止。 --- #### HDFS 读数据流程 相比操作而言,HDFS 的读取过程相对简单一些,但仍需经历若干重要环节: 1. **定位 Block 地址** 客户端先联系 NameNode 获取所需文件对应的 block 元数据信息及其分布情况。此时,NameNode 按照一定的优先级排序提供候选副本列表给客户端选择最合适的源进行读取[^4]。 2. **直连 DataNode 下载数据** 得知确切的位置之后,客户端直接跳过中间代理而同选定的那个或者那些具体的 DataNodes 展开通信以取得实际的内容片段。 3. **校验数据一致性** 在从某个特定 DataNode 收到一部分资料的同时也会对其进行哈希值匹配之类的检验动作来保障所得到的东西确实无误。 4. **拼接重组原始文件** 将零散下来的各个部分依照原先设定好的次序组装起来还原成为最初的完整文档形式呈现出来供使用者查阅利用[^4]。 --- ```python # Python 示例:模拟简单的 HDFS 入逻辑 def hdfs_write(file_data, chunk_size=128 * 1024 * 1024): blocks = [] # Step 1: Split file into chunks for i in range(0, len(file_data), chunk_size): blocks.append(file_data[i:i + chunk_size]) # Simulate interaction with Namenode and Datanodes namenode_response = get_namenode_storage_locations(len(blocks)) for idx, block in enumerate(blocks): datanode_list = namenode_response[idx] pipeline = establish_pipeline(datanode_list) send_block_via_pipeline(block, pipeline) def get_namenode_storage_locations(num_blocks): """Simulates querying the Namenode.""" import random nodes = ['node1', 'node2', 'node3'] return [[random.choice(nodes)]*replica_factor for _ in range(num_blocks)] def establish_pipeline(node_list): """Establishes a data transfer pipeline between client and datanodes.""" pass def send_block_via_pipeline(block, pipeline): """Sends one block through established pipeline.""" pass ``` --- #### 关键特性说明 - **机架感知** HDFS 使用机架感知算法优化副本放置策略,在减少跨机架流量的同时提高系统的可靠性和性能[^1]。 - **低延迟限制** HDFS 设计初衷并非针对实时场景下的快速响应需求,因此它并不擅长处理毫秒级别内的查询任务[^2]。 - **小文件问题** 大量的小型文件会对 NameNode 构成沉重负担,因为每个文件都需要单独占据其内存资源的一部分[^2]。 - **单多读模型** 单一时间窗口内仅允许一位用户对某份材料实施追加编辑行为,而不支持任意位置上的自由更改活动。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值