Spark là một công nghệ dữ liệu lớn nguồn mở cơ bản


Huỳnh Thành Trung
10 tháng trước
Hữu ích 3 Chia sẻ Viết bình luận 4
Đã xem 4973

Bài viết này được giới thiệu trong Hướng dẫn DZone mới  về Dữ liệu lớn: Khối lượng, Đa dạng và Vận tốc.  Nhận bản sao miễn phí của bạn cho các bài viết sâu sắc, số liệu thống kê ngành và nhiều hơn nữa!

Spark là một công nghệ dữ liệu lớn nguồn mở cơ bản

Dữ liệu lớn - phân tích các bộ dữ liệu vượt quá khả năng của các công cụ thông thường - đã trở nên cần thiết cho nhiều ngành công nghiệp trong nhiều năm. Tuy nhiên, các công cụ độc đáo làm cho dữ liệu lớn trở nên khả thi đã thay đổi qua nhiều năm. Như bài viết này giải thích, Spark là nền tảng mà việc áp dụng để giải quyết các vấn đề dữ liệu lớn hiện đang bùng nổ nhất.

Thời gian trước Spark

Để hiểu tiềm năng của Spark, nó giúp gợi lại hình dạng của dữ liệu lớn một thập kỷ trước. Trong năm 2008-2009, khái niệm dữ liệu lớn như một doanh nghiệp thường được kết hợp với công nghệ Hadoop. Hadoop là một khung công tác nguồn mở để quản lý các cụm (mạng của nhiều máy tính) hoạt động trên các tác vụ lập trình MapReduce. MapReduce là một mô hình lập trình được Google phổ biến vào năm 2004, cấu trúc bộ sưu tập và phân tích các bộ dữ liệu lớn. Một thập kỷ trước, các dự án dữ liệu lớn đầy nghịch lý đã được mã hóa thành các lô MapReduce được áp dụng cho dữ liệu của một tên miền cụ thể và sau đó được thực hiện trên các cụm do Hadoop quản lý. Dữ liệu lớn và Hadoop đã được xác định rất chặt chẽ và trong vài năm sau đó, các bộ phận không quen thuộc với dữ liệu lớn (ví dụ: nhà đầu tư mạo hiểm, công ty PR, phòng nhân sự) nổi tiếng nhầm lẫn giữa hai quảng cáo và văn bản khác.

Sự nhấn mạnh của Hadoop về xử lý hàng loạt là vụng về cho các công việc lặp và tương tác. Thậm chí hơn thế nữa, diễn giải MapReduce của Hadoop giả định rằng các bộ dữ liệu nằm trong Hệ thống tệp phân tán Hadoop (HDFS). Nhiều bộ dữ liệu (có lẽ là phần lớn) phù hợp với mô hình này một cách khó chịu. Chẳng hạn, máy học hiệu năng cao nhấn mạnh vào xử lý trong bộ nhớ với cách truy cập tương đối không thường xuyên đối với lưu trữ hàng loạt hệ thống tập tin.

Spark , "một công cụ phân tích thống nhất để xử lý dữ liệu quy mô lớn" bắt đầu như một dự án lớp Berkeley năm 2009, nhấn mạnh:

  • Khả năng tương thích với Hadoop thông qua việc tái sử dụng HDFS làm lớp lưu trữ.

  • Truy vấn tương tác.

  • Hỗ trợ học máy.

  • Đường ống (nghĩa là dễ dàng kết nối các đơn vị thực hiện khác nhau để có thể đạt được phép tính phức tạp dưới dạng "lữ đoàn xô" chuyển dữ liệu qua các giai đoạn tính toán liên tiếp).

Spark cũng có tính năng linh hoạt ở một số khía cạnh, bao gồm các ngôn ngữ lập trình khác nhau mà nó phục vụ, các đám mây có thể được thuê và các thư viện dữ liệu lớn mà nó tích hợp.

Spark so với Hadoop

Spark thường nhanh hơn Hadoop, với hệ số lên tới hơn 100 công việc để phù hợp với mô hình trong bộ nhớ của Spark tốt hơn. Spark được điều chỉnh cho các tác vụ ML điển hình như tính toán NaiveBayes và K-Means, và cũng có thể giúp tiết kiệm thời gian và giảm bớt các hạn chế phần cứng. Tuy nhiên, các dự án Spark ban đầu có tiếng là rò rỉ bộ nhớ, ít nhất là trong tay người mới. Ngoài ra, các công việc MapReduce hàng loạt chạy dài dường như dễ dàng hơn để sửa lỗi với Hadoop.

Spark cũng là một khung lập trình đa mục đích hơn, như đã đề cập ở trên và như các ví dụ dưới đây cho thấy chi tiết hơn. Hadoop quan niệm dữ liệu lớn khá linh hoạt như các hoạt động MapReduce được mã hóa bằng Java; ngược lại, đường cong học tập cho Spark ít dốc hơn. Một chương trình thông thường trong Python, Java, Scala, R hoặc thậm chí SQL gần như có thể ngay lập tức bắt đầu viết các chương trình trông quen thuộc trên máy tính để bàn thông thường, đồng thời tận dụng sức mạnh của Spark. Trang web chính thức của Spark có một số ví dụ gợi. Hãy xem xét bộ đếm từ này trong Python:

import pyspark
source = "file://..."
result = "file://..."
with pyspark.SparkContext("local", "WordCount") as sc:
 text_file = sc.textFile(source)
 counts = text_file.flatMap(lambda line: line.split("
 "))
 .map(lambda word: (word, 1))
 .reduceByKey(lambda a, b: a + b)
 counts.saveAsTextFile(result)

Bất kỳ lập trình viên Python nào cũng có thể đọc được điều này. Mặc dù nó chạy trên máy chủ phát triển công suất thấp, nhưng nó cũng chạy không thay đổi trên Docker-ined Spark, với cụm đám mây cường độ công nghiệp Sparkon, siêu máy tính thử nghiệm, máy tính lớn thời gian cao, v.v. Ngoài ra, thật dễ dàng để tinh chỉnh một ví dụ như vậy với lập trình Python thông thường; một ví dụ tiếp theo có thể là:

import re
 import pyspark
 source = "file://..."
 result = "file://..."
 def better_word_splitter(line):
 '''
 Use negative look-behind to split on all
 whitespace, but only once per whitespace
 sequence.
 '''
 return re.split("(?<!\\s)\s", line.strip())
with pyspark.SparkContext("local", "WordCount2") as sc:
 text_file = sc.textFile(source)
 counts = text_file.flatMap(better_word_splitter)\
 .map(lambda word: (word, 1))\
 .reduceByKey(lambda a, b: a + b)
 counts.saveAsTextFile(result

Spark chắc chắn là mới hơn Hadoop và có tiếng là ít được hiểu rộng rãi. Đồng thời, Spark bổ sung và khái quát hóa Hadoop để các chuyên gia hiện có trong các lĩnh vực lập trình như biến đổi ETL , ML, phân tích biểu đồ , OLAP , truyền dữ liệu, phân tích chuỗi thời gian hoặc truy vấn tương tác và thử nghiệm có thể tăng dần theo Spark. Ngoài ra, sự kết hợp của Spark trong các lĩnh vực riêng biệt này giúp đơn giản hóa thiết kế kiến ​​trúc; mọi thứ cần thiết cho một kết quả cụ thể có thể được viết trong một đường ống dẫn duy nhất và được tính toán trên cụm Spark tiêu chuẩn.

Một ví dụ khác từ trang web chính thức của Spark Apache - lần này trong Scala, minh họa một số sức mạnh của sự tích hợp của Spark. Cách đây không lâu, phân tích dự đoán là một công việc cho trường đại học; bây giờ, sức mạnh của Spark làm cho nó trở thành một lớp lót:

// Every record of this DataFrame contains the label and
// features represented by a vector.
val df = sqlContext.createDataFrame(data).
toDF("label", "features")
// Set parameters for the algorithm.
// Here, we limit the number of iterations to 10.
val lr = new LogisticRegression().setMaxIter(10)
// Fit the model to the data.
val model = lr.fit(df)
// Inspect the model: get the feature weights.
val weights = model.weights
// Given a dataset, predict each point's label, and
show the results.
model.transform(df).show()

Sự tiếp xúc của Spark trong các ngôn ngữ lập trình có mục đích chung như Scala có nghĩa là nó dễ dàng mở rộng, thích nghi và tích hợp các kết quả mạnh mẽ như vậy với các tài sản tổ chức khác. Quá thường xuyên trong quá khứ, dữ liệu lớn là một chuyên ngành bị cô lập. Thế mạnh của Spark mang lại dữ liệu lớn cho nhiều lập trình viên và dự án.

Hãy ghi nhớ những gì Spark mang lại hoạt động: một khi chương trình chính xác, nó sẽ nhanh và có thể được thu nhỏ một cách anh hùng với khả năng của Spark để quản lý một loạt các cụm.

Sẵn sàng để đi

Tất cả những khả năng này nghe có vẻ tốt. Nhưng liệu Spark có thực sự an toàn cho các dự án dựa vào phần cứng triệu đô, chưa kể đến giá trị và tính bảo mật của dữ liệu độc quyền? Vâng! Các công ty hàng tỷ đô la bao gồm GoDaddy , Alibaba và Shopify dựa vào Spark cho các dịch vụ và kết quả quan trọng.

Là một tài sản trí tuệ, Hadoop đã tìm thấy một ngôi nhà vào năm 2011 với Quỹ Phần mềm Apache trong một thỏa thuận sở hữu sáng tạo. Spark sau đó cũng đi theo con đường đó. Thật thú vị, trong bốn năm qua, hoạt động tại kho Spark đã vượt quá kho lưu trữ Hadoop cũ và thường nổi bật hơn. Mặc dù sự so sánh đó có nghĩa là ít bị cô lập, nhưng ít nhất nó gợi ý về số lượng lớn các tổ chức coi Spark là một công nghệ nguồn mở cơ bản

Nếu bất cứ điều gì, tính linh hoạt và tích hợp của Spark làm cho nó trở thành một lựa chọn an toàn hơn Hadoop hoặc các lựa chọn thay thế khác. Trong khi bản thân Hadoop hoạt động đáng tin cậy, quá nhiều dự án dựa trên Hadoop đã vấp phải sự can thiệp vào hạt nhân tập trung vào MapReduce; phần MapReduce là chính xác, nhưng các hàm bao quanh nó kết nối với các tài sản tổ chức khác cuối cùng lại trở nên mới lạ và tương ứng rung chuyển. Ngược lại, khuôn khổ chung hơn của Spark mời loại giao diện thuận tiện, đáng tin cậy góp phần vào sự thành công của toàn bộ dự án.

Phần kết luận

Derrick Harris đã đúng khi tóm tắt Spark cho khán giả kinh doanh hơn ba năm trước: "Spark nhanh hơn, linh hoạt hơn và dễ sử dụng hơn Hadoop MapReduce". Xử lý trong bộ nhớ tinh vi của Spark làm cho nó nhanh hơn - đôi khi theo các đơn đặt hàng lớn. Spark duy trì một loạt các API phong phú cho đồ thị, phát trực tuyến, ML và hơn thế nữa thậm chí còn quản lý khả năng tăng tốc trong bộ nhớ của chính Spark. Spark xây dựng trong các đường ống và hỗ trợ nhiều cơ sở phân cụm. Các lập trình viên có thể làm việc với bất kỳ ngôn ngữ nào trong năm ngôn ngữ thay vì chỉ dựa trên cơ sở Java của Hadoop. 

Vì tất cả những lý do này, tăng trưởng của Spark sẽ chỉ tăng trong vài năm tới. Spark là một công nghệ mà những người hành nghề dữ liệu lớn cần biết nhất.

Bài viết này được giới thiệu trong Hướng dẫn DZone mới  về Dữ liệu lớn: Khối lượng, Đa dạng và Vận tốc.  Nhận bản sao miễn phí của bạn cho các bài viết sâu sắc, số liệu thống kê ngành và nhiều hơn nữa!

Hữu ích 3 Chia sẻ Viết bình luận 4
Đã xem 4973
ما هو تكنلوجيتكم المتطورة
Hữu ích 0 · Không hữu ích · Trả lời 0
هل انتم فضائيون صحيح
Hữu ích 0 · Không hữu ích · Trả lời 0
قابلني لو كنت فضائي 
Hữu ích 0 · Không hữu ích · Trả lời 0