2013-11-28 56 views
0

我使用hbase客戶端掃描從遠程hbase服務器集羣中獲取數據。當我設置過濾器來掃描,客戶端會拋出一個異常:hbase客戶端掃描無法初始化org.apache.hadoop.hbase.util.Classes

org.apache.hadoop.ipc:RemoteException:IPC server unable to read call parameters: Could not init org.apache.hadoop.hbase.util.Classes.

服務器端的HBase的日誌:

java.lang.NoClassDefFoundError:Could not initial class org.apache.hadoop.hbase.util.Classes at org.apache.hadoop.hbase.client.Scan.readFields(Scan.java:590)

但它運作良好,沒有一個過濾器。順便說一下,該過濾器不是自定義過濾器。

我的hbase版本是0.94.10,hadoop是1.2.1。我將hadoop-core.jar拷貝到hbase下的lib目錄下。

+0

@ Tshepang.Sorry for that.I've it it to a answer。 – shoneyung

回答

1

org.apache.hadoop.hbase.util.Classes將一些初始代碼放入其靜態塊中。所以它只會被初始化一次。當第一次初始化某些東西時,如果拋出RunTimeException,除非重新啓動hbase集羣,否則它不會再初始化。在最初的塊中,它會創建目錄,如果創建目錄失敗,則會拋出runtimeException。

1

在初始化org.apache.hadoop.hbase.util.Classes期間,如果「hbase.local.dir」的配置值不存在,則會拋出運行時異常並且org.apache.hadoop.hbase.util.Classes將無法​​初始化。該運行時異常會導致拋出ClassDefNotFoundException,這是最終在日誌中報告的內容。

確保這些存在並且是可寫的HBase的:

  • hbase.local.dir(默認:$ {} hbase.tmp.dir /本地)
  • hbase.tmp.dir(默認: $ {java.io.tmpdir}/hbase - $ {user.name})