HDFS client를 사용하여 hdfs data를 직접 접근하곤 합니다.
// HDFS 설정
Configuration conf = new Configuration();
conf.set("fs.default.name", "hdfs://172.1.2.3:8020");
// FileSystem 설정
FileSystem dfs = FileSystem.get(conf);
Path filenamePath = new Path("/data/test.txt");
System.out.println("File Exists : " + dfs.exists(filenamePath));
// Write data
FSDataOutputStream out = dfs.create(filenamePath);
out.write("TEST".getBytes());
out.close();
// Close FileSystem
dfs.close();
그런데 위와 같이 연동하게 되면 HA구성된 hdfs node에 failover가 자동으로 이루어지지 않습니다. 이때 failover관련 configuration을 추가로 설정해줘야만 합니다.
// HDFS failover 설정
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://myhadoop");
conf.set("fs.default.name", "hdfs://myhadoop");
conf.set("dfs.nameservices","myhadoop");
conf.set("dfs.ha.namenodes.myhadoop", "nn1,nn2");
conf.set("dfs.namenode.rpc-address.myhadoop.nn1","hadoop-namenode01:8020");
conf.set("dfs.namenode.rpc-address.myhadoop.nn2", "hadoop-namenode02:8020");
conf.set("dfs.client.failover.proxy.provider.myhadoop","org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider");
conf.set("dfs.ha.automatic-failover.enabled", "true");
- fs.defaultFS : 기본 파일 시스템에 대한 URI를 지정
- fs.default.name : 기본 파일시스템에 대한 URI를 지정. fs.defaultFS와 동일
- dfs.nameservices : nameservice 리스트
- dfs.ha.namenodes.myhadoop : name node 리스트
- dfs.namenode.rpc-address.myhadoop.nn1 : client request를 핸들링할 RPC address(ip,port), 네임노드 1
- dfs.namenode.rpc-address.myhadoop.nn2 : client request를 핸들링할 RPC address(ip,port), 네임노드 2
- dfs.client.failover.proxy.provider.myhadoop : Active 네임노드에 연결하기 위해 사용할 java class
- dfs.ha.automatic-failover.enabled : Automatic failover 사용 여부
위 설정 중 보라색은 사용자가 정의한 nameservice, namenode이름을 따라갑니다.
위 코드에서 사용한 라이브러리와 버젼:
<properties>
<hadoop.version>2.6.0</hadoop.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
</dependencies>
반응형
'빅데이터 > 하둡' 카테고리의 다른 글
macOS 로컬에서 스파크 실행하기 (0) | 2021.04.21 |
---|---|
하둡 맵리듀스 동작방법 (0) | 2020.11.26 |
하둡 맵리듀스 접근법 (0) | 2020.11.24 |
pyspark에서 gzip으로 압축되어 있는 파일 읽는 방법 (0) | 2020.02.11 |
pyspark에러 ImportError: No module named XXXX (1) | 2020.02.10 |
[local hadoop]localhost port 22: Connection refused 에러 발생시 해결방법 in MacOS (0) | 2020.01.16 |