투명한 가속화 기능은 CosN의 COS 액세스 기능을 가속화하는데 사용합니다. CosN 툴은 Tencent Cloud Cloud Object Storage(COS)이 제공하는 표준 Hadoop 파일 시스템을 기반으로 구현되었으며, Hadoop, Spark 및 Tez 등 빅 데이터 컴퓨팅 프레임워크와 COS를 통합하는 기능을 지원합니다. 사용자는 Hadoop 파일 시스템 인터페이스를 구현한 CosN 플러그인을 사용하여, COS에 저장된 데이터를 읽기/쓰기할 수 있습니다. CosN 툴을 사용하여 COS에 액세스하는 기존 사용자를 위해, GooseFS는 클라이언트 경로 매핑 방법을 제공하여 사용자가 현재 Hive table 정의를 수정하지 않고도 CosN scheme을 사용하여 GooseFS에 액세스할 수 있도록 합니다. 해당 특성은 사용자로 하여금 기존 테이블 정의를 수정하지 않는 전제 하에 편리하게 GooseFS의 기능과 성능을 비교 테스트 할 수 있도록 합니다. 클라우드 HDFS 사용자(CHDFS)는, 설정 변경을 통해 OFS Scheme를 사용하여 GooseFS에 액세스하는 목적을 달성할 수 있습니다.
CosN Schema와 GooseFS Schema의 매핑 설명은 아래와 같습니다.
Namespace warehouse 에 상응하는 UFS 경로가 ‘cosn://examplebucket-1250000000/data/warehouse/’인 경우, CosN에서 GooseFS의 경로 매핑 관계는 다음과 같습니다.
cosn://examplebucket-1250000000/data/warehouse -> /warehouse/
cosn://examplebucket-1250000000/data/warehouse/folder/test.txt ->/warehouse/folder/test.txt
GooseFS에서 CosN의 경로 매핑 관계는 다음과 같습니다.
/warehouse ->cosn://examplebucket-1250000000/data/warehouse/
/warehouse/ -> cosn://examplebucket-1250000000/data/warehouse/
/warehouse/folder/test.txt -> cosn://examplebucket-1250000000/data/warehouse/folder/test.txt
CosN Scheme은 GooseFS 기능에 액세스하여, 클라이언트 측에서 GooseFS 경로와 기본 파일 시스템의 CosN 경로 간의 매핑 관계를 유지하고, CosN 경로의 요청을 GooseFS의 요청으로 변환합니다. 매핑 관계는 주기적으로 갱신되며, GooseFS 설정 파일 goosefs-site.properties 중의 설정 항목 goosefs.user.client.namespace.refresh.interval을 수정하여 갱신 주기를 조정할 수 있으며, 기본값은 60초입니다.
주의:액세스한 CosN 경로를 GooseFS 경로로 변환할 수 없는 경우, 해당 Hadoop API 호출에서 이상 경고가 발생합니다.
해당 예시에서는 Hadoop 명령 라인 및 Hive에서 gfs://, cosn://, ofs://의 3가지 Schema를 사용하여 GooseFS에 액세스하는 방법을 보여줍니다. 작업 과정은 다음과 같습니다.
i. GooseFS 클라이언트측 jar 패키지(goosefs-1.0.0-client.jar)를 share/hadoop/common/lib/ 디렉터리에 넣습니다.
cp goosefs-1.0.0-client.jar hadoop/share/hadoop/common/lib/
ii. Hadoop 구성 파일 etc/ hadoop/ core-site.xml을 수정합니다. GooseFS의 구현 클래스를 지정합니다.주의설정 변경 및 jar 패키지 추가는 클러스터의 모든 노드에 동기화되어야 합니다.
<property>
<name>fs.AbstractFileSystem.gfs.impl</name>
<value>com.qcloud.cos.goosefs.hadoop.GooseFileSystem</value>
</property>
<property>
<name>fs.gfs.impl</name>
<value>com.qcloud.cos.goosefs.hadoop.FileSystem</value>
</property>
iii. 다음 Hadoop 명령어를 실행하여 gfs:// Scheme을 통해 GooseFS에 액세스할 수 있는지 확인합니다. &dxlt;MASTER_IP>는 Master 노드의 IP입니다.
hadoop fs -ls gfs://<MASTER_IP>:9200/
iv. Hive가 GooseFS Client 패키지에 로딩될 수 있도록, GooseFS의 클라이언트측 jar 패키지를 Hive의 auxlib 디렉터리에 넣습니다.
cp goosefs-1.0.0-client.jar hive/auxlib/
v. 다음 명령을 실행하여 UFS Scheme이 CosN인 Namespace를 생성하고 Namespace를 나열합니다. 이 명령어의 examplebucket-1250000000을 사용자의 COS 버킷으로 바꾸고 SecretId와 SecretKey를 사용자의 키 정보로 바꿀 수 있습니다.
goosefs ns create ml-100k cosn://examplebucket-1250000000/ml-100k --secret fs.cosn.userinfo.secretId=SecretId --secret fs.cosn.userinfo.secretKey=SecretKey--attribute fs.cosn.bucket.region=ap-guangzhou --attribute fs.cosn.credentials.provider=org.apache.hadoop.fs.auth.SimpleCredentialProvider
goosefs ns ls
vi. 명령을 실행하여 UFS Scheme이 OFS인 Namespace를 생성하고 Namespace를 나열합니다. 이 명령의 instance-id를 사용자의 CHDFS 인스턴스로 바꾸고 1250000000을 사용자의 APPID로 바꿀 수 있습니다.
goosefs ns create ofs-test ofs://instance-id.chdfs.ap-guangzhou.myqcloud.com/ofs-test --attribute fs.ofs.userinfo.appid=1250000000
goosefs ns ls
아래 명령을 통해 실행합니다.
create database goosefs_test;
use goosefs_test;
CREATE TABLE u_user_gfs (
userid INT,
age INT,
gender CHAR(1),
occupation STRING,
zipcode STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION 'gfs://<MASTER_IP>:<MASTER_PORT>/ml-100k';
select sum(age) from u_user_gfs;
아래 명령을 통해 실행합니다.
CREATE TABLE u_user_cosn (
userid INT,
age INT,
gender CHAR(1),
occupation STRING,
zipcode STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION 'cosn://examplebucket-1250000000/ml-100k';
select sum(age) from u_user_cosn;
hadoop/etc/hadoop/core-site.xml 수정
<property>
<name>fs.AbstractFileSystem.cosn.impl</name>
<value>com.qcloud.cos.goosefs.hadoop.CosN</value>
</property>
<property>
<name>fs.cosn.impl</name>
<value>com.qcloud.cos.goosefs.hadoop.CosNFileSystem</value>
</property>
Hadoop 명령어를 실행합니다. 경로를 GooseFS의 경로로 변환할 수 없는 경우 명령 출력에 오류 메시지가 포함됩니다.
hadoop fs -ls cosn://examplebucket-1250000000/ml-100k/
Found 1 items
-rw-rw-rw- 0 hadoop hadoop 22628 2021-07-02 15:27 cosn://examplebucket-1250000000/ml-100k/u.user
hadoop fs -ls cosn://examplebucket-1250000000/unknow-path
ls: Failed to convert ufs path cosn://examplebucket-1250000000/unknow-path to GooseFs path, check if namespace mounted
Hive를 재실행하여 구문 조회.
select sum(age) from u_user_cosn;
아래 명령을 통해 실행합니다.
CREATE TABLE u_user_ofs (
userid INT,
age INT,
gender CHAR(1),
occupation STRING,
zipcode STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION 'ofs://instance-id.chdfs.ap-guangzhou.myqcloud.com/ofs-test/';
select sum(age) from u_user_ofs;
hadoop/etc/hadoop/core-site.xml 수정
<property>
<name>fs.AbstractFileSystem.ofs.impl</name>
<value>com.qcloud.cos.goosefs.hadoop.CHDFSDelegateFS</value>
</property>
<property>
<name>fs.ofs.impl</name>
<value>com.qcloud.cos.goosefs.hadoop.CHDFSHadoopFileSystem</value>
</property>
Hadoop 명령어를 실행합니다. 경로를 GooseFS의 경로로 변환할 수 없는 경우 출력 결과에 오류 메시지가 포함됩니다.
hadoop fs -ls ofs://instance-id.chdfs.ap-guangzhou.myqcloud.com/ofs-test/
Found 1 items
-rw-r--r-- 0 hadoop hadoop 22628 2021-07-15 15:56 ofs://instance-id.chdfs.ap-guangzhou.myqcloud.com/ofs-test/u.user
hadoop fs -ls ofs://instance-id.chdfs.ap-guangzhou.myqcloud.com/unknown-path
ls: Failed to convert ufs path ofs://instance-id.chdfs.ap-guangzhou.myqcloud.com/unknown-path to GooseFs path, check if namespace mounted
Hive를 재실행하여 구문 조회.
select sum(age) from u_user_ofs;
문제 해결에 도움이 되었나요?