MapReduce trong Hadoop là gì? ArchiKết cấu & Sơ đồ

⚡ Tóm tắt thông minh

MapReduce là mô hình lập trình của Hadoop giúp chuyển đổi tập dữ liệu lớn thành kết quả nhỏ gọn bằng cách chạy hàm map trên từng phần dữ liệu đầu vào và sau đó chạy hàm reduce trên các giá trị trung gian đã được nhóm lại.

  • 🔘 Bốn giai đoạn: Mỗi tác vụ đều chạy dưới dạng chia tách, lập bản đồ.ping, bao gồm việc xáo trộn và rút gọn, với các cặp khóa-giá trị luân chuyển giữa mỗi giai đoạn.
  • ☑️ Ví dụ thực tế: Ba dòng văn bản được chia thành bảy từ, thể hiện chính xác vai trò của từng giai đoạn.
  • Chia kích cỡ: Một tác vụ ánh xạ chạy trên mỗi phần dữ liệu đầu vào được chia nhỏ, và kích thước của phần dữ liệu được chia nhỏ thường khớp với kích thước khối HDFS.
  • 🧪 Dữ liệu trung gian: Kết quả của lệnh map được ghi vào ổ đĩa cục bộ thay vì HDFS, vì việc sao chép dữ liệu không cần thiết là lãng phí.
  • 🛠️ Phối hợp: Một công việcTracker lên lịch công việc và nhiệm vụTracBáo cáo tiến độ của KERS dựa trên tín hiệu nhịp tim định kỳ.
  • ⚠️ Ghi chú phiên bản: YARN đã thay thế cặp đó bằng ResourceManager, NodeManager và ApplicationMaster cho mỗi công việc từ Hadoop 2.x.

Kiến trúc MapReduce trong Hadoop được giải thích bằng một ví dụ.

MapReduce trong Hadoop là gì?

MapReduce là một khung phần mềm và mô hình lập trình được sử dụng để xử lý lượng dữ liệu khổng lồ. Các chương trình MapReduce hoạt động theo hai giai đoạn, đó là Map và Reduce. Tác vụ Map liên quan đến việc chia nhỏ và ánh xạ dữ liệu.ping trong khi giảm thiểu dữ liệu bằng cách sắp xếp lại các tác vụ và giảm bớt dữ liệu.

Hadoop Có khả năng chạy các chương trình MapReduce được viết bằng nhiều ngôn ngữ khác nhau: Javahồng ngọc, Pythonvà C++Các chương trình MapReduce có bản chất song song, do đó chúng rất hữu ích cho việc thực hiện phân tích dữ liệu quy mô lớn bằng cách sử dụng nhiều máy trong cụm máy tính.

Đầu vào cho mỗi giai đoạn là các cặp khóa-giá trị. Ngoài ra, mỗi lập trình viên cần chỉ định hai hàm: một hàm ánh xạ (map) và một hàm giảm (reduce).

Bản đồGiảm Archikiến trúc trong Dữ liệu lớn được giải thích bằng Ví dụ

Toàn bộ quy trình trải qua bốn giai đoạn thực thi, đó là chia nhỏ, lập bản đồ.ping, xáo trộn và giảm bớt.

Trong bài hướng dẫn MapReduce này, chúng ta hãy cùng hiểu nó thông qua một ví dụ về MapReduce.

Giả sử bạn có dữ liệu đầu vào sau cho MapReduce của mình: Dữ Liệu Lớn. chương trình:

Welcome to Hadoop Class
Hadoop is good
Hadoop is bad

Sơ đồ bên dưới tracBa dòng đó được thể hiện xuyên suốt mọi giai đoạn, từ việc phân tách dữ liệu đầu vào ở bên trái đến việc đếm số từ cuối cùng ở bên phải.

Sơ đồ kiến ​​trúc MapReduce tracchia ba dòng đầu vào thành bản đồ.ping, xáo trộn và giảm bớt

Đầu ra cuối cùng của tác vụ MapReduce là

xấu 1
Lớp 1
tốt 1
Hadoop 3
is 2
đến 1
Chào mừng 1

Dữ liệu trải qua các giai đoạn sau của MapReduce trong Big Data.

Phân chia đầu vào

Dữ liệu đầu vào cho một tác vụ MapReduce trong Big Data được chia thành các phần có kích thước cố định gọi là các phần đầu vào (input splits). Một phần đầu vào là một phần của dữ liệu đầu vào được sử dụng bởi một hàm map duy nhất.

Bản đồping

Đây là giai đoạn đầu tiên trong quá trình thực thi chương trình MapReduce. Trong giai đoạn này, dữ liệu trong mỗi phân vùng được chuyển đến một map.ping Hàm này có nhiệm vụ tạo ra các giá trị đầu ra. Trong ví dụ của chúng ta, nhiệm vụ của hàm map là thực hiện điều đó.ping Bước này bao gồm việc đếm số lần xuất hiện của mỗi từ trong các phần dữ liệu đầu vào đã tách (thông tin chi tiết hơn về các phần dữ liệu đầu vào được trình bày bên dưới) và lập một danh sách dưới dạng... .

Xáo trộn

Giai đoạn này tiêu thụ đầu ra của Map.ping giai đoạn này. Nhiệm vụ của nó là hợp nhất các hồ sơ liên quan từ Bản đồ.ping Đầu ra pha. Trong ví dụ của chúng tôi, các từ giống nhau được nhóm lại với nhau cùng với tần suất tương ứng của chúng.

Giảm

Trong giai đoạn này, các giá trị đầu ra từ giai đoạn Xáo trộn được tổng hợp lại. Giai đoạn này kết hợp các giá trị từ giai đoạn Xáo trộn và trả về một giá trị đầu ra duy nhất. Nói tóm lại, giai đoạn này tóm tắt toàn bộ tập dữ liệu.

Trong ví dụ của chúng tôi, giai đoạn này tổng hợp các giá trị từ giai đoạn Xáo trộn, tức là nó tính toán tổng số lần xuất hiện của mỗi từ.

Bản đồGiảm Archikiến trúc được giải thích chi tiết

Các điểm dưới đây giải thích cách các thao tác chia tách, ánh xạ tác vụ và giảm thiểu được đặt và lưu trữ trên toàn cụm máy chủ.

  • Một tác vụ ánh xạ được tạo cho mỗi phân vùng, sau đó tác vụ này sẽ thực thi hàm ánh xạ cho mỗi bản ghi trong phân vùng đó.
  • Việc chia nhỏ dữ liệu thành nhiều phần luôn có lợi vì thời gian xử lý mỗi phần nhỏ hơn nhiều so với thời gian xử lý toàn bộ dữ liệu đầu vào. Khi các phần nhỏ hơn, quá trình xử lý sẽ được cân bằng tải tốt hơn, vì các phần được xử lý song song.
  • Tuy nhiên, việc chia nhỏ các phân vùng quá mức cũng không tốt. Khi các phân vùng quá nhỏ, chi phí quản lý các phân vùng và tạo các tác vụ ánh xạ bắt đầu chiếm phần lớn thời gian thực thi tổng thể của công việc.
  • Đối với hầu hết các công việc, tốt hơn hết là nên chia kích thước bằng với kích thước của một phần. HDFS khối này, mặc định là 128 MB từ Hadoop 2.x trở đi (nó là 64 MB trong Hadoop 1.x) và được điều khiển bởi... dfs.blocksize bất động sản.
  • Việc thực thi các tác vụ map sẽ ghi kết quả đầu ra vào ổ đĩa cục bộ trên nút tương ứng, chứ không phải vào HDFS.
  • Lý do chọn ổ đĩa cục bộ thay vì HDFS là để tránh quá trình sao chép dữ liệu diễn ra trong quá trình lưu trữ trên HDFS.
  • Đầu ra bản đồ là đầu ra trung gian được xử lý bằng các tác vụ rút gọn để tạo ra đầu ra cuối cùng.
  • Sau khi công việc hoàn thành, đầu ra bản đồ có thể bị vứt đi. Vì vậy, việc lưu trữ nó trong HDFS với bản sao sẽ trở nên quá mức cần thiết.
  • Trong trường hợp nút bị lỗi, trước khi tác vụ rút gọn sử dụng đầu ra bản đồ, Hadoop sẽ chạy lại tác vụ bản đồ trên một nút khác và tạo lại đầu ra bản đồ.
  • Các tác vụ reduce không hoạt động dựa trên khái niệm về tính cục bộ của dữ liệu. Đầu ra của mỗi tác vụ map được đưa vào tác vụ reduce. Đầu ra của map được chuyển đến máy nơi tác vụ reduce đang chạy.
  • Trên máy này, đầu ra được hợp nhất và sau đó được chuyển đến hàm rút gọn do người dùng xác định.
  • Khác với đầu ra của lệnh map, đầu ra của lệnh reduce được lưu trữ trong HDFS (bản sao đầu tiên được lưu trữ trên nút cục bộ và các bản sao khác được lưu trữ trên các nút ngoài rack). Do đó, việc ghi đầu ra của lệnh reduce tiêu tốn băng thông mạng, nhưng chỉ ở mức tương đương với một đường dẫn ghi HDFS thông thường.

MapReduce tổ chức hoạt động như thế nào?

Trong bài hướng dẫn về MapReduce này, chúng ta sẽ tìm hiểu cách thức hoạt động của MapReduce.

Hadoop chia công việc thành các tác vụ. Có hai loại tác vụ:

  1. Lập bản đồ nhiệm vụ (Chia nhỏ & Lập bản đồ)ping)
  2. Giảm bớt nhiệm vụ (Sắp xếp lại, Giảm bớt)

Toàn bộ quy trình thực thi, tức là việc thực thi cả tác vụ Map và Reduce, được điều khiển bởi hai loại thực thể được gọi là:

  1. Việc làmTracker: đóng vai trò như một người điều khiển chính và chịu trách nhiệm thực thi hoàn toàn một công việc đã được gửi đi.
  2. Nhiều nhiệm vụTracKers: hành xử như nô lệ, mỗi người thực hiện một phần công việc.

Đối với mỗi công việc được gửi để thực thi trong hệ thống, đều có một Job tương ứng.TracKernel nằm trên NameNode và có nhiều Task.TracCác kers nằm trên các DataNodes.

Lưu ý: công việcTracker và Nhiệm vụTracCặp ker thuộc về MapReduce phiên bản 1 (Hadoop 1.x). Từ Hadoop 2.x trở đi, YARN phân chia các nhiệm vụ đó giữa một ResourceManager trên toàn cụm, một NodeManager trên mỗi nút và một ApplicationMaster cho mỗi công việc, mặc dù các giai đoạn map, shuffle và reduce vẫn không thay đổi.

Sơ đồ bên dưới cho thấy cách một công việc đã gửi được chia thành các nhiệm vụ và tracđược phân bổ trên toàn cụm.

Sơ đồ thể hiện việc chia công việc thành các nhiệm vụ lập bản đồ và giảm thiểu. tracdo Job gây raTracker và Nhiệm vụTrackers

  • Một công việc được chia thành nhiều tác vụ, sau đó được thực thi trên nhiều nút dữ liệu trong một cụm máy chủ.
  • Đó là trách nhiệm của công việc. tracKer điều phối hoạt động bằng cách lên lịch các tác vụ chạy trên các nút dữ liệu khác nhau.
  • Việc thực hiện từng nhiệm vụ riêng lẻ sau đó sẽ do nhiệm vụ đó đảm nhiệm. tracker, nằm trên mỗi nút dữ liệu thực thi một phần của công việc.
  • Nhiệm vụ tracTrách nhiệm của ker là gửi báo cáo tiến độ công việc cho người phụ trách. track.
  • Ngoài ra, nhiệm vụ tracKer định kỳ gửi tín hiệu 'nhịp tim' đến Job.Tracker để thông báo cho nó về trạng thái hiện tại của hệ thống.
  • Do đó, công việc tracker giữ track của tiến độ tổng thể của mỗi công việc. Trong trường hợp nhiệm vụ thất bại, công việc tracKer có thể lên lịch lại nó cho một tác vụ khác. track.

Câu Hỏi Thường Gặp

YARN đã làm được điều đó, từ Hadoop 2.x trở đi. Một ResourceManager trên toàn cụm xử lý việc lập lịch, một NodeManager chạy trên mỗi nút và một ApplicationMaster cho mỗi công việc. tracks thực hiện các nhiệm vụ của nó. Các giai đoạn lập bản đồ và giảm thiểu vẫn không thay đổi.

Các mô hình được huấn luyện dựa trên lịch sử công việc trước đó dự đoán thời gian chạy, đề xuất kích thước phân chia và số lượng reducer, đồng thời phát hiện sự mất cân bằng sớm. Chúng cũng theo dõi các giá trị bộ đếm, gắn cờ các công việc chạy chậm bất thường hoặc bị lỗi trước khi quá trình chạy kết thúc.

Copilot xử lý tốt phần khung sườn: chữ ký của mapper và reducer, kiểu dữ liệu chung, các lệnh nhập và cấu hình trình điều khiển. Các quyết định về lược đồ, chẳng hạn như trường nào là nhóm...ping Điều quan trọng là vẫn cần một lập trình viên am hiểu về dữ liệu.

Điểm khởi đầu phổ biến là số lượng khe giảm (reduce slots) ít hơn một chút so với số lượng khe có sẵn, để mỗi bộ giảm chạy trong một đợt duy nhất. Quá ít khe sẽ tạo ra các đuôi dài; quá nhiều khe sẽ tạo ra nhiều tập tin đầu ra nhỏ.

Bộ kết hợp là một bộ giảm nhỏ tùy chọn chạy trên đầu ra của phép ánh xạ trước khi nó đi qua mạng. Nó làm giảm đáng kể lưu lượng truy cập xáo trộn, nhưng chỉ có thể được sử dụng khi phép toán giảm vừa có tính kết hợp vừa có tính giao hoán.

Spark MapReduce lưu giữ các kết quả trung gian trong bộ nhớ và thể hiện một công việc dưới dạng một đồ thị có hướng gồm các giai đoạn, trong khi MapReduce ghi đầu ra trung gian vào đĩa giữa các giai đoạn. Spark Do đó, phương pháp này nhanh hơn nhiều đối với các công việc lặp đi lặp lại.

Bộ phân vùng quyết định reducer nào nhận từng khóa trung gian, theo mặc định sẽ băm khóa theo modulo số lượng reducer. Một bộ băm tùy chỉnh sẽ được viết khi việc băm đó khiến một reducer duy nhất bị quá tải.

Hadoop tạo ra một tác vụ map cho mỗi phần dữ liệu đầu vào được chia nhỏ, và một phần dữ liệu được chia nhỏ là một phạm vi byte chứ không phải toàn bộ tệp. Một tệp lớn sẽ tạo ra nhiều phần dữ liệu được chia nhỏ; nhiều tệp nhỏ sẽ tạo ra các tác vụ map nhỏ, kém hiệu quả.

Tóm tắt bài viết này với: