HBase
 sql >> база данни >  >> NoSQL >> HBase

Как да:Използвайте интерфейса REST на Apache HBase, част 3

Това ръководство е третото от поредица, която изследва използването на интерфейса Apache HBase REST. Част 1 обхвана основите на HBase REST, някои предупреждения на Python и администриране на таблици. Част 2 ви показа как да вмъкнете няколко реда едновременно с помощта на XML и JSON. Част 3 по-долу ще покаже как да получите няколко реда с помощта на XML и JSON.

Получаване на редове с XML

Използване на GET глагол, можете да извлечете един ред или група от редове въз основа на техните ключове за редове. (Можете да прочетете повече за формата на URL адрес с множество стойности тук.) Тук ще използваме обикновения заместващ знак или звездичка (*), за да получим всички редове, които започват с конкретен низ. В този пример можем да заредим всеки ред от комедиите на Шекспир с „shakespeare-comedies-*“. Това също изисква нашите ключове за редове да бъдат изложени с „AUTHOR-WORK-LINENUMBER“.

Ето кода за получаване и работа с XML изхода:

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 ще върне всички реплики в комедиите на Шекспир. Тези редове ще се върнат като XML поради промяната в Accept заглавка.

След това вземаме XML, върнат от заявката, и го превръщаме в XML DOM. Всеки ред от HBase е в отделен елемент на ред. Ще използваме for цикъл, за да преминете през всеки ред.

Всяка клетка в реда е отделен XML елемент. Ще използваме друг for цикъл, за да преминете през всички тези клетки. (Този блок от код може да бъде опростен чрез използване на XPath за намиране на правилните елементи.) При намиране на всяка колона стойността се записва в променлива. (Методът за декодиране е разгледан в част 1 от тази серия.) Всички стойности, които се връщат в XML, са кодирани в base64 и трябва да бъдат декодирани, преди да се използват.

Накрая ключът на реда се извлича и декодира.

След като всички данни бъдат намерени и декодирани, можете да започнете да ги използвате. Вашият код ще започне след декодиране на реда. Имайте предвид, че някои от тези променливи не е необходимо да се декодират – правя всички тук за пълнота.

Получаване на редове с 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 заявка, която ще върне всички реплики в комедиите на Шекспир. Тези редове ще се върнат като JSON поради промяната в Accept заглавка.

След това вземаме JSON, върнат от заявката, и го превръщаме в JSON обект. Всеки ред от HBase е в отделен индекс в масива от редове. Ще използваме for цикъл, за да преминете през всеки ред.

Всяка клетка в реда е отделен индекс на масив. Ще използваме друг for цикъл, за да преминете през всички тези клетки. Когато всяка колона бъде намерена, стойността се записва в променлива. Всички стойности, които се връщат в JSON, са кодирани в base64 и трябва да бъдат декодирани, преди да ги използвате. (Отново, методът за декодиране се обсъжда в част 1 тази серия.) Обърнете внимание, че стойностите се връщат в записа на знака за долар ($).

Накрая ключът на реда се извлича и декодира.

След като всички данни бъдат намерени и декодирани, можете да започнете да ги използвате.

Използване на curl

Както е показано в документацията на REST интерфейса, можете да използвате curl за извеждане на XML или JSON директно в конзолата. Например, можете да направите същото get, както току-що направихме, използвайки curl. Командата е:

curl -H "Accept: text/xml" http://localhost:8070/tablename/shakespeare-comedies-*

Тази команда ще ви даде XML изхода. За да получите изхода на JSON, командата е:

curl -H "Accept: application/json" http://localhost:8070/tablename/shakespeare-comedies-*

С команди като тези можете бързо да видите какво се връща или как изглеждат данните. Можете да използвате curl, за да видите кода на състоянието на 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, ако не искате да използвате Java. Той ви предлага познат REST интерфейс, който е вграден в много езици, както и познат формат на данни.

Надяваме се, че примерните кодове и обясненията в тази серия ще ви спестят много търсене в Google, когато се захващате с вашия проект RESTful HBase.

Джеси Андерсън е инструктор в университета Cloudera.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. HDFS Data Block – Научете вътрешностите на Big Data Hadoop

  2. Как да:Сканирайте Salted Apache HBase таблици със специфични за регион ключови диапазони в MapReduce

  3. Cloudera Replication Plugin позволява репликация на x-платформа за Apache HBase

  4. Администриране на оперативна база данни

  5. Разгръщане на приложения в CDP Оперативна база данни (COD)