Tìm hiểu các dự án Big Data của Apache?

Với hơn 30 dự án mã nguồn mở về Big Data, có thể nói Apache là một trong những nơi đầu tiên mà bạn sẽ tìm kiếm khi tìm hiểu các vấn đề liên quan đến Big Data. Có thể kể đến 1 trong các dự án phổ biến như Kafka, Hadoop, Spark … Trong bài viết này chúng ta cũng điểm lại một các dự án tiêu biểu:

1. CouchDB

Là 1 sơ sở dữ liệu dạng NoSQL mã nguồn mở database lưu trữ dữ liệu dạng document/JSON. CouchDB được thiết kế nhắm tới tính dễ sử dụng và phục vụ cho môi trường web.

  • CouchDB có API dạng RESTFul giúp cho việc giao tiếp với cơ sở dữ liệu được đơn giản.
  • Các RESTFul API rất trực quan và dễ thao tác.
  • Dữ liệu được lưu dưới cấu trúc document rất mềm dẻo, chúng ta không cần phải lo lắng về cấu trúc dữ liệu.
  • Map/reduce giúp việc lọc, tìm, tổng hợp dữ liệu dễ hơn bao giờ hết.
  • Nhân bản / đồng bộ là sức mạnh đặc biệt của CouchDB mà hiếm database nào có.

2. Flink

Apache Flink – một framework được xem là 4G (4th Generation) của phân tích Big Data, đảm nhiệm chức năng xử lý real-time.

Về cơ bản, Flink xử lý dữ liệu ở tốc độ cao với độ trễ thấp. Vì vậy, nó là nền tảng xử lý dữ liệu thời gian thực quy mô lớn và có thể xử lý dữ liệu được tạo ra ở tốc độ rất cao

3. Kafka

 hệ thống message pub/sub phân tán (distributed messaging system). Bên pulbic dữ liệu được gọi là producer, bên subscribe nhận dữ liệu theo topic được gọi là consumer.

Kafka có khả năng truyền một lượng lớn message theo thời gian thực, trong trường hợp bên nhận chưa nhận message vẫn được lưu trữ sao lưu trên một hàng đợi và cả trên ổ đĩa bảo đảm an toàn. Đồng thời nó cũng được replicate trong cluster giúp phòng tránh mất dữ liệu.

4. Oozie

Oozie là thành phần có khả năng quản lý cũng như phân luồng công việc cho Hadoop. Nó sẽ cung cấp các cấu trúc phân nhánh theo dạng IF-THEN-ELSE để việc quản lý dữ liệu được hệ thống và logic hơn. 

5. Apache Spark

Apache Spark ™ là công cụ xử lý mã nguồn mở, thế hệ tiếp theo cho phép kết hợp xử lý dữ liệu dạng batch, streaming và phân tích dữ liệu trên cùng một nền tảng thông qua xử lý trên RAM (in-memory).

Là một phần trong hệ sinh thái Hadoop, Apache Spark cung cấp giải pháp xử lý tính toán gấp 100 lần Hadoop khi xử lý trên RAM và 10 lần khi xử lý trên ổ đĩa.

Tuy nhiên, khi Spark làm việc cùng các dịch vụ chia sẻ khác chạy trên YARN thì hiệu năng có thể giảm xuống. Điều đó có thể dẫn đến rò rỉ bộ nhớ trên RAM. Hadoop thì khác, nó dễ dàng xử lý vấn đề này. Nếu người dùng có khuynh hướng xử lý hàng loạt (batch process) thì Hadoop (Map Reduce) lại hiệu quả hơn Spark.

6. Apache Storm

Apache Storm là nền tảng cho phép xử lý tính toán streaming data thời gian thực. Nếu như Hadoop xử lý dữ liệu hàng loạt (batch processing) thì Apache Storm thực hiện xử lý dữ liệu luồng (unbounded streams of data) một cách đáng tin cậy.

  • Có thể xử lý hơn một triệu tính toán trong một thời gian ngắn trên một node
  • Tích hợp với hadoop để khai thác lượng thông tin cao hơn
  • Dễ triển khai và có thể tương tác với bất kỳ ngôn ngữ lập trình nào

Apache Flink

Flink cung cấp nền tảng streaming thời gian thực thật sự mà sử dụng kiến trúc dataflow với hiệu năng cao.

Nó cũng là công cụ xử lý batch job như là một phần tính năng của streaming realtime.

Với tính năng mạnh mẽ, Flink sử dụng các tiến trình sẵn có trên Map Reduce, Storm hoặc trực tiếp trên nền tảng thực thi của chính nó.

Một số các điểm mạnh của Flink bao gồm:

  • Nền tảng xử lý streaming thật sự
  • Sử dụng các giải thuật bao gồm cả batch và streaming
  • Công cụ tối ưu mạnh mẽ
  • Xử lý tốc độ hơn
  • Khả năng chạy các job Map Reduce một cách trực tiếp

Flink đã cho thấy nhiều hứa hẹn và thậm chí đã thu hút được một số người ủng hộ phát trực tuyến Spark ban đầu trong cộng đồng mã nguồn mở. Bất chấp những hứa hẹn của nó, Flink còn một chặng đường dài để đạt được mức độ chấp nhận sản xuất và mức độ phổ biến so với Hadoop và Spark.

Hadoop vs Spark

Spark cung cấp một công nghệ nhanh chóng để xử lý dữ liệu quy mô lớn. Nền tảng này cung cấp các API bằng Java, Scala và Python. Và, nó cung cấp tập dữ liệu dataset rất phong phú bao gồm xử lý Streaming và Machine Learning.

Sử dụng giải pháp nào phụ thuộc vào nhu cầu doanh nghiệp của bạn. Nếu bạn cần lưu trữ một khối lượng dữ liệu lớn (ví dụ dữ liệu y tế) thì Hadoop HDFS là 1 sự lựa chọn tốt.

Mặt khác, nếu một cơ sở chăm sóc sức khỏe muốn tiến hành lập mô hình kết quả bệnh nhân trong một số tình huống, Spark cùng với khả năng Machine Learning của Spark có thể là một giải pháp xử lý tuyệt vời cũng có thể được tích hợp với Hadoop / HDFS để lưu trữ dữ liệu đó.

Với các khả năng nâng cao của Spark, đi kèm với một số phức tạp trong hoạt động. Các công ty có thể cần các kỹ sư dữ liệu có tay nghề cao để phát triển một hệ thống dựa trên Spark.

Spark vs Map Reduce

MapReduce có thể là một hệ thống cũ cho nhiều công ty đã bắt đầu hành trình xây dựng Big Data của họ khi Hadoop lần đầu tiên ra mắt. Framework này thường là giải pháp ứng dụng cho các dự án dữ liệu lớn.

Một trong những thách thức chính đối với các hệ thống được phát triển với framework là độ trễ cao khi sử dụng xử lý batch. Vì MapReduce đã phát triển trong 10 năm qua, một số nhà phát triển thường phàn nàn rằng rất khó duy trì vì sự kém hiệu quả vốn có trong thiết kế và mã nguồn của nó.

Mặt khác, Spark cho tốc độ nhanh hơn và phù hợp hơn với phân tích dữ liệu lớn. Nó có thể chạy trên nhiều hệ thống file và cơ sở dữ liệu. Một số người dùng báo cáo rằng các quy trình hoạt động trên Spark nhanh hơn 100 lần so với quy trình tương tự trên MapReduce.

Spark cũng thân thiện với nhà phát triển hơn với một API dễ sử dụng hơn cho hầu hết các nhà phát triển khi so sánh với MapReduce.

Flink vs. Spark

Khi so sánh Flink với Spark, hầu hết mọi người đều tập trung vào các yêu tố xử lý streaming dữ liệu của mỗi giải pháp. Spark Streaming sử dụng các xử lý batch một nhanh cách. Nó làm việc phần trên một phần dữ liệu vào trong một khoảng thời gian nhất định (được gọi là “micro-batching”). Mặc dù cách tiếp cận này để xử lý dữ liệu hoạt động tốt trong nhiều trường hợp, nhưng nó có thể không phải là tốt nhất trong tất cả các trường hợp sử dụng.

Nếu người dùng thực sự cần phân tích luồng dữ liệu theo thời gian thực, các giải pháp dạng batch-processing không phải là lý tưởng.

Ví dụ:

Ví dụ: nếu người dùng cần luồng dữ liệu để chạy đấu giá thời gian thực, phòng chống gian lận thẻ tín dụng hoặc để phát trực tuyến cảnh báo bệnh nhân theo thời gian thực, thì xử lý micro-batch job có thể không đáp ứng được. Trong trường hợp này, Apache Flink có thể là framework ổn hơn, vì nó có thể cung cấp khả năng xử lý luồng thuần túy hơn với độ trễ thấp hơn.

Spark vs. Storm

Trong khi Spark và Storm cùng cung cấp khả năng chịu lỗi và khả năng mở rộng, mỗi framework sử dụng một mô hình xử lý khác nhau.

  • Spark sử dụng micro-batch để xử lý các sự kiện trong khi Storm xử lý từng sự kiện một (khi không xem xét giải pháp Storm’s Trident).
  • Sự khác biệt trong xử lý quy trình này có nghĩa là Spark có độ trễ vài giây trong khi Storm cung cấp độ trễ một phần nghìn giây.
  • Spark Streaming cung cấp một cấp độ abtract được gọi là Discretized Stream hoặc DStream, đại diện cho một chuỗi RDD liên tục.
  • Cách tiếp cận của Spark cho phép bạn viết các streaming job giống như cách bạn viết các batch job, cho phép bạn sử dụng lại hầu hết các mã và logic nghiệp vụ.
  • Storm tập trung vào xử lý luồng (một số gọi nó là xử lý sự kiện phức tạp). Framework này sử dụng một cách tiếp cận có khả năng chịu lỗi để hoàn thành các phép tính toán hoặc để phân phối nhiều phép tính toán trên một sự kiện khi nó truyền vào hệ thống.

Flink vs Storm

Flink và Storm đều có điểm chung là tập trung vào việc xử lý dữ liệu độ trễ thấp. Tuy nhiên Flink cung cấp các API ở mức high-level hơn so với với Storm. Ngoài ra có khá nhiều các tính năng triển khai bằng tay khi sử dụng Storm.

Một điểm khác biệt nữa là ở lớp xử lý semantics. Storm đảm bảo xử lý ít nhất một lần, còn Flink xử lý chính xác chỉ 1 lần duy nhất.

Cơ bản thì Flink được đánh giá hoạt động tốt hơn so với Storm.

Tham khảo:

Leave a Reply

Your email address will not be published. Required fields are marked *