HBase
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> HBase

Cách thực hiện:Sử dụng Giao diện Apache HBase REST, Phần 3

Hướng dẫn này là phần thứ ba trong loạt bài khám phá việc sử dụng giao diện Apache HBase REST. Phần 1 bao gồm các nguyên tắc cơ bản của HBase REST, một số lưu ý của Python và quản trị bảng. Phần 2 đã hướng dẫn bạn cách chèn nhiều hàng đồng thời bằng cách sử dụng XML và JSON. Phần 3 dưới đây sẽ chỉ ra cách lấy nhiều hàng bằng cách sử dụng XML và JSON.

Nhận hàng bằng XML

Sử dụng GET động từ, bạn có thể truy xuất một hàng hoặc một nhóm hàng dựa trên các phím hàng của chúng. (Bạn có thể đọc thêm về định dạng URL nhiều giá trị tại đây.) Ở đây chúng ta sẽ sử dụng ký tự đại diện đơn giản hoặc dấu hoa thị (*) để lấy tất cả các hàng bắt đầu bằng một chuỗi cụ thể. Trong ví dụ này, chúng tôi có thể tải mọi dòng phim hài của Shakespeare với “shakespeare -edyies- *”. Điều này cũng yêu cầu (các) khóa hàng của chúng tôi phải được đặt bởi “AUTHOR-WORK-LINENUMBER”.

Đây là mã để nhận và làm việc với đầu ra 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'))

Chúng tôi bắt đầu mã bằng get yêu cầu. get này sẽ trả lại tất cả các câu thoại trong các bộ phim hài của Shakespeare. Các hàng này sẽ trở lại dưới dạng XML do thay đổi đối với Accept tiêu đề.

Sau đó, chúng tôi lấy XML được yêu cầu trả về và biến nó thành một DOM XML. Mỗi hàng từ HBase nằm trong một phần tử hàng riêng biệt. Chúng tôi sẽ sử dụng for lặp lại để đi qua mọi hàng.

Mỗi ô trong hàng là một phần tử XML riêng biệt. Chúng tôi sẽ sử dụng một for vòng lặp để đi qua tất cả các ô này. (Khối mã này có thể trở nên đơn giản hơn bằng cách sử dụng XPath để tìm các phần tử chính xác.) Khi mỗi cột được tìm thấy, giá trị được lưu vào một biến. (Phương pháp giải mã được thảo luận trong Phần 1 của loạt bài này.) Tất cả các giá trị trở lại trong XML đều được mã hóa base64 và cần được giải mã trước khi sử dụng chúng.

Cuối cùng, khóa hàng được truy xuất và giải mã.

Sau khi tất cả dữ liệu được tìm thấy và giải mã, bạn có thể bắt đầu sử dụng nó. Mã của bạn sẽ bắt đầu sau khi giải mã hàng. Hãy nhớ rằng một số biến trong số này không cần phải được giải mã - Tôi đang thực hiện tất cả chúng ở đây vì mục đích hoàn chỉnh.

Nhận hàng với JSON

Làm việc với JSON cũng giống như làm việc với XML:Sử dụng get động từ, bạn có thể truy xuất một hàng hoặc một nhóm hàng dựa trên khóa hàng của chúng.

Đây là mã để nhận và làm việc với đầu ra 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'])

Chúng tôi bắt đầu mã bằng get yêu cầu sẽ trả lại tất cả các câu thoại trong các bộ phim hài của Shakespeare. Các hàng này sẽ trở lại dưới dạng JSON do thay đổi đối với Accept tiêu đề.

Sau đó, chúng tôi lấy JSON được trả về bởi yêu cầu và biến nó thành một đối tượng JSON. Mỗi hàng từ HBase nằm trong một chỉ mục riêng biệt trong mảng hàng. Chúng tôi sẽ sử dụng for lặp lại để đi qua mọi hàng.

Mỗi ô trong hàng là một chỉ số mảng riêng biệt. Chúng tôi sẽ sử dụng một for vòng lặp để đi qua tất cả các ô này. Khi mỗi cột được tìm thấy, giá trị được lưu vào một biến. Tất cả các giá trị quay lại trong JSON đều được mã hóa base64 và cần được giải mã trước khi sử dụng chúng. (Một lần nữa, phương pháp giải mã được thảo luận trong Phần 1 của loạt bài này.) Lưu ý rằng các giá trị trở lại trong mục nhập ký hiệu đô la ($).

Cuối cùng, khóa hàng được truy xuất và giải mã.

Sau khi tất cả dữ liệu được tìm thấy và giải mã, bạn có thể bắt đầu sử dụng nó.

Sử dụng curl

Như được hiển thị trong tài liệu giao diện REST, bạn có thể sử dụng curl để xuất XML hoặc JSON trực tiếp ra bảng điều khiển. Ví dụ, bạn có thể làm giống như chúng ta vừa làm bằng cách sử dụng curl. Lệnh là:

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

Lệnh đó sẽ cung cấp cho bạn kết quả đầu ra XML. Để nhận đầu ra JSON, lệnh là:

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

Với các lệnh như thế này, bạn có thể nhanh chóng xem những gì sẽ quay trở lại hoặc dữ liệu trông như thế nào. Bạn có thể sử dụng curl để xem mã trạng thái của cuộc gọi REST với:

[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

Kết luận

Giao diện HBase REST là một cách tốt để sử dụng HBase nếu bạn không muốn sử dụng Java. Nó cung cấp cho bạn giao diện REST quen thuộc được tích hợp sẵn với nhiều ngôn ngữ cũng như định dạng dữ liệu quen thuộc.

Hy vọng rằng các mẫu mã và phần giải thích trong loạt bài này sẽ giúp bạn tiết kiệm được rất nhiều công sức trên Google khi bắt tay vào dự án RESTful HBase của mình.

Jesse Anderson là giảng viên của Đại học Cloudera.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Quản trị Cơ sở dữ liệu Hoạt động

  2. Spark trên HBase với Spark shell

  3. Spark-on-HBase:Đầu nối HBase dựa trên DataFrame

  4. Các vùng HBase hợp nhất

  5. Giới thiệu về Apache HBase Snapshots