Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 获取HDFS目录中单个文件的行数_Shell_Hadoop_Hdfs_Bigdata - Fatal编程技术网

Shell 获取HDFS目录中单个文件的行数

Shell 获取HDFS目录中单个文件的行数,shell,hadoop,hdfs,bigdata,Shell,Hadoop,Hdfs,Bigdata,我想对HDFS中某个目录中的单个文件(以及文件名)进行行计数,输出应与以下类似: 4 filename_1.txt 20 filename_2.txt 8 filename_3.txt 目前我正在使用 hadoop fs-cat/user/TMM/| wc-l 它给出了目录的总计数。(在这种情况下,例如:32) 有什么方法可以做到这一点吗?您可以通过使用shell脚本来做到这一点,请参考下面的代码片段,这可能会对您有所帮助 for i in $( hadoop fs -ls <hdfs-

我想对HDFS中某个目录中的单个文件(以及文件名)进行行计数,输出应与以下类似:

4 filename_1.txt
20 filename_2.txt
8 filename_3.txt
目前我正在使用

hadoop fs-cat/user/TMM/| wc-l

它给出了目录的总计数。(在这种情况下,例如:32)


有什么方法可以做到这一点吗?

您可以通过使用shell脚本来做到这一点,请参考下面的代码片段,这可能会对您有所帮助

for i in $( hadoop fs -ls <hdfs-path> | tr -s ' ' | grep '/' | awk '{print$8}');
   do
      echo $i `hadoop fs -cat $i | wc -l`;
   done;
以美元表示的i的
(hadoop fs-ls | tr-s'|grep'/'|awk'{print$8});
做
echo$i`hadoop fs-cat$i|wc-l`;
完成;
这将打印
hdfs路径下的每个文件以及行数


[注意:文件名打印在我的hadoop版本的
hadoop fs-ls
输出中的8个索引处,请在您的环境中进行相应的检查]

您可以使用shell脚本来完成此操作,请参考下面的代码片段,这可能会对您有所帮助

for i in $( hadoop fs -ls <hdfs-path> | tr -s ' ' | grep '/' | awk '{print$8}');
   do
      echo $i `hadoop fs -cat $i | wc -l`;
   done;
以美元表示的i的
(hadoop fs-ls | tr-s'|grep'/'|awk'{print$8});
做
echo$i`hadoop fs-cat$i|wc-l`;
完成;
这将打印
hdfs路径下的每个文件以及行数


[注意:文件名打印在我的hadoop版本的
hadoop fs-ls
输出中的8个索引处,请在您的环境中相应地检查它]

如果您的数据量足够小,您可以这样做,但这种方法意味着将所有数据从HDFS客户机传输到客户机。不太好


另一种方法是创建MapReduce作业。从上下文中获取文件名(getInputSplit),并为每个输入行编辑一个事件,其中键可以是文件名,值可以是1。如果您在映射中创建一个本地聚合,以避免将大量对象传输到reducer,效果会更好。在reducer中,完成聚合并将输出写入HDFS中的文件。

如果您的数据量足够小,您可以这样做,但这种方法意味着将所有数据从HDFS客户机传输到客户机。不太好

另一种方法是创建MapReduce作业。从上下文中获取文件名(getInputSplit),并为每个输入行编辑一个事件,其中键可以是文件名,值可以是1。如果您在映射中创建一个本地聚合,以避免将大量对象传输到reducer,效果会更好。在reducer中,完成聚合并将输出写入HDFS中的文件