将连接信息传递给 HDInsight 中的所有节点/映射器以进行 MapReduce 作业



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

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

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

这些脚本是每个系统的标准shell脚本语言(即Linux的bash,Windows的Powershell),因此非常容易编写。

对于基于 Linux 的节点 (bash):

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

对于基于 Windows 的节点 (Powershell):

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

添加Machine可确保变量是计算机范围的,而不是脚本本地的。

更新:

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

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

最新更新