如何从hdinsight集群上运行的代码中获取集群详细信息,如clusterID



我需要使用Azure API的ClusterInner对象或一些集群信息,如集群id等。

但要获得ClusterInner对象或集群ID,我需要向API提供身份验证对象,但此代码将在同一HDInsight集群上运行,因此理想情况下它不会要求凭据或使用某些env等(我的spark作业已在该集群上运行,spark作业需要此信息)。

是否有任何API或替代方案可以从同一个正在运行的HDInsight集群中获取这些信息。

根据注释编辑我的答案

这种特殊的方法不是一种干净的方法,但你可以得到细节。注意:这仅适用于HDInsight集群。部署详细信息只能从头部节点中提取。您必须在/etc/ambari-server/conf/ambari.properties中查找字段server.jdbc.database_name。例如,如果它是v40e8b2c1e26279460ca3e8c0cbc75af8f8AmbariDb,那么你可以去掉String的前3个字符和后8个字符。去掉的字符串将是你的clusterid。您可以在作业中使用Linux脚本从文件中提取详细信息。下面是外壳命令

#!/bin/bash
string=$(sed -n 's/server.jdbc.database_name=//p' /etc/ambari-server/conf/ambari.properties)
POS=3
LEN=32
clusterid=${string:$POS:$LEN} 

你可以在Python/Java中嵌入脚本。我正在使用Python来实现这个

import os
import subprocess
subprocess.call(['sh', '/path/to/script.sh'])

最新更新