我有一个 mrjob 配置,其中包括将一个大文件从 s3 加载到 HDFS 中。我想在配置文件中包含这些命令,但似乎所有引导命令都在集群中的所有节点上执行。这是过度杀戮,也可能会产生同步问题。
是否有某种方法仅在 mrjob 配置中包含主节点的启动命令,或者是在集群启动执行这些操作后通过 SSH 进入头节点的唯一解决方案?
约夫
我有一个 mrjob 配置,其中包括将一个大文件从 s3 加载到 HDFS 中。我想在配置文件中包含这些命令,但似乎所有引导命令都在集群中的所有节点上执行。这是过度杀戮,也可能会产生同步问题。
是否有某种方法仅在 mrjob 配置中包含主节点的启动命令,或者是在集群启动执行这些操作后通过 SSH 进入头节点的唯一解决方案?
约夫
好吧,你可以让你的步骤从一个映射器开始,并在你的 jobconf 中设置 mapred.map.tasks=1。我从未尝试过,但似乎它应该可以工作。
另一个建议:
使用文件系统或 zookeeper 进行协调:
if get_exclusive_lock_on_resource(filesystem_path_or_zookeeper_path):
Do the expensive bit
release_lock(filesystem_path_or_zookeeper_path)
if expensive_bit_not_complete():
sleep 10