我是 Hadoop 新手,我正在尝试找出一种方法来执行以下操作:
- 我有多个输入图像文件。
- 我有处理这些文件的二进制可执行文件。
- 这些二进制可执行文件将文本文件作为输出写入。
- 我有一个包含所有这些可执行文件的文件夹。
- 我有一个脚本,它以特定顺序运行所有这些可执行文件,将图像位置作为参数传递。
我的问题是:我可以使用 Hadoop 流通过这些二进制文件处理这些图像并从文本文件中吐出结果。
我目前正在尝试这个。
我的 Hadoop 集群正在运行。我通过二进制文件和我的图像上传到 HDFS。
我已经设置了一个脚本,当hadoop运行时应该将目录更改为包含图像的文件夹并执行另一个执行二进制文件的脚本。
然后脚本通过标准输出结果吐出。
但是,我不知道如何将我的地图脚本更改为 HDFS 上的图像文件夹,然后执行另一个脚本。
有人可以给我一个提示吗?
sudo ./hadoop/bin/hadoop jar ../hduser/hadoop/contrib/streaming/hadoop-streaming-1.1.0.jar \
-numReduceTasks 0 \
-file /home/hduser/RunHadoopJob.sh \
-input /user/hduser/7posLarge \
-output /user/hduser/output5 \
-mapper RunHadoopJob.sh \
-verbose
还有我的 RunHadoopJob.sh:
#!/bin/bash
cd /user/hduser/7posLarge/;
/user/hduser/RunSFM/RunSFM.sh;
我的 HDFS 看起来像这样:
hadoop fs -ls
Warning: $HADOOP_HOME is deprecated.
Found 4 items
drwxr-xr-x - hduser supergroup 0 2012-11-28 17:32 /user/hduser/7posLarge
drwxr-xr-x - hduser supergroup 0 2012-11-28 17:39 /user/hduser/RunSFM
drwxr-xr-x - root supergroup 0 2012-11-30 14:32 /user/hduser/output5
我知道这不是 MapReduce 的标准用法。我只是在寻找一种方法,无需编写太多开销即可在具有不同输入的同一程序的不同集群上启动多个作业。看起来这似乎可以查看Hadoop Streaming 文档。
“如何使用 Hadoop Streaming 运行任意(半)独立的任务集?
通常,您不需要 Map Reduce 的全部功能,而只需要运行同一程序的多个实例——无论是在数据的不同部分,还是在相同的数据上,但参数不同。您可以使用 Hadoop Streaming 来执行此操作。"
如果这不可能,AmazonAWS 上是否有其他工具可以为我做到这一点?