HDFS 常用命令使用教程与架构简介

HDFS是hadoop实现的一个分布式文件系统。(Hadoop Distributed File System)来源于Google的GFS论文。它的设计目标有:

  • 非常巨大的分布式文件系统。
  • 运行在普通廉价的硬件上,及一般的 PC机(相比于小型机,单片机而言的)。
  • 易扩展,为用户提供性能不错的文件存储服务。

HDFS的架构

HDFS架构示意图HDFS架构示意图

1.HDFS采用了1个 Msater(NameNode) 和N个slaves(DataNode)的架构

一个HDFS集群包含一个NameNode,主要职责是管理文件系统的元数据信息,控制客户端对文件的访问。

一个HDFS集群包含多个DataNode,通常一个节点就是一个DataNode,负责相应节点上文件的存储。

NameNode的作用

  • 负责客户端请求的响应
  • 维护整个文件系统的目录树(例如记录文件的增删改查操作)和负责元数据(文件名称、副本系数,文件和block的映射,DataNode和block的映射等)的管理

DataNode的作用

  • 存储文件对应的数据块,存储数据是核心作用
  • 定期向NameNode发送心跳信息,汇报本身及其所有block信息和健康状况
  • 执行来自NameNode的指示,如block的创建,删除,复制,文件读写请求的支持等

典型的部署架构是1个NameNode + N个DataNode。

2.HDFS文件系统的命名空间和多副本机制

HDFS文件系统和现有的Linux文件系统类似,也具有目录的层级结构。同样可以进行文件和目录的创建删除移动重命名的操作。

一个文件会被拆分成多个Block,(默认的blocksize:128M)。这些Block会复制多份,存储在多个DataNode上。除了最后一个block,其他的块都是一样大小的,应用程序可以指定文件的副本系数。副本系数可以在文件创建之初指定,也可以之后再进行修改。下图是一个多副本存储的示例说明。

HDFS多副本存储机制HDFS多副本存储机制

以part-1为例,它被分成三个block,block_id分别是2,4,5,且副本系数为3。可以看到在DataNode上,2,4,5都各存储在了三个节点上,这样当其中一个节点故障时,仍然能够保证文件的可用。

block_id存在的必要性在于,在用户需要对文件进行操作时,相应的block能够按顺序进行“组合”起来。

HDFS Shell的操作

我们来使用命令操作HDFS,常用命令的含义和Linux shell差不多,格式是hadoop fs -[linux shell]

 命令行操作:有两种类型:
 
	(1)普通操作命令: hdfs dfs ******
		命令
		-mkdir:在HDFS上创建目录
		        hdfs dfs -mkdir /aaa
				hdfs dfs -mkdir /bbb/ccc
				如果父目录不存在,使用-p参数先创建父目录
				
		-ls      查看HDFS的某个目录
		-ls -R   查看HDFS的某个目录,包含子目录
		         简写: -lsr
					
		-put            上传数据
		-copyFromLocal  上传数据
		-moveFromLocal  上传数据,相当于ctrl+x
		
		-copyToLocal   下载数据
		-get            下载数据
		     举例: hdfs dfs -get /input/data.txt .
		
		-rm: 删除目录
		-rmr: 删除目录,包括子目录
		       hdfs dfs -rmr /bbb
			   日志:
			   17/12/08 20:32:10 INFO fs.TrashPolicyDefault: Namenode trash 	  configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
                  Deleted /bbb
					
		-getmerge:把某个目录下的文件,合并后再下载
		
		-cp:拷贝   hdfs dfs -cp /input/data.txt /input/data2.txt
		-mv:移动   hdfs dfs -cp /input/data.txt /aaa/a.txt
				
		-count: 举例:hdfs dfs -count /students
		
		-du: 类似-count,信息更详细
		     hdfs dfs -du /students
		
		例子:
			[root@bigdata11 ~]# hdfs dfs -count /students
					   1            2                 29 /students
			[root@bigdata11 ~]# hdfs dfs -ls /students
			Found 2 items
			-rw-r--r--   1 root supergroup         19 2017-12-08 20:35 /students/student01.txt
			-rw-r--r--   1 root supergroup         10 2017-12-08 20:35 /students/student02.txt
			[root@bigdata11 ~]# hdfs dfs -du /students
			19  /students/student01.txt
			10  /students/student02.txt			
		
		-text、-cat: 查看文本的内容
		          hdfs dfs -cat /input/data.txt
		balancer:平衡操作
                                                      hdfs 	balancer		

  (2)管理命令:hdfs dfsadmin ******
        -report: 打印HDFS的报告
		         举例:hdfs dfsadmin -report
				 
		-safemode:安全模式
			hdfs dfsadmin -safemode
			Usage: hdfs dfsadmin [-safemode enter | leave | get | wait]	
			
			[root@bigdata11 ~]# hdfs dfsadmin -safemode get
			Safe mode is OFF
			[root@bigdata11 ~]# hdfs dfsadmin -safemode enter
			Safe mode is ON
			[root@bigdata11 ~]# hdfs dfs -mkdir /dddd
			mkdir: Cannot create directory /dddd. Name node is in safe mode.
			[root@bigdata11 ~]# hdfs dfsadmin -safemode leave
			Safe mode is OFF	

1.ls

用法:

hadoop fs -ls directory,表示查看HDFS上directory目录下的文件信息

实战:

hadoop fs -ls / #表示查看HDFS上根目录下的文件信息,如果没有上传过文件到HDFS,则不会输出任何文件信息

HDFS的ls命令HDFS的ls命令

2.put

用法:

hadoop fs -put file directory ,表示将本地的file文件上传到HDFS的directory目录中

实战:

#将本次的hello.txt上传到hdfs中根目录下并查看是否上传成功hadoop fs -put hello.txt /#hello.txt是在当前本地目录下的一个已经创建好的文件hadoop fs -ls / 

HDFS的put命令HDFS的put命令

3.cat

用法:

hadoop fs -cat filepath/file,表示查看hdfs上filepath下的file文件的内容。hadoop fs -text filepath/file也可以达到相同的效果。

实战:

hadoop fs -cat /hello.txt#查看HDFS上根目录下hello.txt的文件内容

HDFS的cat命令HDFS的cat命令

4.mkdir

用法:

hadoop fs -mkdir directory,表示在hdfs上创建directory目录。

hadoop fs -mkdir -p directory1/directory2,表示在hdfs上递归创建directory1/directory2目录。

实战:

hadoop fs -mkdir /test #表示在hdfs上根目录下创建test目录hadoop fs -ls /

HDFS的mkdir命令HDFS的mkdir命令

hadoop fs -ls /testhadoop fs -mkdir -p /test/a/b #在hdfs上test目录下递归创建a目录/b目录。-p表示递归创建hadoop fs -ls /testhadoop fs -ls /test/a

HDFS的mkdir -p 命令HDFS的mkdir -p 命令

hadoop fs -ls -R /#递归展示hdfs根目录下的内容

HDFS的ls -R命令HDFS的ls -R命令

5.copyFromLocal

用法:

hadoop fs -copyFromLocal file1 filepath/file2 表示将本地的file文件copy到HDFS的filepath中并命名为file2

实战:

hadoop fs -copyFromLocal hello.txt /test/a/b/h.txt#将本地hello.txt copy为HDFS上目录/test/a/b/下的h.txt文件hadoop fs -ls -R

HDFS的copyFromLocal命令HDFS的copyFromLocal命令

hadoop fs -text /test/a/b/h.txt#也可以用-cat代替

HDFS的text命令HDFS的text命令

6.get

用法:

hadoop fs -get filepath/file1表示将HDFS上filepath下的file1复制到本地并命名为file2

实战:

hadoop fs -get /test/a/b/h.txt

HDFS的get命令HDFS的get命令

7.rm

用法:

hadoop fs -rm filepath/file表示将HDFS上filepath下的file文件删除

hadoop fs -rm -R directory表示将HDFS上directory目录删除

实战:

hadoop fs -rm /hello.txt#删除hdfs根目录下的hello.txthadoop fs -ls -R /hadoop fs -rm -R /test#删除hdfs根目录下的test目录hadoop fs -ls -R /

HDFS的rm命令HDFS的rm命令

tips:使用hadoop fs 回车可以查看命令的帮助信息,遇到不会的可以随时查询。

通过浏览器直观查看HDFS文件

在环境搭建那一节中,我们通过浏览器验证了HDFS搭建成功。其实在浏览器中我们也可以看到HDFS中有哪些具体的文件。上一部分我们把HDFS上的内容删光了,因此我们先在HDFS上创建几个目录和文件。

hadoop fs -put hello.txt /hadoop fs -mkdir /dir1hadoop fs -put ../software/hadoop-2.6.0-cdh5.7.0.tar.gz /hadoop fs -ls /

使用命令查看HDFS的文件使用命令查看HDFS的文件

通过浏览器查看HDFS的文件通过浏览器查看HDFS的文件

访问http://localhost:50070可以验证HDFS是否启动成功,点击Browse the file system可以看到我们上传的两个文件和一个文件夹。

点击文件名称可以看到Block信息,可以看到,block size是128M,因此一个297M的文件被分割成了3个block。

总结

本文我们学习了HDFS的架构和HDFS的命令操作。

架构方面,HDFS采用的是1个NameNode+N个DataNode的方式,各司其职,共同实现了分布式的文件系统,具有容易扩展的优点。通过对文件拆分成多Block并进行多副本存储的形式,保证了负载均衡和可靠性,同时便于进行并行处理,提高了计算效率。

HDFS操作方面,hadoop fs 后面跟常用的linux命令即可实现对HDFS的操作,很容易理解。如果遇到困难,可以直接敲hadoop fs 回车查看帮助信息。

参考文档

https://blog.csdn.net/nihaoa50/article/details/88419432

https://www.cnblogs.com/mayundalao/p/11799787.html

猜你喜欢

转载自blog.csdn.net/lomodays207/article/details/107255314