SQL 2016 PolyBase Compute下推到Hadoop HDI,该HDI使用WASB,也称为Azure Blob

SQL 2016 PolyBase Compute下推到Hadoop HDI,该HDI使用WASB,也称为Azure Blob,sql,azure,hadoop,polybase,Sql,Azure,Hadoop,Polybase,我们有一个Azure Hadoop HDI系统,其中大多数文件存储在Azure存储帐户Blob中。从Hadoop访问文件需要WASBS://文件系统类型 我想将SQL 2016 Polybase配置为将compute下推到HDI集群,以查询存储在Azure Blob中的某些数据 在Polybase中,可以在Hadoop之外使用Azure Blob。我完全理解查询提示“option(FORCE EXTERNALPUSHDOWN)”在Blob系统上不起作用 是否可以将外部数据源配置为在blob上使用

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

我想将SQL 2016 Polybase配置为将compute下推到HDI集群,以查询存储在Azure Blob中的某些数据

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

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

典型的外部数据源配置为:

CREATE EXTERNAL DATA SOURCE AzureStorage with (  
        TYPE = HADOOP,   
        LOCATION ='wasbs://clustername@storageaccount.blob.core.windows.net',  
        CREDENTIAL = AzureStorageCredential  
); 
我相信只要WASBS还在里面,下推计算就不会工作

如果我将上述内容更改为使用HDFS,那么我当然可以指向我的HDI集群,但是外部表的位置会是什么

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

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

我知道上面有很多要考虑的,任何帮助都是值得赞赏的。若你们真的确定这是不可能的,那个就回答“不”。请记住,尽管我意识到直接在Azure Blob上操作Polybase无法下推计算。我希望Polybase连接到HDI,让HDI在blob上进行计算

编辑

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

注意,默认的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>
hdfs://172.16.1.1:8020/HdiSamples/HdiSamples/MahoutMovieData/user-ratings.txt
请注意,URI是一个绝对路径,并根据外部数据源设置为HDFS

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

这一切都意味着在使用Azure Blob作为Hadoop默认文件系统时不支持下推计算。建议的设置是使用Azure Blob,以便存储与计算分离。PolyBase不支持此设置毫无意义,但到目前为止,它似乎不支持此设置


万一我错了,我就把这个问题留给别人。我真的想错了。

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

感谢您的回复。设置资源管理器是我以前尝试过的。不幸的是,我没有看到支持WASB进行下推计算的设置。这严重限制了在Azure HDI设置中使用PolyBase。有关更多信息,请参阅我的编辑。