Apache Hadoop khởi nguồn từ một kho lưu trữ đáng tin cậy với quá trình xử lý hàng loạt sử dụng khuôn khổ MapReduce có khả năng mở rộng và đồng bộ. Chuyển hóa từ một số thành phần bổ trợ gần đây như Impala và Apache Solr vận hành như một công cụ tìm kiếm dành cho văn bản không được định dạng sẵn. Việc làm quen với Hadoop đang ngày càng trở nên dễ dàng hơn, chỉ cần cài đặt CDH và tất cả phần tử của hệ sinh thái Hadoop sẽ nằm trong tầm kiểm soát.
Nhưng sau đó, chúng ta nên làm gì tiếp theo? Đâu là trường hợp áp dụng đầu tiên khả thi nhất? Làm thế nào để đặt “những câu hỏi lớn”? Mặc cho sự đa đạng dễ nhận thấy của các ngành kinh doanh và ứng dụng, luôn luôn có một đề tài phổ biến trong Hadoop: sự hiện hữu của kiến trúc Big Data.
Kiến trúc Big Data
Kiến trúc Big Data dựa trên một bộ các kĩ năng phát triển các đường truyển tải dữ liệu đáng tin cậy, có khả năng mở rộng và hoàn toàn tự động. Bộ kĩ năng này đòi hỏi kiến thức về từng lớp của stack, bắt đầu với thiết kế cluster và là cầu dẫn mọi thành phần của bộ phận điều chỉnh Hadoop để thiết lập dây chuyền làm việc chính cho xử lý dữ liệu. Sơ đồ trên đây thể hiện sự phức tạp của stack, cũng như cách mà kĩ thuật đường truyền dữ liệu tiếp xúc với các phần tử của nó.
Quy trình chính trong sơ đồ là đường truyền dữ liệu lấy dữ liệu chưa xử lý và chuyển chúng về dạng có thể hiểu được. Trên con đường đó, các kỹ sư Big Data phải đưa ra các quyết định về dữ liệu, chúng sẽ được lưu trữ như nào trong cluster, sự truy cập từ trong và ngoài sẽ diễn ra như nào, công cụ nào sẽ được dùng để xử lý dữ liệu… Những người thiết kế và thực thi cấu trúc Big Data được coi là kỹ sư Big Data.
Chúng ta sẽ tìm hiểu kỹ hơn về các bộ phân khác nhau trong stack và vai trò của chúng trong việc hình thành đường truyền dữ liệu.
Quy hoạch cluster
Quy hoạch cluster là một vấn đề luẩn quẩn “con gà và quả trứng”, bởi thiết kế cluster vốn được khởi chạy nhờ các case áp dụng sau đó, và thường thì các case đó thì chưa rõ ràng. Phần lớn nhà cung cấp có bộ nguyên tắc cấu trúc tham khảo để giúp bạn chọn ra phân khúc máy móc phù hợp. Nhìn chung, các bộ máy móc được đề suất hiện giờ có dual CPU với 4 đến 8 cores mỗi máy, ít nhất 48GB tới 512GB RAM dành cho dữ liệu bộ nhớ đệm, ít nhất 6 tới 12 hoặc HDDs lớn hơn thế để lưu trữ cấu hình nặng hoặc máy chủ 19’’ rack-mountable. Nếu nghi ngờ, bạn hoàn toàn có thể thử những dịch vụ đám mây trước, và sau khi biết rõ hơn về những yêu cầu của mình, bạn có thể thay đổi lựa chọn.
Nhập vào
Sau khi đã xử lý cluster, bạn phải quyết định cách thức tải dữ liệu. Trên thực tế có hai cách tiếp cận chính: chạy đồng loạt và chạy theo sự kiện. Cách đầu tiên thích hợp với tệp tin và dữ liệu có cấu trúc, trong khi cách thứ hai thì thích hợp với quy trình gần với thời gian thực hơn như log hoặc chuyển hóa dữ liệu.
Nhập vào đồng loạt
Khi nhập vào dữ liệu từ các nguồn có cấu trúc như RDBMS, lựa chọn luôn được ngầm hiểu là Apache Sqoop, nơi cho phép bạn chuyển dữ liệu tới Hadoop từ RDBMS. Bạn có thể lựa chọn từng phần hoặc tất cả bộ các dữ liệu và tiến hành di chuyển cục bộ hoặc toàn bộ. Sqoop sử dụng MapReduce như một cánh tay hữu ích và sử dụng chương trình điều khiển mặc định JDBC cho rất nhiều hệ thống cơ sở dữ liệu.
Phức tạp hơn trong quy trình nhập vào đồng loạt là tải tập tin. Có rất nhiều cách để làm điều đó nhưng không có cách nào trong số đó được đưa vào sử dụng chính thức. Vấn đề bị làm phức tạp hơn bởi vị trí của các tập tin, cũng như các API để tải chúng. Trên thực tế, nếu có thể, sẽ tốt hơn khi chuyển sang nhập vào theo biến để tránh tải lên một khối lượng lớn tập tin.
Nhập vào theo sự kiện
Với quy trình nhập vào này, Apache Flume là một sự lựa chọn cho phép bạn xác định một mạng lưới phục hồi của các tác nhân vận chuyển các bản ghi sự kiện từ hệ thống xuất ra đến hệ thống chi phối chúng, có thể là HDFS, nhưng cũng có thể là Spark hoặc Hbase, hoặc kết hợp giữa chúng.
Flume đang được thử nghiệm ở nhiều tập hợp người dùng và cho phép bạn vận chuyển dữ liệu đáng tin cậy tới nơi cần thiết. Công đoạn khó khăn là định hình đúng cấu trúc Flume và các tác nhân. Các tác nhân cần phải có khả năng làm bộ đệm cho dữ liệu trên phương tiện một cách nhất quán để đảm bảo các lỗi máy chủ thông thường được dự đoán trước đều trong tầm kiểm soát. Ngoài ra, việc điều chỉnh kích thước lô các sự kiện được gửi đến tác nhân là rất thiết yếu để đạt được hiệu quả đầu vào cao hơn hoặc hạn chế độ trễ hơn.
Bước đệm
Sau khi dữ liệu tới được Hadoop, một số bước đệm được thực thi trước khi xử lý. Không chỉ là việc lưu trữ dữ liệu ở đâu đó, mà quan trọng hơn là lưu trữ chúng ở đúng khuôn dạng, đúng kích thước và đúng mặt nạ truy cập.
Khuôn dạng lưu trữ
Khuôn dạng dữ liệu chuẩn phụ thuộc vào việc ứng dụng là đồng loạt hay theo thời gian thực tế, nhưng cũng phụ thuộc vào việc khuôn dạng giữ được đầy đủ độ tin cậy của dữ liệu hay là một nguồn mở. Với ứng dụng đồng loạt, thức dạng lưu trữ tập tin bao gồm Sequencèile và Avro đều khá hữu ích và được sử dụng rộng rãi. Và với ứng dụng theo thời gian thực tế, mới đây ứng cử viên sáng giá là Apache Parquet, giống như cơ sở dữ liệu cột, bố trí dữ liệu theo cột với cấu trúc và sự nén cho phép bạn quét hiệu quả những bộ dữ liệu kích thước lớn.
Việc quan tâm tới những diễn biến sau đó của dữ liệu cũng là rất quan trọng. Bạn có thể muốn thực thi thao tác ghi lại các dữ liệu cũ vào những tập tin khác nhau hoặc những khuôn dạng nén, sau đó bạn sẽ tận dụng được hiệu quả hơn khả năng sẵn có của cluster.
Phân cắt dữ liệu
Trong khi tạo các bước đệm cho dữ liệu, có một khía cạnh quan trọng cần được cân nhắc: bạn phân cắt như thế nào, hay khối lượng dữ liệu của bạn lớn đến đâu. Đối với người mới bắt đầu, Hadoop đã làm tốt trong việc quản lý ít hơn những tập tin rất lớn. Bạn không muốn thiết kế một cấu trúc cho rất nhiều tập tin nhỏ vào HDFS và rồi ngạc nhiên khi NameNode trở nên vận hành rất tồi. Đương nhiên bạn có thể làm thế nhưng bạn sẽ cần tiến hành một công đoạn ETL tập hợp các tập tin nhỏ thành tập lớn hơn.
Trong khi bạn đang biến đổi các tập tin được chuyển tới, bước tiếp theo là phân chia chúng thành những khối tiêu chuẩn để công đoạn xử lý tiếp theo. Bước này thường được thực hiện với công cụ phân chia của HDFS. Trong Hbase, việc phân chia là ngầm bởi nó chia dữ liệu thành các miền của những dãy kề nhau, được phân loại bởi mã dãy. Đối với HDFS, lên kế hoạch trước là rất cần thiết, vì vậy, bạn có thể cần phải lấy mẫu dữ liệu và tìm hiểu cấu trúc của nó để quyết định điều gì là tốt nhất. Nguyên tắc cốt lõi trong phân chia là đo lường ít nhất một lượng dữ liệu tiêu chuẩn cần xử lý mà không gây nên vấn đề tập tin nhỏ nhắc tới ở trên. Sẽ là tốt nhất nếu một tập tin đơn lẻ có dung lượng tối thiểu 1GB, và khi biết kích thước của toàn bộ dữ liệu, ta có thể điều chỉnh chúng lên dung lượng lớn hơn.
Kiểm soát truy cập
Phần việc cuối cùng bạn cần cân nhắc là Kiến trúc thông tin (IA), nơi giải quyết nhu cầu sắp đặt dữ liệu theo một hướng mà nhiều đội nhân lực có thể làm việc an toàn trên cùng một cluster (multi-tenancy).
Rất hạn chế nếu như mỗi phần việc được đọc từ một danh mục, sau đó lại chuyển tới danh mục tiếp theo. Nếu một cluster được chia sẻ cho cả cơ quan, bạn cần phải thiết kế một giản đồ truy cập để kiểm soát chặt chẽ những ai truy cập vào dữ liệu nào. IA là nơi các nguyên tắc này thành hình, với nó, bạn có thể xây dựng một kế hoạch dựa trên cách dữ liệu được đọc từ nơi lưu trữ trong quá trình xử lý và được chuyển tới các công đoạn khác nhau của quy trình xử lý dữ liệu. Một cách thức để xử lý chính xác là tạo ra một danh mục ghi thời gian cho mọi phần việc được chạy, điều này đảm bảo các phần việc đó được tiến hành song song mà không trùng lặp lẫn nhau.
Xử lý dữ liệu
Trên đây, bạn đã được tìm hiểu về các bước đệm dành cho dữ liệu tới. Bước tiếp theo là tự động xử lý chúng như một bộ phận của đường truyền dữ liệu.
Biến đổi dữ liệu
Việc biến đổi dữ liệu không có nghĩa là bạn sẽ mất bất cứ chi tiết nào trong đó: đó không phải ETL thông thường hay dẫn tới mất mát, mà là một bước không bắt buộc để tăng mức độ hiệu quả của cluster. Lường trước kế hoạch là rất cần thiết cho việc tiến hành, việc này có thể mở rộng để ghi lại dữ liệu qua thời gian. Ví dụ bạn có thể tiến hành thử nghiệm kiểm tra tần suất và cách thức dữ liệu được sử dụng và thay đổi bố cục của chúng theo thời gian.
Phân tích
Công đoạn thú vị hơn của xử lý là phân tích, được tiến hành trên cơ sở những dữ liệu đã qua các bước đệm trước đó. Chủ đề nóng nhất hiện nay là máy móc học (machine learning), nơi bạn xây dựng mô hình toán học cho việc đề suất hay tập hợp/phân loại dữ liệu mới nhập vào. Ví dụ, để đánh giá rủi ro, phát hiện gian lận, hay lọc tin rác. Các công tác thông thường hơn trong phân tích, như xây dựng tập hợp hay báo cáo dữ liệu, vẫn là rất phổ biến.
Dù ở hình thức nào, sau khi hình thành các thuật toán và cách tiếp cận, bạn cần chuyển nó thành một quy trình làm việc tự động.
Những đường truyền dữ liệu
Trước khi tự động hóa, chúng ta cần phải kết hợp các công cụ ở mỗi bộ phận của stack thành những đường truyền dữ liệu phức tạp hơn. Có hai loại đường truyền chính: micro và macro.
Đường truyền micro được lập trình cho phép bạn trích dẫn các phần của công đoạn xử lý lớn hơn. Công cụ phục vụ mục đích bao gồm Morphlines, Crunch, và Cascading. Morphlines liên kết những bước xử lý nhỏ hơn áp dụng cho mỗi bản ghi và cặp dữ liệu khi chúng được đưa tới xử lý. Crunch và Cascading quy định một lớp trích dẫn phía trên quá trình xử lý, nơi bạn có thể làm việc với các điểm dữ liệu. Nhưng công việc sau đó của Crunch và Cascading có thể được kết hợp thành quy trình làm việc phức tạp hơn, thường được sử dụng trong những đường truyền macro.
Apache Oozie là một trong những công cụ đường truyền macro. Nó biểu diễn quy trình làm việc dưới dạng đồ thị trực tiếp không tuần hoàn có các yếu tố kiểm soát và thao tác. Yếu tố kiểm soát ảnh hưởng tới cách quy trình được tiến hành và yếu tố thao tác quy định các phần việc cho mỗi bước. Oozie cũng có một bộ phận máy chủ theo dõi việc chạy quy trình và đo lường để xử lý công đoạn hoàn tất. Bởi với những phần việc đơn lẻ hay với đường truyền micro, một quy trình làm việc không được tự động hóa mà chỉ là một định hình về công việc. Nó cần phải được triệu tập qua thao tác bằng tay để kích hoạt quá trình xử lý. Đây chính là lúc một bộ phận khác của Oozie, điều phối viên, tham gia. Điều phối viên Oozie giúp quy định thời gian và tần suất một quy trình làm việc nên chạy, và/hoặc mức độ phụ thuộc vào quy trình làm việc và nguồn dữ liệu khác. Với đặc điểm này, bạn có thể phát hiện mắt xích còn khuyết thiếu trong xử lý tự động.
Sơ đồ sau bổ sung những công cụ và quan điểm đã trao đổi về kiến trúc đường truyền dữ liệu:
Hình 1. Kiến trúc đường truyền dữ liệu:
Trong khi Hadoop đã và đang trưởng thành đáng ghi nhận, vẫn tồn tại những khoảng trống về chức năng để đưa đường truyền dữ liệu vào sản xuất dễ dàng hơn, bởi vậy mà các kĩ sư Big Data lành nghề có vai trò rất quan trọng và nhu cầu cho sự có mặt của họ là rất cao và ngày càng tăng. Hệ sinh thái Hadoop đã rất hữu ích trong việc đề suất các công cụ cần thiết để xây dựng và tự động hóa các đường truyền này dựa trên nguyên tắc kinh doanh – thử nghiệm và triển khai đường truyền dễ hơn với bộ phận hỗ trợ phù hợp, trong khi vận hành những đường truyền này trong sản xuất cũng có thể rõ ràng và được tự động hóa với hiệu quả tương tự.
Trong thời điểm hiện tại, nên gửi tới Hadoop một lời chúc mừng: Happy Hadoop-ing!
Nguồn: http://blog.cloudera.com/blog/2014/09/getting-started-with-big-data-architecture/
Vũ Thanh Hải – FSoft 
Tin liên quan: