我有幾個HBase表。它們的鍵都不同,但每個鍵都有32位整數所有者ID作爲鍵的一部分。它對每張表格都有不同的抵消,但我知道這些抵消。 現在,我傳入了一個ID集合,我需要將與傳入的所有者有關的數據轉儲到該文件中。即我需要做一些等同於以下SQL語句:在Java中自定義篩選HBase表
SELECT * FROM table WHERE substr(key_field, offset, length) IN (...);
努力實現我寫了這樣的事情:
public class SubKeyComparator extends BinaryComparator {
private Set<Integer> idSet;
private int idLength = 4;
private int idOffset = 0;
// getters/setters are here
@Override
public int compareTo(byte[] value) {
return idSet.contains(Bytes.toInt(value, offset, length))? 0 : 1;
}
}
如預期似乎不工作。 它實際上根本不工作。我打開表,當我試圖讓
ResultScanner scanner = htable.getScanner(scan);
它等待了一下,然後在 組織拋出顯示java.io.EOFExceptions十幾的org.apache.hadoop.hbase.client.RetriesExhaustedException .apache.hadoop.hbase.client.HConnectionManager $ HConnectionImplementation.getRegionServerWithRetries(HConnectionManager.java:1231)
嘗試在網上找到解決方案或瞭解HBase源代碼出了什麼問題並沒有產生任何顯着結果。 如果我不把我的過濾器插入掃描對象,一切工作正常。
如果有人知道什麼是錯的或做了類似的事情,您的幫助將不勝感激。
你知道,即使你得到這個工作,它將是非常低效的 - 即通過所有者ID不是密鑰最左邊部分的表中的每一行 – 2012-04-27 04:46:33
是的,我知道它。不幸的是,它仍然需要完成。 – Gary 2012-04-27 16:27:35