- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
最近开始使用hadoop。现在我想从一个没有安装 hadoop-client 的远程主机访问 hdfs,只是依赖 hadoop-client-2.0.4-alpha.jar 。
但是当我尝试访问 hdfs 时,出现以下异常:
java.io.IOException: Failed on local exception: com.google.protobuf.InvalidProtocolBufferException: Message missing required fields: callId, status; Host Details : local host is: "webserver/127.0.0.1"; destination host is: "222.333.111.77":8020;
at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:761)
at org.apache.hadoop.ipc.Client.call(Client.java:1239)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:202)
at $Proxy25.getFileInfo(Unknown Source)
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.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:164)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:83)
at $Proxy25.getFileInfo(Unknown Source)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getFileInfo(ClientNamenodeProtocolTranslatorPB.java:630)
at org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:1559)
at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:811)
at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1345)
at com.kongming.kmdata.service.ExportService.copyToLocalFileFromHdfs(ExportService.java:60)
at com.kongming.kmdata.service.KMReportManager.run(KMReportManager.java:105)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: com.google.protobuf.InvalidProtocolBufferException: Message missing required fields: callId, status
at com.google.protobuf.UninitializedMessageException.asInvalidProtocolBufferException(UninitializedMessageException.java:81)
at org.apache.hadoop.ipc.protobuf.RpcPayloadHeaderProtos$RpcResponseHeaderProto$Builder.buildParsed(RpcPayloadHeaderProtos.java:1094)
at org.apache.hadoop.ipc.protobuf.RpcPayloadHeaderProtos$RpcResponseHeaderProto$Builder.access$1300(RpcPayloadHeaderProtos.java:1028)
at org.apache.hadoop.ipc.protobuf.RpcPayloadHeaderProtos$RpcResponseHeaderProto.parseDelimitedFrom(RpcPayloadHeaderProtos.java:986)
at org.apache.hadoop.ipc.Client$Connection.receiveResponse(Client.java:946)
at org.apache.hadoop.ipc.Client$Connection.run(Client.java:844)
看起来像rpc 异常,如何解决?这是我的代码:
package com.xxx.xxx.service;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.log4j.Logger;
import com.xxx.xxx.fileSystem.IFilePath;
import com.xxx.xxx.inject.GuiceDependency;
public class ExportService {
private static Logger log = Logger.getLogger(ExportService.class);
private static Configuration configuration = new Configuration();
private static String dir = "./";
private static String hadoopConf = "hadoop-conf/";
static {
configuration.addResource(new Path(hadoopConf + "core-site.xml"));
configuration.addResource(new Path(hadoopConf + "hdfs-site.xml"));
configuration.addResource(new Path(hadoopConf + "mapred-site.xml"));
configuration.addResource(new Path(hadoopConf + "yarn-site.xml"));
}
public static boolean copyToLocalFileFromHdfs(String reportID) {
IFilePath filePath = GuiceDependency.getInstance(IFilePath.class);
String resultPath = filePath.getFinalResult(reportID) + "/part-r-00000";
Path src = new Path(resultPath);
String exportPath = dir + reportID + ".csv";
Path dst = new Path(exportPath);
System.out.println(configuration.get("fs.defaultFS"));
System.out.println("zxz copyToLocalFileFromHdfs scr: "
+ src.toString() + " , dst: " + dst.toString());
try {
System.out.println("zxz get fileSystem start ");
FileSystem fs = FileSystem.get(configuration);
System.out.println("zxz get fileSystem end "
+ fs.getHomeDirectory().toString());
System.out.println("zxz ~~~~~~~~~~~~~~~~~~~~~~~~~"
+ fs.exists(src));
;
fs.copyToLocalFile(false, src, dst);
fs.copyToLocalFile(false, src, dst, true);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("copyFromHDFSFile error : ", e);
return false;
}
System.out.println("zxz end copyToLocalFileFromHdfs for report: "
+ reportID);
return true;
}
和 core-site.xml :
<?xml version="1.0" encoding="UTF-8"?>
<!--Autogenerated by Cloudera CM on 2013-07-19T00:57:49.581Z-->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://222.333.111.77:8020</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>1</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>65536</value>
</property>
<property>
<name>hadoop.security.authentication</name>
<value>simple</value>
</property>
<property>
<name>hadoop.rpc.protection</name>
<value>authentication</value>
</property>
<property>
<name>hadoop.security.auth_to_local</name>
<value>DEFAULT</value>
</property>
<property>
<name>hadoop.native.lib</name>
<value>false</value>
<description>Should native hadoop libraries, if present, be used.</description>
</property>
</configuration>
有人知道这个问题吗?非常感谢您的帮助~
最佳答案
我相信使用 google protobuf 库的 hdfs。而且您的客户端代码似乎使用了错误(不兼容)的 protobuf 版本。
关于hadoop - 远程访问HDFS出现异常,求助~~,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18298637/
我有以下代码: $(document).ready(function() { // hides
Closed. This question needs details or clarity。它当前不接受答案。
好吧,我的一个作业问题是取一个列表的列表,并将每个子列表的汽车作为一个列表返回。我把它放在可以打印出值的地方,但它不是列表。老实说,我不知道如何输出列表。这是我得到的: (define (car-pr
我把5、4分别填入空白的1st Number、2nd Number,然后点击输出中的Multiply。我期待得到 20,但我得到了零,为什么? 这是代码(也是 on JSBin ): var num1
在新数据集中,我创建了两个新列,Start_time 和 End_time。我还想创建一个列来显示这两个时间之间的差异。这是我的代码: SELECT b.company, b.NAME,
嗨,我想弄清楚这个问题,已经查看了很多地方,但由于我的表结构,我正在苦苦挣扎。这是我的表结构: 用户 - id, login (pk) 类(class) - id (pk), name users_t
我有这样的代码: if (X or Y) == ("Cat" or "Dog" or "Fish" or "Bird"): print X, Y 它仅在 X == "Cat" 时有效。有人知道
我目前正在开发一款玩家玩老虎机的游戏。该游戏基于用户停止金钱,100 瑞典克朗、300 瑞典克朗或 500 瑞典克朗。然后用户为每场比赛下注。独臂强盗在九个棋子区域中随机吐出三个不同的符号。见图: 游
我正在用 python 编写程序,但遇到无法解决的错误。 问题是: 我有一组指向 3D 空间中的点,我将它存储在一个矢量(rake)中。我的观点是建立一个流表面。所以我将这些点附加到另一个列表,以便我
我被一个问题困了几天。这可能是你的脑袋比我大! 我有一堆 CSV 文件,我希望将它们连接成一个 .csv 文件,并按数字排序。好的,首先遇到的问题是 ID(我想按 ID 排序)名称。例如 sort -
我已经阅读了几个教程,但我仍然没有任何线索:-)我有一个 c 文件“liboratidy.c”,该文件包含一些 oder 库: #include #include #include #inclu
我是 CSS 新手,想学习如何制作网页。在 Codecademy 上学习时,有一节关于类(class)和 ID 的类(class)让我感到困惑。应该如何设置类,如果是这样的话会有什么不同吗 .cont
我正在训练代码问题,在这个问题上我有问题要解决,你能给我一些解决方法吗? 问题取自这里: https://www.ieee.org/documents/IEEEXtreme2008_Competiti
("*").each(function () { if ($(this).children().length == 0) { $(this).text($(this).text()
最近开始使用hadoop。现在我想从一个没有安装 hadoop-client 的远程主机访问 hdfs,只是依赖 hadoop-client-2.0.4-alpha.jar 。 但是当我尝试访问 hd
大家好,我刚刚在我的 Windows 7 上安装了 cygwin,其中包含所有软件包(包括 make)。但是一旦我尝试在 cygwin 中使用 make 命令,它就会给我错误消息:“bash: mak
我正在尝试了解 quartz 2d 坐标系,目前我正在阅读 Apple 引用指南和旧书“Quartz 2d graphics for mac os x developer”。 我理解用户空间和设备空间
我想用 python 与我的串口通信。我为 linux 安装了 pyserial 和 uspp。不过,当我运行以下代码时: import serial ser = serial.Serial('/de
我有一个我编写的 Android 应用程序,它表现出一些奇怪的行为。 当我打开一个应用程序时,假设堆栈中有三个 Activity A-B-C 其中a是入口点,C是当前查看的 Activity ,如果我
CREATE TABLE country ( country_id VARCHAR (20), country_name CHAR (20), state_no INT (5), PRIMARY KE
我是一名优秀的程序员,十分优秀!