CDH(Cloudera's Distribution, including Apache Hadoop)是众多Hadoop发行版本中的一种,最新版本CDH6.0.1中的Hadoop3.0.0版本已经支持OSS,但CDH5中的Hadoop2.6版本不支持OSS。本文介绍如何配置CDH5支持OSS读写。
前提条件
背景信息
由于CDH5的httpclient和httpcore这两个组件版本较低(4.2.5),Resource Manager要求的httpclient和httpcore必须是低版本,而OSS SDK要求这两个组件的版本较高。因此,本文提供了一个workaround方案。
步骤一:增加OSS配置
您需要在所有的CDH节点执行以下操作:
步骤二:配置Impala对OSS的支持
Impala可以直接查询存储在HDFS的数据,在CDH5支持OSS后,就可以直接查询存储在OSS的数据。OSS SDK要求这两个组件的版本较高,所以需要在所有部署Impala的节点执行以下操作:
验证配置
TPC-DS的benchmark有一张表为
call_center,假设该表存储在OSS中,我们可以创建一个外部表指向它,并且查询这张表根据
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
更多参考
关于Hadoop更多内容,请参见Hadoop支持集成OSS。