9.4 HDFS的基本操作

本节将对HDFS的命令行操作及其Web界面进行介绍。

9.4.1 HDFS的命令行操作

可以通过命令行接口来和HDFS进行交互。当然,命令行接口只是HDFS的访问接口之一,它的特点是更加简单直观,便于使用,可以进行一些基本操作。在单机上运行Hadoop、执行单机伪分布(笔者的环境为Windows下的单节点情况,与其他情况下命令行一样,大家可自行参考),具体的安装与配置可以参看本书第2章,随后我们会介绍如何运行在集群机器上,以支持可扩展性和容错。

在单机伪分布的配置中需要修改两个配置属性。第一个需要修改的配置文件属性为fs.default.name,并将其设置为hdfs://localhost/,用来设定一个默认的Hadoop文件系统,再使用一个hdfsURI来配置说明,Hadoop默认使用HDFS文件系统。HDFS的守护进程会通过这个属性来为NameNode定义HDFS中的主机和端口。这里在本机localhost运行HDFS,其端口采用默认的8020。HDFS的客户端可以通过这个属性访问各个节点。

第二个需要修改的配置文件属性为dfs.replication,因为采用单机伪分布,所以不支持副本,HDFS不可能将副本存储到其他两个节点,因此要将配置文件中默认的副本数3改为1。

下面就具体介绍如何通过命令行访问HDFS文件系统。本节主要讨论一些基本的文件操作,比如读文件、创建文件存储路径、转移文件、删除文件、列出文件列表等操作。在终端中我们可以通过输入fs-help获得HDFS操作的详细帮助信息。

首先,我们将本地的一个文件复制到HDFS中,操作命令如下:


hadoop fs-copyFromLocal testInput/hello.txt hdfs://localhost/user/ubuntu/In/hello.txt


这条命令调用了Hadoop的终端命令fs。Fs支持很多子命令,这里使用-copyFromLocal命令将本地的文件hello.txt复制到HDFS中的/user/ubuntu/In/hello.txt下。事实上,使用fs命令可以省略URI中的访问协议和主机名,而直接使用配置文件core-site.xml中的默认属性值hdfs://localhost,即命令改为如下形式即可:


hadoop fs-copyFromLocal testInput/hello.txt/user/ubuntu/In/hello.txt


其次,看如何将HDFS中的文件复制到本机,操作命令如下:


hadoop fs-copyToLocal/user/ubuntu/In/hello.txt testInput/hello.copy.txt


命令执行后,用户可查看根目录testInput文件夹下的hello.copy.txt文件以验证完成从HDFS到本机的文件复制。

下面查看创建文件夹的方法:


hadoop fs-mkdir testDir


最后,用命令行查看HDFS文件列表:


hadoop fs-lsr In

-rw-r—r—1 ubuntu supergroup 348624 2012-03-11 11:34/user/ubuntu/In/CHANGES.txt

-rw-r—r—1 ubuntu supergroup 13366 2012-03-11 11:34/user/ubuntu/In/LICENSE.txt

-rw-r—r—1 ubuntu supergroup 101 2012-03-11 11:34/user/ubuntu/In/NOTICE.txt

-rw-r—r—1 ubuntu supergroup 1366 2012-03-11 11:34/user/ubuntu/In/README.txt

-rw-r—r—1 ubuntu supergroup 13 2012-03-17 15:14/user/ubuntu/In/hello.txt


从以上文件列表可以看到,命令返回的结果和Linux下ls-l命令返回的结果相似。返回结果第一列是文件属性,第二列是文件的副本因子,而这是传统的Linux系统没有的。为了方便,笔者配置环境中的副本因子设置为1,所以这里显示为1,我们也看到了从本地复制到In文件夹下的hello.txt文件。