Spark vs Hadoop: Khung dữ liệu lớn nào tốt nhất?



Bài đăng trên blog này nói về apache spark vs hadoop. Nó sẽ cung cấp cho bạn ý tưởng về khung Dữ liệu lớn phù hợp để lựa chọn trong các tình huống khác nhau.

Tôi sẽ bắt đầu blog Apache Spark vs Hadoop này bằng cách giới thiệu trước tiên về Hadoop và Spark để đặt bối cảnh phù hợp cho cả hai khung công tác. Sau đó, tiếp tục, chúng tôi sẽ so sánh cả hai khung Dữ liệu lớn trên các thông số khác nhau để phân tích điểm mạnh và điểm yếu của chúng.Tuy nhiên, cho dù kết quả so sánh của chúng ta là gì, bạn nên biết rằng cả Spark và Hadoop đều là những thành phần quan trọng của .

Apache Spark vs Hadoop: Giới thiệu về Hadoop

Hadoop là một khuôn khổ cho phép bạn lưu trữ Big Data lần đầu tiên trong một môi trường phân tán để bạn có thể xử lý nó song song. Về cơ bản có hai thành phần trong Hadoop:





HDFS

HDFS tạo ra một nguồn tài nguyên trừu tượng, hãy để tôi đơn giản hóa nó cho bạn. Tương tự như ảo hóa, bạn có thể xem HDFS một cách hợp lý là một đơn vị duy nhất để lưu trữ Dữ liệu lớn, nhưng thực ra bạn đang lưu trữ dữ liệu của mình trên nhiều nút theo kiểu phân tán. Ở đây, bạn có kiến ​​trúc master-slave. Trong HDFS, Namenode là một nút chính và Datanode là nô lệ.

NameNode

Nó là daemon chủ duy trì và quản lý các DataNodes (các nút nô lệ). Nó ghi lại siêu dữ liệu của tất cả các tệp được lưu trữ trong cụm, ví dụ: vị trí của các khối được lưu trữ, kích thước của tệp, quyền, hệ thống phân cấp, v.v. Nó ghi lại từng thay đổi diễn ra đối với siêu dữ liệu hệ thống tệp.



Ví dụ: nếu một tệp bị xóa trong HDFS, NameNode sẽ ngay lập tức ghi lại điều này trong EditLog. Nó thường xuyên nhận được Nhịp tim và báo cáo khối từ tất cả các Mã dữ liệu trong cụm để đảm bảo rằng các Mã dữ liệu đang hoạt động. Nó lưu giữ bản ghi của tất cả các khối trong HDFS và các khối này được lưu trữ trong các nút nào.

DataNode

Đây là các daemon nô lệ chạy trên mỗi máy nô lệ. Dữ liệu thực tế được lưu trữ trên DataNodes. Họ chịu trách nhiệm phục vụ các yêu cầu đọc và ghi từ khách hàng. Chúng cũng chịu trách nhiệm tạo khối, xóa khối và sao chép giống nhau dựa trên các quyết định được thực hiện bởi NameNode.

HDFS - Apache Spark vs Hadoop - EdurekaSỢI

YARN thực hiện tất cả các hoạt động xử lý của bạn bằng cách phân bổ tài nguyên và lập lịch cho các tác vụ. Nó có hai daemon chính, tức là ResourceManagerNodeManager .



ResourceManager

Nó là một thành phần cấp cụm (một cho mỗi cụm) và chạy trên máy chủ. Nó quản lý tài nguyên và lên lịch cho các ứng dụng chạy trên YARN.

NodeManager

Nó là một thành phần cấp độ nút (một trên mỗi nút) và chạy trên mỗi máy phụ. Nó chịu trách nhiệm quản lý các thùng chứa và giám sát việc sử dụng tài nguyên trong mỗi thùng chứa. Nó cũng theo dõi tình trạng của nút và quản lý nhật ký. Nó liên tục giao tiếp với ResourceManager để luôn được cập nhật. Vì vậy, bạn có thể thực hiện xử lý song song trên HDFS bằng MapReduce.

Để tìm hiểu thêm về Hadoop, bạn có thể xem qua phần này Blog. Bây giờ, chúng ta đã sẵn sàng với phần giới thiệu Hadoop, hãy chuyển sang phần giới thiệu Spark.

Apache Spark vs Hadoop: Giới thiệu về Apache Spark

Apache Spark là một khung phân tích dữ liệu thời gian thực trong môi trường máy tính phân tán. Nó thực hiện các phép tính trong bộ nhớ để tăng tốc độ xử lý dữ liệu. Nó nhanh hơn để xử lý dữ liệu quy mô lớn vì nó khai thác các tính toán trong bộ nhớ và các tối ưu hóa khác. Do đó, nó đòi hỏi sức mạnh xử lý cao.

Tập dữ liệu phân tán phục hồi (RDD) là một cấu trúc dữ liệu cơ bản của Spark. Nó là một tập hợp các đối tượng được phân phối bất biến. Mỗi tập dữ liệu trong RDD được chia thành các phân vùng logic, có thể được tính toán trên các nút khác nhau của cụm. RDD có thể chứa bất kỳ loại đối tượng Python, Java hoặc Scala nào, bao gồm các lớp do người dùng định nghĩa. Các thành phần tia lửa làm cho nó nhanh chóng và đáng tin cậy. Apache Spark có các thành phần sau:

  1. Lõi tia lửa - Spark Core là công cụ cơ sở để xử lý dữ liệu song song và phân tán quy mô lớn. Hơn nữa, các thư viện bổ sung được xây dựng trên phần lõi cho phép khối lượng công việc đa dạng để truyền trực tuyến, SQL và học máy. Nó chịu trách nhiệm quản lý bộ nhớ và khôi phục lỗi, lên lịch, phân phối và giám sát các công việc trên một cụm & tương tác với hệ thống lưu trữ
  2. Spark Streaming - Spark Streaming là thành phần của Spark được sử dụng để xử lý dữ liệu phát trực tuyến theo thời gian thực. Do đó, nó là một bổ sung hữu ích cho API Spark cốt lõi. Nó cho phép xử lý luồng có thông lượng cao và chịu được lỗi đối với các luồng dữ liệu trực tiếp
  3. Spark SQL : Spark SQL là một mô-đun mới trong Spark tích hợp xử lý quan hệ với API lập trình chức năng của Spark. Nó hỗ trợ truy vấn dữ liệu qua SQL hoặc qua Ngôn ngữ truy vấn Hive. Đối với những người bạn đã quen thuộc với RDBMS, Spark SQL sẽ là một bước chuyển đổi dễ dàng từ các công cụ trước đó của bạn, nơi bạn có thể mở rộng ranh giới của xử lý dữ liệu quan hệ truyền thống.
  4. GraphX : GraphX ​​là API Spark dành cho đồ thị và tính toán song song đồ thị. Do đó, nó mở rộng Spark RDD với Đồ thị thuộc tính phân tán có khả năng phục hồi. Ở cấp độ cao, GraphX ​​mở rộng tính trừu tượng của Spark RDD bằng cách giới thiệu Đồ thị thuộc tính phân tán đàn hồi: một đồ thị có hướng với các thuộc tính gắn với mỗi đỉnh và cạnh.
  5. MLlib (Học ​​máy): MLlib là viết tắt của Thư viện học máy. Spark MLlib được sử dụng để thực hiện học máy trong Apache Spark.

Như bạn có thể thấy, Spark được đóng gói với các thư viện cấp cao, bao gồm hỗ trợ cho R, SQL, Python, Scala, Java, v.v. Các thư viện tiêu chuẩn này tăng khả năng tích hợp liền mạch trong quy trình làm việc phức tạp. Qua đó, nó cũng cho phép nhiều bộ dịch vụ khác nhau tích hợp với nó như MLlib, GraphX, SQL + Data Frames, dịch vụ Streaming, v.v. để tăng khả năng của nó.

Để tìm hiểu thêm về Apache Spark, bạn có thể xem qua phần này Blog. Bây giờ nền tảng đã được thiết lập cho Apache Spark vs Hadoop. Hãy tiếp tục và so sánh Apache Spark với Hadoop trên các thông số khác nhau để hiểu điểm mạnh của chúng.

Apache Spark vs Hadoop: Các thông số để so sánh

Hiệu suất

Spark nhanh vì nó có xử lý trong bộ nhớ. Nó cũng có thể sử dụng đĩa cho dữ liệu không vừa với bộ nhớ. Xử lý trong bộ nhớ của Spark cung cấp các phân tích gần như thời gian thực. Điều này làm cho Spark phù hợp với hệ thống xử lý thẻ tín dụng, máy học, phân tích bảo mật và cảm biến Internet of Things.

Ban đầu Hadoop được thiết lập để liên tục thu thập dữ liệu từ nhiều nguồn mà không cần lo lắng về loại dữ liệu và lưu trữ nó trên môi trường phân tán. MapReduce sử dụng xử lý hàng loạt. MapReduce chưa bao giờ được xây dựng để xử lý theo thời gian thực, ý tưởng chính đằng sau YARN là xử lý song song trên tập dữ liệu phân tán.

Vấn đề khi so sánh cả hai là chúng thực hiện xử lý khác nhau.

Dễ sử dụng

Spark đi kèm với các API thân thiện với người dùng cho Scala, Java, Python và Spark SQL. Spark SQL rất giống với SQL, vì vậy các nhà phát triển SQL học nó trở nên dễ dàng hơn. Spark cũng cung cấp một trình bao tương tác để các nhà phát triển truy vấn & thực hiện các hành động khác và có phản hồi ngay lập tức.

Bạn có thể nhập dữ liệu vào Hadoop một cách dễ dàng bằng cách sử dụng shell hoặc tích hợp nó với nhiều công cụ như Sqoop, Flume, v.v. YARN chỉ là một khung xử lý và nó có thể được tích hợp với nhiều công cụ như Hive và Pig. HIVE là một thành phần lưu trữ dữ liệu thực hiện đọc, ghi và quản lý các tập dữ liệu lớn trong môi trường phân tán sử dụng giao diện giống SQL. Bạn có thể vượt qua điều này Hệ sinh thái Hadoop blog để biết về các công cụ khác nhau có thể được tích hợp với Hadoop.

Chi phí

Hadoop và Spark đều là các dự án mã nguồn mở Apache, do đó, không có chi phí cho phần mềm. Chi phí chỉ liên quan đến cơ sở hạ tầng. Cả hai sản phẩm đều được thiết kế theo cách có thể chạy trên phần cứng hàng hóa với TCO thấp.

Bây giờ bạn có thể tự hỏi những cách mà chúng khác nhau. Lưu trữ và xử lý trong Hadoop dựa trên đĩa và Hadoop sử dụng lượng bộ nhớ tiêu chuẩn. Vì vậy, với Hadoop, chúng ta cần nhiều không gian đĩa cũng như các đĩa nhanh hơn. Hadoop cũng yêu cầu nhiều hệ thống để phân phối I / O đĩa.

Do Apache Spark’s trong quá trình xử lý bộ nhớ, nó đòi hỏi nhiều bộ nhớ, nhưng nó có thể xử lý tốc độ và dung lượng đĩa tiêu chuẩn. Vì không gian đĩa là một mặt hàng tương đối rẻ tiền và vì Spark không sử dụng I / O đĩa để xử lý, thay vào đó nó yêu cầu một lượng lớn RAM để thực thi mọi thứ trong bộ nhớ. Như vậy, hệ thống Spark phải chịu nhiều chi phí hơn.

Nhưng có, một điều quan trọng cần ghi nhớ là công nghệ của Spark làm giảm số lượng hệ thống cần thiết. Nó cần ít hệ thống hơn đáng kể mà chi phí cao hơn. Vì vậy, sẽ có một thời điểm mà Spark giảm chi phí cho mỗi đơn vị tính toán ngay cả với yêu cầu RAM bổ sung.

Xử lí dữ liệu

Có hai kiểu xử lý dữ liệu: Xử lý hàng loạt & Xử lý luồng.

chuỗi fibonacci java cho vòng lặp

Xử lý hàng loạt so với Xử lý luồng

Xử lý hàng loạt : Xử lý hàng loạt rất quan trọng đối với thế giới dữ liệu lớn. Nói một cách dễ hiểu, xử lý hàng loạt đang hoạt động với khối lượng dữ liệu cao được thu thập trong một khoảng thời gian. Trong quá trình xử lý hàng loạt, dữ liệu đầu tiên được thu thập và sau đó kết quả xử lý được tạo ra ở giai đoạn sau.

Xử lý hàng loạt là một cách hiệu quả để xử lý các tập dữ liệu tĩnh, lớn. Nói chung, chúng tôi thực hiện xử lý hàng loạt cho các tập dữ liệu đã lưu trữ. Ví dụ, tính toán thu nhập trung bình của một quốc gia hoặc đánh giá sự thay đổi của thương mại điện tử trong thập kỷ trước.

Xử lý luồng : Xử lý luồng là xu hướng hiện tại trong thế giới dữ liệu lớn. Cần của giờ là thông tin về tốc độ và thời gian thực, là những gì xử lý hơi nước thực hiện. Xử lý hàng loạt không cho phép các doanh nghiệp phản ứng nhanh chóng với nhu cầu kinh doanh thay đổi trong thời gian thực, xử lý theo luồng đã chứng kiến ​​sự tăng trưởng nhanh chóng về nhu cầu.

Bây giờ quay trở lại Apache Spark vs Hadoop, YARN về cơ bản là một khung xử lý hàng loạt. Khi chúng tôi gửi một công việc đến YARN, nó sẽ đọc dữ liệu từ cụm, thực hiện hoạt động và ghi kết quả trở lại nhóm. Sau đó, nó lại đọc dữ liệu được cập nhật, thực hiện thao tác tiếp theo và ghi kết quả trở lại cụm, v.v.

Spark thực hiện các hoạt động tương tự, nhưng nó sử dụng xử lý trong bộ nhớ và tối ưu hóa các bước. GraphX ​​cho phép người dùng xem cùng một dữ liệu dưới dạng đồ thị và dưới dạng bộ sưu tập. Người dùng cũng có thể biến đổi và nối các đồ thị với Tập dữ liệu phân tán có khả năng phục hồi (RDD).

Khả năng chịu lỗi

Hadoop và Spark đều cung cấp khả năng chịu lỗi, nhưng cả hai đều có cách tiếp cận khác nhau. Đối với cả HDFS và YARN, các daemon chính (tức là NameNode & ResourceManager tương ứng) sẽ kiểm tra nhịp tim của các daemon nô lệ (tức là DataNode & NodeManager tương ứng). Nếu bất kỳ trình nền phụ nào bị lỗi, các trình nền chủ sẽ lên lịch lại tất cả các hoạt động đang chờ xử lý và đang tiến hành cho một máy chủ khác. Phương pháp này có hiệu quả, nhưng nó có thể làm tăng đáng kể thời gian hoàn thành cho các hoạt động với một lần hỏng hóc. Vì Hadoop sử dụng phần cứng hàng hóa, một cách khác mà HDFS đảm bảo khả năng chịu lỗi là bằng cách sao chép dữ liệu.

Như chúng ta đã thảo luận ở trên, RDD là các khối xây dựng của Apache Spark. RDD cung cấp khả năng chịu lỗi cho Spark. Chúng có thể tham chiếu đến bất kỳ tập dữ liệu nào có trong hệ thống lưu trữ bên ngoài như HDFS, HBase, hệ thống tệp chia sẻ. Chúng có thể được vận hành song song.

RDD có thể duy trì một tập dữ liệu trong bộ nhớ qua các hoạt động, điều này làm cho các hành động trong tương lai nhanh hơn gấp 10 lần. Nếu một RDD bị mất, nó sẽ tự động được tính lại bằng cách sử dụng các phép biến đổi ban đầu. Đây là cách Spark cung cấp khả năng chịu lỗi.

Bảo vệ

Hadoop hỗ trợ xác thực Kerberos nhưng rất khó xử lý. Tuy nhiên, nó cũng hỗ trợ các nhà cung cấp bên thứ ba như LDAP (Giao thức truy cập thư mục nhẹ) để xác thực. Họ cũng cung cấp mã hóa. HDFS hỗ trợ quyền truy cập tệp truyền thống, cũng như danh sách kiểm soát truy cập (ACL). Hadoop cung cấp Ủy quyền mức độ dịch vụ, đảm bảo rằng khách hàng có quyền phù hợp để gửi công việc.

Spark hiện hỗ trợ xác thực thông qua một bí mật được chia sẻ. Spark có thể tích hợp với HDFS và nó có thể sử dụng HDFS ACL và các quyền cấp tệp. Spark cũng có thể chạy trên YARN nhờ khả năng của Kerberos.

Các trường hợp sử dụng mà Hadoop phù hợp nhất:

  • Phân tích dữ liệu lưu trữ. YARN cho phép xử lý song song lượng dữ liệu khổng lồ. Các phần của Dữ liệu được xử lý song song & riêng biệt trên các DataNodes khác nhau & tập hợp kết quả từ mỗi NodeManager.
  • Nếu kết quả tức thì không cần thiết. Hadoop MapReduce là một giải pháp tốt và kinh tế để xử lý hàng loạt.

Các trường hợp sử dụng mà Spark phù hợp nhất:

Phân tích dữ liệu lớn theo thời gian thực:

Phân tích dữ liệu thời gian thực có nghĩa là xử lý dữ liệu được tạo ra bởi các luồng sự kiện thời gian thực đến với tốc độ hàng triệu sự kiện mỗi giây, chẳng hạn như dữ liệu Twitter. Điểm mạnh của Spark nằm ở khả năng hỗ trợ truyền dữ liệu cùng với xử lý phân tán. Đây là một sự kết hợp hữu ích giúp xử lý dữ liệu gần theo thời gian thực. MapReduce không có lợi thế vì nó được thiết kế để thực hiện xử lý hàng loạt kiêm phân tán trên một lượng lớn dữ liệu. Dữ liệu thời gian thực vẫn có thể được xử lý trên MapReduce nhưng tốc độ của nó không bằng Spark.

Spark tuyên bố xử lý dữ liệu nhanh hơn 100 lần so với MapReduce, trong khi nhanh hơn 10 lần với các đĩa.

Xử lý đồ thị:

Hầu hết các thuật toán xử lý đồ thị như xếp hạng trang thực hiện nhiều lần lặp lại trên cùng một dữ liệu và điều này yêu cầu cơ chế chuyển thông báo. Chúng ta cần lập trình MapReduce một cách rõ ràng để xử lý nhiều lần lặp lại như vậy trên cùng một dữ liệu. Về cơ bản, nó hoạt động như sau: Đọc dữ liệu từ đĩa và sau một lần lặp cụ thể, ghi kết quả vào HDFS và sau đó đọc dữ liệu từ HDFS cho lần lặp tiếp theo. Điều này rất kém hiệu quả vì nó liên quan đến việc đọc và ghi dữ liệu vào đĩa liên quan đến các hoạt động I / O nặng và sao chép dữ liệu trên toàn bộ cụm để chịu lỗi. Ngoài ra, mỗi lần lặp MapReduce có độ trễ rất cao và lần lặp tiếp theo chỉ có thể bắt đầu sau khi công việc trước đó đã hoàn thành hoàn toàn.

Ngoài ra, việc truyền thông điệp yêu cầu điểm của các nút lân cận để đánh giá điểm của một nút cụ thể. Các tính toán này cần các thông báo từ các nước láng giềng của nó (hoặc dữ liệu qua nhiều giai đoạn của công việc), một cơ chế mà MapReduce thiếu. Các công cụ xử lý đồ thị khác nhau như Pregel và GraphLab được thiết kế để giải quyết nhu cầu về một nền tảng hiệu quả cho các thuật toán xử lý đồ thị. Các công cụ này nhanh và có thể mở rộng, nhưng không hiệu quả cho việc tạo và xử lý hậu kỳ của các thuật toán nhiều giai đoạn phức tạp này.

Việc giới thiệu Apache Spark đã giải quyết những vấn đề này ở một mức độ lớn. Spark chứa một thư viện tính toán đồ thị được gọi là GraphX ​​giúp đơn giản hóa cuộc sống của chúng ta. Tính toán trong bộ nhớ cùng với hỗ trợ đồ thị tích hợp giúp cải thiện hiệu suất của thuật toán lên một hoặc hai độ so với các chương trình MapReduce truyền thống. Spark sử dụng sự kết hợp giữa Netty và Akka để phân phối thông điệp cho những người thực thi. Hãy xem một số thống kê mô tả hiệu suất của thuật toán Xếp hạng trang sử dụng Hadoop và Spark.

Các thuật toán học máy lặp lại:

Hầu như tất cả các thuật toán học máy đều hoạt động lặp đi lặp lại. Như chúng ta đã thấy trước đó, các thuật toán lặp lại liên quan đến các tắc nghẽn I / O trong việc triển khai MapReduce. MapReduce sử dụng các tác vụ chi tiết (song song mức tác vụ) quá nặng đối với các thuật toán lặp. Spark với sự trợ giúp của Mesos - một nhân hệ thống phân tán, lưu trữ tập dữ liệu trung gian sau mỗi lần lặp và chạy nhiều lần lặp lại trên tập dữ liệu được lưu trong bộ nhớ cache này, giúp giảm I / O và giúp chạy thuật toán nhanh hơn theo cách chịu lỗi.

Spark có một thư viện máy học có thể mở rộng tích hợp được gọi là MLlib, chứa các thuật toán chất lượng cao giúp tận dụng các lần lặp lại và mang lại kết quả tốt hơn so với một phép tính gần đúng đôi khi được sử dụng trên MapReduce.

  • Xử lý dữ liệu nhanh chóng. Như chúng ta đã biết, Spark cho phép xử lý trong bộ nhớ. Kết quả là Spark nhanh hơn tới 100 lần đối với dữ liệu trong RAM và lên đến 10 lần đối với dữ liệu trong bộ nhớ.
  • Xử lý lặp đi lặp lại. Các RDD của Spark cho phép thực hiện một số hoạt động bản đồ trong bộ nhớ mà không cần ghi tập dữ liệu tạm thời vào đĩa.
  • Xử lý gần thời gian thực. Spark là một công cụ tuyệt vời để cung cấp thông tin chi tiết về doanh nghiệp ngay lập tức. Đây là lý do tại sao Spark được sử dụng trong hệ thống phát trực tuyến của thẻ tín dụng.

“Apache Spark: Kẻ giết người hay Đấng cứu thế của Apache Hadoop?”

Câu trả lời cho điều này - Hadoop MapReduce và Apache Spark không cạnh tranh với nhau. Trên thực tế, chúng bổ sung cho nhau khá tốt. Hadoop mang đến bộ dữ liệu khổng lồ dưới sự kiểm soát của các hệ thống hàng hóa. Spark cung cấp thời gian thực, xử lý trong bộ nhớ cho những tập dữ liệu yêu cầu nó. Khi chúng tôi kết hợp, khả năng của Apache Spark, tức là tốc độ xử lý cao, phân tích nâng cao và hỗ trợ nhiều tích hợp với hoạt động chi phí thấp của Hadoop trên phần cứng hàng hóa, sẽ mang lại kết quả tốt nhất. Hadoop khen ngợi khả năng của Apache Spark. Spark không thể thay thế hoàn toàn Hadoop nhưng tin tốt là nhu cầu về Spark hiện đang ở mức cao nhất mọi thời đại! Đây là thời điểm thích hợp để làm chủ Spark và tận dụng tối đa các cơ hội nghề nghiệp đến với bạn. Bắt đầu ngay bây giờ!

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến vấn đề này trong phần bình luận và chúng tôi sẽ liên hệ lại với bạn trong thời gian sớm nhất.

Nếu bạn muốn tìm hiểu Spark và xây dựng sự nghiệp trong miền Spark để thực hiện Xử lý dữ liệu quy mô lớn bằng cách sử dụng RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​và Scala với các trường hợp sử dụng trong Đời thực, hãy xem tương tác, trực tuyến của chúng tôi đây, đi kèm với hỗ trợ 24 * 7 để hướng dẫn bạn trong suốt thời gian học tập.