pig 到 hadoop 问题:服务器 IPC 版本 7 无法与客户端版本 4 通信

Posted

技术标签:

【中文标题】pig 到 hadoop 问题:服务器 IPC 版本 7 无法与客户端版本 4 通信【英文标题】:pig to hadoop issue: Server IPC version 7 cannot communicate with client version 4 【发布时间】:2013-05-10 22:15:32 【问题描述】:

我正在尝试让猪开始并失败:

 $ pig
2013-05-10 18:03:22,972 [main] INFO  org.apache.pig.Main - Apache Pig version 0.11.1 (r1459641) compiled Mar 22 2013, 02:13:53
2013-05-10 18:03:22,972 [main] INFO  org.apache.pig.Main - Logging error messages to: /Users/barclaydunn/Environment/pig-0.11.1/pig_1368223402970.log
2013-05-10 18:03:23,151 [main] INFO  org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://stage-hadoop101.cluster:8020/hbase
2013-05-10 18:03:23,704 [main] ERROR org.apache.pig.Main - ERROR 2999: Unexpected internal error. Failed to create DataStorage
Details at logfile: /Users/barclaydunn/Environment/pig-0.11.1/pig_1368223402970.log

日志文件内容:

 $ cat /Users/barclaydunn/Environment/pig-0.11.1/pig_1368223402970.log
Error before Pig is launched
----------------------------
ERROR 2999: Unexpected internal error. Failed to create DataStorage

java.lang.RuntimeException: Failed to create DataStorage
    at org.apache.pig.backend.hadoop.datastorage.HDataStorage.init(HDataStorage.java:75)
    at org.apache.pig.backend.hadoop.datastorage.HDataStorage.<init>(HDataStorage.java:58)
    at org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.init(HExecutionEngine.java:204)
    at org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.init(HExecutionEngine.java:117)
    at org.apache.pig.impl.PigContext.connect(PigContext.java:240)
    at org.apache.pig.PigServer.<init>(PigServer.java:213)
    at org.apache.pig.PigServer.<init>(PigServer.java:198)
    at org.apache.pig.tools.grunt.Grunt.<init>(Grunt.java:47)
    at org.apache.pig.Main.run(Main.java:535)
    at org.apache.pig.Main.main(Main.java:157)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
Caused by: org.apache.hadoop.ipc.RemoteException: Server IPC version 7 cannot communicate with client version 4
    at org.apache.hadoop.ipc.Client.call(Client.java:1070)
    at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:225)
    at com.sun.proxy.$Proxy1.getProtocolVersion(Unknown Source)
    at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:396)
    at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:379)
    at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:119)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:238)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:203)
    at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:89)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1386)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:66)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1404)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:254)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:123)
    at org.apache.pig.backend.hadoop.datastorage.HDataStorage.init(HDataStorage.java:72)
    ... 14 more
================================================================================

搜索“服务器 IPC 版本 7 无法与客户端版本 4 通信”并没有发现任何有用的信息。

【问题讨论】:

【参考方案1】:

设置HADOOP_HOME 指向你正在使用的hadoop。

来自pig getting started 页面:

(您可以通过设置在不同版本的 Hadoop 上运行 Pig HADOOP_HOME 指向您安装 Hadoop 的目录。 如果没有设置 HADOOP_HOME,默认情况下 Pig 将使用 嵌入式版本,目前是 Hadoop 1.0.0。)

IPC 第 4 版适用于 Hadoop 1.0,而第 7 版适用于 Hadoop 2.0,因此听起来您正在运行 pig 及其嵌入式 hadoop 版本,但试图与 Hadoop 2 集群通信。

【讨论】:

HADOOP_HOME 已弃用,取而代之的是 HADOOP_PREFIX。但是,您的关键点 - 我在本地使用 v4 并且集群是 v7 - 是我正在寻找的修复。谢谢。我本来希望我们的集群是稳定版本的 hadoop,但我们的管理员显然是牛仔。【参考方案2】:

当 cdh3 作业尝试与 cdh4 HDFS 通信时,可能会导致错误“服务器 IPC 版本 7 无法与客户端版本 4 通信”。

检查您的 mapred.job.tracker 和 fs.default.name 设置

【讨论】:

以上是关于pig 到 hadoop 问题:服务器 IPC 版本 7 无法与客户端版本 4 通信的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop pig 连接错误 - historyserver 不会启动

阿里云ECS服务器部署HADOOP集群:Pig 安装

将 Hadoop Pig 输出作为 JSON 数据发布到 URL?

如何在 Hadoop 中的机器之间传输文件并使用 Pig 搜索字符串

Hadoop pig连接错误 - historyserver无法启动

使用 Hadoop 配置猪关系