0

我正在尝试使用Linq to Hive从 .NET 启动 Hive 查询。

挑战在于查询应该在不在默认 HDInsight 容器中的外部表上运行,因此我已将容器的凭据添加到core-site.xml并重新启动 Hive 的守护进程。

但是,我收到以下错误:

容器...帐户中...未找到,我们无法使用匿名凭据创建它。

这是我的代码:

var db = new MyHiveDatabase(
    new Uri("https://myclustername.azurehdinsight.net"),
    username,
    password,
    nonDefaultStorageAccount, nonDefaultStorageAcountKey);
    // I've also tried: defaultStorageAccount, defaultStorageAcountKey


var q = from x in db.ExternalTableName
        group x by x.Name
        into g
        select new {Name = g.Key, Count = g.Count()};

q.ExecuteQuery().Wait();

连接成功并创建了 Hive 作业(我什至可以看到带有查询的 HQL 文件),但 Hive 作业将上述错误写入 stderr。

我已经尝试解决这个问题几个小时,改变这个和那个,我什WebHCatHttpClient至尝试过代替 Linq,但无济于事......有什么想法吗?

4

1 回答 1

0

您确定 Hive 表已创建吗?我不知道原因,但 Hive 限制仅在“本地”模式下创建外部表。

您可以使用 invoke-hive PowerShell cmdlet 运行诸如“select count(*) from”之类的配置单元查询以进行验证。

有关更多 PowerShell 或 HDInsight .NET SDK 示例,请参阅http://www.windowsazure.com/en-us/manage/services/hdinsight/submit-hadoop-jobs-programmatically/#hive-sdk

于 2013-12-06T00:44:04.323 回答