Hadoop Distribute File System HDFS( 二 )

... 功能:追加一个文件到已经存在的文件末尾(将文件的内容加载到hdfs中已经存在的文件中)示例:hadoop fs -appendToFile localfile/hadoop/hadoopfile-chown功能:改变文件的拥有者 。使用-R将使改变在目录结构下递归进行 。示例:hadoopfs-chownsomeuser:somegrp/hadoop/hadoopfile-cp功能:从hdfs的一个路径拷贝hdfs的另一个路径示例: hadoopfs-cp/aaa/jdk.tar.gz/bbb/jdk.tar.gz.2-mv功能:在hdfs目录中移动文件示例: hadoopfs-mv/aaa/jdk.tar.gz/-rm功能:删除指定的文件 。只删除非空目录和文件 。-r 递归删除 。示例:hadoop fs -rm -r /aaa/bbb/-df功能:统计文件系统的可用空间信息示例:hadoopfs-df-h/-du 功能:显示目录中所有文件大小 , 当只指定一个文件时 , 显示此文件的大小 。示例:hadoop fs -du /user/hadoop/dir1
四、HDFS的基本原理 1、概述
a、 NameNode是HDFS的核心 。b、 NameNode也称为Master 。c、 NameNode仅存储HDFS的元数据:文件系统中所有文件的目录树 , 并跟踪整个集群中的文件 。d、 NameNode不存储实际数据或数据集 。数据本身实际存储在DataNodes中 。e、 NameNode知道HDFS中任何给定文件的块列表及其位置 。使用此信息NameNode知道如何从块中构建文件 。f、 NameNode并不持久化存储每个文件中各个块所在的DataNode的位置信息 , 这些信息会在系统启动时从数据节点重建 。g、 NameNode对于HDFS至关重要 , 当NameNode关闭时 , HDFS / Hadoop集群无法访问 。h、 NameNode是Hadoop集群中的单点故障 。i、 NameNode所在机器通常会配置有大量内存(RAM) 。

Hadoop Distribute File System  HDFS

文章插图
2、概述
a、 DataNode负责将实际数据存储在HDFS中 。b、 DataNode也称为Slave 。c、 NameNode和DataNode会保持不断通信 。d、 DataNode启动时 , 它将自己发布到NameNode并汇报自己负责持有的块列表 。e、 当某个DataNode关闭时 , 它不会影响数据或群集的可用性 。NameNode将安排由其他DataNode管理的块进行副本复制 。f、 DataNode所在机器通常配置有大量的硬盘空间 。因为实际数据存储在DataNode中 。g、 DataNode会定期(dfs.heartbeat.interval配置项配置 , 默认是3秒)向NameNode发送心跳 , 如果NameNode长时间没有接受到DataNode发送的心跳 ,  NameNode就会认为该DataNode失效 。h、 block汇报时间间隔取参数dfs.blockreport.intervalMsec,参数未配置的话默认为6小时.
3、HDFS的工作机制3.1 写过程
1、datanode向namenode汇报自己的状态信息和块列表2、client找到namenode , 向namenode申请上传文件3、namenode进行校验是否有权限上传 , 看是否有同名的文件 如果没加入覆盖则不允许上传4、如果通过 , 则允许上传文件5、假如现在的文件是129m 则会对文件进行切割 , 一个是128 一个是16、进行上传 先上传第一个block块 , 这时会问namenode传送到哪个datanode块上去  , 7、namenode进行机架感知 , 选出一个datanode地址列表 , 并返回给客户端 , 比如node01、node038、这是client就会知道连接哪个datanode 。然后建立管道 , node01和node03之间也需要建立管道9、会把block块再次拆分成64k的包然后上传 , 最后根据偏移量组装成一个新的文件10、备份成功后会返回一个ack确认码11、然后继续上传第二个block块
3.2读过程
1、申请下载 , client向namenode询问 namenode中的namespace保存的是文件的名称和路径以及一些元数据信息2、这样就会知道你所要下载的文件到底在那个datanode上面 但是有时候备份很多的话 , 就会根据网络拓扑图翻回最近的一个block块并且是状态好的3、这样就会得到你需要的文件的地址列表 , 这样就会连接datanode , 进行并行的读取 , 就会很快速的读取 , 集群做的够大 , 他的吞吐能力是非常的强的