【问题标题】:HBase different clientsHBase 不同的客户端
【发布时间】:2013-02-13 12:16:28
【问题描述】:

我正在做一个项目,我想从 HBase 系统中读取数据。我读到有各种可用的 HBase 客户端,默认的 Java 客户端、Thrift、Avro 等。

现在我很困惑,如果我选择默认的 Java 客户端,那么我是否能够使用 thrift 客户端读取存储在 HBase 中的数据?

我想了解如果我使用 thrift 客户端从 HBase 读取数据,那么它将使用 thrift 反序列化器将数据从二进制类型转换为适当的类型?如果是这样,那么如果我使用 HBase 默认客户端读取,使用 thrift 客户端加载的数据将被损坏?

感谢您的帮助!! ~罗希特

【问题讨论】:

  • Guyz 如果您对理解问题有任何疑问,请告诉我。

标签: hbase thrift avro


【解决方案1】:

如果您使用 Java 开发 HBase 应用程序,我建议使用原始 HBase API - 它比 Thrift、REST、Avro 等更强大。

Java HBase API 通过 Zookeepers 直接与 HBase 数据库通信。

如果您使用 Java,那么您必须使用其他协议之一 - Thrift、REST、Avro 等。例如,Python 有一些 Thrift 库(我推荐 HappyBase ) 以及 REST。 Ruby 和其他语言也是如此。

如果您使用 Java API(直接)插入数据,您将能够在 Python 或 Ruby 上使用 Thrift 检索完全相同的数据。您可能需要小心数据结构/格式(HBase 将所有内容都存储为字节),因此请小心存储字符串、整数、Unicode 字符串等。

【讨论】:

  • 谢谢苏曼。它真的很有帮助!所以只是为了清楚并确保我正确理解你。 Thrift 客户端接口不使用 thrift 序列化/反序列化,它使用 HBase Java 客户端使用的相同机制进行序列化和反序列化?
  • 继续我的最后一个问题,当我尝试插入一个 int 然后它被转换为二进制时,即使是 HBase 命令行客户端也会使用完全相同的序列化机制?
  • 啊,这是一个有趣的问题——我还没玩过序列化部分?您是只插入整数/字符串还是完整对象?
  • 我建议尝试一下并看看——这就是我必须找出写/读 int、字符串、unicode 等的最佳方法的方法。一般来说,如果你向 HBase 写一些东西,你会得到与输出完全相同的东西。
  • 嗯,我会试着玩,看看会发生什么。无论如何,我只是在寻找原始的 java 类型、字符串、int 等。再次感谢!
猜你喜欢
  • 2011-09-03
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多