最近在学习传智播客吴超老师的Hadoop视频,里面他在讲解RPC通信原理的过程中给了一个RPC的小例子,但是自己编写的过程中遇到一个小错误,整理如下:

log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
    at com.sun.proxy.$Proxy4.login(Unknown Source)
    at cn.edu.nupt.Hadoop.rpc.LoginController.main(LoginController.java:13)
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.RpcServerException): Unknown protocol: cn.edu.nupt.Hadoop.rpc.LoginServiceInterface
    at org.apache.hadoop.ipc.WritableRpcEngine$Server$WritableRpcInvoker.call(WritableRpcEngine.java:493)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:969)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2049)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2045)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2043)

at org.apache.hadoop.ipc.Client.call(Client.java:1475)
    at org.apache.hadoop.ipc.Client.call(Client.java:1412)
    at org.apache.hadoop.ipc.WritableRpcEngine$Invoker.invoke(WritableRpcEngine.java:243)
    ... 2 more

  导致此类问题的原因主要是由于命名空间的问题(包的命名不一致)。在我的环境中我的linux中的包命名为cn.edu.nupt.hadoop.rpc,而在我的windows工程中我的包的命名格式为cn.edu.nupt.Hadoop.rpc,很清楚的看到我的命名格式不一致。改好后运行成功。因为我的windows中的项目是通过maven创建的,所以不太好修改报名,直接统一改成了cn.edu.nupt.Hadoop.rpc格式。

几点说明:

  我的namenode的ip对应的“域名”为master;

  采用的端口号监听是:10000

  抽象接口(协议):接口

  实例:具体实现类

几个重要的类如下:

1、Linux端

(1)接口:LoginServiceInterface

package cn.edu.nupt.Hadoop.rpc;

public interface LoginServiceInterface {
public static final long versionID=1L;
public String login(String username,String passwd);
}

(2)实现类:LoginServiceImplement

package cn.edu.nupt.Hadoop.rpc;

public class LoginServiceImplement implements LoginServiceInterface{
@Override
public String login(String username, String passwd) {
// TODO Auto-generated method stub
System.out.println("haha");
return username+"Login Successful!";
}
}

(3)程序入口:start

package cn.edu.nupt.Hadoop.rpc;

import java.io.IOException;

import org.apache.hadoop.HadoopIllegalArgumentException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC; /**
*
* @author hadoop
*
*/
public class start { public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
RPC.Builder builder = new RPC.Builder(new Configuration()); builder.setBindAddress("master").setPort(10000).setProtocol(LoginServiceInterface.class)
.setInstance(new LoginServiceImplement()); org.apache.hadoop.ipc.RPC.Server server = builder.build();
server.start();
}
}

2、windows端

(1)抽象类:loginServiceInterface

package cn.edu.nupt.Hadoop.rpc;

public interface LoginServiceInterface {
public static final long versionID=1l;
public String login(String username,String passwd);
}

(2)测试类:LoginController

package cn.edu.nupt.Hadoop.rpc;

import java.io.IOException;
import java.net.InetSocketAddress; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC; public class LoginController {
public static void main(String[] args) throws IOException {
LoginServiceInterface proxy = RPC.getProxy(LoginServiceInterface.class, 1L, new InetSocketAddress("master", 10000), new Configuration()); String result=proxy.login("Angelababy ", "123456");
System.out.println(result);
}
}

Hadoop中RPC协议小例子报错java.lang.reflect.UndeclaredThrowableException解决方法的更多相关文章

  1. 在 Linux 环境下报错 java.lang.reflect.InvocationTargetException

    今天开发了一个 excel 导出数据的功能,放到 linux 服务器上后发现报错. 捕获到 java.lang.reflect.InvocationTargetException 异常,这个异常不太常 ...

  2. Cglib学习报错 java.lang.reflect.InvocationTargetException-->null

    package javacore.testForCglibProxy; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhan ...

  3. Java中线程出现Exception in thread "Thread-0" java.lang.IllegalMonitorStateException异常 解决方法

    代码 package thread; public class TestChongNeng { public static void main(String[] args) { Thread t1 = ...

  4. Linux中Oracle启动侦听报错TNS:permission denied的解决方法

    最近在开发环境 oracle 启动侦听的时候,出现了 TNS:permission denied 的问题,通过网上和咨询朋友,最终找到了解决方案,现在共享出来给有需要的朋友. [oracle@orac ...

  5. 使用hibernate报错java.lang.ExceptionInInitializerError的处理方法

    今天使用hibernate搭建持久层出现一个问题 原因在于  在创建user liberty时同时勾选了System Library(added to the boot class )path

  6. Spring+Mybatis+Dubbo报错java.lang.reflect.MalformedParameterizedTypeException

    原因是spring的jar文件冲突,排除spring的文件即可 <dependency> <groupId>com.alibaba</groupId> <ar ...

  7. maven web 项目中启动报错 Java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

    主要原因是maven项目里面的jar包吗,没有导入到项目中 maven web 项目中启动报错 Java.lang.ClassNotFoundException: org.springframewor ...

  8. vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文)

    vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文)

  9. 安卓小程序的一次bug调试,报错:java.lang.NullPointerException,logcat学习

    做实验的时候,调试了很久后模拟器执行后,app还是会崩溃并停止运行,错误如下. 因为初学,所以也不知道怎么使用调试工具,也不懂看日志,经过学习后尝试这查看了LogCat日志上面有这样的提示: 其中引起 ...

随机推荐

  1. Hadoop分布式文件系统--HDFS结构分析

    转自:http://blog.csdn.net/androidlushangderen/article/details/47377543 HDFS系列:http://blog.csdn.net/And ...

  2. javascript基础语法及使用

    前几年自学过JavaScript,由于从事安卓开发,就放弃了对js的学习,今天又捡起来重新学习了下,希望对大家有所帮助. 首先介绍下什么是JavaScript. JavaScript 是互联网上最流行 ...

  3. [转]使用TeamCity对项目进行可持续集成管理(一)

    一.可持续集成管理 持续集成,CI:即Continuous integration. 可持续集成的概念是基于团队(小组)协作开发而提出来的,为了提高团队开发效率与降低集成风险(早发现,早解决.晚发现, ...

  4. python socket 简单例子

    myserver.py: import socket serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serverso ...

  5. 蓝桥杯 第三届C/C++预赛真题(4) 奇怪的比赛(递归)

    某电视台举办了低碳生活大奖赛.题目的计分规则相当奇怪: 每位选手需要回答10个问题(其编号为1到10),越后面越有难度.答对的,当前分数翻倍:答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错 ...

  6. 【Google Earth】pro之视频录制

    一.谷歌地球文件简介 谷歌地球能识别的文件分为:gpx.kml.kmz文件.谷歌地球的官方文件为kml和kmz,其中kmz是kml和图片.模型等数据的压缩文件,kml为数据信息文件,也可以分为航迹和字 ...

  7. 认识tornado(五)

    Tornado 自带了模板系统,模板语法与 Django 差异不大.这里简单地介绍如何使用 Tornado 的模板系统. 首先是编写 URL 规则与 Handler: 01 class NowaMag ...

  8. Xcode删除Project上层group

    本来想在Project下New Group,结果点了New group from selection, 结果在Project上级新建了一个group,邮件菜单中无删除项…… 解决方法: 1,关闭Xco ...

  9. 微信支付 超时 mysql.event

    $wtime 使用具体timestamp //rand 防推测 $wev = 'ev_gbuy_create_' . trim($winsert_id) . rand(100, 999); $sql ...

  10. 3.Write Scripts for the mongo Shell-官方文档摘录

    总结 1 使用js进行获取数据的方法 2 js方式和原生mongo shell的交互方式的区别写法 3 需要将所有数据打印出来使用到的循环示例 cursor = db.collection.find( ...