我有一个包含音频文件的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是:[' ./ fpcalc',' -raw',' -length',' 30',&#39 ; /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
文件存在:
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流媒体中指向这样的文件吗?
答案 0 :(得分:0)
通过以下方式工作: 1.在我的hadoop run命令中添加“-cacheFile hdfs:// localhost:54310 / user / hduser / input / phone1 / audio / flacOriginal1.flac #flacOriginal1”。 2.通过符号链接引用文件,即'flacOriginal1'。