这个问题与 Azure 环境中的 Hadoop 有关。
我正在尝试使用 Runtime.exec() 在 reduce 函数中执行批处理脚本。我无法在 Azure 环境中的 Hadoop 中运行它,而它在 Linux 上的 Hadoop 中运行良好。我在我的桌面(Windows 7)环境中测试了 Runtime.exec() 代码片段,它在那里运行良好。我确保在 Runtime.exec() 之后使用子进程的输出和错误流。
批处理脚本包含以下内容(单个命令):
c:\hdfs\mapred\local\taskTracker\nabeel\jobcache\job_201207121317_0024\attempt_201207121317_0024_r_000001_0\work\tool.exe -fc:\hdfs\mapred\local\taskTracker\nabeel\jobcache\job_201207121317_0024\work\11_task_201207121317_0024_r_000001.out -ic: \hdfs\mapred\local\taskTracker\nabeel\jobcache\job_201207121317_0024\attempt_201207121317_0024_r_000001_0\work\input.txt
我使用分布式缓存分发 tool.exe 和 input.txt 文件,并从工作目录创建符号链接。tool.exe 和 input.txt 指向 jobcache 目录中的实际文件。
2012-07-16 04:31:51,613 INFO org.apache.hadoop.mapred.TaskRunner:创建符号链接:/hdfs/mapred/local/taskTracker/distcache/-978619214658189372_-1497645545_209290723/10.73.50.78tool.exe <-\hdfs \mapred\local\taskTracker\nabeel\jobcache\job_201207121317_0024\attempt_201207121317_0024_r_000001_0\work\tool.exe 2012-07-16 04:31:51,644 INFO org.apache.hadoop.mapred.TaskRunner:创建符号链接:/hdfs/mapred /taskTracker/distcache/-4944695173898834237_1545037473_2085004342/10.73.50.78input.txt <- \hdfs\mapred\local\taskTracker\nabeel\jobcache\job_201207121317_0024\attempt_201\work4_1213007_00input_00.txt
减速器在运行时会出现以下错误。
命令执行错误:无法运行程序“cmd /q /cc:\hdfs\mapred\local\taskTracker\nabeel\jobcache\job_201207121317_0024\work\11_task_201207121317_0024_r_0000011513543720767963399.bat”:CreateProcess error=2,系统找不到指定的文件
在另一种情况下,我尝试运行相同但不使用绝对路径。子进程的输出流如下所示:
c:\hdfs\mapred\local\taskTracker\nabeel\jobcache\job_201207121317_0022\attempt_201207121317_0022_r_000000_0\work>tool.exe -f /hdfs/mapred/local/taskTracker/nabeel/jobcache/job_201207121317_0022/work/1_task_201207121317_0022_r_000000.out -i input.文本
我不知道作业工作目录路径和分布式缓存在 Azure 环境中的 Hadoop 中是如何工作的。如果我在这里遗漏了什么(或)在 Azure 环境中的 Hadoop 中使用 Runtime.exec() 时需要注意什么,请告诉我。
谢谢,
. , ._ 回复发件人 | 回复群 | 通过网络帖子回复 | 开始一个新话题