从HDFS获取前两个文件

时间:2019-02-14 20:11:15

标签: bash hadoop command-line hdfs

是否可以使用命令行从HDFS中获取前两个文件?我的hadoop版本是2.7.3

我在HDFS中有一个包含多个文件的文件夹,另一个应用程序将其放置在该文件夹中:       /user/Lab01/inpu/ingestionFile1.json       /user/Lab01/inpu/ingestionFile2.json       /user/Lab01/inpu/ingestionFile3.json       /user/Lab01/inpu/ingestionFile4.json

我只需要根据时间处理前两个文件,因此如果使用以下方式列出内容:

 $ hdfs dfs -ls -R /user/Lab01/input

-rw-------   3 huser dev       668 2019-02-13 11:34 /user/Lab01/inpu/ingestionFile1.json
-rw-------   3 huser dev        668 2019-02-13 11:36 /user/Lab01/inpu/ingestionFile2.json
-rw-------   3 huser dev        668 2019-02-13 11:38 /user/Lab01/inpu/ingestionFile3.json
-rw-------   3 huser dev        668 2019-02-13 11:41 /user/Lab01/inpu/ingestionFile4.json

为了从目录中获取前两个文件,我简单地使用head -2 pip命令以获取:

$ hdfs dfs -ls -R /user/Lab01/input | head -2

-rw-------   3 huser dev       668 2019-02-13 11:34 /user/Lab01/inpu/ingestionFile1.json
-rw-------   3 huser dev        668 2019-02-13 11:36 /user/Lab01/inpu/ingestionFile2.json

从hdfs获取文件的普通命令是使用-get:

  hdfs dfs -get /user/Lab01/input/fileName

所以这就是为什么我现在试图合并这两个命令的原因:

$ hdfs dfs -get /user/Lab01/input | hdfs dfs -ls -R /user/Lab01/input | head -2 

但是我没有得到期望的结果,我只是得到一条消息,给我最后一条命令的输出(hdfs dfs -ls -R -user / Lab01 / input | head -2):

-rw-------   3 huser dev       668 2019-02-13 11:34 /user/Lab01/inpu/ingestionFile1.json
-rw-------   3 huser dev        668 2019-02-13 11:36 /user/Lab01/inpu/ingestionFile2.json

1 个答案:

答案 0 :(得分:2)

您无法将-get传送到-ls

您需要先 -ls | head -2,然后awk并剪切列出的文件名,然后分别-get这两个文件名。

类似的东西应该只得到名字

hdfs dfs -ls -R /user/Lab01/input | head -2 | awk '{print $8}'

也-How to list only the file names in HDFS

然后仅添加“ | xargs hdfs dfs -get”以下载文件