본 문서는 GooseFS를 로컬 장치에 빠르게 배포하고, 디버깅을 수행하고, COS(Cloud Object Storage)를 원격 스토리지로 사용하는 방법을 설명합니다.
GooseFS 사용 전 아래 작업을 준비해야 합니다.
$ cd /usr/local
$ mkdir /service
$ cd /service
$ wget https://downloads.tencentgoosefs.cn/goosefs/1.4.1/release/goosefs-1.4.1-bin.tar.gz
$ tar -zxvf goosefs-1.4.1-bin.tar.gz
$ cd goosefs-1.4.1
압축 해제 후 gooseFS goosefs-1.4.1의 홈 디렉터리가 생성됩니다. 본문에서는 ${GOOSEFS_HOME}
을 이 홈 디렉터리의 절대 경로로 사용합니다.
3. ${GOOSEFS_HOME}/conf
에 conf/goosefs-site.properties
구성 파일을 생성합니다. GooseFS는 AI 및 빅 데이터 시나리오를 위한 구성 템플릿을 제공하며 필요에 따라 적절한 템플릿을 선택할 수 있습니다. 그 다음 편집 모드로 들어가 구성을 수정합니다.
(1) AI 템플릿을 사용합니다. 자세한 내용은 AI 시나리오의 프로덕션 환경에 대한 GooseFS 구성 사례를 참고하십시오.
$ cp conf/goosefs-site.properties.ai_template conf/goosefs-site.properties
$ vim conf/goosefs-site.properties
(2) 빅 데이터 템플릿을 사용합니다. 자세한 내용은 빅 데이터 시나리오의 프로덕션 환경에 대한 GooseFS 구성 사례를 참고하십시오.
$ cp conf/goosefs-site.properties.bigdata_template conf/goosefs-site.properties
$ vim conf/goosefs-site.properties
conf/goosefs-site.properties
에서 다음 구성 항목을 수정합니다.# Common properties
# Master 노드의 host 정보 수정
goosefs.master.hostname=localhost
goosefs.master.mount.table.root.ufs=${goosefs.work.dir}/underFSStorage
# Security properties
# 권한 구성 수정
goosefs.security.authorization.permission.enabled=true
goosefs.security.authentication.type=SIMPLE
# Worker properties
# worker 노드 구성을 수정하여 로컬 캐시 미디어, 캐시 경로 및 캐시 크기 지정
goosefs.worker.ramdisk.size=1GB
goosefs.worker.tieredstore.levels=1
goosefs.worker.tieredstore.level0.alias=SSD
goosefs.worker.tieredstore.level0.dirs.path=/data
goosefs.worker.tieredstore.level0.dirs.quota=80G
# User properties
# 파일 읽기 및 쓰기에 대한 캐시 정책 지정
goosefs.user.file.readtype.default=CACHE
goosefs.user.file.writetype.default=MUST_CACHE
주의:경로 매개변수
goosefs.worker.tieredstore.level0.dirs.path
를 구성하기 전에 먼저 경로를 생성해야 합니다.
$ cd /usr/local/service/goosefs-1.4.1
$ ./bin/goosefs-start.sh all
이 명령을 실행하면 다음 페이지를 볼 수 있습니다.
상기 명령 실행 후 http://localhost:9201
과 http://localhost:9204
에 액세스하면 Master와 Worker의 실행 상태를 각각 볼 수 있습니다.
COS(COSN) 또는 Tencent Cloud HDFS(CHDFS)를 GooseFS의 루트 디렉터리에 마운트하려면 아래와 같이 conf/core-site.xml
에서 COSN/CHDFS(fs.cosn.impl
, fs.AbstractFileSystem.cosn.impl
, fs.cosn.userinfo.secretId
및 fs.cosn.userinfo.secretKey
를 포함하되 이에 국한되지 않음)의 필수 매개변수를 구성합니다.
<!-- COSN related configurations -->
<property>
<name>fs.cosn.impl</name>
<value>org.apache.hadoop.fs.CosFileSystem</value>
</property>
<property>
<name>fs.AbstractFileSystem.cosn.impl</name>
<value>com.qcloud.cos.goosefs.CosN</value>
</property>
<property>
<name>fs.cosn.userinfo.secretId</name>
<value></value>
</property>
<property>
<name>fs.cosn.userinfo.secretKey</name>
<value></value>
</property>
<property>
<name>fs.cosn.bucket.region</name>
<value></value>
</property>
<!-- CHDFS related configurations -->
<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>
<property>
<name>fs.ofs.tmp.cache.dir</name>
<value>/data/chdfs_tmp_cache</value>
</property>
<!--appId-->
<property>
<name>fs.ofs.user.appid</name>
<value>1250000000</value>
</property>
설명:
다음으로 Namespace 생성을 통해 COS 혹은 CHDFS를 마운트 하는 방법과 절차를 소개합니다.
$ goosefs ns create myNamespace cosn://bucketName-1250000000/ \
--secret fs.cosn.userinfo.secretId=AKXXXXXXXXXXX \
--secret fs.cosn.userinfo.secretKey=XXXXXXXXXXXX \
--attribute fs.cosn.bucket.region=ap-xxx \
주의:
- COSN을 마운트한 namespace를 생성할 경우 반드시
- -secret
매개변수를 사용하여 액세스 키를 지정해야 하며,--attribute
를 사용하여 Hadoop-COS (COSN)의 모든 필수 매개변수를 지정해야 합니다. 구체적인 필수 매개변수는 Hadoop 툴을 참고하십시오.- Namespace 생성 시 읽기/쓰기 정책 (rPolicy/wPolicy)을 지정하지 않았을 경우 구성 파일 중에 지정한 read/write type 혹은 기본값 (CACHE/CACHE_THROUGH)을 사용합니다.
동일한 방법으로 네임스페이스 namespace 하나를 생성하여 Tencent Cloud HDFS 마운트에 사용할 수 있습니다.
goosefs ns create MyNamespaceCHDFS ofs://xxxxx-xxxx.chdfs.ap-guangzhou.myqcloud.com/ \
--attribute fs.ofs.user.appid=1250000000
--attribute fs.ofs.tmp.cache.dir=/tmp/chdfs
ls
명령어를 통해 클러스터에 생성된 모든 namespace를 나열할 수 있습니다.$ goosefs ns ls
namespace mountPoint ufsPath creationTime wPolicy rPolicy TTL ttlAction
myNamespace /myNamespace cosn://bucketName-125xxxxxx/3TB 03-11-2021 11:43:06:239 CACHE_THROUGH CACHE -1 DELETE
myNamespaceCHDFS /myNamespaceCHDFS ofs://xxxxx-xxxx.chdfs.ap-guangzhou.myqcloud.com/3TB 03-11-2021 11:45:12:336 CACHE_THROUGH CACHE -1 DELETE
$ goosefs ns stat myNamespace
NamespaceStatus{name=myNamespace, path=/myNamespace, ttlTime=-1, ttlAction=DELETE, ufsPath=cosn://bucketName-125xxxxxx/3TB, creationTimeMs=1615434186076, lastModificationTimeMs=1615436308143, lastAccessTimeMs=1615436308143, persistenceState=PERSISTED, mountPoint=true, mountId=4948824396519771065, acl=user::rwx,group::rwx,other::rwx, defaultAcl=, owner=user1, group=user1, mode=511, writePolicy=CACHE_THROUGH, readPolicy=CACHE}
메타데이터에서 기록한 정보는 아래 내용이 포함됩니다.
번호 | 매개변수 | 설명 |
---|---|---|
1 | name | namespace 이름 |
2 | path | GooseFS에서 namespace의 경로 |
3 | ttlTime | namespace 디렉터리와 파일의 ttl 주기 |
4 | ttlAction | namespace 디렉터리와 파일의 ttl 처리 작업에는 FREE와 DELETE 두 가지 처리 작업이 있습니다. 기본값: FREE |
5 | ufsPath | ufs에서 namespace의 마운트 경로 |
6 | creationTimeMs | namespace 생성 시간, 단위: 밀리초 |
7 | lastModificationTimeMs | namespace 디렉터리와 파일의 최종 수정 시간, 단위: 밀리초 |
8 | persistenceState | namespace의 지속 상태 |
9 | mountPoint | namespace의 마운트 포인트가 하나인지에 대한 여부, 값은 항상 true |
10 | mountId | namespace 마운트 포인트 ID |
11 | acl | namespace의 액세스 제어 리스트 |
12 | defaultAcl | namespace의 기본 액세스 제어 리스트 |
13 | owner | namespace의 owner |
14 | group | namespace의 owner가 소속된 group |
15 | mode | namespace의 POSIX 권한 |
16 | writePolicy | namespace의 쓰기 정책 |
17 | readPolicy | namespace의 읽기 정책 |
$ goosefs table attachdb --db test_db hive thrift://
172.16.16.22:7004 test_for_demo
주의:명령어의 thrift는 실제 Hive Metastore 주소를 입력해야 합니다.
$ goosefs table ls test_db web_page
OWNER: hadoop
DBNAME.TABLENAME: testdb.web_page (
wp_web_page_sk bigint,
wp_web_page_id string,
wp_rec_start_date string,
wp_rec_end_date string,
wp_creation_date_sk bigint,
wp_access_date_sk bigint,
wp_autogen_flag string,
wp_customer_sk bigint,
wp_url string,
wp_type string,
wp_char_count int,
wp_link_count int,
wp_image_count int,
wp_max_ad_count int,
)
PARTITIONED BY (
)
LOCATION (
gfs://172.16.16.22:9200/myNamespace/3000/web_page
)
PARTITION LIST (
{
partitionName: web_page
location: gfs://172.16.16.22:9200/myNamespace/3000/web_page
}
)
$ goosefs table load test_db web_page
Asynchronous job submitted successfully, jobId: 1615966078836
Table의 데이터 프리패치는 비동기화 작업이므로 작업 ID 하나를 반환합니다. goosefs job stat <Job Id> 명령어를 통해 프리패치 작업의 진행률을 확인할 수 있습니다. "COMPLETED" 상태가 되면 전체 프리패치 과정이 완료되었음을 의미합니다.
$ goosefs fs
ls
명령어를 통해 GooseFS의 파일을 나열할 수 있습니다. 다음 예시에서 루트 디렉터리의 모든 파일을 나열하는 방법을 확인할 수 있습니다.$ goosefs fs ls /
copyFromLocal
명령어를 통해 데이터를 로컬에서 GooseFS로 복사할 수 있습니다.$ goosefs fs copyFromLocal LICENSE /LICENSE
Copied LICENSE to /LICENSE
$ goosefs fs ls /LICENSE
-rw-r--r-- hadoop supergroup 20798 NOT_PERSISTED 03-26-2021 16:49:37:215 0% /LICENSE
cat
명령어를 통해 파일 내용을 확인할 수 있습니다.$ goosefs fs cat /LICENSE
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
...
./underFSStorage
입니다. persist
명령어를 통해 파일을 로컬 파일 시스템에 영속 저장할 수 있습니다.$ goosefs fs persist /LICENSE
persisted file /LICENSE with size 26847
PERSISTED
인 경우 파일이 메모리에 저장된 것을 의미하며, 파일 상태가 NOT_PERSISTED
인 경우 파일이 메모리에 없음을 의미합니다.$ goosefs fs ls /data/cos/sample_tweets_150m.csv
-r-x------ staff staff 157046046 NOT_PERSISTED 01-09-2018 16:35:01:002 0% /data/cos/sample_tweets_150m.csv
$ time goosefs fs cat /data/s3/sample_tweets_150m.csv | grep-c tencent
889
real 0m22.857s
user 0m7.557s
sys 0m1.181s
$ goosefs fs ls /data/cos/sample_tweets_150m.csv
-r-x------ staff staff 157046046
ED 01-09-2018 16:35:01:002 0% /data/cos/sample_tweets_150m.csv
$ time goosefs fs cat /data/s3/sample_tweets_150m.csv | grep-c tencent
889
real 0m1.917s
user 0m2.306s
sys 0m0.243s
시스템 프로세스 딜레이가 1.181s에서 0.243s로 감소되어 10배 향상된 것을 알 수 있습니다.
아래 명령어를 통해 GooseFS를 비활성화할 수 있습니다.
$ ./bin/goosefs-stop.sh local
문제 해결에 도움이 되었나요?