यह कैसे-कैसे एक श्रृंखला में तीसरा है जो Apache HBase REST इंटरफ़ेस के उपयोग की पड़ताल करता है। भाग 1 में HBase REST के बुनियादी सिद्धांत, कुछ पायथन चेतावनी और टेबल प्रशासन शामिल हैं। भाग 2 में आपको दिखाया गया है कि XML और JSON का उपयोग करके एक साथ कई पंक्तियों को कैसे सम्मिलित किया जाए। नीचे दिया गया भाग 3 दिखाएगा कि XML और JSON का उपयोग करके एकाधिक पंक्तियाँ कैसे प्राप्त करें।
XML के साथ पंक्तियाँ प्राप्त करना
GET
का उपयोग करना क्रिया, आप उनकी पंक्ति कुंजियों के आधार पर एकल पंक्ति या पंक्तियों के समूह को पुनः प्राप्त कर सकते हैं। (आप यहां एकाधिक मान URL प्रारूप के बारे में अधिक पढ़ सकते हैं।) यहां हम एक विशिष्ट स्ट्रिंग से शुरू होने वाली सभी पंक्तियों को प्राप्त करने के लिए साधारण वाइल्डकार्ड वर्ण या तारांकन (*) का उपयोग करने जा रहे हैं। इस उदाहरण में, हम शेक्सपियर के हास्य की हर पंक्ति को "शेक्सपियर-कॉमेडी-*" के साथ लोड कर सकते हैं। इसके लिए यह भी आवश्यक है कि हमारी पंक्ति कुंजियों को "AUTHOR-WORK-LINENUMBER" द्वारा निर्धारित किया जाए।
एक्सएमएल आउटपुट प्राप्त करने और उसके साथ काम करने के लिए कोड यहां दिया गया है:
request = requests.get(baseurl + "/" + tablename + "/shakespeare-comedies-*", headers={"Accept" : "text/xml"}) root = fromstring(request.text) # Go through every row passed back for row in root: message = '' linenumber = 0 username = '' # Go through every cell in the row for cell in row: columnname = base64.b64decode(cell.get('column')) if cell.text == None: continue if columnname == cfname + ":" + messagecolumn: message = base64.b64decode(cell.text) elif columnname == cfname + ":" + linenumbercolumn: linenumber = decode(cell.text) elif columnname == cfname + ":" + usernamecolumn: username = base64.b64decode(cell.text) rowKey = base64.b64decode(row.get('key'))
हम कोड को get
. के साथ प्रारंभ करते हैं गुजारिश। यह get
शेक्सपियर की कॉमेडी में सभी पंक्तियों को वापस कर देगा। Accept
. में परिवर्तन के कारण ये पंक्तियां XML के रूप में वापस आ जाएंगी हेडर।
फिर हम अनुरोध द्वारा लौटाए गए एक्सएमएल को लेते हैं और इसे एक्सएमएल डोम में बदल देते हैं। HBase से प्रत्येक पंक्ति एक अलग पंक्ति तत्व में है। हम for
. का उपयोग करेंगे प्रत्येक पंक्ति से गुजरने के लिए लूप।
पंक्ति में प्रत्येक सेल एक अलग XML तत्व है। हम एक और for
. का उपयोग करेंगे इन सभी कोशिकाओं के माध्यम से जाने के लिए लूप। (सही तत्वों को खोजने के लिए XPath का उपयोग करके कोड के इस ब्लॉक को सरल बनाया जा सकता है।) जैसा कि प्रत्येक कॉलम पाया जाता है, मान एक चर में सहेजा जाता है। (डिकोड विधि की चर्चा इस श्रृंखला के भाग 1 में की गई है।) XML में वापस आने वाले सभी मान बेस 64-एन्कोडेड हैं और उनका उपयोग करने से पहले उन्हें डीकोड करने की आवश्यकता है।
अंत में, पंक्ति कुंजी को पुनः प्राप्त और डिकोड किया जाता है।
एक बार सभी डेटा मिल जाने और डीकोड हो जाने के बाद, आप इसका उपयोग शुरू कर सकते हैं। आपका कोड पंक्ति को डीकोड करने के बाद शुरू होगा। ध्यान रखें कि इनमें से कुछ वेरिएबल्स को डिकोड करने की आवश्यकता नहीं है - मैं उन सभी को यहाँ पूर्णता के लिए कर रहा हूँ।
JSON के साथ पंक्तियाँ प्राप्त करना
JSON के साथ काम करना XML के साथ काम करने जैसा है:get
. का उपयोग करना क्रिया, आप उनकी पंक्ति कुंजी के आधार पर एक पंक्ति या पंक्तियों के समूह को पुनः प्राप्त कर सकते हैं।
यहाँ JSON आउटपुट प्राप्त करने और उसके साथ काम करने के लिए कोड दिया गया है:
request = requests.get(baseurl + "/" + tablename + "/shakespeare-comedies-*", headers={"Accept" : "application/json"}) bleats = json.loads(request.text) for row in bleats['Row']: message = '' lineNumber = 0 username = '' for cell in row['Cell']: columnname = base64.b64decode(cell['column']) value = cell['$'] if value == None: continue if columnname == cfname + ":" + messagecolumn: message = base64.b64decode(value) elif columnname == cfname + ":" + linenumbercolumn: lineNumber = decode(str(value)) elif columnname == cfname + ":" + usernamecolumn: username = base64.b64decode(value) rowKey = base64.b64decode(row['key'])
हम कोड को get
. के साथ प्रारंभ करते हैं अनुरोध है कि शेक्सपियर के हास्य में सभी पंक्तियों को वापस कर देगा। Accept
. में परिवर्तन के कारण ये पंक्तियां JSON के रूप में वापस आ जाएंगी हेडर।
फिर हम अनुरोध द्वारा लौटाए गए JSON को लेते हैं और इसे JSON ऑब्जेक्ट में बदल देते हैं। HBase से प्रत्येक पंक्ति पंक्ति सरणी में एक अलग अनुक्रमणिका में है। हम for
. का उपयोग करेंगे प्रत्येक पंक्ति से गुजरने के लिए लूप।
पंक्ति में प्रत्येक सेल एक अलग सरणी अनुक्रमणिका है। हम एक और for
. का उपयोग करेंगे इन सभी कोशिकाओं के माध्यम से जाने के लिए लूप। जैसा कि प्रत्येक कॉलम पाया जाता है, मान एक चर में सहेजा जाता है। JSON में वापस आने वाले सभी मान बेस 64-एन्कोडेड हैं और उनका उपयोग करने से पहले उन्हें डीकोड करने की आवश्यकता है। (फिर से, इस श्रृंखला के भाग 1 में डिकोड विधि पर चर्चा की गई है।) ध्यान दें कि मूल्य डॉलर चिह्न ($) प्रविष्टि में वापस आते हैं।
अंत में, पंक्ति कुंजी को पुनः प्राप्त और डिकोड किया जाता है।
एक बार सभी डेटा मिल जाने और डीकोड हो जाने के बाद, आप इसका उपयोग शुरू कर सकते हैं।
कर्ल का उपयोग करना
जैसा कि REST इंटरफ़ेस दस्तावेज़ में दिखाया गया है, आप XML या JSON को सीधे कंसोल पर आउटपुट करने के लिए कर्ल का उपयोग कर सकते हैं। उदाहरण के लिए, आप वही कर सकते हैं जो हमने अभी कर्ल का उपयोग करके किया था। आदेश है:
curl -H "Accept: text/xml" http://localhost:8070/tablename/shakespeare-comedies-*
वह आदेश आपको एक्सएमएल आउटपुट देगा। JSON आउटपुट प्राप्त करने के लिए, कमांड है:
curl -H "Accept: application/json" http://localhost:8070/tablename/shakespeare-comedies-*
इस तरह के आदेशों के साथ, आप जल्दी से देख सकते हैं कि क्या वापस आ रहा है या डेटा कैसा दिखता है। REST कॉल का स्टेटस कोड देखने के लिए आप कर्ल का उपयोग कर सकते हैं:
[user@localhost HBaseREST]$ curl -I -H "Accept: text/xml" http://localhost:8070/messagestable/shakespeare-comedies-* HTTP/1.1 200 OK Content-Length: 0 Content-Type: text/xml
निष्कर्ष
यदि आप जावा का उपयोग नहीं करना चाहते हैं तो HBase REST इंटरफ़ेस HBase का उपयोग करने का एक अच्छा तरीका है। यह आपको एक परिचित आरईएसटी इंटरफ़ेस प्रदान करता है जो कई भाषाओं के साथ-साथ एक परिचित डेटा प्रारूप में बनाया गया है।
उम्मीद है, इस श्रृंखला में कोड के नमूने और स्पष्टीकरण आपके RESTful HBase प्रोजेक्ट को शुरू करते समय आपको बहुत सारे Googling से बचाएंगे।
जेसी एंडरसन क्लौडेरा विश्वविद्यालय में प्रशिक्षक हैं।