Hadoop 流子进程找不到文件



我有一个包含音频文件的hdfs目录。我希望使用Hadoop流在每个文件上运行fpcalc。我可以做到这一点,在本地没有问题,但在hadoop fpcalc无法看到文件。我的代码是:

import shlex
cli = './fpcalc -raw -length ' + str(sample_length) + ' ' + file_a
from subprocess import Popen, PIPE
cli_parts = shlex.split(cli)
fpcalc_cli = Popen(cli_parts, stdin=PIPE, stderr=PIPE, stdout=PIPE)
fpcalc_out,fpcalc_err=fpcalc_cli.communicate()

cli_parts is:['。/fpcalc', '-raw', '-length', '30', '/user/hduser/audio/input/flacOriginal1. 'Flac ']并在本地运行良好。

fpcalc_err是:

ERROR: couldn't open the file
ERROR: unable to calculate fingerprint for file /user/hduser/audio/input/flacOriginal1.flac, skipping

文件DOES exists:

hadoop fs -ls /user/hduser/audio/input/flacOriginal1.flac
Found 1 items
-rw-r--r--   1 hduser supergroup    2710019 2014-08-08 11:49 /user/hduser/audio/input/flacOriginal1.flac

我可以在Hadoop流媒体中指向这样的文件吗?

通过:1. 增加"-cacheFile hdfs://localhost:54310/user/hduser/input/phone1/audio/flacOriginal1"。flac#flacOriginal1"到我的hadoop运行命令。2. 通过符号链接引用文件,即'flacOriginal1'。

最新更新