【问题标题】:Is that the only way to start a hadoop job from command line?这是从命令行启动 hadoop 作业的唯一方法吗?
【发布时间】:2012-07-09 23:49:52
【问题描述】:

我现在在伪分布式模式下使用 hadoop。 我尝试了一些mapreduce,将其打包为jar,并将文件复制到hadoop。然后使用

./bin/hadoop jar *

启动它。

我的问题是:是否有任何其他方式可以做到这一点?如果我们有数千个作业要运行。我们不能只输入命令。我们在生产环境中做什么?

谢谢。

【问题讨论】:

  • 通常情况下,我们在shell脚本中编写一些作业。就像:jobs.sh :bin/hadoop jar a.jar \r\n bin/hadoop jar b.jar,它们正在运行一个一个按先进先出顺序。这是一个批处理作业。如果您想在 hadoop 中并行运行作业,请尝试 Fair Scheduler 或 Capacity Scheduler

标签: hadoop


【解决方案1】:

如果您有 1000 个作业,请编写一个 shell 脚本并在作业之间没有依赖关系的情况下提交它们。如果存在依赖项,请尝试使用 Chris 提到的 Apache Oozie。

【讨论】:

  • 写一个shell脚本,是不是你的意思是这样的: ./bin/hadoop jar a.jar com.A ./bin/hadoop jar b.jar com.B ,我没试过.但我想它会阻塞。
  • 你能举一些例子说明生产环境中的shell脚本是什么样的吗?
  • 什么会阻止?理论上你可以调度任意数量的作业,Hadoop 中的调度器会适当地调度它们。
【解决方案2】:

可以自动启动 MapReduce 作业。比如一个java程序,可以启动一个job。诀窍是确保您将作业导出到 jar 文件中,并从您的 java 代码中调用该导出的 jar 文件(这是单独的)。我最近有一个类似的问题并发布了它,也许它也与您有关。

Launch a mapreduce job from eclipse

【讨论】:

  • 我读到了,我想你想做一个远程调试?如果你是这个意思,试试 Java 平台调试器架构(JPDA)
【解决方案3】:

如果您需要安排作业运行,或者想要设计具有相互依赖关系的作业工作流,请查看 Apache OOZIE。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多