如何调整Azure HDInsight 的时区

如何调整Azure HDinsight 的时区

HDInsight 在创建后,默认Name Node /Data Node 的时区都是世界标准时区(UTC). 当客户把应用迁移到HDInsight, 有些情况客户可能需要调整集群节点的时区为中国时区。
有一个典型的场景,客户端是中国时区,而HDInsight 集群的时区是UTC. 如果用户在客户端提交Hive 查询,如果hive 以Local Mode 执行,会按客户端的时区,如果提交到HDInsight执行,则会按UTC时区,这会导致同样的查询会有两种不同的结果。
解决方法,一是在应用程序中考虑时区的因素,也不复杂,需要多做一些时区函数的转换。但如果用户应用程序比较多的情况下,工作量还是比较大。
另一个办法是把HDInsight的时区调整为中国时区。

HDInsight 并没有提供直接修改时区的接口,但通过Script Action 可以解决这个问题。具体的步骤如下:
1.准备一个PowerShell 脚本: HDConfigureChangeTZ.ps1, 该脚本包含下面一条命令

tzutil /s “China Standard Time

2.将该PowerShell 脚本上传到存储账号的一个Container, 这个Container要设置为Public blob Access (允许对该Blob 进行只读访问)

3.在创建HDInsight 的脚本中增加下面的代码,在创建HDInsight集群时会执行该段脚本,将Name Node/Data Node 的时区改为中国时区。这样做的好处是,在HDInsight 调整节点或做ReImage时,也会自动执行该段脚本,确保时区是一致的。

$config = Add-AzureHDInsightScriptAction -Config $config –Name TestScriptAction1 –Uri "https://publicstorage.blob.core.windows.net/hdconfig/HDConfigureChangeTZ.ps1" -ClusterRoleCollection HeadNode,DataNode

你可能感兴趣的:(timezone,azure,poweshell,HDinsight)