CDH (Cloudera's Distribution including Apache Hadoop), Hadoop'ın popüler bir dağıtımıdır. CDH 6.0.1 (Hadoop 3.0.0 ile) gibi daha yeni sürümler OSS'i yerel olarak desteklese de CDH 5 (Hadoop 2.6 ile) gibi eski sürümler desteklemez. Bu konuda, bir CDH 5 kümesini OSS'ten veri okuyacak ve OSS'e veri yazacak şekilde nasıl yapılandıracağınız açıklanmaktadır.
Önkoşullar
Çalışan bir CDH 5 kümeniz olmalıdır. Bu konuda örnek olarak CDH 5.14.4 kullanılmaktadır. Bir CDH 5 kümesinin nasıl kurulacağına ilişkin talimatlar için resmi belgelere bakın.
Arka plan bilgileri
CDH 5, Kaynak Yöneticisi'nin gereksinim duyduğu httpclient ve httpcore kitaplıklarının daha eski bir sürümünü (sürüm 4.2.5) kullanır. Ancak OSS SDK bu kitaplıkların daha yeni sürümlerini gerektirir. Bu konu, söz konusu bağımlılık çakışmasını gidermek için bir geçici çözüm sunmaktadır.
Adım 1: OSS yapılandırmalarını ekleme
Aşağıdaki adımları CDH kümenizdeki tüm düğümlerde uygulayın:
-
CDH 5 kurulumunuzun ${CDH_HOME} konumunda bulunan dizin yapısını kontrol edin:
[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 shareNotBu konuda, ${} içine alınan öğeler ortam değişkenleridir. Bunları kendi ortamınıza uygun değerlerle değiştirin.
-
CDH 5.14.4 için OSS destek paketini indirin ve CDH 5 kurulum dizininizin
jarsklasörüne kaydedin.Bu paket, CDH 5.14.4 içindeki Hadoop sürümüne göre derlenmiştir ve OSS desteği için gerekli yamayı içerir. Diğer CDH sürümleri için paketleri aşağıdaki bağlantılardan indirebilirsiniz:
-
Not
CDH 6.3.2 için paket dosyalarını CDH 6 kurulum dizininizin
jarsklasörüne kopyalayın. Ardından paketi dağıtmak üzere sonraki adımları izleyin. Bu işlem,aliyun-sdk-oss-3.4.1.jardosyasını güncellemeyi vealiyun-java-sdk-*.jardosyaları için ilgili konumlara sembolik bağlantılar oluşturmayı içerir.
-
Paketi çıkarın.
[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 -
${CDH_HOME}/lib/hadoopdizinine gidin ve aşağıdaki komutları çalıştırın:[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 Kaynak Yöneticisinin dağıtıldığı düğümde ${CDH_HOME}/lib/hadoop-yarn/bin/yarn dizinine gidin. Betiği açın ve
CLASSPATH=${CLASSPATH}:$HADOOP_YARN_HOME/${YARN_DIR}/* CLASSPATH=${CLASSPATH}:$HADOOP_YARN_HOME/${YARN_LIB_JARS_DIR}/*ifadesiniCLASSPATH=$HADOOP_YARN_HOME/${YARN_DIR}/*:${CLASSPATH}CLASSPATH=$HADOOP_YARN_HOME/${YARN_LIB_JARS_DIR}/*:${CLASSPATH}ile değiştirin.-
Kaynak Yöneticisinin dağıtıldığı düğümde
${CDH_HOME}/lib/hadoop-yarn/libdizinine gidin ve aşağıdaki komutları çalıştırın:[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 -
Gerekli yapılandırmaları Cloudera Manager kullanarak ekleyin.
Kümeniz Cloudera Manager tarafından yönetilmiyorsa
core-site.xmldosyasını doğrudan değiştirebilirsiniz. Cloudera Manager'da HDFS hizmetinin Cluster-wide Advanced Configuration Snippet (Safety Valve) for core-site.xml sayfasına gidin ve OSS ile ilgili parametreleri ekleyin.
Parametre
Değer
fs.oss.endpointOSS için bağlantı uç noktası.
Örneğin Çin (Hangzhou) bölgesi için uç nokta
oss-cn-hangzhou.aliyuncs.comşeklindedir. Uç noktalar hakkında daha fazla bilgi için bkz. Bölgeler ve uç noktalar.
fs.oss.accessKeyId
AccessKey ID'niz. Bir AccessKey çiftinin nasıl elde edileceğini öğrenmek için bkz. AccessKey çifti oluşturma.
fs.oss.accessKeySecret
AccessKey Secret'ınız. Bir AccessKey çiftinin nasıl elde edileceğini öğrenmek için bkz. AccessKey çifti oluşturma.
fs.oss.impl
Hadoop OSS dosya sistemi için uygulama sınıfı. Bu değeriorg.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystemolarak ayarlayın.
fs.oss.buffer.dirGeçici dosya dizini.
Önerilen değer:
/tmp/oss
fs.oss.connection.secure.enabledHTTPS'in etkinleştirilip etkinleştirilmeyeceğini belirtir. HTTPS'in etkinleştirilmesi performansı etkileyebilir.
Önerilen değer: false
fs.oss.connection.maximumOSS'e yönelik maksimum bağlantı sayısı.
Önerilen değer: 2048
Parametreler hakkında daha fazla bilgi için bkz. Hadoop-Aliyun modülü.
Cloudera Manager'ın istemi üzerine kümeyi yeniden başlatın.
-
OSS'ten okuma ve OSS'e yazma işlemlerini test edin.
-
Veri okumayı test etme:
hadoop fs -ls oss://${your-bucket-name}/ -
Veri yazmayı test etme:
hadoop fs -mkdir oss://${your-bucket-name}/hadoop-testOSS'ten okuma ve OSS'e yazma yapabiliyorsanız kurulum başarılıdır. Aksi takdirde yapılandırmanızı gözden geçirin.
-
Adım 2: Impala'yı OSS'i destekleyecek şekilde yapılandırma
Impala HDFS'de depolanan verileri doğrudan sorgulayabilir. CDH 5 kümeniz için OSS desteğini etkinleştirdikten sonra OSS'teki verileri sorgulamak için de Impala'yı kullanabilirsiniz. OSS SDK httpclient ve httpcore kitaplıklarının daha yeni sürümlerini gerektirdiğinden Impala'nın dağıtıldığı tüm düğümlerde aşağıdaki adımları uygulayın:
-
${CDH_HOME}/lib/impala/libdizinine gidin ve aşağıdaki komutları çalıştırın:[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 -
${CDH_HOME}/bindizinine gidin.impalad,statestoredvecatalogdbetiklerini değiştirin. Her dosyada sonexeckomutundan önce aşağıdaki satırı ekleyin: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 -
Tüm düğümlerde Impala ile ilgili tüm işlemleri yeniden başlatın.
Yeniden başlatma işleminden sonra OSS'teki verileri sorgulamak için Impala'yı kullanabilirsiniz.
Yapılandırmayı doğrulama
Örneğin OSS'te depolanan ve call_center adlı bir TPC-DS kıyaslama tablosunu ele alalım. Bu verilere işaret eden bir harici tablo oluşturabilir ve ardından kayıtları cc_country alanına göre gruplandırarak saymak için bir sorgu çalıştırabilirsiniz.
[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