2016-12-20 6 views
0

나는 하나의 노드 hdp2.5 클러스터에 파일 업로드이 매우 간단한 업로드 방법이 로컬 호스트에 연결 다음을 무슨 추적자바 API 원격 HDFS에 로컬 파일을 업로드하지만

Configuration conf = new Configuration(); 
FileSystem fs = FileSystem.get(new URI("webhdfs://hdsfhost:50070", conf); 
fs.copyFromLocalFile(false, true, new Path(localFilePath), new Path(hdfsPath)); 

을 흐름은 제대로 시작 :

  • 이 hdfshost에 연결 : 파일이 이미 50070,
  • 체크 경우 (아니오),
  • 는 데이터 노드에 연결합니다.

오류가 발생한 곳 : hdfshost : 50075 대신 datanode가 localhost : 50075로되어 "java.net.ConnectException : Connection refused"가 발생합니다.

나는 HDP에 다음과 같은 관련 설정이 있습니다

  • dfs.client.use.datanode.hostname => 진정한
  • dfs.datanode.http.address => 0.0.0.0:50075
  • dfs.namenode.http 주소 => 0.0.0.0:50070

내가 localhost를 대신 hdfshost 사용됩니다 어떤 이유를 찾을 수 없습니다 (및/etc/호스트, 어느 쪽의 로컬에는 재정이 없다 클러스터에서 머신이 아님). 어떤 도움을 주시면 감사하겠습니다.

+0

데이터 노드의 컴퓨터 이름이 localhost 줄의'/ etc/hosts' 파일에 나타 납니까? 그렇다면 실제 컴퓨터의 주소가있는 행으로 이동하십시오. – RealSkeptic

+1

0.0.0.0에서 컴퓨터의 로컬 IP로 변경하려고 했습니까? 컴퓨터에 정기적으로 변경되지 않는 고정 IP가 있으면 문제가 해결 될 수 있습니까? – Nico

+0

@Nico 나는 당신의 제안을 시도했지만 실제로 도움이 될 수 있다고 생각하지는 않았다. (어쨌든 왜 localhost를 돌려 줄까?) 내가 틀렸어. 네 말이 맞아. 고마워! hostname 명령이 localhost가 아니라 예상 호스트 이름을 반환 할 때 localhost가 반환되는 이유는 여전히 궁금합니다. – Guillaume

답변

1

http-address 구성을 0.0.0.0 대신 로컬 IP 주소로 변경해야합니다. 0.0.0.0은 localhost로 확인 된 후 dfs.client.use.datanode.hostname => true으로 사용되며 로컬 IP 주소는 DNS 이름으로 확인 된 다음 다시 호스트 이름으로 사용됩니다.

나는이 답변을 게시 할 것이므로 솔루션에 대한 내 추론이 정확한지 잘 모릅니다. 정확한 이유를 아는 사람이 있으면 의견을 추가하거나 내 답변을 수정하십시오.