복붙노트

[HADOOP] hadoop 2.5.0이 데이터 노드를 시작하지 못했습니다

HADOOP

hadoop 2.5.0이 데이터 노드를 시작하지 못했습니다

hadoop 2.5.0의 독립형 버전을 배포하려고합니다. 그러나 데이터 노드가 시작되지 않습니다. 로그 인쇄 :

2014-10-20 13:42:13,288 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in secureMain
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.SharedFileDescriptorFactory.createDescriptor0(Ljava/lang/String;Ljava/lang/String;I)Ljava/io/FileDescriptor;
  at org.apache.hadoop.io.nativeio.SharedFileDescriptorFactory.createDescriptor0(Native Method)
  at org.apache.hadoop.io.nativeio.SharedFileDescriptorFactory.create(SharedFileDescriptorFactory.java:87)
  at org.apache.hadoop.hdfs.server.datanode.ShortCircuitRegistry.<init>(ShortCircuitRegistry.java:165)
  at org.apache.hadoop.hdfs.server.datanode.DataNode.initDataXceiver(DataNode.java:586)
  at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:773)
  at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:292)
  at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1895)
  at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1782)
  at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1829)
  at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2005)
  at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2029)

한동안 구글 검색을했는데 유용한 도움을 찾을 수 없었습니다. 그런 다음 네이티브 라이브러리와 관련된 오류가 발생했기 때문에 내 컴퓨터 (X86-64 CentOS 6.5)에서 hadoop-2.5.0을 컴파일하려고 시도했지만 동일한 오류가 발생했습니다. 나는 또한 cdh 버전을 시도했지만 여전히 좋지 않습니다.

내 hdfs-site.xml :

<property>
  <name>fs.checkpoint.dir</name>
  <value>/home/seg3/namesecondary</value>
</property>
<property>
  <name>dfs.datanode.data.dir</name>
  <value>/home/seg2/datanodedir</value>
</property>
<property>
  <name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
  <value>true</value>
</property> 
<property>
  <name>dfs.replication</name>
  <value>1</value>
</property>
<property>
  <name>dfs.support.append</name>
  <value>true</value>
</property>
<property>
  <name>dfs.block.local-path-access.user</name>
  <value>root</value>
</property>
<property>
  <name>dfs.client.read.shortcircuit</name>
  <value>true</value>
</property>
<property>
  <name>dfs.domain.socket.path</name>
  <value>/var/run/hadoop-hdfs/dn._PORT</value>                                                                                
</property>
<property>
  <name>dfs.client.file-block-storage-locations.timeout</name>
  <value>10000</value>
</property>

그리고 core-site.xml :

<property>
  <name>fs.defaultFS</name>
  <value>hdfs://localhost:8020</value>
</property>
<property>
  <name>fs.trash.interval</name>
  <value>10080</value>
</property>
<property>
  <name>fs.trash.checkpoint.interval</name>
  <value>10080</value>
</property>   
<property>
  <name>io.native.lib.available</name>
  <value>false</value>
</property>

어떤 아이디어? BTW, hadoop 2.3.0은 내 컴퓨터에서 완벽하게 작동합니다.

해결법

  1. ==============================

    1.여러 서버에 동일한 패키지를 배포하려고 시도한 후 문제가 발견되었습니다. 어떻게 든 hadoop 2.3.0의 기본 라이브러리가 jdk의 기본 경로로 들어 갔으며, 결과적으로 Java 런타임이 오염되었습니다. datanode가 원시 lib를로드하려고 시도하면 이전 lib를 찾습니다. 해당 .so 파일을 삭제 한 후 데이터 노드가 시작되어 실행 중입니다. 건배.

    여러 서버에 동일한 패키지를 배포하려고 시도한 후 문제가 발견되었습니다. 어떻게 든 hadoop 2.3.0의 기본 라이브러리가 jdk의 기본 경로로 들어 갔으며, 결과적으로 Java 런타임이 오염되었습니다. datanode가 원시 lib를로드하려고 시도하면 이전 lib를 찾습니다. 해당 .so 파일을 삭제 한 후 데이터 노드가 시작되어 실행 중입니다. 건배.

  2. ==============================

    2.Amos가 말한 것을 완성하려면 다음을 정의해야합니다.

    Amos가 말한 것을 완성하려면 다음을 정의해야합니다.

    export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
    
  3. from https://stackoverflow.com/questions/26467568/hadoop-2-5-0-failed-to-start-datanode by cc-by-sa and MIT license