2012-02-03 33 views
8

Tôi hầu như không biết gì về HBase. Xin lỗi cho câu hỏi cơ bản.Nhóm theo In HBase

Hãy tưởng tượng tôi có một bảng 100 tỷ hàng với 10 int, một ngày giờ và một cột chuỗi.

  1. HBase có cho phép truy vấn bảng này và Nhóm kết quả dựa trên khóa (ngay cả khóa tổng hợp) không?
  2. Nếu có, bạn có phải chạy một công việc bản đồ/giảm xuống không?
  3. Làm cách nào để cấp dữ liệu cho truy vấn?
  4. Có thể HBase nói chung thực hiện thời gian thực như truy vấn trên bàn không?

Trả lời

12

Tập hợp dữ liệu trong HBase cắt ngang với nhu cầu "phân tích thời gian thực". Trong khi HBase không được xây dựng cho loại chức năng này thì có rất nhiều nhu cầu cho nó. Vì vậy, số cách để làm như vậy là/sẽ được phát triển.
1): Đăng ký bảng HBase dưới dạng bảng ngoài trong Hive và thực hiện kết hợp. Dữ liệu sẽ được truy cập thông qua API HBase những gì không hiệu quả. Configuring Hive with Hbase đây là cuộc thảo luận về cách nó có thể được thực hiện. Đây là cách mạnh nhất để nhóm theo dữ liệu HBase. Nó ngụ ý chạy các công việc MR nhưng bằng HHive, chứ không phải bởi HBase.
2) Bạn có thể viết bạn sở hữu công việc MR làm việc với dữ liệu HBase đang ngồi trong HFiles trong HDFS. Nó sẽ là cách hiệu quả nhất, nhưng không đơn giản và dữ liệu bạn xử lý sẽ hơi cũ. Đó là hiệu quả nhất vì dữ liệu sẽ không được chuyển qua HBase API - thay vào đó nó sẽ được truy cập ngay từ HDFS theo cách tuần tự.
3) Phiên bản tiếp theo của HBase sẽ chứa các bộ xử lý đồng bộ có thể kết hợp bên trong các vùng cụ thể. Bạn có thể giả định chúng là một loại thủ tục được lưu trữ trong từ RDBMS.
4) Trong bộ nhớ, công việc MR liên vùng sẽ được parralelized trong một nút cũng được lên kế hoạch trong các bản phát hành HBase trong tương lai. Nó sẽ cho phép xử lý phân tích cao hơn một chút sau đó các bộ xử lý.

+0

Cảm ơn câu trả lời của bạn. Nếu tôi đi với tùy chọn 2, sau đó sẽ có tất cả các chi phí liên quan đến khởi động và chạy một M/R từ khởi động của Map/Redcude để shufffle và sắp xếp và những gì không. Làm thế nào mà có thể là thời gian thực như thế nào? – iCode

+0

Và cũng có thể, nếu tôi cần làm điều này ngày hôm nay, thì câu trả lời là không có cách thực tế để làm điều đó chưa? Như 1 là chậm, 3 và 4 là tương lai và 2 là iffy? – iCode

+0

Vâng, câu trả lời của tôi có nghĩa là hôm nay không có cách nào để làm điều đó theo thời gian thực. Khi bản phát hành tiếp theo (được gọi là bản phát hành bộ xử lý) sẽ có sẵn, chúng tôi sẽ có tổng hợp thời gian thực ở cấp độ khu vực. –

5

ĐỌC RANDOM NHANH CHÓNG = PREPREPARED dữ liệu đang ngồi trong HBase! Sử dụng HBase cho những gì ...

1. Nơi lưu trữ nhiều dữ liệu.
2. Một nơi mà bạn có thể đọc siêu nhanh.
3. Một nơi mà SQL sẽ không làm bạn tốt (sử dụng java).

Mặc dù bạn có thể đọc dữ liệu từ HBase và thực hiện tất cả các loại tập hợp ngay trong cấu trúc dữ liệu Java trước khi trả về kết quả tổng hợp, tốt nhất là để tính toán thành mapreduce. Từ các câu hỏi của bạn, có vẻ như bạn muốn dữ liệu nguồn để tính toán ngồi trong HBase. Nếu trường hợp này xảy ra, tuyến đường bạn muốn thực hiện có HBase là dữ liệu nguồn cho công việc Mapreduce. Do tính toán trên đó và trả về dữ liệu tổng hợp. Nhưng sau đó một lần nữa, tại sao bạn sẽ đọc từ HBase để chạy một công việc Mapreduce? Chỉ cần để các bảng dữ liệu HDFS/Hive đang ngồi và chạy các công việc Mapreduce trên chúng THEN tải dữ liệu vào các bảng Hbase "đã được chuẩn bị trước" để bạn có thể đọc siêu nhanh ngẫu nhiên từ nó.

1

Khi bạn có dữ liệu được phân tách trong HBase, bạn có thể sử dụng Crux http://github.com/sonalgoyal/crux để tiếp tục khoan, cắt và xúc xắc dữ liệu HBase của bạn. Crux hỗ trợ các phím tổng hợp và đơn giản, với các bộ lọc nâng cao và nhóm theo.