Hadoop介绍
作者:Doug Cutting
是Nutch搜素引擎的一个模块
基础模块
Hbase: Nosql数据库 key value 最大化利用内存
HDFS: 分布式文件系统,最大化利用磁盘
MapReduce :编程模式,主要作数据分析,最大化利用CPU
HDFS
HDFS设计原则:
1.文件以块block方式存储
2.内个块带下远比多数文件系统来的大
3.通过副本机制提高可靠度和读取吞吐量
4.每个区块至少分到三台DataNode上
5.单一master(NameNode)来协调存储元数据(metadata)
6.客户端对文件没有缓存机制(nocache)
NameNode
NameNode(NN):提供名称查询服务,它是一个jetty服务器。
NameNode保存metadata信息包括
1.文件owership和permissions
2.文件包含哪些块
3.Block保存在哪个DataNode(由DataNode启动时上报)
Metadata
metadata:NameNode的metadata信息在启动后会加载到内存
metadata存储到磁盘文件名为"fsimage" Block的位置信息不会保存到fsimage
DataNode(DN)
1.保存Block
2.启动DN线程的时候会向NN汇报block信息
3.通过向(NameNode)发送心跳保持与其联系(3秒一次),如果NN10分钟没有收到DN的心跳,
则认为其已经lost,并copy其上的block到其它DN
Block
1.设置一个Block64MB,如果上传文件小于改值,仍然会占用一个Block的命名空间
(NameNode metadata),但是物理存储上不会占用64MB的空间
2.Block大小和副本数由Client端上传文件到HDFS时设置,其中副本数可以变更,
Block是不可以再上传后变更的
数据损坏(corruption)处理
1.当DataNode读取block的时候,它会计算checksum
2.如果计算后的checksum,与block创建时值不一样,说明该block已经损坏。
3.client 读取其它DN上的block;NN标记该blcok已经损坏,然后复制block达到预期设置的文件备份数
4.DN在其文件创建后三周验证其checksum
SecondaryNameNode(SNN)
1.她不是NN的热备份
2.可以作为冷备份
将本地保存的fsimage导入
修改cluster所有DN的NameNode地址
修改所有client端NameNode地址
or修改SNN IP 为原NNIP
3.它的工作是帮助NN合并edits log ,减少NN启动时间
EditLog和fsimage
fsimage保存了最新的元数据检查点。
Namenode上保存着HDFS的名字空间。对于任何对文件系统元数据产生修改的操作,Namenode都会使用一种称为EditLog的事务日志记录下来;文件系统元数据的持久化
EditLog两种方式同步到fsimage:
1.根据时间
2.根据EditLog大小
HDFS文件读取:
client 1.open Distributed File System
2.get block locations(在NN里)
3.read(通过FSData InputStream)
4.读取各个DataNode
5.读取各个DataNode2
6.close
HDFS文件写入:
client 1.create Distributed File System
2.create NN
3.write FSDataOutputStream
4.write packet (各个DataNode 互相写)
5.ack packet
6.close
HDFS命令:
--创建文件夹:
hadoop fs -mkdir /user/hadoop/2015
--上传文件:
hadoop fs -put/copyFromLocal word.txt/user/hadoop/2015
--删除文件 文件夹
hadoop fs -rm /user/hadoop/2015/word.txt
--查看文件夹里的文件
hadoop fs -ls /user/hadoop/2015/
--查看文件内容
hadoop fs -text/cat/tail/user/hadoop/2015/word.txt
Hadoop权限管理
Hadoop权限和unix一样的API:
每个文件和目录有一个所有者(owner)和一个组(group)。
不同于POSIX模型,HDFS权限模型中的文件没有sticky,setuid或setgid位,因为这里没有可执行文件的概念。
Hadoop安全模式(升级的时候用):
NN namenode启动:
1.载入fsimage到内存,执行EditsLog
2.成功建立文件系统元数据的映射,则创建一个新的fsimage文件和一个空的EditsLog
3.NN开始监听RPC和HTTP请求
4.此刻NN运行在安全模式,(nn文件系统对客户端是只读,显示目录,显示文件内容。写删重命名会失败)。
5.系统中block位置不是由namenode维护的,而是以block列表形式存储在datanode中
6.正常操作期间,NN会在内存中保留所有块位置的映射信息。
7.安全模式下,各个DN会向NN发送block列表的最新情况
8.进入和离开安全模式
查看NN state
hadoop dfsadmin -satemode get
进入安全模式(hadoop启动的时候是在安全模式)
hadoop dfsadmin -safemode enter
离开安全模式
hadoop dfsadmini -safemode leave
资料:
http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html