Trong bài viết này, chúng ra sẽ cùng tìm hiểu về khác biệt mấu chốt giữa Hadoop vs Spark. Như chúng ta đã biết, sự tăng trưởng của internet đã liên tục tạo ra một lượng lớn dữ liệu – được gọi là Big Data. Dữ liệu này bao gồm cả dữ liệu có cấu trúc và không có cấu trúc được tạo ra chủ yếu từ các nguồn như mạng xã hội, Internet vạn vật, và các giao dịch kinh doanh truyền thống.
Điện toán phân tán, một thế hệ mới của Quản lý dữ liệu Big Data là một tiến bộ mang tính cách mạng trong công nghệ phần cứng và phần mềm. Xử lý dữ liệu phân tán tạo điều kiện cho lưu trữ, xử lý và truy cập với vận tốc, dung lượng lớn với các loại dữ liệu đa dạng.
Với Điện toán phân tán đang chiếm vị trí dẫn đầu trong hệ sinh thái Big Data, 2 sản phẩm mạnh mẽ là Apache - Hadoop, và Spark đã và đang đóng một vai trò không thể thiếu. Công việc của các chuyên gia quản lý Big Data trở nên dẽ dàng hơn rất nhiều với Hadoop và Spark. Bây giờ, chúng ta sẽ cùng đi vào chi tiết.
Hadoop Framework là gì ?
Thư viện phần mềm Apache Hadoop là một framework dành cho việc xử lý phân tán các bộ dữ liệu lớn – Big Data, qua các cụm máy vi tính sử dụng các mô hình lập trình đơn giản. Nó được thiết kế để mở rộng từ một server đến hàng ngàn các máy tính khác, mỗi máy sẽ cung cấp điện toán và lưu trữ cục bộ. Không chỉ phụ thuộc vào phần cứng để hoạt động, bản thân framework được thiết kế để phát hiện và xử lý lỗi ở tầng ứng dụng. Hadoop cung cấp dịch vụ xử lý phân tán cao cấp trên một cụm các máy vi tính.
Framework bao gồm các module sau:
-
Hadoop Common: Các chức năng thông thường để hỗ trợ các Hadoop module khác.
-
Hadoop Distributed File System (HDFS™): Là bộ nhớ chủ yếu mà các ứng dụng Hadoop sử dụng. Nó cũng là một hệ thống tệp phân tán cung cấp that truy cập tốc độ cao đến dữ liệu ứng dụng.
-
Hadoop YARN: A framework dùng để sắp xếp công việc và quản lý cụm tài nguyên.
-
Hadoop MapReduce: Một hệ thống dựa trên YARN dùng cho việc xử lý song song các bộ dữ liệu lớn.
-
Hadoop Ozone: Một bộ nhớ lưu trữ đối tượng cho Hadoop.
-
Hadoop Submarine: Engine machine learning của Hadoop
Spark Framework là gì ?
Apache Spark là một framework xử lý dữ liệu phân tán đa mục đích với engine cốt lõi thích hợp để sử dụng cho nhiều trường hợp điện toán khác nhau. Ngoài Spark core, nó cũng có các thư viện dành cho SQL, machine learning, điện toán đồ thị, và xử lý dòng, và có thể cùng được sử dụng trong một ứng dụng. Bộ dữ liệu phân tán đàn hồi (Resilient Distributed Dataset - RDD) là một cấu trúc dữ liệu cơ bản của Spark.
Các ngôn ngữ lập trình được hỗ trợ bởi Spark bao gồm: Java, Python, Scala, và R. Các nhà phát triển ứng dụng và khoa học dữ liệu đều tích hợp Spark vào ứng dụng của họ để nhanh chóng và dễ dàng truy vấn, phân tích, và biến đổi dữ liệu. Các tác vụ liên quan đến Spark bao gồm xử lý hàng loạt sử dụng ETL và SQL trên các bộ dữ liệu lớn, xử lý dữ liệu trực tiếp từ các cảm biến, IoT hay các hệ thống tài chính, và các tác vụ machine learning.
Cả 2 Framework đều là sản phẩm của Apache. Vậy Điều gì đã mở đường cho Apache Spark? Apache Hadoop MapReduce là một engine rất nổi tiếng và được sử dụng rộng rãi. Người dùng thường xuyên phàn nàn về vấn đề độ trễ của Hadoop MapReduce chỉ ra rằng phản hồi của batch mode trong các ứng dụng thời gian thực rất chậm khi xử lý và phân tích dữ liệu.
Điều này đưa chúng ta đến với Spark, một hệ thống kế thừa của Hadoop MapReduce, mạnh mẽ và linh hoạt hơn.
Spark chạy trên nền Hadoop, Apache Mesos, Kubernetes, chạy độc lập, hoặc chạy trên cloud. Nó có thể truy cập vào nhiều nguồn dữ liệu. Truy cập dữ liệu của Spark có thể là từ HDFS, Alluxio, Apache Cassandra, Apache HBase, Apache Hive, và hàng trăm nguồn dữ liệu khác.
Điểm giống và khác nhau giữa Hadoop và Spark
Sau khi đã hiểu được về cơ bản của Hadoop và Spark, chúng ta hãy cùng tìm hiểu về những điểm tương đồng và khác biệt giữa chúng.
-
Mã nguồn mở: Cả Hadoop và Spark đều là sản phẩm của Apache và là các phần mềm đáng tin cậy sử dụng cho điện toán phân tán.
-
Khả năng chịu lỗi: Lỗi được đề cập đến ở đây là các sự cố kỹ thuật, cả Hadoop và Spark đều có khả năng chịu lỗi. Các hệ thống của Hadoop hoạt động bình thường kể cả sau khi một node trong cụm máy bị lỗi. Khả năng chịu lỗi đạt được chủ yếu nhờ sao chép dữ liệu và các tín hiệu Heartbeat. RDDs xây dựng các khối của Apache Spark và cung cấp khả năng chịu lỗi cho Spark.
-
Tích hợp dữ liệu: Dữ liệu được tạo ra bởi các hệ thống khác nhau của nhiều ngành kinh doanh thường hiếm khi đủ sạch sẽ và đồng nhất để có thể dễ dàng báo cáo và phân tích. Các quy trình Trích xuất, Biến đổi, và Tải (ETL) thường được sử dụng để lấy dữ liệu từ các hệ thống khác nhau, làm sạch và tiêu chuẩn hoá nó, và sau đó tải nó lên một hệ thống riêng để phân tích. Cả Spark và Hadoop đều được sử dụng để giảm chi phí và thời gian cho quy trình ETL.
-
Tốc độ: Spark có thể làm việc nhanh hơn tới 100 lần so với Hadoop. Apache Spark đạt hiệu năng cao ở cả xử lý hàng loạt và truyền dữ liệu trực tiếp, sử dụng trình lập lịch DAG tân tiến, một trình tối ưu hoá truy vấn, và một engine thực thi vật lý. Spark được thiết kế với tốc độ cao, vận hành cả trên bộ nhớ và trên đĩa. Có một thử nghiệm tốc độ như sau - Nhóm Databricks xử lý được 100 terabyte dữ liệu trên ổ đĩa bán dẫn chỉ mất có 23 sử dụng 1/10 số máy tính, và thành tích trước đó là 72 phút, sử dụng Hadoop trên một thiết lập cụm khác.
Tuy nhiên, nếu Spark chạy trên YARN với các dịch vụ được chia sẻ khác, hiệu năng có thể sẽ bị giảm khiến RAM quá tải và tràn bộ nhớ. Bởi lý do này, nếu người dùng có nhu cầu sử dụng xử lý hàng loạt, Hadoop sẽ hoạt động hiệu quả hơn.
-
Tính tiện dụng: Code của Hadoop MapReduce khá rườm rà và dài dòng. Trong Spark, bạn có thể viết các ứng dụng một cách nhanh chóng bằng Java, Scala, Python, R, và SQL. Spark cung cấp hơn 80 toán tử cấp caokhiến việc xây dựng các ứng dụng song song trở nên dễ dàng hơn. Bạn có thể sử dụng Spark một cách tương tác từ các Scala, Python, R, và SQL shell. Các chức năng của Sparkđược truy cập qua một bộ các API tốt, tất cả được thiết kế riêng để dễ dàng và nhanh chóng tương tác với dữ liệu. Các API đều được lập tài liệu kỹ càng và được cấu trúc một cách dễ hiểu để các nhà khoa học dữ liệu và nhà phát triển ứng dụng có thể nhanh chóng đưa Spark đi vào hoạt động.
-
Chức năng thông thường: Với Hadoop MapReduce bạn có thể xử lý một lô dữ liệu được lưu trữ nhưng với Hadoop Spark, chúng ta có thể chỉnh sử dữ liệu theo thời gian thực sử dụng Spark Streaming.
Với Spark Streaming, chúng ta có để đưa dữ liệu qua nhiều chức năng phần mềm, ví dụ như thực hiện phân tích dữ liệu ngay khi nó được thu thập. Các nhà phát triển có thể sử dụng Apache Spark để xử lý đồ thị để xác định mối qua hệ trong dữ liệu giữa các thực thể như con người và vật thể. Các tổ chức có thể sử dụng Apache Spark với các thư viện machine learning được định nghĩa sẵn để machine learning cso thể làm việc trên dữ liệu lưu trữ trong nhiều cụm Hadoop.
Spark hỗ trợ cho các thư viện bao gồm SQL và DataFrames, MLlib dành cho machine learning, GraphX, và Spark Streaming. Bạn có thể cùng kết hợp các thư viện này vào trong một ứng dụng.
-
Độ trễ: Hadoop là một framework điện toán có độ trễ cao, và không có chế độ tương tác trong khi Spark có độ trễ thấp và xử lý dữ liệu một cách tương tác.
-
Hỗ trợ: Cả Hadoop và Spark đều là mã nguồn mở và cung cấp đủ hỗ trợ cho các ứng dụng. Cộng đồng người dùng Apache Spark khá lớn, hoạt động tích cực và trải rộng trên toàn thế giới.
Các nhà cung cấp thương mại, bao gồm Databricks, IBM, và tất cả các nhà cung cấp Hadoop khác, đều có các hỗ trợ toàn diện cho các giải pháp dựa trên Spark.
Các nhà cung cấp giải pháp Hadoop Big Data chính đó là:
-
Cloudera
-
Hortonworks
-
Amazon Web Services Elastic MapReduce Hadoop Distribution
-
Microsoft
-
MapR
-
IBM InfoSphere Insights
-
Chi phí: Hadoop và Spark đều là các dự án mã nguồn mở của Apache vậy nên không có chi phí nào về phần mềm. Chi phí chỉ đi cùng với cơ sở hạ tầng. Cả 2 sản phẩm đều được thiết kế để chạy trên các phần cứng thông thương với TCO thấp (Tổng chi phí sở hữu - Total cost of ownership).
-
Sử dụng bộ nhớ: Lưu trữ và xử lý trong Hadoop dựa trên ổ đĩa và Hadoop sử dụng một lượng chuẩn bộ nhớ. Vậy, với Hadoop, chúng ta cần nhiều dung lượng trống trên ổ đĩa cũng như các ổ đĩa tốc độ nhanh. Hadoop cũng cần nhiều hệ thống để phân tán I/O của ổ đĩa.
Bởi Apache Spark xử lý trên bộ nhớ, nó cần rất nhiều bộ nhớ. Mặc dù ổ đĩa có chi phí không lớn và dễ kiếm, nhưng bởi Spark không sử dụng I/O của ổ đĩa để xử lý, hệ thống Spark sẽ có chi phí lớn hơn.
Một điều quan trọng nữa đó là Spark giảm thiểu đáng kể nhu cầu sử dụng các hệ thống phần cứng và bởi vậy TCO sẽ thấp hơn.
Hadoop vs Spark: So sánh trực tiếp
Với bảng sau chúng ta có thể dễ dàng thấy được những khác biệt và tương đồng giữa Hadoop và Spark:
Đặc điểm |
Hadoop |
Spark |
Mã nguồn mở |
Có |
Có |
Khả năng chịu lỗi |
Có |
Có |
Tích hợp dữ liệu |
Có |
Có |
Tốc độ |
Hiệu năng thấp |
Hiệu năng cao, nhanh hơn đến 100 lần |
Tính tiện dụng |
Dài và rườm rà – vòng đời phát triển chậm |
Vòng đời phát triển nhanh |
Mục đích sử dụng thông thường |
Xử lý dữ liệu hàng loạt |
Xử lý dữ liệu hàng loạt và theo thời gian thực |
Độ trễ |
Cao |
Thấp |
Hỗ trợ |
Có |
Có |
Chi phí |
Chi phí sở hữu thấp |
Chi phí sở hữu thấp |
Sử dụng bộ nhớ |
Sử dụng ổ đĩa |
Sử dụng RAM |
Có bắt buộc phải sử dụng Hadoop với Spark?
Theo như tài liệu của Spark , Spark có thể chạy mà không cần Hadoop. Bạn có thể chạy nó ở chế độ độc lập như các trình quản lý tài nguyên khác. Nhưng nếu bạn muốn chạy nó trong một thiết lập đa node, bạn sẽ cần đến một trình quản lý tài nguyên như YARN hoặc Mesos và một hệ thống tệp phân tán như HDFS hay S3.
Kết luận
Hadoop và Spark không hoạt động riêng rẽ và có thể làm việc cùng nhau. Sẽ không có xử lý dữ liệu nhanh và theo thời gian thực trong Hadoop nếu thiếu Spark. Spark không cần cụm máy Hadoop để hoạt động.
Mặt khác, Spark không có bất kỳ hệ thống tệp nào cho bộ nhớ phân tán. Spark cũng có thể đọc và xử lý dữ liệu trên các hệ thống tệp khác. HDFS chỉ là một trong số các hệ thống tệp được Spark hỗ trợ. Tuy nhiên, có rất nhiều lợi thế khi chạy Spark trên nền Hadoop (HDFS (sử dụng bộ nhớ) + YARN (trình quản lý tài nguyên)), nhưng điều này cũng không bắt buộc.
Xu hướng hiện nay của người dùng đó là các kỹ thuật trên bộ nhớ, do vậy, Apache Spark sẽ là lựa chọn tốt hơn.
Tham khảo Khóa Học Big Data với Hadoop và Spark
---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Dạy học Lập trình chất lượng cao (Since 2002). Học làm Lập trình viên. Hành động ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0914939543 - 0353655150
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/