任何人都知道org.apache.hadoop.mapreduce.Job
是否是线程安全的?在我的应用程序中,我为每个作业创建一个线程,然后waitForCompletion
。我有另一个监视器线程,用isComplete
检查每个作业的状态。
这样安全吗?工作线程安全吗?文档似乎没有提及它的任何内容......
由于 UDI
答案 0 :(得分:3)
与其他人不同,我还使用线程并行提交作业并等待其完成。您只需要为每个线程使用一个作业类实例。如果您在多个线程上共享相同的作业实例,则必须自己处理同步。
答案 1 :(得分:0)
为什么要为每个作业写一个单独的线程?你的用例究竟是什么?
您可以在Hadoop群集中运行多个作业。你有多个工作之间的依赖关系吗?
假设你有10个工作正在运行。 1个工作失败然后你需要重新运行9个成功的任务。
最后,作业跟踪器将负责在Hadoop集群上安排多个作业。如果您没有依赖关系,那么您不应该担心线程安全。如果你有依赖关系,那么你可能需要重新考虑你的设计。
答案 2 :(得分:0)
是的。实际上,文件是按块分割的,每个块都在一个单独的节点上执行。所有的地图任务并行运行,然后在完成后送到减速器。您可以在多线程程序中考虑同步问题。在多线程程序中,所有线程都在同一个盒子上运行,因为它们共享一些你需要同步它们的数据
答案 3 :(得分:0)
万一你需要在地图任务级别上有另一种并行性,你应该在mapper中覆盖run()方法并在那里使用多个线程。默认实现调用setup(),然后map()次要处理的记录数,最后调用cleanup()方法一次。
希望这有助于某人!
答案 4 :(得分:-1)
如果您正在检查作业是否已完成,我认为您对Map reduce的工作原理有点困惑。你应该让Hadoop为自己做这件事。