2

我们有一个 Azure Hadoop HDI 系统,其中大部分文件都存储在 Azure 存储帐户 Blob 中。从 Hadoop 访问文件需要 WASBS:// 文件系统类型。

我想将 SQL 2016 Polybase 配置为将计算下推到 HDI 群集,以对存储在 Azure blob 中的数据进行某些查询。

可以在 Polybase 中使用 Hadoop 之外的 Azure Blob。我完全理解查询提示“选项(FORCE EXTERNLPUSHDOWN)”在 Blob 系统上不起作用。

是否可以配置外部数据源以使用 HDI 在 blob 上进行计算?

一个典型的外部数据源配置是:

CREATE EXTERNAL DATA SOURCE AzureStorage with (  
        TYPE = HADOOP,   
        LOCATION ='wasbs://clustername@storageaccount.blob.core.windows.net',  
        CREDENTIAL = AzureStorageCredential  
); 

我相信只要 WASBS 在那里,下推计算就不会起作用。

如果我将上面的内容更改为使用 HDFS,那么我当然可以指向我的 HDI 集群,但是 EXTERNAL TABLE 的 LOCATION 会是什么?

如果这是在 WASBS 中,那么如何在 HDFS 中找到它?LOCATION='/HdiSamples/HdiSamples/MahoutMovieData/'

当然,有一种方法可以让 Polybase 将计算下推到文件位于 WASBS 中的 HDI 集群。如果不支持,则 Polybase 不支持最常用和推荐的设置 HDI 的方法。

我知道以上内容需要考虑很多,我们将不胜感激。如果你真的确定这是不可能的,就回答 NO。请记住,尽管我意识到在 Azure Blob 上直接运行的 Polybase 无法下推计算。我希望 Polybase 连接到 HDI 并让 HDI 在 blob 上进行计算。

编辑

请考虑使用 HDI 在 Azure 中进行以下设置。

请注意,默认的 Hadoop 文件系统是 WASBS。这意味着使用 /HdiSamples/HdiSamples/MahoutMovieData/user-ratings.txt 等相对路径将解析为 wasbs://YourClusterName@YourStorageAccount.blob.core.windows.net/HdiSamples/HdiSamples/MahoutMovieData/user-ratings.txt .

CREATE EXTERNAL DATA SOURCE HadoopStorage with (  
        TYPE = HADOOP,   
        LOCATION ='hdfs://172.16.1.1:8020', 
        RESOURCE_MANAGER_LOCATION = '172.16.1.1:8050', 
        CREDENTIAL = AzureStorageCredential  
);

CREATE EXTERNAL TABLE [user-ratings] (
    Field1 bigint,
    Field2 bigint,
    Field3 bigint,
    Field4 bigint

)
WITH (  LOCATION='/HdiSamples/HdiSamples/MahoutMovieData/user-ratings.txt',
        DATA_SOURCE = HadoopStorage,
        FILE_FORMAT = [TabFileFormat]
    );

Hadoop 中的文件中有很多行。然而,这个查询返回 0。

select count(*) from [user-ratings]

当我检查远程查询执行计划时,它显示:

<external_uri>hdfs://172.16.1.1:8020/HdiSamples/HdiSamples/MahoutMovieData/user-ratings.txt</external_uri>

请注意,URI 是绝对路径,并根据外部数据源设置为 HDFS。

查询成功并返回零,因为它正在查找 HDFS 文件系统中不存在的文件/路径。如果没有表,则不返回“找不到表”。这是正常的。不好的是真正的表存储在 WASBS 中并且有很多行。

这意味着当使用 Azure Blobs 作为 Hadoop 默认文件系统时,不支持下推计算。推荐的设置是使用 Azure Blob,以便存储与计算分开。PolyBase 不支持这种设置是没有意义的,但截至目前它似乎不支持它。

如果我错了,我会留下这个问题。我真的想错了。

4

1 回答 1

0

如果希望 PolyBase 将计算下推到任何 hadoop/HDI 集群,则需要在创建外部数据源时指定 RESOURCE_MANAGER_LOCATION。RESOURCE_MANAGER_LOCATION 告诉 SQL Server 在哪里提交 MR 作业。

于 2017-02-25T06:44:54.103 回答