Hadoop 载入数据到集群

因为在一般的Unix或Linux系统中,用户的文件保存在/home/$USER中,所以HDFS将文件保存在/user/$USER,对于一些如ls的命令,需要用户给出目录名却没有给出时,就默认/home/$USER目录(有的命令要求明确指名源路径和目标路径),在HDFS或Hadoop MapReduce中,参数中所有的相对路径,或系统的其它地方,都假设相对的是/home/$USER目录。

第一步:如果你的主目录不存在,先创建它。someone@anynode:hadoop$ bin/hadoop dfs -mkdir /user如果没有/user目录,先创建它,其实它会在需要的时候自动创建,但作为示例,现在我们手动创建也是合理的。

然后我们可以创建你的主目录了。 someone@anynode:hadoop$ bin/hadoop dfs -mkdir /user/someone当然,别忘了把/user/someone换成/user/yourUserName。

第二步:上传一个文件,将单个文件载入HDFS,我们可以用put命令:someone@anynode:hadoop$ bin/hadoop dfs -put /home/someone/interestingFile.txt /user/yourUserName这个命令会将/home/someone/interestingFile.txt从本地目录拷贝到HDFS的/user/yourUserName/interestingFile.txt。

第三步:检查在HDFS中的文件,我们可用下面任一命令来查看文件。someone@anynode:hadoop$ bin/hadoop dfs -ls /user/yourUserName someone@anynode:hadoop$ bin/hadoop dfs -ls在下面将展示put命令的示例和它们的结果:

当用put命令操作一个文件,这个操作或是全部完成,或是一点不做。一个文件上传到HDFS,首先要把数据复制到数据结点,当数据结点表明它们已经接收了全部的数据,并且文件句柄也已经关闭,那么这时文件才对系统其余部分是可见的,所以根据put命令的返回值 ,你可以确定文件或是成功上传,或是“完全失败”,你将永远不会得到一个文件部分上传或是文件内容部分可见的状态,如果遇到上传断开连接,或上传内容未完成的情况,HDFS表现地就像没有上传发生一样。

第四步:一次上传多个文件。put命令可以一次操作多个文件,还可以上传整个目录到HDFS中。

创建一个目录,然后用cp命令拷贝几个文件到这个目录中,在示例中,我们有如下目录内容:[code]someone@anynode:hadoop$ ls -R myfiles
myfiles:
file1.txt file2.txt subdir/

myfiles/subdir:
anotherFile.txt
someone@anynode:hadoop$[/code]整个myfiles/目录可以用下面命令拷贝到HDFS中: someone@anynode:hadoop$ bin/hadoop -put myfiles /user/myUsername someone@anynode:hadoop$ bin/hadoop -ls Found 1 items /user/someone/myfiles <dir> 2008-06-12 20:59 rwxr-xr-x someone supergroup user@anynode:hadoop bin/hadoop -ls myfiles Found 3 items /user/someone/myfiles/file1.txt <r 1> 186731 2008-06-12 20:59 rw-r--r-- someone supergroup /user/someone/myfiles/file2.txt <r 1> 168 2008-06-12 20:59 rw-r--r-- someone supergroup /user/someone/myfiles/subdir <dir> 2008-06-12 20:59 rwxr-xr-x someone supergroup上面展示了整个目录被正确地递归上传上,你会注意到除了文件路径外,ls命令还显示了每个文件的复制数(在<r 1>中的1),文件大小,上传时间,权限,所有者信息。
另一个与put功能相同的命令-copyFromLocal,它在使用方法上与put完全一样。