【问题标题】:thrift api java client connect with HBasethrift api java客户端与HBase连接
【发布时间】:2014-07-03 20:01:30
【问题描述】:

包用途:

import org.apache.hadoop.hbase.thrift.generated.AlreadyExists;
import org.apache.hadoop.hbase.thrift.generated.ColumnDescriptor;
import org.apache.hadoop.hbase.thrift.generated.Hbase;
import org.apache.hadoop.hbase.thrift.generated.IOError;
import org.apache.hadoop.hbase.thrift.generated.IllegalArgument;
import org.apache.hadoop.hbase.thrift.generated.Mutation;
import org.apache.hadoop.hbase.thrift.generated.TCell;
import org.apache.hadoop.hbase.thrift.generated.TRowResult;

import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;

调用方法

public void start() {
            try {
                TTransport socket = new TSocket("host-name", 9090);// IP Host Name
                TProtocol protocol = new TBinaryProtocol(socket, true, true);// Note here
                Hbase.Client client = new Hbase.Client(protocol);
                socket.open();
                System.out.println("open");
                try {
                    System.out.println("scanning tables...");
                    for (byte[] name : client.getTableNames()) { 
                        //code
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    out.println(e.getMessage());
                }
                socket.close();
                out.println("close");
            } catch (TTransportException e) {
                e.printStackTrace();
                out.println(e.getMessage());
            } catch (TException e) {
                e.printStackTrace();
                out.println(e.getMessage());

            }
}    

问题:

代码java 获取错误:无效的方法名称:'getTableNames' 我不能在 Hbase 中给出列表 也许我错过了包裹有问题

感谢您的帮助

【问题讨论】:

  • 您在客户端或服务器端使用了错误的 API。 HBase 有一个旧的和一个新的 Thrift API。见here,同样的问题。 -1 在询问之前没有做作业:The very same question has been asked just yesterday.
  • 感谢 Jens 的回复,我试图寻找新的 Thrift API,但仍然没有结果,感谢您的帮助。
  • 每当客户端调用服务器不知道的方法时,就会引发错误消息invalid method name。唯一可能的原因是(1)服务器和客户端使用不同的 API 版本,这是 HBase 最常见的错误,或者(2)客户端与一个完全错误的服务器通信,而该服务器恰好实现了另一个基于 Thrift 的 API。后者不太可能,但仍有可能。就是这样。如果你有“仍然没有结果”你应该更具体,为什么解决方案没有帮助你。
  • 我试试看这两种可能,你会知道的,非常感谢

标签: java dependencies hbase thrift


【解决方案1】:

谢谢,问题解决了,我在hbase-0.94.19.tar.gz\hbase-0.94.19\src\examples\thrift2中使用了DemoClient.java,这个rar我已经安装过了在服务器上。我添加了这个依赖项

    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-thrift</artifactId>
        <version>0.98.2-hadoop2</version>
        <type>jar</type>
    </dependency>

【讨论】:

    猜你喜欢
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多