我通过使用Visual Studio部署ARM模板来部署Azure数据工厂,基本上完全按照这个Azure教程逐步进行。
该模板定义了一个数据工厂,其中包含一个 Azure 存储链接服务(用于读取和写入源数据和输出数据)、一个输入数据集和一个输出数据集、一个 HDInsight 按需链接服务,以及一个管道,该管道运行 HDInsight HIVE 活动以运行将输入数据集处理为输出数据集的 HIVE 脚本。
一切部署成功,管道活动开始。但是,我从活动中收到以下错误:
线程"main"中的异常 java.lang.RuntimeException: java.lang.RuntimeException: 无法实例化org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:445) at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675) at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:619) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.hadoop.util.RunJar.run(RunJar.java:221) at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
我发现了各种帖子,例如这个和这个帖子,表明该问题是由 HIVE 元存储数据库名称中的破折号或连字符引起的已知错误。
我的问题是使用 ARM 模板按需部署 HDInsigh 群集,我无法访问群集本身,因此我无法进行任何手动配置更改(按需的想法是它是暂时的,只是为了满足一组需求而创建,然后自行删除)。
只需按照教程一步一步地操作即可轻松重现该问题。
我发现的唯一可能的希望是设置此处所述的 hcatalogLinkedServiceName,该名称旨在允许你将自己的 Azure SQL 数据库用作 hive 元存储。但是,这也不起作用 - 如果我使用该属性,我会得到:
'JamesTestTutorialARMDataFactory/HDInsightOnDemandLinkedService' 失败,并显示消息"未为此启用 HCatalog 集成" 订阅。
我的订阅不受限制,应具有 Azure 的所有可用功能。所以现在我完全被困住了。目前看来,将Hive与按需HDInsight一起使用基本上是不可能的?
如果有人能想到任何可以尝试的东西,我都听着!
谢谢
我最近研究了教程,并修改了教程。这是我的版本,https://azure.microsoft.com/en-us/documentation/articles/hdinsight-hadoop-create-linux-clusters-adf/。 我没有看到错误。 Hive 表名称没有连字符。我认为我的更容易理解。 我对模板本身进行了一些小的更改。
我设法与 GIT 教程的作者取得了联系 - 他联系了 Azure 产品团队,这是他们的回应:
。这是基于 Linux 的 HDI 群集在使用时出现的已知问题 他们与ADF一起。HDI 团队已修复此问题,并将部署 未来几周的修复。同时,您必须使用窗口 基于 ADF 的 HDI 群集。
请暂时使用 windows 作为 osType。我已经在 GIT 中修复了这篇文章 明天会上线。
我链接到的教程确实已更改为使用Windows而不是linux。我已经试过了,它有效。