Bài đăng trên blog này đã được xuất bản trên Hortonworks.com trước khi hợp nhất với Cloudera. Một số liên kết, tài nguyên hoặc tham chiếu có thể không còn chính xác.
Đặc biệt cảm ơn Bill Preachuk và Brandon Wilson đã xem xét và cung cấp kiến thức chuyên môn của họ
Giới thiệu
Lưu trữ cột sóng là một chủ đề thường được thảo luận trong thế giới lưu trữ và xử lý dữ liệu lớn ngày nay - có hàng trăm định dạng, cấu trúc và cách tối ưu hóa để bạn có thể lưu trữ dữ liệu của mình và thậm chí có nhiều cách để truy xuất dữ liệu đó tùy thuộc vào việc bạn định làm với nó. Rất nhiều tùy chọn này xuất hiện do nhu cầu không chỉ nhập dữ liệu nhanh chóng bằng cách sử dụng các công cụ Xử lý Giao dịch Trực tuyến (OLTP) mà còn vì nhu cầu sử dụng và phân tích dữ liệu với hiệu quả cao hơn bằng cách sử dụng Xử lý Phân tích Trực tuyến (OLAP) công cụ. Hàng ngàn trường hợp sử dụng khác nhau, mỗi trường hợp có nhu cầu cụ thể của riêng họ và do đó, nhiều lựa chọn đã xuất hiện. Ví dụ:đọc dữ liệu cổ phiếu thị trường chứng khoán đòi hỏi một tư duy hoàn toàn khác so với việc phân tích các chỉ số chất lượng trong dây chuyền sản xuất. Với tất cả những lựa chọn này, bạn rất dễ bị lạc khi điều hướng đến mục tiêu cuối cùng của mình:chọn một công cụ phù hợp với bạn.
HDP kết hợp một số giải pháp lưu trữ, mỗi giải pháp được thiết kế riêng cho các trường hợp sử dụng cụ thể. Chúng tôi muốn bắt đầu loạt blog này bằng cách nói về ba công cụ / công cụ sau và các định dạng lưu trữ liên quan của chúng:
- Apache Hive sử dụng Apache ORC làm định dạng lưu trữ cột hiệu quả cho phép thực hiện cả OLAP và xử lý truy vấn SQL sâu
- Apache Phoenix / Apache HBase cùng nhau tạo thành cơ sở dữ liệu OLTP cho phép truy vấn thời gian thực trên hàng tỷ bản ghi và cung cấp các bản cập nhật cũng như tra cứu dựa trên khóa ngẫu nhiên nhanh chóng
- Apache Druid là kho dữ liệu hiệu suất cao cho phép phân tích chuỗi thời gian thực trên các luồng sự kiện và phân tích OLAP trên dữ liệu lịch sử với độ trễ cực thấp
Trong bài viết này, chúng tôi dự định trình bày rõ công cụ nào thích hợp cho một trường hợp sử dụng nhất định, so sánh và đối chiếu các công cụ khác nhau và cung cấp hướng dẫn cơ bản để chọn công cụ hoặc bộ công cụ thích hợp để giải quyết trường hợp sử dụng của bạn.
Điều này giống như chơi Tetris - mỗi phần có một vị trí thích hợp khác nhau nhưng mỗi phần đều bổ sung giá trị độc đáo cho cấu trúc lớn hơn
Xử lý dữ liệu lớn và những điểm tương đồng của nó
Dữ liệu được nhóm theo cột trong bộ nhớ vì chúng tôi thường cố gắng thu hẹp tổng, trung bình hoặc các phép tính khác trên một cột cụ thể. Hãy tưởng tượng bạn là một hãng hàng không đang cố gắng hiểu lượng nhiên liệu cung cấp cho một chiếc máy bay khi nó được cập cảng - bạn có thể muốn tính số dặm bay trung bình của mỗi chuyến bay từ bảng dữ liệu chuyến bay. Điều này sẽ yêu cầu thực hiện hàm trung bình trên một cột duy nhất. Chúng tôi sẽ lưu trữ dữ liệu này ở định dạng cột vì đọc tuần tự trên đĩa rất nhanh và những gì chúng tôi muốn làm trong trường hợp này là đọc tuần tự một cột đầy đủ từ bảng (và sau đó thực hiện phép tính trung bình).
Có nhiều điểm khác biệt giữa các công cụ này nhưng bất kể công cụ xử lý dữ liệu nào bạn chọn, bạn sẽ được hưởng lợi từ một số điểm chung. Một trong số đó là tính năng chia sẻ bộ nhớ đệm. Mỗi công cụ trong số ba công cụ này hoạt động đồng thời với bộ nhớ đệm trong bộ nhớ để tăng hiệu suất xử lý của nó mà không thay đổi định dạng lưu trữ phụ trợ, đạt được thời gian phản hồi dưới giây. HBase có BlockCache, Hive có lớp IO LLAP và Druid có một số tùy chọn bộ nhớ đệm trong bộ nhớ. Thông thường, phần tốn kém của việc thực hiện một truy vấn bao gồm việc phân tích cú pháp yêu cầu và chuyển đến kho lưu trữ liên tục để truy xuất tập hợp con dữ liệu mà người dùng quan tâm. Tuy nhiên, toàn bộ bước đó có thể tránh được khi sử dụng cơ chế lưu trữ trong bộ nhớ như nhiều định dạng lưu trữ cột sử dụng, cho phép quá trình truy cập vào bộ nhớ đối với dữ liệu đã truy vấn trước đó trong một phần nhỏ của giây. Hãy quay lại ví dụ tính toán nhiên liệu của chúng ta:giả sử tôi vừa hỏi số dặm bay trung bình cho tất cả các chuyến bay tại công ty của mình, nhưng nhận thấy rằng các chuyến bay nội địa sẽ có yêu cầu nhiên liệu khác nhiều so với các chuyến bay quốc tế. Sau đó, tôi sẽ muốn lọc truy vấn trước đó của mình bằng mệnh đề WHERE country =’US’ (hoặc mã quốc gia tương đương). Mẫu truy vấn này rất phổ biến để khám phá dữ liệu. Vì chúng tôi đã có dữ liệu của truy vấn trước đó trong bộ nhớ, nên kết quả của truy vấn này có thể được trả lại mà không cần phải thực hiện đọc đĩa đắt tiền.
Cấu trúc của lớp Hive’s LLAP - một phần không gian bộ nhớ của nó được sử dụng để lưu vào bộ nhớ đệm, trong khi lưu trữ lâu dài là trên HDFS. HBase và Druid cũng có khái niệm tương tự về bộ nhớ cache và lưu trữ.
Một điểm tương đồng khác tồn tại trong các phím tắt mà mỗi công cụ này sử dụng để khai thác dữ liệu cụ thể đang được truy vấn. HBase có quyền truy cập ngẫu nhiên O (1) dựa trên HashMap, Druid sử dụng chỉ mục bitmap đảo ngược để tìm ra giá trị cột nằm trong hàng nào và bảng Hive có thống kê, chỉ mục và phân vùng để truy cập dữ liệu theo lối tắt. Các tính năng này cho phép các công cụ kết hợp cách dữ liệu được lưu trữ với cách nó được truy cập, cho phép phân tích nhanh trong khi tối ưu hóa hiệu quả của phần cứng và tận dụng tối đa CPU và RAM.
Điểm tương đồng cuối cùng là mức độ sẵn sàng cho doanh nghiệp của mỗi động cơ này. Về mặt dự phòng dữ liệu, cả ba công cụ này đều sử dụng HDFS làm cơ chế lưu trữ sâu; hệ số sao chép HDFS là 3x đảm bảo rằng các bản sao của dữ liệu tồn tại ở nơi khác ngay cả khi hai nút bị lỗi đồng thời. Dữ liệu ngay lập tức có thể được sao chép lại một lần nữa đến các nút khỏe mạnh để duy trì khả năng dự phòng. Về chủ đề khả năng chịu lỗi trong một cụm, mỗi công cụ sẽ lấp đầy khoảng trống theo một cách nào đó. HBase cung cấp tính năng sao chép theo khu vực, Druid có khả năng sao chép các thành phần chính và công nhân cũng như tăng hệ số sao chép trên HDFS và Hive có HDFS cùng với logic chịu lỗi của khung YARN. Sự sẵn sàng của doanh nghiệp đảm bảo những động cơ này có khả năng chống chọi với sự cố và sẵn sàng hoạt động trong sản xuất ngay từ ngày đầu.
Sự khác biệt giữa các công cụ xử lý dữ liệu lớn của chúng tôi
Cách tốt nhất để nhập dữ liệu là gì? Khi bạn đã nhập dữ liệu của mình, làm cách nào để bạn nhanh chóng lấy thông tin chi tiết ra khỏi dữ liệu đó? Hãy đi sâu vào cách ba công cụ xử lý dữ liệu lớn này hỗ trợ tập hợp các nhiệm vụ xử lý dữ liệu này
Các công cụ này đôi khi được kết hợp với nhau về mặt tinh thần và được suy nghĩ giống nhau vì khả năng lưu trữ cũng như xử lý Dữ liệu lớn, nhưng khi chúng tôi tìm hiểu, chúng được chọn cho các trường hợp sử dụng và mục đích cụ thể phù hợp với thế mạnh của chúng. Bạn sẽ thấy rằng bộ sưu tập các công cụ mà Nền tảng dữ liệu Hortonworks chứa rất phù hợp với bất kỳ khối lượng công việc dữ liệu lớn nào mà bạn có thể sử dụng, đặc biệt là với HDP 3.0 và các khả năng cơ sở dữ liệu thời gian thực mà chúng tôi đã giới thiệu.
Hive là công cụ OLAP đại diện cho phạm vi sử dụng lớn nhất, phổ biến nhất là sử dụng Hệ thống tệp phân tán Hadoop (HDFS) làm lớp lưu trữ của nó để cho phép lưu trữ hầu như bất kỳ loại dữ liệu nào. Nó có thể truy vấn, xử lý và phân tích dữ liệu văn bản không có cấu trúc, tệp CSV, XML, JSON bán cấu trúc, cột Parquet và một loạt các định dạng khác. Hive cũng hỗ trợ các phương tiện lưu trữ thay thế như Lưu trữ đám mây, Isilon và các phương tiện khác. Tiêu chuẩn lưu trữ trên thực tế cho Hive là ORC, tối ưu hóa hiệu quả nhất và thu được lợi ích của lưu trữ dạng cột. Sau khi được chuyển đổi thành ORC, dữ liệu của bạn sẽ được nén và các cột trong bảng của bạn được lưu trữ tuần tự trên đĩa, cho phép LLAP lớp lưu trong bộ nhớ của Hive để kéo dữ liệu từ đĩa một lần và phân phát dữ liệu từ bộ nhớ nhiều lần. Sự kết hợp của Hive + LLAP được sử dụng để phân tích đặc biệt, tính toán các tổng hợp lớn và báo cáo độ trễ thấp. Một trường hợp sử dụng tuyệt vời cho Hive là chạy một tập hợp các báo cáo bảng điều khiển cho người dùng hàng ngày; các truy vấn lặp lại không chỉ tận dụng bộ đệm LLAP mà còn cả tính năng 'Bộ đệm kết quả truy vấn' - trả về kết quả gần như tức thì nếu dữ liệu không thay đổi (Bên cạnh:Bộ đệm kết quả truy vấn là một tính năng có sẵn trong Hive 3.0 - được phát hành trong HDP 3.0). Bên cạnh đó, Kho dữ liệu Hive là một ứng dụng tuyệt vời của phân tích đặc biệt mà Hive có khả năng; người dùng có thể kết hợp dữ liệu với nhau, chạy các truy vấn đồng thời và chạy các giao dịch ACID. Hãy coi Hive là công cụ hỗ trợ SQL cho tất cả các giao dịch về mặt đó, trong khi hai công cụ còn lại cung cấp hiệu suất cực nhanh cho các trường hợp sử dụng thích hợp cụ thể.
Công cụ thứ hai của chúng tôi, HBase, là một kho lưu trữ khóa-giá trị phân tán có khả năng đọc, ghi, cập nhật và xóa ngẫu nhiên. HBase (một biến thể của NoSQL) được thiết kế để trở thành một công cụ OLTP, cho phép một kiến trúc của các hoạt động giao dịch khối lượng lớn - hãy nghĩ đến các nền tảng nhắn tin với các thông điệp liên tục được trao đổi giữa người dùng hoặc các giao dịch được tạo ra trong một hệ thống tài chính. HBase cực kỳ hiệu quả trong việc đưa dữ liệu vào nhanh chóng, lưu trữ và phục vụ dữ liệu ra ngoài - Chèn / Cập nhật / Xóa ngẫu nhiên có độ trễ cực thấp. Những gì nó không được thiết kế cho việc tổng hợp và kết hợp dữ liệu - chức năng này được thực hiện thông qua Phoenix, một lớp SQL và công cụ trên HBase, nhưng không được khuyến nghị cho lượng dữ liệu lớn hơn vì dữ liệu không được cấu trúc theo cách để đạt được tối ưu hiệu suất (sử dụng Hive thay thế). Tóm lại, HBase rất giỏi trong việc xử lý khối lượng lớn các hoạt động Tạo-Cập nhật-Xóa, nhưng lại gặp khó khăn khi cần trình bày dữ liệu đó ở định dạng dễ sử dụng cho người dùng.
Cuối cùng, Druid là công cụ thứ ba và là công cụ phù hợp với khối lượng công việc chuỗi thời gian OLAP có độ trễ thấp cũng như lập chỉ mục thời gian thực của dữ liệu truyền trực tuyến. Druid cung cấp truy vấn OLAP tốc độ lập phương cho cụm của bạn. Bản chất chuỗi thời gian của Druid là nền tảng của động cơ; nó được thiết kế theo cách này vì thời gian là bộ lọc chính khi dữ liệu dựa trên thời gian được phân tích. Hãy nghĩ xem khi bạn đang phân tích thời gian bay để đặt chuyến đi - tôi muốn biết chuyến bay có chi phí thấp nhất đến Ý trong khung thời gian 2 tuần cụ thể này. Druid phù hợp với sở thích là rất nhanh chóng nhập dữ liệu cũng như xác định vị trí khi được yêu cầu. Mặt khác, nó cũng cho phép người dùng doanh nghiệp và nhà phân tích truy vấn dữ liệu và hiểu nó thông qua Superset, một lớp trực quan hóa gắn chặt với Druid. Druid vượt trội trong việc xác định chính xác một số ít hàng dữ liệu trong số hàng trăm triệu hoặc hàng tỷ trong vòng chưa đầy một giây và nó cũng vượt trội trong việc tính toán các giá trị tổng hợp trên cùng một khối lượng dữ liệu đó cực kỳ nhanh chóng. Tuy nhiên, nó không tham gia và do đó không thể được sử dụng để kết hợp các bộ dữ liệu với nhau để phân tích. Nếu bạn định phân tích sự kết hợp của các bộ dữ liệu trong Druid, bạn nên kết hợp trước dữ liệu trước khi chèn nó vào Druid hoặc sử dụng Hive (và các bảng Hive do Druid hỗ trợ) để thực hiện các phép nối. Nói cách khác, Druid rất phù hợp với vai trò là điểm dừng cuối cùng cho dữ liệu của bạn sau khi dữ liệu đã được xử lý và chuyển đổi thành cách người dùng doanh nghiệp của bạn sẽ truy cập vào dữ liệu đó. Druid rất tuyệt vời cho các nhà phân tích kinh doanh vì họ có thể đăng nhập vào Superset và trực quan hóa các số liệu ở dạng bảng điều khiển mà không cần phải viết bất kỳ truy vấn nào; họ chỉ cần sử dụng GUI để chọn nguồn dữ liệu truy vấn và bộ lọc. Nó cũng tuyệt vời như một nguồn dữ liệu hỗ trợ cho trang tổng quan hệ thống, cho dù là hoạt động hay phân tích, do thời gian truy vấn nhanh chóng.
Dưới đây là một cách bạn có thể chia nhỏ việc đưa ra quyết định về việc sử dụng công cụ nào cho khối lượng công việc của mình:
HBase | Hive | Druid |
Độ trễ cực thấp Truy cập ngẫu nhiên (tra cứu dựa trên khóa) | ACID, cơ sở dữ liệu thời gian thực, EDW | OLAP có độ trễ thấp, các truy vấn đồng thời |
OLTP khối lượng lớn | Giao diện SQL hợp nhất, JDBC | Tổng hợp, chi tiết |
Cập nhật | Báo cáo, hàng loạt | Chuỗi thời gian |
Xóa | Tham gia, tổng hợp lớn, đặc biệt | Nhập thời gian thực |
SQL hợp nhất
Chúng tôi đã thảo luận về nhiều hệ thống cho đến thời điểm này và mỗi hệ thống đều có những cách riêng để truy cập vào dữ liệu của mình. Điều này thật tuyệt khi người dùng của bạn biết tất cả các công cụ này hoạt động như thế nào, nhưng họ có thể đang trong quá trình học tập trước khi có thể đạt được năng suất đầy đủ nếu họ đến từ thế giới SQL, SQL và nhiều SQL hơn như hầu hết các nhà phân tích làm. Đây là lý do tại sao chúng tôi đã cố gắng làm cho tương tác này đơn giản nhất có thể; với Hive 3.0 trong HDP 3.0, bạn có thể sử dụng cú pháp HQL giống Hive của SQL để tương tác với rất nhiều kho dữ liệu khác nhau trong không gian này. Hive có thể được sử dụng như một cổng để truy cập và sửa đổi Druid, HBase và bất kỳ thứ gì cung cấp giao diện và trình điều khiển JDBC. Hive có thể được sử dụng để quản lý một nhiệm vụ nhập Druid lắng nghe Kafka, cung cấp một cách đơn giản để nhập trong thời gian thực. Và cuối cùng, Hive có thể được sử dụng để kết hợp tất cả lại với nhau - lưu trữ dữ liệu của bạn ở nơi phù hợp nhất và truy cập dữ liệu đó từ một nơi. Kết hợp nó với nhau, thậm chí có thể lưu trữ kết quả mới đó ở một vị trí khác. Khả năng có rất nhiều, nhưng giao diện đã được đơn giản hóa rất nhiều để cơ sở người dùng của bạn có thể dành ít thời gian hơn để tìm hiểu một công cụ khác và nhiều thời gian hơn để mang lại giá trị cho doanh nghiệp.
Kết luận
Hive, Druid và HBase đều có những vị trí khác nhau trong kiến trúc dữ liệu như chúng ta đã thấy trong phân tích trước. Tuy nhiên, chúng là những công cụ bổ sung; bạn có thể nhập dữ liệu giao dịch với HBase bằng cách tra cứu nhanh, di chuyển dữ liệu đó vào Druid để xem chi tiết / tổng hợp nhanh và yêu cầu Hive tích hợp cả hai với dữ liệu do Hive quản lý của riêng mình để cho phép người dùng kết hợp dữ liệu ở bất kỳ đâu một cái nhìn duy nhất và vô số hiểu biết sâu sắc. Với cách tiếp cận này, Druid lưu trữ dữ liệu có thể tự truy cập nhưng chức năng đó được tăng cường bởi Hive, có thể lấy dữ liệu Druid và kết hợp dữ liệu đó với dữ liệu bổ sung. Thêm vào đó là những cải tiến chính có tác dụng với Hive 3.0, không kém phần trong số đó là chế độ xem hiện thực hóa, cải tiến tích hợp với Druid cũng như nhiều công cụ khác và tăng cường chức năng giống kho dữ liệu và bạn đã có một nhóm các công cụ có thể giải quyết mọi trường hợp sử dụng.
Các kiến trúc như đã đề cập ở trên mang lại những gì tốt nhất của mỗi công cụ để tối ưu hóa quy trình làm việc của bạn và đồng thời tóm tắt các chi tiết cho những người dùng chỉ quan tâm đến dữ liệu. Các kiến trúc sư thiết lập các đường ống, đưa dữ liệu vào nơi nó thuộc về dựa trên trường hợp sử dụng. Sau đó, điều đó dẫn đến các nhà phân tích dữ liệu, những người sử dụng Hive làm giao diện duy nhất của họ để có được kiến thức và hiểu biết sâu sắc. Họ có thể tìm thấy các mẫu thú vị trong dữ liệu thay vì lo lắng về nơi dữ liệu được lưu trữ hoặc học một cú pháp mới để truy cập nó - bạn sẽ ngạc nhiên khi biết tần suất chúng ta thấy điều này trên thế giới.
Tại thời điểm này, chúng tôi đã chứng minh điểm mạnh, điểm yếu và các phương pháp hay nhất của từng công cụ; chúng tôi hy vọng bạn hiểu rõ hơn về những gì phù hợp với vị trí cũng như bức tranh toàn cảnh hơn về việc kết hợp cả ba để có được kết quả tốt nhất.