Mengonfigurasi PolyBase di Gudang Data Paralel untuk mengakses data eksternal di Hadoop

Artikel ini menjelaskan cara menggunakan PolyBase pada appliance APS untuk mengkueri data eksternal di Hadoop.

Prasyarat

PolyBase mendukung dua penyedia Hadoop, Hortonworks Data Platform (HDP) dan Cloudera Distributed Hadoop (CDH). Hadoop mengikuti pola "Major.Minor.Version" untuk rilis barunya, dan semua versi dalam rilis Utama dan Minor yang didukung didukung. Penyedia Hadoop berikut didukung:

  • Hortonworks HDP 1.3 di Linux/Windows Server
  • Hortonworks HDP 2.1 - 2.6 di Linux
  • Hortonworks HDP 3.0 - 3.1 di Linux
  • Hortonworks HDP 2.1 - 2.3 di Windows Server
  • Cloudera CDH 4.3 di Linux
  • Cloudera CDH 5.1 - 5.5, 5.9 - 5.13, 5.15 & 5.16 di Linux

Mengonfigurasi konektivitas Hadoop

Pertama, konfigurasikan APS untuk menggunakan penyedia Hadoop spesifik Anda.

  1. Jalankan sp_configure dengan 'konektivitas hadoop' dan tetapkan nilai yang sesuai untuk penyedia Anda. Untuk menemukan nilai untuk penyedia Anda, lihat Konfigurasi Konektivitas PolyBase.

    -- Values map to various external data sources.  
    -- Example: value 7 stands for Hortonworks HDP 2.1 to 2.6 and 3.0 - 3.1 on Linux,
    -- 2.1 to 2.3 on Windows Server, and Azure blob storage  
    sp_configure @configname = 'hadoop connectivity', @configvalue = 7;
    GO
    
    RECONFIGURE
    GO
    
  2. Mulai ulang Wilayah APS menggunakan halaman Status Layanan di appliance Configuration Manager.

Aktifkan komputasi pushdown

Untuk meningkatkan performa kueri, aktifkan komputasi pushdown ke kluster Hadoop Anda:

  1. Buka koneksi desktop jarak jauh ke simpul Kontrol PDW.

  2. Temukan fileyarn-site.xml pada simpul Kontrol. Biasanya, jalurnya adalah:

    C:\Program Files\Microsoft SQL Server Parallel Data Warehouse\100\Hadoop\conf\  
    
  3. Pada komputer Hadoop, temukan file analog di direktori konfigurasi Hadoop. Dalam file , temukan dan salin nilai kunci konfigurasi yarn.application.classpath.

  4. Pada simpul Kontrol, dalam fileyarn.site.xml, temukan properti yarn.application.classpath . Tempelkan nilai dari komputer Hadoop ke dalam elemen nilai.

  5. Untuk semua versi CDH 5.X, Anda harus menambahkan parameter konfigurasi mapreduce.application.classpath baik ke akhir file yarn.site.xml Anda atau ke dalam file mapred-site.xml. HortonWorks mencakup konfigurasi ini dalam konfigurasi yarn.application.classpath. Lihat Konfigurasi PolyBase untuk contohnya.

Contoh file XML untuk nilai default kluster CDH 5.X

Yarn-site.xml dengan konfigurasi yarn.application.classpath dan mapreduce.application.classpath.

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
 <configuration>
   <property>
      <name>yarn.resourcemanager.connect.max-wait.ms</name>
      <value>40000</value>
   </property>
   <property>
      <name>yarn.resourcemanager.connect.retry-interval.ms</name>
      <value>30000</value>
   </property>
<!-- Applications' Configuration-->
   <property>
     <description>CLASSPATH for YARN applications. A comma-separated list of CLASSPATH entries</description>
      <!-- Please set this value to the correct yarn.application.classpath that matches your server side configuration -->
      <!-- For example: $HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/share/hadoop/common/*,$HADOOP_COMMON_HOME/share/hadoop/common/lib/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,$HADOOP_YARN_HOME/share/hadoop/yarn/*,$HADOOP_YARN_HOME/share/hadoop/yarn/lib/* -->
      <name>yarn.application.classpath</name>
      <value>$HADOOP_CLIENT_CONF_DIR,$HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,$HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,$HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/,$HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,$MR2_CLASSPATH*</value>
   </property>

<!-- kerberos security information, PLEASE FILL THESE IN ACCORDING TO HADOOP CLUSTER CONFIG
   <property>
      <name>yarn.resourcemanager.principal</name>
      <value></value>
   </property>
-->
</configuration>

Jika Anda memilih untuk memecah dua pengaturan konfigurasi Anda ke dalam mapred-site.xml dan yarn-site.xml, maka filenya adalah sebagai berikut:

yarn-site.xml

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
 <configuration>
   <property>
      <name>yarn.resourcemanager.connect.max-wait.ms</name>
      <value>40000</value>
   </property>
   <property>
      <name>yarn.resourcemanager.connect.retry-interval.ms</name>
      <value>30000</value>
   </property>
<!-- Applications' Configuration-->
   <property>
     <description>CLASSPATH for YARN applications. A comma-separated list of CLASSPATH entries</description>
      <!-- Please set this value to the correct yarn.application.classpath that matches your server side configuration -->
      <!-- For example: $HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/share/hadoop/common/*,$HADOOP_COMMON_HOME/share/hadoop/common/lib/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,$HADOOP_YARN_HOME/share/hadoop/yarn/*,$HADOOP_YARN_HOME/share/hadoop/yarn/lib/* -->
      <name>yarn.application.classpath</name>
      <value>$HADOOP_CLIENT_CONF_DIR,$HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,$HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,$HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*</value>
   </property>

<!-- kerberos security information, PLEASE FILL THESE IN ACCORDING TO HADOOP CLUSTER CONFIG
   <property>
      <name>yarn.resourcemanager.principal</name>
      <value></value>
   </property>
-->
</configuration>

mapred-site.xml

Perhatikan bahwa kami menambahkan properti mapreduce.application.classpath. Di CDH 5.x, Anda akan menemukan nilai konfigurasi di bawah konvensi penamaan yang sama di Ambari.

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration xmlns:xi="http://www.w3.org/2001/XInclude">
   <property>
     <name>mapred.min.split.size</name>
       <value>1073741824</value>
   </property>
   <property>
     <name>mapreduce.app-submission.cross-platform</name>
     <value>true</value>
   </property>
<property>
     <name>mapreduce.application.classpath</name>
     <value>$HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,$MR2_CLASSPATH</value>
   </property>


<!--kerberos security information, PLEASE FILL THESE IN ACCORDING TO HADOOP CLUSTER CONFIG
   <property>
     <name>mapreduce.jobhistory.principal</name>
     <value></value>
   </property>
   <property>
     <name>mapreduce.jobhistory.address</name>
     <value></value>
   </property>
-->
</configuration>

Contoh file XML untuk nilai default kluster HDP 3.X

yarn-site.xml

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
 <configuration>
  <property>
     <name>yarn.resourcemanager.connect.max-wait.ms</name>
     <value>40000</value>
  </property>
  <property>
     <name>yarn.resourcemanager.connect.retry-interval.ms</name>
     <value>30000</value>
  </property>
<!-- Applications' Configuration-->
  <property>
    <description>CLASSPATH for YARN applications. A comma-separated list of CLASSPATH entries</description>
     <!-- Please set this value to the correct yarn.application.classpath that matches your server side configuration -->
     <!-- For example: $HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/share/hadoop/common/*,$HADOOP_COMMON_HOME/share/hadoop/common/lib/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,$HADOOP_YARN_HOME/share/hadoop/yarn/*,$HADOOP_YARN_HOME/share/hadoop/yarn/lib/* -->
     <name>yarn.application.classpath</name>
     <value>$HADOOP_CONF_DIR,/usr/hdp/3.1.0.0-78/hadoop/*,/usr/hdp/3.1.0.0-78/hadoop/lib/*,/usr/hdp/current/hadoop-hdfs-client/*,/usr/hdp/current/hadoop-hdfs-client/lib/*,/usr/hdp/current/hadoop-yarn-client/*,/usr/hdp/current/hadoop-yarn-client/lib/*,/usr/hdp/3.1.0.0-78/hadoop-mapreduce/*,/usr/hdp/3.1.0.0-78/hadoop-yarn/*,/usr/hdp/3.1.0.0-78/hadoop-yarn/lib/*,/usr/hdp/3.1.0.0-78/hadoop-mapreduce/lib/*,/usr/hdp/share/hadoop/common/*,/usr/hdp/share/hadoop/common/lib/*,/usr/hdp/share/hadoop/tools/lib/*</value>
  </property>

<!-- kerberos security information, PLEASE FILL THESE IN ACCORDING TO HADOOP CLUSTER CONFIG
  <property>
     <name>yarn.resourcemanager.principal</name>
     <value></value>
  </property>
-->
</configuration>

Mengonfigurasi tabel eksternal

Untuk mengkueri data di sumber data Hadoop, Anda harus menentukan tabel eksternal untuk digunakan dalam kueri Transact-SQL. Langkah-langkah berikut menjelaskan cara mengonfigurasi tabel eksternal.

  1. Membuat kunci master pada database. Diperlukan untuk mengenkripsi rahasia kredensial.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo';  
    
  2. Buat kredensial cakupan database untuk kluster Hadoop yang diamankan Kerberos.

    -- IDENTITY: the Kerberos user name.  
    -- SECRET: the Kerberos password  
    CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
    WITH IDENTITY = '<hadoop_user_name>', Secret = '<hadoop_password>';  
    
  3. Buat sumber data eksternal dengan CREATE EXTERNAL DATA SOURCE.

    -- LOCATION (Required) : Hadoop Name Node IP address and port.  
    -- RESOURCE MANAGER LOCATION (Optional): Hadoop Resource Manager location to enable pushdown computation.  
    -- CREDENTIAL (Optional):  the database scoped credential, created above.  
    CREATE EXTERNAL DATA SOURCE MyHadoopCluster WITH (  
          TYPE = HADOOP,
          LOCATION ='hdfs://10.xxx.xx.xxx:xxxx',
          RESOURCE_MANAGER_LOCATION = '10.xxx.xx.xxx:xxxx',
          CREDENTIAL = HadoopUser1
    );  
    
  4. Buat format file eksternal dengan CREATE EXTERNAL FILE FORMAT.

    -- FORMAT TYPE: Type of format in Hadoop (DELIMITEDTEXT,  RCFILE, ORC, PARQUET).
    CREATE EXTERNAL FILE FORMAT TextFileFormat WITH (  
          FORMAT_TYPE = DELIMITEDTEXT,
          FORMAT_OPTIONS (FIELD_TERMINATOR ='|',
                USE_TYPE_DEFAULT = TRUE)  
    
  5. Buat tabel eksternal yang menunjuk ke data yang disimpan di Hadoop dengan CREATE EXTERNAL TABLE. Dalam contoh ini, data eksternal berisi data sensor mobil.

    -- LOCATION: path to file or directory that contains the data (relative to HDFS root).  
    CREATE EXTERNAL TABLE [dbo].[CarSensor_Data] (  
          [SensorKey] int NOT NULL,
          [CustomerKey] int NOT NULL,
          [GeographyKey] int NULL,
          [Speed] float NOT NULL,
          [YearMeasured] int NOT NULL  
    )  
    WITH (LOCATION='/Demo/',
          DATA_SOURCE = MyHadoopCluster,  
          FILE_FORMAT = TextFileFormat  
    );  
    
  6. Membuat statistik pada tabel eksternal.

    CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)  
    

Kueri PolyBase

Ada tiga fungsi yang cocok untuk PolyBase:

  • Kueri ad hoc terhadap tabel eksternal.
  • Mengimpor data.
  • Mengekspor data.

Kueri berikut memberikan contoh dengan data sensor mobil fiktif.

Kueri ad hoc

Kueri ad hoc berikut menggabungkan relasional dengan data Hadoop. Ini memilih pelanggan yang mengemudi lebih cepat dari 35 mph, menggabungkan data pelanggan terstruktur yang disimpan di APS dengan data sensor mobil yang disimpan di Hadoop.

SELECT DISTINCT Insured_Customers.FirstName,Insured_Customers.LastName,
       Insured_Customers. YearlyIncome, CarSensor_Data.Speed  
FROM Insured_Customers, CarSensor_Data  
WHERE Insured_Customers.CustomerKey = CarSensor_Data.CustomerKey and CarSensor_Data.Speed > 35
ORDER BY CarSensor_Data.Speed DESC  
OPTION (FORCE EXTERNALPUSHDOWN);   -- or OPTION (DISABLE EXTERNALPUSHDOWN)  

Mengimpor data

Kueri berikut mengimpor data eksternal ke APS. Contoh ini mengimpor data untuk driver cepat ke APS untuk melakukan analisis yang lebih mendalam. Untuk meningkatkan performa, ia memanfaatkan teknologi Columnstore di APS.

CREATE TABLE Fast_Customers
WITH
(CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = HASH (CustomerKey))
AS
SELECT DISTINCT
      Insured_Customers.CustomerKey, Insured_Customers.FirstName, Insured_Customers.LastName,   
      Insured_Customers.YearlyIncome, Insured_Customers.MaritalStatus  
from Insured_Customers INNER JOIN   
(  
      SELECT * FROM CarSensor_Data where Speed > 35   
) AS SensorD  
ON Insured_Customers.CustomerKey = SensorD.CustomerKey  

Mengekspor data

Kueri berikut mengekspor data dari APS ke Hadoop. Ini dapat digunakan untuk mengarsipkan data relasional ke Hadoop sambil tetap dapat mengkuerinya.

-- Export data: Move old data to Hadoop while keeping it query-able via an external table.  
CREATE EXTERNAL TABLE [dbo].[FastCustomers2009] 
WITH (  
      LOCATION='/archive/customer/2009',  
      DATA_SOURCE = HadoopHDP2,  
      FILE_FORMAT = TextFileFormat
)  
AS
SELECT T.* FROM Insured_Customers T1 JOIN CarSensor_Data T2  
ON (T1.CustomerKey = T2.CustomerKey)  
WHERE T2.YearMeasured = 2009 and T2.Speed > 40;  

Menampilkan objek PolyBase di SSDT

Dalam SQL Server Data Tools, tabel eksternal ditampilkan dalam folder Terpisah Tabel Eksternal. Sumber data eksternal dan format file eksternal berada dalam subfolder di bawah Sumber Daya Eksternal.

Objek PolyBase di SSDT

Langkah berikutnya

Untuk pengaturan keamanan Hadoop, lihat mengonfigurasi keamanan Hadoop.
Untuk informasi selengkapnya tentang PolyBase, lihat Apa itu PolyBase?.