将连接信息传递给 HDInsight 中的所有 nodes/mappers 用于 MapReduce 作业

Passing connection information to all nodes/mappers in HDInsight for a MapReduce job

我有一个 Azure Table 存储 partition keys 的列表,它们是映射器的输入。这个想法是每个映射器将获得一个不同的密钥来完成它的工作。

有没有办法在不硬编码的情况下将 connection stringkey 传递给存储帐户?在 Batch 中,您需要做的就是提供一个带有 EnvironmentSetting 的作业,每个节点都会获得该变量。我知道 node 的定义在这里非常不同 - 对于 Batch,它们是 VM,而在 HDInsight 中,它们是 Hadoop 节点。

对于 Linux 和 Windows,使用 Azure 脚本操作是完全可能的。 Action 脚本在每个节点上 运行,旨在为集群提供额外的配置 - 例如安装依赖项,或者在本例中提供连接详细信息。

脚本是每个系统的标准 shell 脚本语言(即 bash 用于 Linux,Powershell 用于 Windows)等很容易写。

For Linux-based nodes (bash):

echo "AZURE_CONNECTION_KEY=some_key_string" | sudo tee -a /etc/environment

For Windows-based nodes (Powershell):

[Environment]::SetEnvironmentVariable('AZURE_CONNECTION_KEY', 'some_key_string', 'Machine');

添加 Machine 确保变量是机器范围的而不是脚本本地的。

更新:

我发现这种传递变量的方法非常古怪。尽管环境变量实际存在,但 python 脚本使用环境变量在本地工作,而不是在集群上工作。

使用共享配置(例如 ini 文件)似乎是更好的选择 - 为什么不呢?您对 HDInsight 中的 blob 服务具有完全访问权限。