CDH(Cloudera's Distribution, including Apache Hadoop)는 업계에서 각광받는 Hadoop의 릴리스 버전입니다. 본 문서는 CDH 환경에서 HDFS 프로토콜을 통해 객체 스토리지(Cloud Object Storage, COS) 버킷에 액세스하는 방법을 소개합니다. 이 기능을 통해 빅 데이터 컴퓨팅과 스토리지를 분리하여 효율적인 저비용 빅 데이터 솔루션을 제공합니다.
주의:HDFS 프로토콜을 통해 COS 버킷에 액세스하려면 먼저 메타데이터 가속 기능을 활성화해야 합니다.
빅 데이터 컴포넌트에 대한 현재 COS 지원은 다음과 같습니다.
모듈 이름 | CHDFS 빅 데이터 모듈 지원 현황 | 서비스 모듈 재시작 필요 여부 |
---|---|---|
Yarn | 지원 | NodeManager 재시작 |
Yarn | 지원 | NodeManager 재시작 |
Hive | 지원 | HiveServer 및 HiveMetastore 재시작 |
Spark | 지원 | NodeManager 재시작 |
Sqoop | 지원 | NodeManager 재시작 |
Presto | 지원 | HiveServer, HiveMetastore, Presto 재시작 |
Flink | 지원 | 필요 없음 |
Impala | 지원 | 필요 없음 |
EMR | 지원 | 필요 없음 |
자체구축 모듈 | 향후 지원 | 없음 |
HBase | 권장하지 않음 | 없음 |
본 문서에 종속된 모듈 버전은 다음과 같습니다.
Cluster-wide Advanced Configuration Snippet(Safety Valve) for core-site.xml
코드 창에 COS 빅 데이터 서비스 설정을 입력합니다.<property>
<name>fs.AbstractFileSystem.ofs.impl</name>
<value>com.qcloud.chdfs.fs.CHDFSDelegateFSAdapter</value>
</property>
<property>
<name>fs.ofs.impl</name>
<value>com.qcloud.chdfs.fs.CHDFSHadoopFileSystemAdapter</value>
</property>
<!--로컬 cache의 임시 디렉터리로, 데이터 읽기/쓰기의 경우 메모리 cache가 부족할 때는 로컬 디스크에 쓰기 하고 관련 경로가 없을 때는 자동 생성합니다.-->
<property>
<name>fs.ofs.tmp.cache.dir</name>
<value>/data/emr/hdfs/tmp/chdfs/</value>
</property>
<!--appId-->
<property>
<name>fs.ofs.user.appid</name>
<value>1250000000</value>
</property>
다음은 필수 설정 항목(core-site.xml에 추가 필요)입니다. 기타 설정 항목은 컴퓨팅 클러스터에 COS 버킷 마운트를 참고하십시오.
설정 항목 | 값 | 의미 |
---|---|---|
fs.ofs.user.appid | 1250000000 | 사용자 appid |
fs.ofs.tmp.cache.dir | /data/emr/hdfs/tmp/chdfs/ | 로컬 cache용 임시 디렉터리 |
fs.ofs.impl | com.qcloud.chdfs.fs.CHDFSHadoopFileSystemAdapter | FileSystem용 chdfs 구현 클래스, com.qcloud.chdfs.fs.CHDFSHadoopFileSystemAdapter로 고정 |
fs.AbstractFileSystem.ofs.impl | com.qcloud.chdfs.fs.CHDFSDelegateFSAdapter | AbstractFileSystem용 chdfs 구현 클래스, com.qcloud.chdfs.fs.CHDFSDelegateFSAdapter로 고정 |
cp chdfs_hadoop_plugin_network-2.0.jar /opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hadoop-hdfs/
주의:클러스터의 기기마다 동일한 위치에 SDK 패키지를 설치해야 합니다.
Hadoop Distcp 툴을 사용해 CDH HDFS 데이터를 COS 버킷에 마이그레이션합니다. 자세한 내용은 Hadoop 파일 시스템과 COS 간의 데이터 마이그레이션을 참고하십시오.
작업 단계
예시
Hadoop 표준 테스트의 TeraGen 및 TeraSort입니다.
hadoop jar ./hadoop-mapreduce-examples-2.7.3.jar teragen -Dmapred.map.tasks=4 1099 ofs://examplebucket-1250000000/teragen_5/
hadoop jar ./hadoop-mapreduce-examples-2.7.3.jar terasort -Dmapred.map.tasks=4 ofs://examplebucket-1250000000/teragen_5/ ofs://examplebucket-1250000000/result14
설명:
ofs:// schema
뒷부분을 사용자 CHDFS의 마운트 포인트 경로로 변경하십시오.
작업 단계
예시
사용자의 실제 작업 쿼리입니다. Hive 명령 라인을 실행하여 Location을 생성하고, 이를 CHDFS의 파티션 테이블로 사용하는 경우입니다.
CREATE TABLE `report.report_o2o_pid_credit_detail_grant_daily`(
`cal_dt` string,
`change_time` string,
`merchant_id` bigint,
`store_id` bigint,
`store_name` string,
`wid` string,
`member_id` bigint,
`meber_card` string,
`nickname` string,
`name` string,
`gender` string,
`birthday` string,
`city` string,
`mobile` string,
`credit_grant` bigint,
`change_reason` string,
`available_point` bigint,
`date_time` string,
`channel_type` bigint,
`point_flow_id` bigint)
PARTITIONED BY (
`topicdate` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
'ofs://examplebucket-1250000000/user/hive/warehouse/report.db/report_o2o_pid_credit_detail_grant_daily'
TBLPROPERTIES (
'last_modified_by'='work',
'last_modified_time'='1589310646',
'transient_lastDdlTime'='1589310646')
SQL 쿼리 실행:
select count(1) from report.report_o2o_pid_credit_detail_grant_daily;
모니터링 결과는 다음과 같습니다.
Tez 엔진은 COS의 클라이언트 설치 패키지를 Tez의 압축 패키지 내로 가져와야 합니다. 다음은 apache-tez.0.8.5를 예시로 한 설명입니다.
작업 단계
작업 단계
예시
Spark example word count 테스트를 진행합니다.
spark-submit --class org.apache.spark.examples.JavaWordCount --executor-memory 4g --executor-cores 4 ./spark-examples-1.6.0-cdh5.16.1-hadoop2.6.0-cdh5.16.1.jar ofs://examplebucket-1250000000/wordcount
실행 결과는 다음과 같습니다.
작업 단계
예시
MYSQL 테이블을 COS에 내보냅니다. 관계형 데이터베이스 및 HDFS의 가져오기/내보내기 문서를 참고하여 테스트를 진행하십시오.
sqoop import --connect "jdbc:mysql://IP:PORT/mysql" --table sqoop_test --username root --password 123 --target-dir ofs://examplebucket-1250000000/sqoop_test
실행 결과는 다음과 같습니다.
작업 단계
예시
HIVE에서 Location이 COS인 테이블 쿼리 생성:
select * from chdfs_test_table where bucket is not null limit 1;
설명:chdfs_test_table은 location이 ofs scheme인 테이블입니다.
쿼리 결과는 다음과 같습니다.
문제 해결에 도움이 되었나요?