0%

hdfs命令行流式处理

文件流式处理

在处理hdfs数据时,可能会遇到本地磁盘空间不足以存放数据的问题,这时我们可以使用linux的stdio对数据进行流式处理,以替换每行内容为例

1
2
3
hadoop -cat hdfs://your_path/your_file |\
sed "s/some_thing/some_other/g" |\
hadoop -put - hdfs://your_path/your_processed_file

这样利用pipe完成了对数据的处理,同时避免了数据在本地落盘。

遍历文件夹处理

此外还可以搭配xargs遍历整个目录

  • hadoop -ls -h hdfs://your_path 列出整个目录
  • awk -F' ' '{print $NF}' 取出最后一列,也就是文件地址列
  • awk -F'/' '{print $NF}' 将地址中的文件名取出
  • xargs -I {} bash -c ... 将每个文件名依次作为参数处理
  • "hadoop -cat ..." 按照之前流式处理的方式处理每一个文件
1
hadoop -ls -h hdfs://your_path | awk -F' ' '{print $NF}' | awk -F'/' '{print $NF}' | xargs -I {} bash -c "hadoop -cat hdfs://your_path/{} | sed 's/some_thing/some_other/g' | hadoop -put - hdfs://your_other_path/{}"