Hadoop学习

Hadoop学习笔记

Hadoop是什么

1、是一个开源的大数据框架
2、是一个分布式计算的解决方案
3、HDFS(分布式文件系统) + MapReduce(分布式计算)

HDFS

数据块:抽象的概念而非整个文件作为存储单元,默认大小64M、
NameNode:管理文件系统的命名空间,存储文件元数据。维护文件系统所有的文件和目录,文件和数据块的映射。记录每个文件中各个块在数据节点的信息。
DataNode:存储并检索数据块,向NameNode更新所储块的列表。

优点:
1、适合大数据的存储,并有副本策略
2、可以构建在廉价的机器上,并有一定的容错和恢复机制
3、支持流式数据访问,一次写入,多次读取最高效
缺点:
1、不适合大量小文件的存储
2、不适合并发的写入,不支持文件随机修改
3、不适合随机读等低延时的访问方式

问题1:数据块大小多少合适?
通常设置为128M。数据块太小,数据块数目就越多,NameNode所消耗的内存越大。数据块越大,数据块数目越少,并行性会有一定的影响,而且数据恢复也更困难。
问题2:如果NameNode挂掉了怎么办?
Hadoop2有两个NameNode节点,一个主节点sh处于运行状态,一个备用节点,两个节点数据时刻保持一致,当主节点挂掉了,则会立即切换到备用节点。

HDFS写流程
先写块1、再写块2。Client向NameNode发生存储数据请求,NameNode返回可用于存储信息的DataNode块(DataNode-1,DataNode-2,DataNode-3)。Client将Data分块(这里分为两块),然后将数据块1以及NameNode发给它相关 DataNode的信息一起传给了DataNode-1,DataNode-1将数据块1保存,然后将数据块1传给DataNode-2,数据块DataNode-2将该块传给了DataNode-3,当DataNode-1,2,3存储完数据块1后,反馈给NameNode已经存储完数据块1。NameNode更新相关元数据信息的列表并告诉Client数据块1存储完成。数据块2存储过程与数据块1一致。
在这里插入图片描述
HDFS读流程
Client向NameNode发起读数据请求
NameNode找出距离最近的DataNode节点信息
Client从DataNode分块下载文件
在这里插入图片描述

Shell命令操作HDFS

常用shell命令
类Linux系统:ls, cat, mkdir, rm, chmod, chown等
HDFS文件交互: copyFromLocal, copyToLocal, get(下载), put(上传)
Python编程操作HDFS
QuickStart:https://hdfs3.readthedocs.io/en/latest/quickstart.html
API:https://hdfs3.readthedocs.io/en/latest/api.html

MapReduce

Yarn

ResourceManager:分配和调度资源,启动并监控ApplicationMaster, 监控NodeManager
ApplicationMaster:为MR类型的程序申请资源,并分配给内部任务。负责数据的切分。监控任务的执行以及容错
NodeManager:管理单个节点的资源,处理来自ResourceManager的命令,处理来自ApplicationMaster的命令。

Hadoop体系架构

HDFS架构图

在这里插入图片描述

工作流程(以wordcount为例)

在这里插入图片描述
分片输入
由于NameNode内存的限制,HDFS适合存放大文件
对于小文件可以采用压缩的输入格式CombineFileInputFormat
dfs.block.size可以调整块的大小
Map的任务数和mapred.map.tasks和mapred.min.split.size参数有关
本地合并
job.setCombinerClass(MyReduce.class)
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值