gpt4 book ai didi

shell - 将目录传递给 hadoop streaming : some help needed

转载 作者:可可西里 更新时间:2023-11-01 14:50:28 28 4
gpt4 key购买 nike

上下文是我正在尝试在 Amazon EMR (Web UI) 上使用我运行的 bash 脚本运行流式作业:

-input s3://emrdata/test_data/input -output s3://emrdata/test_data/output -mapper
s3://emrdata/test_data/scripts/mapperScript.sh -reducer NONE

输入目录中有子目录,这些子目录中有 gzip 数据文件。

mapperScript.sh 失败的相关部分是:

for filename in "$input"/*; do

dir_name=`dirname $filename`
fname=`basename $filename`

echo "$fname">/dev/stderr

modelname=${fname}.model

modelfile=$model_location/$modelname

echo "$modelfile">/dev/stderr

inputfile=$dirname/$fname

echo "$inputfile">/dev/stderr

outputfile=$output/$fname

echo "$outputfile">/dev/stderr

# Will do some processing on the files in the sub-directories here

done # this is the loop for getting input from all sub-directories

基本上,我需要在流模式下读取子目录,当我运行它时,hadoop 提示说:

2013-03-01 10:41:26,226 ERROR
org.apache.hadoop.security.UserGroupInformation (main):
PriviledgedActionException as:hadoop cause:java.io.IOException: Not a
file: s3://emrdata/test_data/input/data1 2013-03-01 10:41:26,226
ERROR org.apache.hadoop.streaming.StreamJob (main): Error Launching
job : Not a file: s3://emrdata/test_data/input/data1

我知道有人问过类似的问题 here

那里的建议是编写自己的 InputFormat。我想知道我是否在编写脚本/提供 EMR 输入的方式中遗漏了其他内容,或者是否用 Java 编写自己的 InputFormat 是我唯一的选择。

我也尝试通过“input/*”向 EMR 提供我的输入,但没有成功。

最佳答案

似乎虽然可能有一些临时解决方法,但本质上 hadoop 还不支持这个,因为您可能会看到这个 here 上有一个开放的票证.因此 inputpatth/*/* 可能适用于 2 级子目录,但可能无法进一步嵌套。

您现在可以做的最好的事情是获取不带任何子目录的文件/文件夹的列表,并在创建输入路径的 csv 列表后递归添加它们。您可以使用像 s3cmd 这样的简单工具为此。

关于shell - 将目录传递给 hadoop streaming : some help needed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15156067/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com