2011-03-07 20 views
17

क्या कोई मुझे बता सकता है, सभी पंक्ति कुंजियों को एक हबेस तालिका में कैसे सूचीबद्ध करें?एक hbase तालिका में सभी पंक्ति कुंजी कैसे सूचीबद्ध करें?

+1

क्या आप सभी पंक्ति कुंजी को hbase shell के माध्यम से या जावा एपीआई के माध्यम से सूचीबद्ध करना चाहते हैं? – knt

+0

हाय एनटी, मुझे आरईएसटी-PHP संयोजन का उपयोग करके सूचीबद्ध करने की आवश्यकता है। तुम मेरी मदद कर सकते हैं? अग्रिम में धन्यवाद। –

+0

यहां देखें http://hbase.apache.org/docs/r0.20.4/api/org/apache/hadoop/hbase/stargate/package-summary.html#operation_scanner_create – dminer

उत्तर

5
Configuration conf = HBaseConfiguration.create(); 
HTable table = new HTable(conf, tableName.getBytes()); 

System.out.println("scanning full table:"); 
ResultScanner scanner = table.getScanner(new Scan()); 
for (Result rr = scanner.next(); rr != null; rr = scanner.next()) { 
    byte[] key == rr.getRow(); 
    ... 
} 
+0

मुझे माफ़ कर दो .. मुझे REST API-PHP की आवश्यकता है ऐसा करने का तरीका। –

9

यह काफी तेज किया जाना चाहिए (FirstKeyOnlyFilter सर्वर पर चलाया जाता है और ग्राहक के लिए परिणाम भेजने से पहले सभी स्तंभ डेटा स्ट्रिप्स):

Configuration conf = HBaseConfiguration.create(); 
HTable table = new HTable(conf, tableName.getBytes()); 
System.out.println("scanning full table:"); 
Scan scan = new Scan(); 
scan.setFilter(new FirstKeyOnlyFilter()); 
ResultScanner scanner = table.getScanner(scan); 
for (Result rr : scanner) { 
    byte[] key == rr.getRow(); 
    ... 
} 
+1

सही है, लेकिन 'firstKeyOnlyFilter' का उपयोग करने से' scan.setCaching (1000) 'अब तक ** अधिक महत्वपूर्ण ** है। कृपया ध्यान दें कि डिफ़ॉल्ट कैशिंग को '1' पर सेट किया गया है। –

1

जब एक मेज स्कैन प्रदर्शन कर जहां केवल पंक्ति कुंजी की आवश्यकता होती है (कोई परिवार, क्वालीफायर, मान या टाइमस्टैम्प नहीं), सेटफिल्टर का उपयोग करके स्कैनर में MUST_PASS_ALL ऑपरेटर के साथ एक फ़िल्टरलिस्ट जोड़ें। फ़िल्टर सूची में फर्स्टकेयऑनफिल्टर और एक कीऑनलीफिल्टर दोनों शामिल होना चाहिए। इस फ़िल्टर संयोजन का उपयोग करने से क्षेत्र से सर्वर का एक सबसे खराब केस परिदृश्य होगा और एक पंक्ति के लिए क्लाइंट को न्यूनतम नेटवर्क यातायात पढ़ा जाएगा।

1

ऐसा लगता है कि आप PHP में HBase Thrift क्लाइंट का उपयोग करना चाहते हैं। यहां एक नमूना कोड है और आप एचबीएएस में सभी डेटा प्राप्त कर सकते हैं और अपनी पंक्ति कुंजी प्राप्त कर सकते हैं।

<? $_SERVER['PHP_ROOT'] = realpath(dirname(__FILE__).'/..'); 
    require_once $_SERVER['PHP_ROOT'].'/flib/__flib.php'; 
    flib_init(FLIB_CONTEXT_SCRIPT); 
    require_module('storage/hbase'); 
    $hbase = new HBase('<server_name_running_thrift_server>', <port on which thrift server is running>); 
    $hbase->open(); 
    $client = $hbase->getClient(); 
    $result = $client->scannerOpenWithFilterString('table_name', "(PrefixFilter ('row2') AND (QualifierFilter (>=, 'binary:xyz'))) AND (TimestampsFilter (123, 456))"); 
    $to_print = $client->scannerGetList($result,1); 
    while ($to_print) { 
     print_r($to_print); 
     $to_print = $client->scannerGetList($result,1); 
    } 
    $client->scannerClose($result); 
?> 
18

HBase खोल सभी पंक्ति की कुंजियों को सूचीबद्ध करने के लिए इस्तेमाल किया जा सकता है:

count 'table_name', { INTERVAL => 1 } 
1

परिणाम वर्ग के getRow विधि का उपयोग करें। इसका विवरण कहता है:

से पंक्ति के अनुरूप पंक्ति कुंजी को पुनर्प्राप्त करने के लिए विधि जो यह परिणाम बनाया गया था।

table मानते हुए अपने HBase तालिका है और आप अपने HBase उदाहरण से जुड़े हैं, तुम सब करने की जरूरत है:

Scan scan = new Scan(); 
ResultScanner rscanner = table.getScanner(scan); 
for(Result r : rscanner){ 
    //r is the result object that contains the row 
    //do something 
    System.out.println(Bytes.toString(r.getRow())); //doing something 
} 

मैं समझता हूँ कि यह पहले से ही देखने के जावा एपीआई बिंदु से उत्तर दिया गया है, लेकिन थोड़ा और विवरण कभी भी किसी को चोट नहीं पहुंचाता।

संबंधित मुद्दे