我希望能够创建emr集群,并让这些集群将消息发送回某个中心队列。为了让它工作,我需要在每个主节点上运行某种代理。这些代理中的每一个都必须在该消息中标识自己,以便收件人知道该消息是关于哪个集群的。
主节点是否知道其id( j-*************
)? 如果没有,那么是否还有其他一些标识信息可以让消息接收者推断出这个id?
我查看了中的配置文件 /home/hadoop/conf
,但我没有发现任何有用的东西。我在里面找到了身份证 /mnt/var/log/instance-controller/instance-controller.log
,但看起来很难预测。我想知道示例控制器首先从哪里得到这个id。
5条答案
按热度按时间xqkwcwgp1#
如上所述,信息在job-flow.json文件中。此文件还有其他几个属性。所以,知道它的位置,你可以用一种非常简单的方法:
编辑:这个命令也适用于核心节点。
hs1rzwqc2#
你可以看看
/mnt/var/lib/info/
在主节点上查找有关emr群集设置的大量信息。更具体地说/mnt/var/lib/info/job-flow.json
包含jobflowid或clusterid。您可以使用预先安装的json解析器(
jq
)获取作业流id。(根据@marboni更新)
mbskvtky3#
显然hadoopmapreduce作业无法知道它在哪个集群上运行——我自己也很惊讶地发现了这一点。
但是:您可以为每个Map使用其他标识符来唯一地标识正在运行的Map程序和正在运行的作业。
这些是在传递给每个Map器的环境变量中指定的。如果您使用python在hadoop流媒体中编写作业,则代码如下:
这将为您提供:输入文件名、任务id和作业id。使用这三个值中的一个或组合,您应该能够唯一地标识正在运行的Map程序。
如果你正在寻找一个特定的工作:“mapred\u job\u id”可能是你想要的。
tktrz96b4#
您可以使用amazonec2api来解决这个问题。为了简单起见,下面的示例使用shell命令。在现实生活中,您应该使用适当的api来完成这些步骤。
首先,您应该找到您的示例id:
然后您可以使用示例id查找集群id:
希望这有帮助。
y3bcpkx15#
另一个选项-查询元数据服务器: