본문 바로가기

빅데이터/하둡

HDFS cilent 사용시 HA구성된 node 연결하기

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>     

 

반응형