복붙노트

[HADOOP] hdfs에 쓰려고 할 때 오류 : 서버 IPC 버전 9가 클라이언트 버전 4와 통신 할 수 없습니다.

HADOOP

hdfs에 쓰려고 할 때 오류 : 서버 IPC 버전 9가 클라이언트 버전 4와 통신 할 수 없습니다.

스칼라를 사용하여 hdfs에 파일을 쓰려고하는데 다음과 같은 오류가 계속 발생합니다.

Caused by: org.apache.hadoop.ipc.RemoteException: Server IPC version 9 cannot communicate with client version 4
at org.apache.hadoop.ipc.Client.call(Client.java:1113)
at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:229)
at com.sun.proxy.$Proxy1.getProtocolVersion(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:85)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:62)
at com.sun.proxy.$Proxy1.getProtocolVersion(Unknown Source)
at org.apache.hadoop.ipc.RPC.checkVersion(RPC.java:422)
at org.apache.hadoop.hdfs.DFSClient.createNamenode(DFSClient.java:183)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:281)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:245)
at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:100)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1446)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:67)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1464)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:263)
at bcomposes.twitter.Util$.<init>(TwitterStream.scala:39)
at bcomposes.twitter.Util$.<clinit>(TwitterStream.scala)
at bcomposes.twitter.StatusStreamer$.main(TwitterStream.scala:17)
at bcomposes.twitter.StatusStreamer.main(TwitterStream.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)

이 튜토리얼을 따라 hadoop을 설치했다. 아래 코드는 hdfs에 샘플 파일을 삽입하는 데 사용하는 코드입니다.

val configuration = new Configuration();
val hdfs = FileSystem.get( new URI( "hdfs://192.168.11.153:54310" ), configuration );
val file = new Path("hdfs://192.168.11.153:54310/s2013/batch/table.html");
if ( hdfs.exists( file )) { hdfs.delete( file, true ); } 
val os = hdfs.create( file);
val br = new BufferedWriter( new OutputStreamWriter( os, "UTF-8" ) );
br.write("Hello World");
br.close();
hdfs.close();

Hadoop 버전은 2.4.0이고 hadoop 라이브러리 버전은 1.2.1입니다. 이 작업을하기 위해 내가해야 할 일은 무엇입니까?

해결법

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

    1.hadoop 및 스파크 버전이 동기화되어 있어야합니다. (필자의 경우, spark-1.2.0과 hadoop 2.2.0으로 작업하고있다)

    hadoop 및 스파크 버전이 동기화되어 있어야합니다. (필자의 경우, spark-1.2.0과 hadoop 2.2.0으로 작업하고있다)

    1 단계 - goto $ SPARK_HOME

    2 단계 - 원하는 버전의 hadoop 클라이언트로 mvn 빌드를 실행하면됩니다.

    mvn -Pyarn -Phadoop-2.2 -Dhadoop.version=2.2.0 -DskipTests clean package
    

    3 단계 - 또한 스파크 프로젝트에는 적절한 스파크 버전이 있어야하며,

    name := "smartad-spark-songplaycount"
    
    version := "1.0"
    
    scalaVersion := "2.10.4"
    
    //libraryDependencies += "org.apache.spark" %% "spark-core" % "1.1.1"
    libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "1.2.0"
    
    libraryDependencies += "org.apache.hadoop" % "hadoop-client" % "2.2.0"
    
    libraryDependencies += "org.apache.hadoop" % "hadoop-hdfs" % "2.2.0"
    
    resolvers += "Akka Repository" at "http://repo.akka.io/releases/"
    

    메이븐과 아파치 스파크 만들기

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

    2.Hadoop 2.3을 사용하여 동일한 문제가 발생했으며 다음 행을 내 build.sbt 파일에 추가하여 해결했습니다.

    Hadoop 2.3을 사용하여 동일한 문제가 발생했으며 다음 행을 내 build.sbt 파일에 추가하여 해결했습니다.

    libraryDependencies += "org.apache.hadoop" % "hadoop-client" % "2.3.0"
    
    libraryDependencies += "org.apache.hadoop" % "hadoop-hdfs" % "2.3.0"
    

    귀하의 경우에는 귀하가 2.4.0 버전을 사용한다고 생각합니다.

    추신 : 그것은 또한 귀하의 코드 샘플에 근무했습니다. 나는 그것이 도움이되기를 바란다.

  3. ==============================

    3.오류 메시지에서 말한 것처럼 서버 IPC 버전 9는 클라이언트 버전 4와 통신 할 수 없습니다. 서버가 클라이언트보다 슬림하게 최신 버전입니다. hadoop 클러스터 (대부분 옵션이 아님)를 다운 그레이드하거나 클라이언트 라이브러리를 1.2.1에서 2.x 버전으로 업그레이드해야합니다.

    오류 메시지에서 말한 것처럼 서버 IPC 버전 9는 클라이언트 버전 4와 통신 할 수 없습니다. 서버가 클라이언트보다 슬림하게 최신 버전입니다. hadoop 클러스터 (대부분 옵션이 아님)를 다운 그레이드하거나 클라이언트 라이브러리를 1.2.1에서 2.x 버전으로 업그레이드해야합니다.

  4. from https://stackoverflow.com/questions/23634985/error-when-trying-to-write-to-hdfs-server-ipc-version-9-cannot-communicate-with by cc-by-sa and MIT license