HDFS命令行接口

现在我们通过命令行交互来进一步认识HDFS。HDFS还有很多其他接口,但命令行是最简单的,同时也是许多开发者最熟悉的。

参照附录A中伪分布模式下设置Hadoop的说明,我们先在一台机器上运行HDFS。稍后介绍如何在集群上运行HDFS,以提供伸缩性与容错性。

在我们设置伪分布配置时,有两个属性项需要进一步解释。第一项是fs.default.name,设置为hdfs://localhost/,用于设置Hadoop的默认文件系统。文件系统是由URI指定的,这里我们已使用hdfs URI来配置HDFS为Hadoop的默认文件系统。HDFS的守护程序通过该属性项来确定HDFS namenode的主机及端口。我们将在localhost默认端口8020上运行namenode。这样一来,HDFS客户端可以通过该属性得知namenode在哪里运行进而连接到它。

第二个属性dfs.replication,我们设为1,这样一来,HDFS就不会按默认设置将文件系统块复本设为3。在单独一个datanode上运行时,HDFS无法将块复制到3个datanode上,所以会持续给出块复本不足的警告。设置这个属性之后,就不会再有问题了。

文件系统的基本操作

至此,文件系统已经可以使用了,我们可以执行所有常用的文件系统操作,例如,读取文件,新建目录,移动文件,删除数据,列出目录,等等。可以输入hadoop fs -help命令获取每个命令的详细帮助文件。

首先从本地文件系统将一个文件复制到HDFS:
 

 
 
  1. % hadoop fs -copyFromLocal input/docs/quangle.txt hdfs://localhost/user/tom/quangle.txt 

该命令调用Hadoop文件系统的shell命令fs,后者提供了一系列子命令,在这个例子中,我们执行的是-copyFromLocal。本地文件quangle.txt被复制到运行在localhost上的 HDFS实例中,路径为/user/tom/quangle.txt。事实上,我们可以简化命令格式以省略主机的URI并使用默认设置,即省略hdfs://localhost,因为该项已在core-site.xml中指定。
 

 
 
  1. % hadoop fs -copyFromLocal input/docs/quangle.txt /user/tom/quangle.txt 

我们也可以使用相对路径,并将文件复制到HDFS的home目录中,本例中为/user/tom:
 

 
 
  1. % hadoop fs -copyFromLocal input/docs/quangle.txt quangle.txt 

我们把文件复制回本地文件系统,并检查是否一致:
 

 
 
  1. % hadoop fs -copyToLocal quangle.txt quangle.copy.txt  
  2. % md5 input/docs/quangle.txt quangle.copy.txt  
  3.  MD5 (input/docs/quangle.txt) = a16f231da6b05e2ba7a339320e7dacd9  
  4.  MD5 (quangle.copy.txt) = a16f231da6b05e2ba7a339320e7dacd9 

MD5键值相同,表明这个文件在HDFS之旅中得以幸存并保存完整。

最后,我们看一下HDFS文件列表。我们新建一个目录看它在列表中是怎么显示的:
 

 
 
  1. % hadoop fs -mkdir books  
  2. % hadoop fs -ls .  
  3. Found 2 items  
  4. drwxr-xr-x   - tom supergroup   0 2009-04-02 22:41 /user/tom/books  
  5. -rw-r--r--   1 tom supergroup   118 2009-04-02 22:29 /user/tom/quangle.txt 

返回的结果信息与Unix命令ls -l的输出结果非常相似,仅有细微差别。第1列显示的是文件模式。第2列是这个文件的备份数(这在传统Unix文件系统是没有的)。由于我们在整个文件系统范围内设置的默认复本数为1,所以这里显示的也都是1。这一列的开头目录为空,因为本例中没有使用复本的概念——目录作为元数据保存在namenode中,而非datanode中。第3列和第4列显示文件的所属用户和组别。第5列是文件的大小,以字节为单位,目录为0。第6列和第7列是文件的最后修改日期与时间。最后,第8列是文件或目录的绝对路径。

HDFS中的文件访问权限

针对文件和目录,HDFS的权限模式与POSIX 非常相似。

一共提供三类权限模式:只读权限(r)、写入权限(w)和可执行权限(x)。读取文件或列出目录内容时需要只读权限。写入一个文件或是在一个目录上新建及删除文件或目录,需要写入权限。对于文件而言,可执行权限可以忽略,因为你不能在HDFS中执行文件(与POSIX不同),但在访问一个目录的子项时需要该权限。

每个文件和目录都有所属用户(owner)、所属组别(group)及模式(mode)。这个模式是由所属用户的权限、组内成员的权限及其他用户的权限组成的。

在默认情况下,可以通过正在运行进程的用户名和组名来唯一确定客户端的标识。但由于客户端是远程的,任何用户都可以简单地在远程系统上以其名义新建一个账户来进行访问。因此,作为共享文件系统资源和防止数据意外损失的一种机制,权限只能供合作团体中的用户使用,而不能用于在一个不友好的环境中保护资源。注意,最新版的Hadoop已经支持Kerberos用户认证,该认证去除了这些限制,详见第325页的“安全”小节。但是,除了上述限制之外,为防止用户或自动工具及程序意外修改或删除文件系统的重要部分,启用权限控制还是很重要的(这也是默认的配置,参见dfs.permissions属性)。

如果启用权限检查,就会检查所属用户权限,以确认客户端的用户名与所属用户是否匹配,另外也将检查所属组别权限,以确认该客户端是否是该用户组的成员;若不符,则检查其他权限。

这里有一个超级用户(super-user)的概念,超级用户是namenode进程的标识。对于超级用户,系统不会执行任何权限检查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值