0

我有一个示例代码,它使用 RHBase(RHadoop 套件)从 R 连接到 HBase。它在一种环境中有效,在另一种环境中无效。


代码:

# Location and port of the thrift server
hostLoc = '172.25.1.16'
port = 9090

require(rhbase)

#create new table with columns x,y and z
hb.new.table("mytable", "x","y","z",opts=list(y=list(compression='GZ')))

#insert some values into the table
hb.insert("mytable",list( list(10,c("x","y","z"),list("apple","berry","cherry"))))
hb.insert("mytable",list( list(20,c("x","y","z"),list(10001,14,575))))
hb.insert("mytable",list( list(30,c("x","y","z"),list("a string",1000.23,FALSE))))

这是相当简单的代码,我写这个是为了复制这个错误。

环境1:

Ubuntu 12.04 LTS R:3.0 Thrift 0.9.0 Java(如果需要):OpenJDK 1.6

==> 此代码在此环境下运行良好。这是我的本地机器。

环境 2 Ubuntu 12.04 LTS R:2.15.2 Thrift 0.9.0 Java(如果需要):Oracle Java 1.7

==> 这是一台远程机器。它抛出以下错误:

Error in hb.insert("mytable", list(list(10, c("x", "y", "z"), list("apple",  :
  RAW() can only be applied to a 'raw', not a 'character'

在这两种情况下,我都在远程位置连接到 HBase (0.94.7)。

关于是什么导致这个问题的任何想法?我对 Hbase 和 RHadoop 套件还很陌生,请原谅任何幼稚的问题!另外,请告诉我是否需要任何其他信息。

编辑:我有一个独立的 HBase 实例——不是 cloudera 发行版。我按照 RHbase 的要求从源头构建了 Thrift

4

1 回答 1

0

Revolution Analytics 最近发布了第三种序列化,“char”。它解决了这个问题。

hb.init(hostloc,port,'char')
于 2013-09-07T09:40:56.077 回答