Gần đây, tôi đã có một buổi nói chuyện tại Nhóm người dùng LA Hadoop về những Điều nên làm và Không nên làm của Apache HBase. Khán giả rất xuất sắc và có những câu hỏi rất thông tin và rõ ràng. Jody từ Shopzilla là một người dẫn chương trình xuất sắc và tôi rất cảm ơn anh ấy vì đã cho cơ hội nói chuyện với hơn 60 LA Hadoopers. Vì không phải ai cũng sống ở LA hoặc có thể tham dự buổi gặp mặt, nên tôi đã tóm tắt một số điểm nổi bật ở đây. Đối với những bạn có một ngày bận rộn, đây là tl; dr:
- HBase là tốt, nhưng không phải là sự thay thế RDBMS hoặc HDFS
- Cấu hình tốt có nghĩa là hoạt động tốt
- Màn hình theo dõi màn hình màn hình màn hình màn hình màn hình
Chúng tôi ở Cloudera là những người hâm mộ lớn của HBase. Chúng tôi yêu công nghệ, chúng tôi yêu cộng đồng và chúng tôi nhận thấy rằng nó rất phù hợp cho nhiều ứng dụng. Việc sử dụng thành công HBase đã được ghi nhận đầy đủ và do đó, nhiều tổ chức đang xem xét liệu HBase có phù hợp với một số ứng dụng của họ hay không. Động lực cho bài nói chuyện của tôi và bài đăng blog tiếp theo này là để làm rõ một số ứng dụng tốt cho HBase, cảnh báo một số ứng dụng kém và nêu bật các bước quan trọng để triển khai HBase thành công.
Khi nào sử dụng HBase
Điều quan trọng nhất khi xem xét HBase là, mặc dù nó là một giải pháp tuyệt vời cho nhiều vấn đề, nhưng nó không phải là một viên đạn bạc. HBase không được tối ưu hóa cho các ứng dụng giao dịch cổ điển hoặc thậm chí là phân tích quan hệ. Nó cũng không thể thay thế hoàn toàn cho HDFS khi thực hiện MapReduce hàng loạt lớn. Hãy xem một số trường hợp sử dụng trong bài đăng này để biết ứng dụng nào phù hợp với HBase và nếu bạn có thắc mắc, hãy tiếp tục và đăng lên danh sách. Tôi đã đề cập rằng cộng đồng thật tuyệt vời?
Với điều đó đã được báo trước - tại sao bạn nên sử dụng HBase? Nếu ứng dụng của bạn có một lược đồ thay đổi trong đó mỗi hàng hơi khác nhau, thì bạn nên xem xét HBase. Ví dụ, thực hiện một bài tập mô hình hóa bằng cách sử dụng một lược đồ quan hệ chuẩn; Khi bạn không thể thêm các cột đủ nhanh và hầu hết chúng đều NULL trong mỗi hàng, bạn nên xem xét HBase. Nếu bạn thấy rằng dữ liệu của mình được lưu trữ trong các bộ sưu tập, chẳng hạn như một số dữ liệu meta, dữ liệu tin nhắn hoặc dữ liệu nhị phân đều được khóa trên cùng một giá trị, thì bạn nên xem xét HBase. Nếu bạn cần quyền truy cập dựa trên khóa vào dữ liệu khi lưu trữ hoặc truy xuất, thì bạn nên xem xét HBase.
Dịch vụ hỗ trợ
Giả sử bạn tin rằng HBase phù hợp với ứng dụng của mình, thì đây là một số mẹo bạn cần xem xét khi triển khai nó. Có một vài dịch vụ hỗ trợ quan trọng và một trong những dịch vụ bắt buộc. Nếu bạn chưa xem ZooKeeper trước đây, thì bây giờ là lúc. HBase sử dụng ZooKeeper cho các dịch vụ điều phối phân tán khác nhau như bầu cử tổng thể. Khi HBase phát triển và phát triển, nó tiếp tục dựa vào ZooKeeper để có thêm chức năng, khiến nó trở thành một phần quan trọng của hệ thống. Ngoài ra, bạn nên có các dịch vụ mạng thích hợp như NTP và DNS. HBase phụ thuộc vào tất cả các nút trong cụm có đồng hồ được đồng bộ hóa chặt chẽ và tham chiếu lẫn nhau một cách nhất quán. Sử dụng NTP và DNS đảm bảo rằng bạn sẽ không gặp phải các hành vi kỳ quặc khi một nút A nghĩ rằng thời gian là ngày mai và nút B cho rằng đó là ngày hôm qua. Bạn cũng sẽ ngăn chặn các tình huống trong đó nút chính yêu cầu nút C phân phát một vùng nhưng nút C không biết tên của chính nó và không trả lời. Sử dụng NTP và DNS sẽ giúp bạn đỡ phải đau đầu hơn khi bắt đầu.
Tôi đã nói rằng cân nhắc quan trọng nhất khi chọn HBase là đảm bảo bạn có trường hợp sử dụng phù hợp. Điều quan trọng nhất cần làm khi sử dụng HBase là giám sát hệ thống. Giám sát là chìa khóa để hoạt động HBase thành công. Như trường hợp của nhiều hệ thống phân tán, HBase dễ bị lỗi theo tầng. Nếu một nút bắt đầu hoán đổi, nó có thể mất liên lạc với nút chính, khiến máy chủ khác nhận tải và trở nên quá tải. Máy chủ thứ hai đó sẽ bị lỗi và sự cố sẽ xảy ra. Bạn cần theo dõi bộ nhớ, CPU, I / O và độ trễ mạng và băng thông trên mỗi nút HBase của mình để đảm bảo chúng đang hoạt động trong các thông số tốt. Giám sát là thực hành quan trọng nhất để vận hành một cụm HBase lành mạnh.
Thực tiễn tốt cho Kiến trúc HBase
Chuyển tiếp nhanh đến cụm HBase được giám sát tốt của bạn đang chạy một trường hợp sử dụng hoàn hảo, đây là một số phương pháp hay. Sử dụng tiền tố khóa phân phối tốt dựa trên trường hợp sử dụng của bạn. Nếu bạn đặt trước khóa của mình bằng dấu thời gian hoặc bất kỳ giá trị nào tương tự, khi được sắp xếp, được lưu trữ hoặc truy vấn trong một đợt thì bạn có thể sẽ quá tải lần lượt từng máy chủ khu vực thay vì phân phối tải đồng đều. Bạn cũng nên giữ số lượng vùng ở mức hợp lý dựa trên kích thước memstore và dung lượng RAM và RegionServer JVM nên được giới hạn ở 12GB heap java để giảm thiểu thời gian tạm dừng GC kéo dài. Ví dụ, một máy có 36GB RAM cũng đang chạy trình nền DataNode có thể xử lý khoảng 100 vùng có ghi đang hoạt động và một kho lưu trữ ghi nhớ 48MB mỗi vùng. Điều đó cho phép đủ khoảng trống cho các yêu cầu về bộ nhớ DataNode và RegionServer, không gian bộ đệm tệp Linux và kích thước thông thường hợp lý cho từng RegionServer.
Một số đề xuất cấu hình bao gồm tắt tính năng tự động nén (theo mặc định, việc này diễn ra 24 giờ một lần kể từ khi bạn bắt đầu HBase) và lên lịch chạy hàng ngày vào giờ thấp điểm. Bạn cũng nên định cấu hình nén (chẳng hạn như LZO) và đặt rõ ràng thư mục HBase conf được định cấu hình chính xác trong CLASSPATH của bạn.
HBase KHÔNG NÊN
Chúng tôi đã đề cập đến một loạt các phương pháp hay cho HBase. Cũng có một số cách sử dụng cần tránh. Ví dụ:đừng mong đợi sử dụng HBase như một sự thay thế bán buôn cho mọi cơ sở dữ liệu quan hệ của bạn. HBase tuyệt vời ở nhiều thứ nhưng nó không thay thế cơ sở dữ liệu quan hệ. Để bắt đầu, nó không nói SQL, có một trình tối ưu hóa, hỗ trợ các giao dịch hoặc kết hợp bản ghi chéo. Nếu bạn không sử dụng bất kỳ cái nào trong số này trong ứng dụng cơ sở dữ liệu của mình thì HBase rất có thể là lựa chọn hoàn hảo.
Hãy cẩn thận khi chạy khối lượng công việc hỗn hợp trên một cụm HBase. Khi bạn có quyền truy cập SLA trên HBase độc lập với bất kỳ công việc MapReduce nào (ví dụ:chuyển đổi trong Pig và cung cấp dữ liệu từ HBase), hãy chạy chúng trên các cụm riêng biệt. HBase chuyên sâu về CPU và Bộ nhớ với khả năng truy cập I / O tuần tự lớn lẻ tẻ trong khi các công việc MapReduce chủ yếu liên kết I / O với bộ nhớ cố định và CPU rời rạc. Kết hợp những điều này có thể dẫn đến độ trễ không thể đoán trước cho sự tranh chấp giữa HBase và CPU. Một cụm được chia sẻ cũng yêu cầu ít khe cắm tác vụ hơn cho mỗi nút để đáp ứng các yêu cầu của CPU HBase (nói chung là một nửa số khe cắm trên mỗi nút mà bạn sẽ phân bổ mà không có HBase). Cũng nên để mắt đến việc hoán đổi bộ nhớ. Nếu HBase bắt đầu hoán đổi thì rất có thể nó sẽ bỏ lỡ nhịp tim và bị rớt khỏi cụm. Trên một cụm bận, điều này có thể làm quá tải một vùng khác, khiến nó hoán đổi và một loạt các lỗi.
Lời kết
Một lời khuyên cuối cùng trước khi chúng tôi tổng kết. Khi tải HBase, hãy sử dụng HFileOuputFormat nếu tải thông qua một công việc MapReduce hoặc một tập hợp các máy chủ sử dụng đặt theo đợt. Việc tải với một ứng dụng khách sẽ gây tắc nghẽn trên ứng dụng khách đó và không tận dụng được khả năng mở rộng do HBase cung cấp.
Tóm lại, hãy cân nhắc HBase khi bạn đang tải dữ liệu theo khóa, tìm kiếm dữ liệu theo khóa (hoặc phạm vi), cung cấp dữ liệu theo khóa, truy vấn dữ liệu theo khóa hoặc khi lưu trữ dữ liệu theo hàng không phù hợp với lược đồ.
Các trường hợp sử dụng
- Apache HBase:Được hỗ trợ bởi HBase Wiki
- Mozilla:Chuyển Socorro sang HBase
- Facebook:Hệ thống nhắn tin thời gian thực mới của Facebook:HBase
- StumbleUpon:HBase tại StumbleUpon