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

时间:2017-05-29 13:25:55

标签: azure azure-storage azure-table-storage hdinsight

我有一个Azure表存储partition keys列表,它们是Mappers的输入。我们的想法是每个Mapper都会获得一个不同的密钥来完成它的工作。

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

1 个答案:

答案 0 :(得分:0)

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

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

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服务。