OBSA: Hadoop 지원용 HuaweiCloud OBS 어댑터
OBSA: Hadoop 지원용 HuaweiCloud OBS 어댑터
hadoop-huaweicloud 모듈은 HuaweiCloud Object Storage Service (OBS)와의 통합을 지원해요. 이 지원은 hadoop-huaweicloud.jar JAR 파일로 제공돼요.
출처: 문서
본문
소개 (Introduction)
hadoop-huaweicloud 모듈은 HuaweiCloud Object Storage Service (OBS)와의 통합을 지원해요. 이 지원은 hadoop-huaweicloud.jar JAR 파일을 통해 제공돼요.
기능 (Features)
- HuaweiCloud OBS 계정에 저장된 데이터를 읽고 씀.
obs스킴을 사용하는 URL로 파일시스템 경로를 참조.- 표준 Hadoop
FileSystem인터페이스를 구현해 계층적 파일시스템 뷰를 제시. - 대용량 파일에 대한 multipart upload 지원.
- MapReduce 작업의 데이터 소스 또는 싱크 역할을 할 수 있음.
- 최신 OBS 기능과 인증 방식을 지원하는 HuaweiCloud OBS의 Java SDK 사용.
- 규모(scale)에 대해 테스트됨.
제한 사항 (Limitations)
다음 연산에 대한 부분적이거나 없는 지원:
- 기호 링크(symbolic link) 연산
- 프록시 사용자 (Proxy users)
- 파일 잘라내기 (File truncate)
- 파일 연결 (File concat)
- 파일 체크섬 (File checksum)
- 파일 복제 계수 (File replication factor)
- 확장 속성(XAttrs) 연산
- 스냅샷 연산
- 스토리지 정책 (Storage policy)
- 할당량 (Quota)
- POSIX ACL
- 위임 토큰(delegation token) 연산
시작하기 (Getting Started)
패키지 (Packages)
OBSA는 hadoop-common과 그 의존성들과 함께 두 개의 JAR에 의존해요.
hadoop-huaweicloudJAResdk-obs-javaJAR
hadoop-common과 hadoop-huaweicloud의 버전은 동일해야 해요. Maven 빌드에 라이브러리를 가져오려면 hadoop-huaweicloud JAR를 빌드 의존성에 추가해요. 그러면 호환되는 esdk-obs-java JAR를 끌어올 거예요. hadoop-huaweicloud JAR는 그 고유 의존성(OBS SDK JAR) 외에 다른 의존성을 선언하지 않아요. 이것은 다운스트림 애플리케이션에서 Hadoop 의존성 JAR을 제외/튜닝하는 것을 단순화해요. hadoop-client 또는 hadoop-common 의존성은 선언해야 해요.
<properties>
<!-- Your exact Hadoop version here-->
<hadoop.version>3.4.0</hadoop.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-huaweicloud</artifactId>
<version>${hadoop.version}</version>
</dependency>
</dependencies>
OBS URL 접근 (Accessing OBS URLs)
URL에 접근하기 전에 Filesystem/AbstractFileSystem의 OBS 구현 클래스와 버킷이 위치한 region 엔드포인트를 다음과 같이 구성해야 해요:
<property>
<name>fs.obs.impl</name>
<value>org.apache.hadoop.fs.obs.OBSFileSystem</value>
<description>The OBS implementation class of the Filesystem.</description>
</property>
<property>
<name>fs.AbstractFileSystem.obs.impl</name>
<value>org.apache.hadoop.fs.obs.OBS</value>
<description>The OBS implementation class of the AbstractFileSystem.</description>
</property>
<property>
<name>fs.obs.endpoint</name>
<value>obs.region.myhuaweicloud.com</value>
<description>OBS region endpoint where a bucket is located.</description>
</property>
그러면 OBS URL을 다음과 같이 접근할 수 있어요:
obs://<bucket_name>/path
obs 스킴은 HuaweiCloud OBS가 지원하는 Hadoop 호환 파일시스템 OBSFileSystem의 URL을 식별해요. 예를 들어 mybucket이라는 버킷에 대한 접근을 보여주는 다음 FileSystem Shell 명령들이 있어요:
hadoop fs -mkdir obs://mybucket/testDir
hadoop fs -put testFile obs://mybucket/testDir/testFile
hadoop fs -cat obs://mybucket/testDir/testFile
test file content
버킷 만드는 방법에 대한 자세한 내용은 Help Center > Object Storage Service > Getting Started > Basic Operation Procedure 를 참고하세요.
OBS 인증 (Authenticating with OBS)
공용 OBS 버킷과의 상호작용을 제외하고, OBSA 클라이언트는 버킷과 상호작용하는 데 필요한 자격 증명이 필요해요. 클라이언트는 여러 인증 메커니즘을 지원해요. 가장 간단한 인증 메커니즘은 다음과 같이 OBS access key와 secret key를 제공하는 것이에요:
<property>
<name>fs.obs.access.key</name>
<description>OBS access key.
Omit for provider-based authentication.</description>
</property>
<property>
<name>fs.obs.secret.key</name>
<description>OBS secret key.
Omit for provider-based authentication.</description>
</property>
access key, secret key, session token을 공유하지 마세요. 반드시 비밀로 유지해야 해요. com.obs.services.IObsCredentialsProvider (Creating an Instance of ObsClient 참고) 또는 org.apache.hadoop.fs.obs.BasicSessionCredential의 사용자 지정 구현도 인증에 사용할 수 있어요.
<property>
<name>fs.obs.security.provider</name>
<description>
Class name of security provider class which implements
com.obs.services.IObsCredentialsProvider, which will
be used to construct an OBS client instance as an input parameter.
</description>
</property>
<property>
<name>fs.obs.credentials.provider</name>
<description>
lass nameCof credential provider class which implements
org.apache.hadoop.fs.obs.BasicSessionCredential,
which must override three APIs: getOBSAccessKeyId(),
getOBSSecretKey(), and getSessionToken().
</description>
</property>
일반 OBSA 클라이언트 구성 (General OBSA Client Configuration)
모든 OBSA 클라이언트 옵션은 fs.obs. 접두사를 가진 옵션으로 구성돼요.
<property>
<name>fs.obs.connection.ssl.enabled</name>
<value>false</value>
<description>Enable or disable SSL connections to OBS.</description>
</property>
<property>
<name>fs.obs.connection.maximum</name>
<value>1000</value>
<description>Maximum number of simultaneous connections to OBS.</description>
</property>
<property>
<name>fs.obs.connection.establish.timeout</name>
<value>120000</value>
<description>Socket connection setup timeout in milliseconds.</description>
</property>
<property>
<name>fs.obs.connection.timeout</name>
<value>120000</value>
<description>Socket connection timeout in milliseconds.</description>
</property>
<property>
<name>fs.obs.idle.connection.time</name>
<value>30000</value>
<description>Socket idle connection time.</description>
</property>
<property>
<name>fs.obs.max.idle.connections</name>
<value>1000</value>
<description>Maximum number of socket idle connections.</description>
</property>
<property>
<name>fs.obs.socket.send.buffer</name>
<value>256 * 1024</value>
<description>Socket send buffer to be used in OBS SDK. Represented in bytes.</description>
</property>
<property>
<name>fs.obs.socket.recv.buffer</name>
<value>256 * 1024</value>
<description>Socket receive buffer to be used in OBS SDK. Represented in bytes.</description>
</property>
<property>
<name>fs.obs.threads.keepalivetime</name>
<value>60</value>
<description>Number of seconds a thread can be idle before being
terminated in thread pool.</description>
</property>
<property>
<name>fs.obs.threads.max</name>
<value>20</value>
<description> Maximum number of concurrent active (part)uploads,
which each use a thread from thread pool.</description>
</property>
<property>
<name>fs.obs.max.total.tasks</name>
<value>20</value>
<description>Number of (part)uploads allowed to the queue before
blocking additional uploads.</description>
</property>
<property>
<name>fs.obs.delete.threads.max</name>
<value>20</value>
<description>Max number of delete threads.</description>
</property>
<property>
<name>fs.obs.multipart.size</name>
<value>104857600</value>
<description>Part size for multipart upload.
</description>
</property>
<property>
<name>fs.obs.multiobjectdelete.maximum</name>
<value>1000</value>
<description>Max number of objects in one multi-object delete call.
</description>
</property>
<property>
<name>fs.obs.fast.upload.buffer</name>
<value>disk</value>
<description>Which buffer to use. Default is `disk`, value may be
`disk` | `array` | `bytebuffer`.
</description>
</property>
<property>
<name>fs.obs.buffer.dir</name>
<value>dir1,dir2,dir3</value>
<description>Comma separated list of directories that will be used to buffer file
uploads to. This option takes effect only when the option 'fs.obs.fast.upload.buffer'
is set to 'disk'.
</description>
</property>
<property>
<name>fs.obs.fast.upload.active.blocks</name>
<value>4</value>
<description>Maximum number of blocks a single output stream can have active
(uploading, or queued to the central FileSystem instance's pool of queued
operations).
</description>
</property>
<property>
<name>fs.obs.readahead.range</name>
<value>1024 * 1024</value>
<description>Bytes to read ahead during a seek() before closing and
re-opening the OBS HTTP connection. </description>
</property>
<property>
<name>fs.obs.read.transform.enable</name>
<value>true</value>
<description>Flag indicating if socket connections can be reused by
position read. Set `false` only for HBase.</description>
</property>
<property>
<name>fs.obs.list.threads.core</name>
<value>30</value>
<description>Number of core list threads.</description>
</property>
<property>
<name>fs.obs.list.threads.max</name>
<value>60</value>
<description>Maximum number of list threads.</description>
</property>
<property>
<name>fs.obs.list.workqueue.capacity</name>
<value>1024</value>
<value>Capacity of list work queue.</value>
</property>
<property>
<name>fs.obs.list.parallel.factor</name>
<value>30</value>
<description>List parallel factor.</description>
</property>
<property>
<name>fs.obs.trash.enable</name>
<value>false</value>
<description>Switch for the fast delete.</description>
</property>
<property>
<name>fs.obs.trash.dir</name>
<description>The fast delete recycle directory.</description>
</property>
<property>
<name>fs.obs.block.size</name>
<value>128 * 1024 * 1024</value>
<description>Default block size for OBS FileSystem.
</description>
</property>
hadoop-huaweicloud 모듈 테스트 (Testing the hadoop-huaweicloud Module)
hadoop-huaweicloud 모듈은 전체 단위 테스트 제품군을 포함해요. 대부분의 테스트는 HuaweiCloud OBS에 대해 실행돼요. 이 테스트를 실행하려면 위 섹션에 언급된 OBS 계정 정보와 다음 속성으로 src/test/resources/auth-keys.xml을 만들어요:
<property>
<name>fs.contract.test.fs.obs</name>
<value>obs://obsfilesystem-bucket</value>
</property>
더 알아보기 (Learn more)
- 원문: 문서