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:
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 shareCatatanDalam topik ini, item yang diapit oleh
${}adalah variabel lingkungan. Ganti dengan nilai yang sesuai untuk lingkungan Anda.Unduh paket dukungan OSS untuk CDH 5.14.4 ke folder
jarsdirektori 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:
- Catatan
Untuk CDH 6.3.2, salin file paket ke folder
jarsdirektori instalasi CDH 6 Anda. Kemudian, ikuti langkah-langkah berikutnya untuk menerapkan paket tersebut. Ini melibatkan pembaruan filealiyun-sdk-oss-3.4.1.jardan pembuatan tautan simbolik untuk filealiyun-java-sdk-*.jarke lokasi yang sesuai.
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.jarBuka direktori
${CDH_HOME}/lib/hadoopdan 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${CDH_HOME}/lib/hadoop-yarn/bin/yarn
CLASSPATH=${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.Pada node tempat Resource Manager dideploy, buka direktori
${CDH_HOME}/lib/hadoop-yarn/libdan 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.jarTambahkan konfigurasi yang diperlukan menggunakan Cloudera Manager.
Jika kluster Anda tidak dikelola oleh Cloudera Manager, Anda dapat memodifikasi file
core-site.xmlsecara 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/ossfs.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.
Restart kluster sesuai permintaan Cloudera Manager.
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-testJika 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:
Buka direktori
${CDH_HOME}/lib/impala/libdan 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.jarBuka direktori
${CDH_HOME}/bin. Modifikasi skripimpalad,statestored, dancatalogd. Pada setiap file, tambahkan baris berikut sebelum perintahexecterakhir: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.jarRestart 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