All Products
Search
Document Center

Object Storage Service:Baca dan tulis OSS dengan CDH 5 Hadoop

Last Updated:Sep 12, 2026

CDH (Cloudera's Distribution including Apache Hadoop) adalah distribusi Hadoop yang populer. Meskipun versi yang lebih baru seperti CDH 6.0.1 (dengan Hadoop 3.0.0) secara native mendukung OSS, versi lama seperti CDH 5 (dengan Hadoop 2.6) tidak. Topik ini menjelaskan cara mengonfigurasi kluster CDH 5 untuk membaca data dari dan menulis data ke OSS.

Prasyarat

Anda memiliki kluster CDH 5 yang sedang berjalan. Topik ini menggunakan CDH 5.14.4 sebagai contoh. Untuk petunjuk cara menyiapkan kluster CDH 5, lihat dokumentasi resmi.

Informasi latar belakang

CDH 5 menggunakan versi lama pustaka httpclient dan httpcore (versi 4.2.5), sebagaimana dipersyaratkan oleh Resource Manager-nya. Namun, SDK OSS memerlukan versi yang lebih baru dari pustaka-pustaka tersebut. Topik ini menyediakan solusi untuk mengatasi konflik dependensi ini.

Langkah 1: Tambahkan konfigurasi OSS

Lakukan langkah-langkah berikut di semua node dalam kluster CDH Anda:

  1. Periksa struktur direktori instalasi CDH 5 Anda, yang terletak di ${CDH_HOME}:

    [root@cdh-master CDH-5.14.4-1.cdh5.14.4.p0.3]# ls -lh
    total 100K
    drwxr-xr-x  2 root root 4.0K Jun  12 21:03 bin
    drwxr-xr-x 27 root root 4.0K Jun  12 20:57 etc
    drwxr-xr-x  5 root root 4.0K Jun  12 20:57 include
    drwxr-xr-x  2 root root  68K Jun  12 21:09 jars
    drwxr-xr-x 38 root root 4.0K Jun  12 21:03 lib
    drwxr-xr-x  3 root root 4.0K Jun  12 20:57 lib64
    drwxr-xr-x  3 root root 4.0K Jun  12 20:51 libexec
    drwxr-xr-x  2 root root 4.0K Jun  12 21:02 meta
    drwxr-xr-x  4 root root 4.0K Jun  12 21:03 share                    
    Catatan

    Dalam topik ini, item yang diapit oleh ${} adalah variabel lingkungan. Ganti dengan nilai yang sesuai untuk lingkungan Anda.

  2. Unduh paket dukungan OSS untuk CDH 5.14.4 ke folder jars direktori instalasi CDH 5 Anda.

    Paket ini dikompilasi berdasarkan versi Hadoop dalam CDH 5.14.4 dan mencakup patch yang diperlukan untuk dukungan OSS. Anda dapat mengunduh paket untuk versi CDH lainnya dari tautan berikut:

    • CDH 5.8.5

    • CDH 5.4.4

    • CDH 6.3.2

      Catatan

      Untuk CDH 6.3.2, salin file paket ke folder jars direktori instalasi CDH 6 Anda. Kemudian, ikuti langkah-langkah berikutnya untuk menerapkan paket tersebut. Ini melibatkan pembaruan file aliyun-sdk-oss-3.4.1.jar dan pembuatan tautan simbolik untuk file aliyun-java-sdk-*.jar ke lokasi yang sesuai.

  3. Ekstrak paket tersebut.

    [root@cdh-master CDH-5.14.4-1.cdh5.14.4.p0.3]# tar -tvf hadoop-oss-cdh-5.14.4.tar.gz 
    drwxr-xr-x root/root 0 2018-10-08 18:16 hadoop-oss-cdh-5.14.4/
    -rw-r--r-- root/root 13277 2018-10-08 17:36 hadoop-oss-cdh-5.14.4/aliyun-java-sdk-sts-3.0.0.jar
    -rw-r--r-- root/root 326724 2018-10-08 18:16 hadoop-oss-cdh-5.14.4/httpcore-4.4.4.jar
    -rw-r--r-- root/root 524927 2018-10-08 17:36 hadoop-oss-cdh-5.14.4/aliyun-sdk-oss-3.4.1.jar
    -rw-r--r-- root/root 116337 2018-10-08 17:36 hadoop-oss-cdh-5.14.4/aliyun-java-sdk-core-3.4.0.jar
    -rw-r--r-- root/root 215492 2018-10-08 17:36 hadoop-oss-cdh-5.14.4/aliyun-java-sdk-ram-3.0.0.jar
    -rw-r--r-- root/root 788137 2018-10-08 17:36 hadoop-oss-cdh-5.14.4/aliyun-java-sdk-ecs-4.2.0.jar
    -rw-r--r-- root/root 70017 2018-10-08 17:36 hadoop-oss-cdh-5.14.4/hadoop-aliyun-2.6.0-cdh5.14.4.jar
    -rw-r--r-- root/root 736658 2018-10-08 18:16 hadoop-oss-cdh-5.14.4/httpclient-4.5.2.jar                       
  4. Buka direktori ${CDH_HOME}/lib/hadoop dan jalankan perintah berikut:

    [root@cdh-master hadoop]# rm -f lib/httpclient-4.2.5.jar
    [root@cdh-master hadoop]# rm -f lib/httpcore-4.2.5.jar
    [root@cdh-master hadoop]# ln -s ../../jars/hadoop-aliyun-2.6.0-cdh5.14.4.jar hadoop-aliyun-2.6.0-cdh5.14.4.jar
    [root@cdh-master hadoop]# ln -s hadoop-aliyun-2.6.0-cdh5.14.4.jar hadoop-aliyun.jar
    [root@cdh-master hadoop]# cd lib
    [root@cdh-master lib]# ln -s ../../../jars/aliyun-java-sdk-core-3.4.0.jar aliyun-java-sdk-core-3.4.0.jar
    [root@cdh-master lib]# ln -s ../../../jars/aliyun-java-sdk-ecs-4.2.0.jar aliyun-java-sdk-ecs-4.2.0.jar
    [root@cdh-master lib]# ln -s ../../../jars/aliyun-java-sdk-ram-3.0.0.jar aliyun-java-sdk-ram-3.0.0.jar
    [root@cdh-master lib]# ln -s ../../../jars/aliyun-java-sdk-sts-3.0.0.jar aliyun-java-sdk-sts-3.0.0.jar
    [root@cdh-master lib]# ln -s ../../../jars/aliyun-sdk-oss-3.4.1.jar aliyun-sdk-oss-3.4.1.jar
    [root@cdh-master lib]# ln -s ../../../jars/httpclient-4.5.2.jar httpclient-4.5.2.jar
    [root@cdh-master lib]# ln -s ../../../jars/httpcore-4.4.4.jar httpcore-4.4.4.jar
    [root@cdh-master lib]# ln -s ../../../jars/jdom-1.1.jar jdom-1.1.jar
  5. ${CDH_HOME}/lib/hadoop-yarn/bin/yarnCLASSPATH=${CLASSPATH}:$HADOOP_YARN_HOME/${YARN_DIR}/* CLASSPATH=${CLASSPATH}:$HADOOP_YARN_HOME/${YARN_LIB_JARS_DIR}/*CLASSPATH=$HADOOP_YARN_HOME/${YARN_DIR}/*:${CLASSPATH} CLASSPATH=$HADOOP_YARN_HOME/${YARN_LIB_JARS_DIR}/*:${CLASSPATH}Pada node tempat Resource Manager dideploy, buka direktori tersebut, lalu edit skrip dan ganti isinya dengan kode di atas.

  6. Pada node tempat Resource Manager dideploy, buka direktori ${CDH_HOME}/lib/hadoop-yarn/lib dan jalankan perintah berikut:

    [root@cdh-master lib]# ln -s ../../../jars/httpclient-4.2.5.jar httpclient-4.2.5.jar
    [root@cdh-master lib]# ln -s ../../../jars/httpcore-4.2.5.jar httpcore-4.2.5.jar
  7. Tambahkan konfigurasi yang diperlukan menggunakan Cloudera Manager.

    Jika kluster Anda tidak dikelola oleh Cloudera Manager, Anda dapat memodifikasi file core-site.xml secara langsung. Di Cloudera Manager, navigasikan ke halaman Cluster-wide Advanced Configuration Snippet (Safety Valve) for core-site.xml pada layanan HDFS dan tambahkan parameter terkait OSS.

    Parameter

    Nilai

    fs.oss.endpoint

    Titik akhir koneksi untuk OSS.

    Sebagai contoh, titik akhir untuk wilayah Tiongkok (Hangzhou) adalah <span data-tag="ph" id="codeph_p71_zlz_zvy"><code data-tag="inlineCode" id="3832962f29hlg">oss-cn-hangzhou.aliyuncs.com</span>. Untuk informasi selengkapnya mengenai titik akhir, lihat Wilayah dan titik akhir.

    fs.oss.accessKeyId

    ID AccessKey Anda. Untuk mempelajari cara memperoleh pasangan Kunci Akses, lihat Buat pasangan Kunci Akses.

    fs.oss.accessKeySecret

    Secret AccessKey Anda. Untuk mempelajari cara memperoleh pasangan Kunci Akses, lihat Buat pasangan Kunci Akses.

    fs.oss.impl

    Kelas implementasi untuk sistem file Hadoop OSS. Atur ini ke <span data-tag="ph" id="codeph_i3x_lvb_cxe"><code data-tag="inlineCode" id="77e571ba033kw">org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem.

    fs.oss.buffer.dir

    Direktori file sementara.

    Nilai yang disarankan: <span data-tag="ph" id="codeph_568_6qa_z1b"><code data-tag="inlineCode" id="64fec0dcf8xwt">/tmp/oss

    fs.oss.connection.secure.enabled

    Menentukan apakah HTTPS diaktifkan. Mengaktifkan HTTPS dapat memengaruhi kinerja.

    Nilai yang direkomendasikan: false

    fs.oss.connection.maximum

    Jumlah maksimum koneksi ke OSS.

    Nilai yang direkomendasikan: 2048

    Untuk informasi lebih lanjut tentang parameter-parameter tersebut, lihat Modul Hadoop-Aliyun.

  8. Restart kluster sesuai permintaan Cloudera Manager.

  9. Uji pembacaan dari dan penulisan ke OSS.

    • Uji pembacaan data:

      hadoop fs -ls oss://${your-bucket-name}/
    • Uji penulisan data:

      hadoop fs -mkdir oss://${your-bucket-name}/hadoop-test

      Jika Anda dapat membaca dari dan menulis ke OSS, pengaturan berhasil. Jika tidak, tinjau kembali konfigurasi Anda.

Langkah 2: Konfigurasikan Impala untuk mendukung OSS

Impala dapat langsung melakukan kueri terhadap data yang disimpan di HDFS. Setelah Anda mengaktifkan dukungan OSS untuk kluster CDH 5 Anda, Anda juga dapat menggunakan Impala untuk melakukan kueri terhadap data di OSS. Karena SDK OSS memerlukan versi yang lebih baru dari pustaka httpclient dan httpcore, ikuti langkah-langkah berikut di semua node tempat Impala dideploy:

  1. Buka direktori ${CDH_HOME}/lib/impala/lib dan jalankan perintah berikut:

    [root@cdh-master lib]# rm -f httpclient-4.2.5.jar httpcore-4.2.5.jar
    [root@cdh-master lib]# ln -s ../../../jars/httpclient-4.5.2.jar httpclient-4.5.2.jar
    [root@cdh-master lib]# ln -s ../../../jars/httpcore-4.4.4.jar httpcore-4.4.4.jar
    [root@cdh-master lib]# ln -s ../../../jars/hadoop-aliyun-2.6.0-cdh5.14.4.jar hadoop-aliyun.jar
    [root@cdh-master lib]# ln -s ../../../jars/aliyun-java-sdk-core-3.4.0.jar aliyun-java-sdk-core-3.4.0.jar
    [root@cdh-master lib]# ln -s ../../../jars/aliyun-java-sdk-ecs-4.2.0.jar aliyun-java-sdk-ecs-4.2.0.jar
    [root@cdh-master lib]# ln -s ../../../jars/aliyun-java-sdk-ram-3.0.0.jar aliyun-java-sdk-ram-3.0.0.jar
    [root@cdh-master lib]# ln -s ../../../jars/aliyun-java-sdk-sts-3.0.0.jar aliyun-java-sdk-sts-3.0.0.jar
    [root@cdh-master lib]# ln -s ../../../jars/aliyun-sdk-oss-3.4.1.jar aliyun-sdk-oss-3.4.1.jar
    [root@cdh-master lib]# ln -s ../../../jars/jdom-1.1.jar jdom-1.1.jar
  2. Buka direktori ${CDH_HOME}/bin. Modifikasi skrip impalad, statestored, dan catalogd. Pada setiap file, tambahkan baris berikut sebelum perintah exec terakhir:

    export CLASSPATH=$CLASSPATH:${IMPALA_HOME}/lib/httpclient-4.5.2.jar:${IMPALA_HOME}/lib/httpcore-4.4.4.jar:${IMPALA_HOME}/lib/hadoop-aliyun.jar:${IMPALA_HOME}/lib/aliyun-java-sdk-core-3.4.0.jar:${IMPALA_HOME}/lib/aliyun-java-sdk-ecs-4.2.0.jar:${IMPALA_HOME}/lib/aliyun-java-sdk-ram-3.0.0.jar:${IMPALA_HOME}/lib/aliyun-java-sdk-sts-3.0.0.jar:${IMPALA_HOME}/lib/aliyun-sdk-oss-3.4.1.jar:${IMPALA_HOME}/lib/jdom-1.1.jar
  3. Restart semua proses terkait Impala di semua node.

    Setelah restart, Anda dapat menggunakan Impala untuk melakukan kueri terhadap data di OSS.

Verifikasi konfigurasi

Sebagai contoh, pertimbangkan tabel benchmark TPC-DS bernama call_center yang disimpan di OSS. Anda dapat membuat tabel eksternal yang mengarah ke data ini, lalu menjalankan kueri untuk menghitung jumlah catatan yang dikelompokkan berdasarkan cc_country.

[root@cdh-master ~]# impala-shell -i cdh-slave01:21000
Starting Impala Shell without Kerberos authentication
Connected to cdh-slave01:21000
Server version: impalad version 2.11.0-cdh5.14.4 RELEASE (build20e635646a13347800fad36a7d0b1da25ab32404)
***********************************************************************************
Welcome to the Impala shell.
(Impala Shell v2.11.0-cdh5.14.4 (20e6356) built on Tue Jun 1203:43:08 PDT 2018)
The HISTORY command lists all shell commands in chronological order.
***********************************************************************************
[cdh-slave01:21000] > droptableifexists call_center;
Query: droptableifexists call_center
[cdh-slave01:21000] >
[cdh-slave01:21000] > createexternaltable call_center(
                    >       cc_call_center_sk         bigint
                    > ,     cc_call_center_id         string
                    > ,     cc_rec_start_date        string
                    > ,     cc_rec_end_date          string
                    > ,     cc_closed_date_sk         bigint
                    > ,     cc_open_date_sk           bigint
                    > ,     cc_name                   string
                    > ,     cc_class                  string
                    > ,     cc_employees              int
                    > ,     cc_sq_ft                  int
                    > ,     cc_hours                  string
                    > ,     cc_manager                string
                    > ,     cc_mkt_id                 int
                    > ,     cc_mkt_class              string
                    > ,     cc_mkt_desc               string
                    > ,     cc_market_manager         string
                    > ,     cc_division               int
                    > ,     cc_division_name          string
                    > ,     cc_company                int
                    > ,     cc_company_name           string
                    > ,     cc_street_number          string
                    > ,     cc_street_name            string
                    > ,     cc_street_type            string
                    > ,     cc_suite_number           string
                    > ,     cc_city                   string
                    > ,     cc_county                 string
                    > ,     cc_state                  string
                    > ,     cc_zip                    string
                    > ,     cc_country                string
                    > ,     cc_gmt_offset             double
                    > ,     cc_tax_percentage         double
                    > )
                    > rowformatdelimitedfieldsterminatedby'|'
                    > location 'oss://${your-bucket-name}/call_center';
Query: createexternaltable call_center(
      cc_call_center_sk         bigint
,     cc_call_center_id         string
,     cc_rec_start_date        string
,     cc_rec_end_date          string
,     cc_closed_date_sk         bigint
,     cc_open_date_sk           bigint
,     cc_name                   string
,     cc_class                  string
,     cc_employees              int
,     cc_sq_ft                  int
,     cc_hours                  string
,     cc_manager                string
,     cc_mkt_id                 int
,     cc_mkt_class              string
,     cc_mkt_desc               string
,     cc_market_manager         string
,     cc_division               int
,     cc_division_name          string
,     cc_company                int
,     cc_company_name           string
,     cc_street_number          string
,     cc_street_name            string
,     cc_street_type            string
,     cc_suite_number           string
,     cc_city                   string
,     cc_county                 string
,     cc_state                  string
,     cc_zip                    string
,     cc_country                string
,     cc_gmt_offset             double
,     cc_tax_percentage         double
)
rowformatdelimitedfieldsterminatedby'|'
location 'oss://${your-bucket-name}/call_center'
Fetched 0row(s) in0.07s
[cdh-slave01:21000] > select cc_country, count(*) from call_center groupby cc_country;
Query: select cc_country, count(*) from call_center groupby cc_country
Query submitted at: 2018-10-2816:21:13 (Coordinator: http://cdh-slave01:25000)
Query progress can be monitored at: http://cdh-slave01:25000/query_plan?query_id=fb4e09977145f367:3bdfe4d600000000
+---------------+----------+
| cc_country    | count(*) |
+---------------+----------+
| United States | 30       |
+---------------+----------+
Fetched 1 row(s) in 4.71s