HDFS学习总结

一、HDFS特点

  HDFS具有高容错性的特点,可以部署到廉价硬件上。同时提供了高吞吐量的特性,适合与有超大数据集的应用程序。HDFS降低了对POSIX的要求,即可实现通过流的形式访问文件系统中数据。tips: POSIX(Partable Operation System Interface),可移植操作系统接口。

主要的特点包括:

1)超大文件,一般HDFS中的文件都是GB,TB甚至PB级别,同时也提供了很高的聚合数据带宽,一个集群中支持数百个节点,支持一个集群中千万级别的文件。

2)流式数据访问,HDFS的构建思路是一次写入,多次读取为最高效的数据访问模式。数据集通常从数据源复制过来后,每次数据分析都涉及到数据集的大部分数据或者全部,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。即HDFS适合于批量处理,强调吞吐量。

3)商用硬件,Hadoop并不需要运行在昂贵且可靠的硬件上。其设计运行在商用硬件的集群上,所以HDFS的硬件故障是一种常态,其故障检测和自动快速恢复是一个核心的结构目标。

4)低时间延迟的数据访问

5)简单一致性模型,文件操作一般是一次写入,多次读取。文件一旦创建,写入保存之后就不需要修改。不支持多写入者操作。

6)主从结构体系,一个HDFS集群包括一个NameNode,和多个DataNode。NameNode用来管理文件的名字空间和调节客户端访问文件的主服务器。DataNode用来管理数据存储。

7)以块作为存储单元,默认大小为64M(为了使HDFS的数据传输速度与硬盘传输速度更加接近)。

二、HDFS架构

   HDFS为一个主从架构,包括一个NameNode和多个DataNode,并提供应用程序访问接口。为Hadoop提供了高性能、高可靠性、高可扩展性的存储服务。NameNode为整个文件系统的管理节点,负责文件系统的NameSpace管理与维护,并负责客户端文件操作控制和具体存储任务的管理与分配。下图为其架构图

几个重要名称包括机架、数据块、NameNode、DataNode、SecondaryNameNode、NameSpace、机架感知、块备份等。

机架(Rack),一个Block的三个副本通常会保存到两个或两个以上的Rack中,为了防灾容错。

数据块,block大小默认为64M,注意一个小于块大小的文件不会占据真个块的空间。

NameNode,决定是否将文件映射到DataNode的复制块上。最常见的三个复制块,第一个存储在同一机架的不同节点上,最后一个存储在不同机架的某个节点上。NameNode的主要功能为提供名称查询功能;保存metadata信息;NameNode中的metadata信息在启动后会加载到内存。

DataNode,主要功能为保存block;当DataNode线程启动时向NameNode汇报block信息;向NameNode发送心跳保持与之联系。

三、RPC机制、HA机制、Federation机制

 1. RPC(Remote Produce Call,远程过程调用)机制,Hadoop RPC采用了Java动态代理与反射实现对象调用方式,客户端到服务器数据的序列化与反序列化由Hadoop框架或用户自己实现。Hadoop的进程间交互均通过RPC机制完成,如NameNode与DataNode,JobTracker与TaskTracker。

  RPC采用Client/Server模式,首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息,在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息给client,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

  RPC具有透明性、高性能、可控性等特点。

2. HA(High Availability,高可用性)机制,由于每个集群只有一个NameNode,如果这个NameNode发生故障,将导致整个集群都无法使用。除非重启NameNode或者新启动一个NameNode,另一方面如果跟NameNode有关的软硬件升级也将导致一段时间内不能使用NameNode。HA通过提供选择在同一集群中的一个热备用的两个冗余NameNode,使出现问题时可以快速转移到另一个NameNode。

3. Federation机制,简而言之,Federation机制使的HDFS支持多个名字空间,并且允许在HDFS中间存在多个NameNode。

  对于单个NameNode的HDFS架构存在许多局限性,如性能瓶颈(HDFS的吞吐量受限于单个NameNode的吞吐量);隔离问题单个NameNode无法隔离各个程序,可能造成一个程序影响整个HDFS;集群可用性;NameSpace和Block Management的紧密耦合等。

四、HDFS常用命令

1. 利用命令运行一个简单的hadoop文件,例如WordCount.java。具体步骤如下:

配置环境变量,首先保证已经完成安装hadoop的单机模式或者伪分布模式,并确保/etc/profile中有如下内容

export JAVA_HOME=/usr/java/default
export PATH=${JAVA_HOME}/bin:${PATH}
export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar

 编译java文件并生成jar文件

hadoop com.sun.tools.javac.Main WordCount.java jar cf wc.jar WordCount*.class

上传输入文件

#hadoop fs -put [uploadfile] [hdfs file directory]
hadoop fs -put go.txt /input1

运行Java文件

#hadoop jar [jar file] [class name] [inputfile] [outputfile]
hadoop jar wc.jar WordCount /input1 /output4

查看输出文件

2. 常用的hadoop命令

(1) 启动关闭hadoop,进入hadoop安装目录

sbin/start-all.sh sbin/stop-all.sh

(2) hdfs文件操作的命令格式为

hadoop fs -cmd <args>

cmd是具体的文件操作命令,<args>是一组数目可变的参数。

(3) 查看支持的命令列表

hadoop fs

(4) 查看hdfs系统中指定文件目录

hadoop fs -ls [file directory]

(5) 创建文件夹

#hadoop fs -mkdir [file name] hadoop fs -mkdir /inputfile

(6) 上传文件

#hadoop fs -put [uploadfile] [hdfs file directory]
hadoop fs -put go.txt /input1

(7) 查看文件夹中文件列表

#hadoop fs -ls [file directory]
hadoop fs ls /input1

(8) 查看具体文件中的内容

#hadoop fs -cat [filename]
hadoop fs -cat /input1/go.txt

(9) 将hdfs系统中的文件复制到本地

#hadoop fs -get [filename]
hadoop fs -get /input1/go.txt

(10) 删除文件

#hadoop fs -rm /input1/go.txt
hadoop fs -rm [filename]

(11) 删除文件夹

#hadoop fs -rmr /input1 
hadoop fs -rmr [directory name]

(12) namenode 命令

hadoop namenode [-format] [-upgrade] [-rollback] [-finalize] [-importCheckpoint]

命令具体分别为,format:格式化namenode并关闭namenode;upgrade:更新版本;rollback:将namenode回滚到前一版本;finalize:删除文件系统的前一状态;importCheckpoint:从检查点目录装载镜像并保存到当前检查点目录。

(13) secondaryname node 命令

hadoop secondarynamenode [-checkpoint [force] ] | [-geteditsize]

运行secondarynamenode命令对Editslog进行操作。没用过!

(14) dfsadmin命令,用来获取hdfs的状态信息

#获取命令列表 hadoop dfsadmin #如报告hdfs的基本信息和统计信息 hadoop dfsadmin -report

(15) job命令,用于和mapreduce作业交互和命令。

常用的命令有,杀死指定作业

hadoop job -kill <job-id>

(16) 其他还有fsck命令、pipe命令、version命令和balance命令。

原文地址:https://www.cnblogs.com/z1987/p/5055246.html