是否可以使用Hadoop SDK,尤其是LINQ to Hive,使用HDInsight Server的本地安装。请注意,我不是指Azure上托管的HDInsight服务。
我尝试从Microsoft.Hadoop.Hive Nuget包中使用LINQ to Hive,但无法使其正常工作,因为LINQ to Hive似乎要求结果存储在Azure Blob存储中,而不是存储在我的托管实例上。
var hiveConnection = new HiveConnection(new Uri("http://hadoop-poc.cloudapp.net:50111"), "hadoop", "hgfhdfgh", "hadoop", "hadooppartner", "StorageKey");
var metaData = hiveConnection.GetMetaData().Result;
var result = hiveConnection.ExecuteQuery(@"select * from customer limit 1");
即使使用存储密钥,我也无法使用它,因为MapReduce作业失败了:
AzureException: org.apache.hadoop.fs.azure.AzureException: Container a7e3aa39-75ba-4cc2-a8aa-301257018146 in account hadooppartner not found, and we can't create it using anoynomous credentials.
我还将凭据再次添加到core-site.xml
文件中,如下所示:
<property>
<name>fs.azure.account.key.hadooppartner.blob.core.windows.net</name>
<value>Credentials</value>
</property>
但是,如果可能的话,我宁愿摆脱在Azure存储上存储结果。
感谢您的帮助!
答案 0 :(得分:1)
事实证明,在HiveConnection
构造函数中,您必须指定完整的存储帐户名称,即hadooppartner.blob.core.windows.net
。
我仍然有兴趣使用.NET LINQ API而无需存储帐户。此外,是否可以将.NET API与其他Hadoop发行版一起使用?
答案 1 :(得分:1)
您可以使用不带存储帐户选项的HiveConnection构造函数连接到本地安装。这适用于本地盒子上HDInsights开发者预览的默认安装:
var db = new HiveConnection(
webHCatUri: new Uri("http://localhost:50111"),
userName: (string) "hadoop", password: (string) null);
var result = db.ExecuteHiveQuery("select * from w3c");
当然,您也可以将该连接用于任何LINQ查询。