hadoop-streaming.jar中的输入和输出是什么?我读了它的帮助部分,但仍然有问题,而编写自定义Map器和减速器

eh57zj3b  于 2021-05-31  发布在  Hadoop
关注(0)|答案(0)|浏览(200)

我在hdfs上有一个文件夹,它有大约6k个文件,每个6mb左右。hdfs不喜欢很多小文件,而且它们每天都会生成。我得想办法压缩它们。
我选择将它们从filename1.txt逐个转换为filename1.zip,显然是压缩的,然后将所有压缩的文件转换为一个.har文件。har与.tar几乎相同,不涉及压缩,只是减少了文件的数量)
因此,我可以使用hadoop dfs-ls har:///path/to/file.har来操作这些文件,并将压缩后的文件下载到某个本地计算机并在那里解压,只要我知道现在有执行的方法 hadoop archive 任何压缩。
所以我决定用hadoop-streaming.jar编写我自己的mapper和reducer来创建一个包含n个容器(其中n是要压缩的文件数)的mapreduce作业,但我不明白hadoop-streaming.jar中的-input和-output代表什么。一旦我硬编码从何处获取文件和从何处压缩它。
我相信我可以编写更高效、更优雅的代码,但目前除了wordcount示例之外,我还不能真正理解hadoop-streaming.jar的内部工作原理,以及如何在其中使用-input和-output标志。
这是我的素描:
Map器.sh:

files_to_archive=$(su hdfs -c "hdfs dfs -ls -C /tmp/dev_gms/in | head -n 5")
echo $files_to_archive
for line in $files_to_archive;
do
  echo "$line" $(basename $line)
done < "/dev/stdin"

减速器.sh


# !/bin/bash

while read path name
do
  echo "$path" "$name"
  hdfs dfs -copyToLocal ${path} . && tar -czvf ${name}.tar.gz ${name} && hdfs dfs -copyFromLocal ${name}.tar.gz /tmp/dev_gms/archive
done < "/dev/stdin"

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题