我们通过与命令行与HDFS交互来了解它。HDFS还有许多其它接口,但是
对开发者来说,命令行是最简单的,也是最熟悉的。
我们将在一台机器上运行HDFS,所以首先根据附录A来搭建HADOOP伪分
布式模式。以后我们会看如何在集群上运行HDFS并提供可靠性及容错处理。
在伪分布式的配置中,有两个属性需要我们进一步解释。第一个是fs.defaultFS,
设置为hdfs://localhost/,它用来设置HADOOP的默认文件系统。使用URI来定义文件
系统,这里我们使用hdfs URI来设置HDFS默认使用HDFS。HDFS守护进程会根据
这个属性来决定HDFS namenode 的主机及其端口。我们将在本地运行它,使用默认
的HDFS端口8020。HDFS客户端也会根据这个属性来算出namenode的运行地址并
连接它。
我们设置的第二个属性,dfs.replication,这个值设置为1,所以HDFS不会使用
默认的复制因子(默认为3)来复制文件系统的block。当只运行一个datanode时,
HDFS不能复制block到三个datanode,所以它会一直警告block正在被复制。这个配置
可以解决这个问题。
基本文件系统操作
文件系统已经准备就绪,一般的文件系统操作我们都可以做,比如读取文件,创建目录,
移动文件,删除数据,列表目录等。你可以输入hadoop fs -help来得到每一个命令的
详细帮助。
让我们以从本地文件系统拷贝一个文件到HDFS开始:
% hadoop fs -copyFromLocal input/docs/quangle.txt \
hdfs://localhost/user/tom/quangle.txt
这个命令调用HADOOP的文件系统命令fs,它支持若干子命令----这个例子中,我们运行
-copyFromLocal。本地文件quangle.txt被拷贝到HDFS实例上的/usr/tom/下。实际上,我们可以
省略URI而使用core-site.xml中配置的默认URI:
% hadoop fs -copyFromLocal input/docs/quangle.txt /user/tom/quangle.txt
我们也可以使用相对路径,把文件拷贝到我们的用户主目录,这个例子中是/usr/tom:
% hadoop fs -copyFromLocal input/docs/quangle.txt quangle.txt
我们把文件拷回本地文件系统中查看它们是否一致:
% hadoop fs -copyToLocal quangle.txt quangle.copy.txt
% md5 input/docs/quangle.txt quangle.copy.txt
MD5 (input/docs/quangle.txt) = e7891a2627cf263a079fb0f18256ffb2
MD5 (quangle.copy.txt) = e7891a2627cf263a079fb0f18256ffb2
MD5摘要一致,也就是说这个文件从HDFS一日游中活了下来并且毫发无损。
最后,我们看一下HDFS文件查看。我们创建一个目录来看它在列表中是如何显示的:
% hadoop fs -mkdir books
% hadoop fs -ls .
Found 2 items
drwxr-xr-x - tom supergroup 0 2014-10-04 13:22 books
-rw-r--r-- 1 tom supergroup 119 2014-10-04 13:21 quangle.txt
这个返回的信息和UNIX命令ls -l返回的很相似,只有一点很少的不同。第一列显示文件模式。
第二列是这个文件的复制因子(UNIX文件系统所没有的)。记住我们设置了默认的复制因子为1,
这就是是我们为什么在这里看到了这个值。对于目录来说这个值是空的,因为对于目录来说没有复制
品这个概念----目录是做为元数据存储在namenode而不是datanode里。第三、四列显示文件的所有
者及所属组。第五列是文件的大小,单位是byte,对于目录来说是0.第六、七列是最后修改日期和时间。
最后,第八列是文件或目录的名称。