HDFS学习

HDFS的设计目标

节点失效是常态
—宕机
—磁盘坏点
理想状态
一个或几个节点失效不影响数据的完整性。

HDFS设计原则

文件以块(block)方式存储
•每个块带下远比多数文件系统来的大(预设64M)
•通过副本机制提高可靠度和读取吞吐量
•每个区块至少分到三台DataNode上
•单一 master (NameNode)来协调存储元数据(metadata)
•客户端对文件没有缓存机制 (No data caching)
注意点:
一个文件只能读或者写,不能同时读写。
一份数据只能同时被一个任务打开。
什么是元数据?
元数据中包含建表时间,操作等信息。

HDFS的两个组件

NameNode:
1.存储元数据。
2.元数据存在内存中。
3.保存文件block,datanode之间的映射关系。
DataNode
1.存储文件内容。
2.文件内容保存在磁盘中。
3.维护了block id到datanode本地文件的映射关系。

NN

NameNode主要功能提供名称查询服务,它是一个jetty服务器
•NameNode保存metadate信息包括
–文件owership和permissions
–文件包含哪些块
–Block保存在哪个DataNode(由DataNode启动时上报)
•NameNode的metadate信息在启动后会加载到内存
metadata存储到磁盘文件名为”fsimage”
–Block的位置信息不会保存到fsimage
–NameNode的metadate信息在启动后会加载到
设置一个Block 64MB,如果上传文件小于该值,仍然会占用一个Block的命名空间(NameNode metadata),但是物理存储上不会占用64MB的空间

DN

•保存Block
•启动DN线程的时候会向NN汇报block信息
•通过向NN发送心跳保持与其联系(3秒一次),如果NN 10分钟没有收到DN的心跳,则认为其已经lost,并copy其上的block到其它DN

Block的副本放置策略

•第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点
•第二个副本:放置在于第一个副本不同的机架的节点上
•第三个副本:与第一个副本相同机架的其他节点上
•更多副本:随机节点

再说Block

•设置一个Block 64MB,如果上传文件小于该值,仍然会占用一个Block的命名空间(NameNode metadata),但是物理存储上不会占用64MB的空间
•Block大小和副本数由Client端上传文件到HDFS时设置,其中副本数可以变更,Block是不可以再上传后变更的

数据损坏(corruption)处理

•当DN读取block的时候,它会计算checksum
•如果计算后的checksum,与block创建时值不一样,说明该block已经损坏。
•client读取其它DN上的block;NN标记该块已经损坏,然后复制block达到预期设置的文件备份数
•DN在其文件创建后三周验证其checksum

SecondaryNameNode(SNN)

•它不是NN的热备份
•它可以作为冷备份
–将本地保存的fsimage导入
–修改cluster所有DN的NameNode地址
–修改所有client端NameNode地址
–or 修改SNN IP为原NNIP
•它的工作是帮助NN合并edits log,减少NN启动时间

HDFS文件权限

•与Linux文件权限类似
•r: read; w:write; x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容
•如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就是zhangsan
•HDFS的权限目的:阻止好人做错事,而不是阻止坏人做坏事。HDFS相信,你告诉我你是谁,我就认为你是谁

安全模式

1) namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。
2)一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。
3)NameNode开始监听RPC和HTTP请求。
4)此刻namenode运行在安全模式。即namenode的文件系统对于客服端来说是只读的。(显示目录,显示文件内容等。写、删除、重命名都会失败)。
5)系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中。
6)在系统的正常操作期间,namenode会在内存中保留所有快位置的映射信息。
7)在安全模式下,各个datanode会向namenode发送快列表的最新情况。
8)进入和离开安全模式
查看namenode处于哪个状态
hadoop dfsadmin –safemode get
进入安全模式(hadoop启动的时候是在安全模式)
hadoop dfsadmin –safemode enter
离开安全模式
hadoop dfsadmin -safemode leave

HDFS文件存储

两个文件,一个文件156M,一个文件128在HDFS里面怎么存储?
–Block为64MB
–repliction默认拷贝2份
–three Nodes

用Java对HDFS编程

1.文件操作
•1.1 上传本地文件到hadoop fs
•1.2 在hadoop fs中新建文件,并写入
•1.3 删除hadoop fs上的文件
•1.4 读取文件
•1.5 文件修改时间
2. 目录操作
•2.1 在hadoop fs上创建目录
•2.2 删除目录
•2.3 读取某个目录下的所有文件
•2.4遍历hdfs
3.hdfs信息
•查找某个文件在HDFS集群的位置
•获取HDFS集群上所有节点名称信息

你可能感兴趣的:(Hadoop)