[HADOOP] 네임 노드 고 가용성 클라이언트 요청
HADOOP네임 노드 고 가용성 클라이언트 요청
아무도 말해 주실 수 있습니다. Java 응용 프로그램을 사용하여 Namenode HA 설치로 HDFS에 파일 업로드 / 다운로드 작업을 요청하는 경우이 요청이 먼저 처리됩니다. 클라이언트가 어떤 네임 노드가 활성화되어 있는지 어떻게 알 수 있습니까?
일부 워크 플로 유형 다이어그램 또는 요청 단계를 자세히 설명하는 항목 (시작부터 끝까지)을 제공하면 좋을 것입니다.
해결법
-
==============================
1.hadoop 클러스터가 HA로 구성되어 있으면 hdfs-site.xml에 다음과 같이 namenode ID가 있습니다.
hadoop 클러스터가 HA로 구성되어 있으면 hdfs-site.xml에 다음과 같이 namenode ID가 있습니다.
<property> <name>dfs.ha.namenodes.mycluster</name> <value>namenode1,namenode2</value> </property>
NameNode가 먼저 시작되면 활성화됩니다. 기본 노드가 먼저 시작되도록 특정 순서로 클러스터를 시작하도록 선택할 수 있습니다.
namenode의 현재 상태를 확인하려면 getServiceStatus () 명령을 사용할 수 있습니다.
hdfs haadmin -getServiceState <machine-name>
음, 드라이버 클래스를 작성하는 동안 구성 객체에 다음과 같은 속성을 설정해야합니다.
public static void main(String[] args) throws Exception { if (args.length != 2){ System.out.println("Usage: pgm <hdfs:///path/to/copy> </local/path/to/copy/from>"); System.exit(1); } Configuration conf = new Configuration(false); conf.set("fs.defaultFS", "hdfs://nameservice1"); conf.set("fs.default.name", conf.get("fs.defaultFS")); conf.set("dfs.nameservices","nameservice1"); conf.set("dfs.ha.namenodes.nameservice1", "namenode1,namenode2"); conf.set("dfs.namenode.rpc-address.nameservice1.namenode1","hadoopnamenode01:8020"); conf.set("dfs.namenode.rpc-address.nameservice1.namenode2", "hadoopnamenode02:8020"); conf.set("dfs.client.failover.proxy.provider.nameservice1","org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"); FileSystem fs = FileSystem.get(URI.create(args[0]), conf); Path srcPath = new Path(args[1]); Path dstPath = new Path(args[0]); //in case the same file exists on remote location, it will be overwritten fs.copyFromLocalFile(false, true, srcPath, dstPath); }
요청은 nameservice1로 이동하고 namenode 상태 (활성 / 대기)에 따라 Hadoop 클러스터에서 처리됩니다.
자세한 내용은 HDFS 고 가용성
-
==============================
2.HDFS 클라이언트 요청 처리시 주요 엔티티가있는 네임 노드 HA 아키텍처를 확인하십시오.
HDFS 클라이언트 요청 처리시 주요 엔티티가있는 네임 노드 HA 아키텍처를 확인하십시오.
클라이언트 / 드라이버의 경우 어떤 namenode가 활성 상태인지는 중요하지 않습니다. 왜냐하면 namenode의 호스트 네임이 아닌 네임 서비스 ID로 HDFS를 쿼리하기 때문입니다. nameservice는 자동으로 클라이언트 요청을 활성 namenode로 전송합니다.
예 : hdfs : // nameservice_id / rest / of / the / hdfs / path
설명:
어떻게이 hdfs : // nameservice_id /가 작동하고 그것과 관련된 confs가 무엇입니까?
hdfs-site.xml 파일
id를 추가하여 nameservice를 생성하십시오 (여기서 nameservice_id는 mycluster입니다)
<property> <name>dfs.nameservices</name> <value>mycluster</value> <description>Logical name for this new nameservice</description> </property>
이제 namenode id를 지정하여 클러스터의 namenode를 결정합니다.
dfs.ha.namenodes. [$ nameservice ID] :
<property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> <description>Unique identifiers for each NameNode in the nameservice</description> </property>
그런 다음 namenode ids와 namenode 호스트를 연결합니다.
dfs.namenode.rpc-address. [$ nameservice ID]. [$ name 노드 ID]
<property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>machine1.example.com:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>machine2.example.com:8020</value> </property>
그런 다음 HDFS 클라이언트가 Active NameNode에 연결하는 데 사용하는 Java 클래스를 지정하여 DFS 클라이언트가이 클래스를 사용하여 현재 어떤 NameNode가 클라이언트 요청을 제공하고 있는지 확인합니다.
<property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property>
마지막으로 HDFS URL은 이러한 구성을 변경 한 후에 이와 같을 것입니다.
hdfs : // mycluster /
귀하의 질문에 대답하기 위해 나는 구성을 거의 취하지 않았습니다. 저널 노드, 저널 노드 및 사육사 기계가 HDFS에서 네임 노드 HA를 형성하는 방법에 대한 자세한 문서를 확인하십시오.
from https://stackoverflow.com/questions/35911186/namenode-high-availability-client-request by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] HDFS 파일 비교 (0) | 2019.08.04 |
---|---|
[HADOOP] 하둡의 분산 캐시 수명 (0) | 2019.08.04 |
[HADOOP] hadoop의 데이터 노드가 시작되지 않습니다. (0) | 2019.08.04 |
[HADOOP] Hadoop - java.net.ConnectException : 연결이 거부되었습니다. (0) | 2019.08.04 |
[HADOOP] 하이브 : 기존 하이브 데이터베이스의 이름을 바꿀 수 있습니까? (0) | 2019.08.04 |