7.4 MapReduce VÀ SỢI
Trong khi MapReduce được thảo luận chi tiết hơn trong Chương 8, nó có giá trị cho cả hai giới thiệu các khái niệm chung của công việc kiểm soát và quản lý. Trong Hadoop, MapReduce ban đầu kết hợp cả hai công việc quản lý và giám sát và mô hình lập trình để thực hiện. Môi trường thực hiện MapReduce sử dụng một mô hình thực hiện chủ / nô lệ, trong đó một nút chủ (gọi là JobTracker) quản lý một hồ bơi của các tài nguyên máy tính nô lệ (gọi là TaskTrackers) được kêu gọi để làm các công việc thực tế.
Vai trò của JobTracker là quản lý các nguồn lực với một số trách nhiệm cụ thể, bao gồm cả quản lý TaskTrackers, liên tục giám sát tiếp cận và sẵn sàng của họ, và các khía cạnh khác nhau của quản lý công việc bao gồm việc lập kế hoạch, theo dõi tiến độ công việc được giao, phản ứng với thất bại xác định và đảm bảo khả năng chịu lỗi của thực hiện. Vai trò của các TaskTracker là đơn giản hơn nhiều: chờ đợi cho một phân công nhiệm vụ, khởi xướng và thực hiện các nhiệm vụ theo yêu cầu, và cung cấp cho tình trạng trở lại JobTracker trên cơ sở định kỳ. Khách hàng khác nhau có thể có những yêu cầu từ JobTracker, mà trở thành trọng tài viên duy nhất cho việc phân bổ các nguồn lực.
Có những hạn chế trong mô hình này MapReduce hiện. Đầu tiên, các mô hình lập trình là độc đáo phù hợp với các ứng dụng nơi có địa phương giữa các biến và các dữ liệu, nhưng các ứng dụng đòi hỏi di chuyển dữ liệu sẽ nhanh chóng trở nên sa lầy bởi các vấn đề độ trễ mạng. Thứ hai, không phải tất cả các ứng dụng được dễ dàng ánh xạ tới các mô hình MapReduce, chưa ứng dụng được phát triển bằng cách sử dụng các phương pháp lập trình thay thế, cũng vẫn cần các hệ thống quản lý công việc MapReduce. Thứ ba, việc phân bổ các nút xử lý trong cụm được cố định thông qua việc phân bổ của các nút nhất định là "khe đồ" so với "giảm khe." Khi tính toán được cân đối với một trong các giai đoạn, các nút giao với các giai đoạn khác là phần lớn không sử dụng, kết quả xử lý underutilization.
Điều này đã được đề cập trong các phiên bản tương lai của Hadoop thông qua phân công nhiệm vụ trong một phiên bản được gọi là sợi. Trong phương pháp này, quản lý tài nguyên tổng thể đã được tập trung trong khi quản lý các nguồn tài nguyên tại mỗi nút bây giờ được thực hiện bởi một NodeManager địa phương. Ngoài ra, có khái niệm về một ApplicationMaster đó là liên kết với mỗi ứng dụng trực tiếp thương lượng với các ResourceManager trung cho nguồn lực trong khi nhận bàn giao các trách nhiệm theo dõi tiến độ và theo dõi trạng thái. Đẩy trách nhiệm cho các môi trường ứng dụng cho phép linh hoạt hơn trong việc phân chia các nguồn lực cũng như hiệu quả hơn trong lập kế hoạch để cải thiện việc sử dụng nút.
Cuối cùng, các phương pháp tiếp cận sợi cho phép các ứng dụng phải được nhận thức tốt hơn về việc phân bổ dữ liệu qua các cấu trúc liên kết của các nguồn lực trong một cluster. Nhận thức này cho phép cải thiện colocation của máy tính và dữ liệu tài nguyên, giảm chuyển động dữ liệu, và do đó, làm giảm sự chậm trễ kết hợp với độ trễ truy cập dữ liệu. Kết quả sẽ được tăng khả năng mở rộng và performance.2 7,5 MỞ RỘNG HỆ SINH THÁI DỮ LIỆU ÁP DỤNG BIG Tại thời điểm này, một vài điểm quan trọng liên quan đến sự phát triển của các ứng dụng dữ liệu lớn cần được làm rõ. Thứ nhất, mặc dù đơn giản tải và cài đặt các thành phần cốt lõi của sự phát triển dữ liệu lớn và môi trường thực hiện như Hadoop, thiết kế, phát triển và triển khai các ứng dụng phân tích vẫn đòi hỏi một số kỹ năng và chuyên môn. Thứ hai, chúng ta phải phân biệt giữa các nhiệm vụ liên quan đến thiết kế ứng dụng và phát triển và các nhiệm vụ liên quan đến kiến trúc của hệ thống dữ liệu lớn, lựa chọn và kết nối các thành phần của nó, cấu hình hệ thống, cũng như hệ thống giám sát và tiếp tục duy trì. Nói cách khác, chuyển từ một thử nghiệm "phòng thí nghiệm" hệ thống vào một môi trường sản xuất đòi hỏi nhiều hơn là chỉ truy cập vào các tài nguyên máy tính, bộ nhớ, lưu trữ, và mạng. Có một nhu cầu mở rộng hệ sinh thái kết hợp một loạt các tính năng bổ sung, chẳng hạn như quản lý cấu hình, tổ chức dữ liệu, phát triển ứng dụng, và tối ưu hóa, cũng như khả năng bổ sung để hỗ trợ xử lý phân tích. Kiểm tra của chúng tôi một nền tảng dữ liệu lớn nguyên mẫu thiết kế sử dụng Hadoop tiếp tục bằng cách nhìn vào một số thành phần bổ sung mà thường có thể được coi như là một phần của hệ sinh thái. 7.6 Zookeeper Bất cứ khi nào có nhiều nhiệm vụ và công việc đang chạy trong một môi trường phân phối duy nhất, có một cần cho quản lý cấu hình và đồng bộ hóa các khía cạnh khác nhau của việc đặt tên và điều phối. Trang web của dự án xác định rõ ràng hơn: "Zookeeper là một dịch vụ tập trung cho việc duy trì thông tin cấu hình, đặt tên, cho phép đồng bộ phân phối và cung cấp các dịch vụ theo nhóm." 3 Zookeeper quản lý một đăng ký đặt tên và hiệu quả thực hiện một hệ thống để quản lý các tĩnh khác nhau và phù du tên đối tượng trong một cách có thứ bậc, giống như một hệ thống tập tin. Ngoài ra, nó cho phép phối hợp để thực hiện kiểm soát tài nguyên chia sẻ rằng đang bị ảnh hưởng bởi điều kiện chủng tộc (trong đó sản lượng dự kiến của một quá trình bị ảnh hưởng bởi các biến thể trong thời gian) và bế tắc (trong đó nhiều nhiệm vụ đang cạnh tranh để kiểm soát các nguồn tài nguyên cùng khóa hiệu quả mỗi ra của mình khả năng của bất cứ công việc sử dụng các nguồn lực). Dịch vụ phối hợp chia sẻ như những người cung cấp trong Zookeeper cho phép các nhà phát triển để sử dụng các điều khiển mà không cần phải phát triển chúng từ đầu. 7,7 HBase HBase là một ví dụ về một môi trường quản lý dữ liệu nonrelational rằng phân phối dữ liệu khổng lồ trong khuôn khổ cơ bản Hadoop. HBase có nguồn gốc từ BigTable của Google và là một cách bố trí các cột dữ liệu theo định hướng đó, khi tầng trên Hadoop, cung cấp một phương pháp chịu lỗi để lưu trữ và thao tác các bảng dữ liệu lớn. Như đã thảo luận trong Chương 6, dữ liệu được lưu trữ trong một bố trí cột là dễ để nén, làm tăng số lượng dữ liệu mà có thể được đại diện trong khi giảm các dấu chân lưu trữ thực tế. Ngoài ra, hỗ trợ thực hiện HBase trong bộ nhớ. HBase không phải là một cơ sở dữ liệu quan hệ, và nó không hỗ trợ các truy vấn SQL. Có một số hoạt động cơ bản cho HBase: Nhận (mà truy cập đến hàng cụ thể trong bảng), Đặt (mà các cửa hàng hoặc cập nhật một dòng trong bảng), Scan (mà lặp trên một bộ sưu tập của các hàng trong bảng), và Delete ( trong đó loại bỏ một hàng từ bảng). Bởi vì nó có thể được sử dụng để tổ chức các dữ liệu này, cùng với việc thực hiện cung cấp bởi các khía cạnh của định hướng cột, HBase là một lựa chọn hợp lý như là một mô hình lưu trữ liên tục khi chạy các ứng dụng MapReduce. 7.8 Hive Một trong những vấn đề thường được ghi nhận với MapReduce là mặc dù nó cung cấp một phương pháp để phát triển và thực hiện các ứng dụng mà sử dụng một lượng lớn dữ liệu, nó không phải là nhiều hơn thế. Và trong khi các dữ liệu có thể được quản lý trong các tập tin bằng cách sử dụng HDFS, nhiều ứng dụng doanh nghiệp mong đợi đại diện của dữ liệu trong bảng cơ sở dữ liệu có cấu trúc. Đó là động lực cho sự phát triển của Hive, trong đó (theo web site4 Apache Hive) là một "hệ thống kho dữ liệu cho Hadoop tạo điều kiện tổng kết dữ liệu dễ dàng, truy vấn quảng cáo-hoc, và phân tích các dữ liệu lớn được lưu trữ trong tập tin tương thích Hadoop hệ thống. "Hive được thiết kế đặc biệt cho các kho dữ liệu truy vấn và báo cáo và không có ý định để sử dụng như trong các hệ thống xử lý giao dịch đòi hỏi phải có thời gian thực hiện truy vấn hoặc giao dịch ngữ nghĩa cho thống nhất ở các cấp hàng. Hive được xếp lớp trên cùng của hệ thống tập tin và khuôn khổ thực hiện cho Hadoop và cho phép các ứng dụng và người sử dụng để tổ chức dữ liệu trong một kho dữ liệu có cấu trúc và do đó truy vấn dữ liệu bằng cách sử dụng một ngôn ngữ truy vấn được gọi là HiveQL mà là tương tự như SQL (tiêu chuẩn Structured Query Language sử dụng cho hầu hết các hệ thống quản lý cơ sở dữ liệu quan hệ hiện đại). Hệ thống Hive cung cấp công cụ để giải nén / biến đổi / tải dữ liệu (ETL) vào một loạt các định dạng dữ liệu khác nhau. Và bởi vì các hệ thống kho dữ liệu được xây dựng trên đầu trang của Hadoop, nó cho phép truy cập nguồn gốc từ các mô hình MapReduce, cho phép các lập trình viên phát triển tùy chỉnh đồ và giảm chức năng có thể được tích hợp trực tiếp vào các truy vấn HiveQL. Hive cung cấp khả năng mở rộng và khả năng mở rộng cho các truy vấn hàng loạt kiểu báo cáo trên các tập dữ liệu lớn mà thường được mở rộng trong khi dựa vào các khía cạnh faulttolerant của mô hình thực hiện cơ bản Hadoop. 7,9 PIG Mặc dù các mô hình lập trình MapReduce là tương đối đơn giản, nó vẫn có một số kỹ năng và sự hiểu biết của cả hai lập trình song song và phân tán và Java để tận dụng lợi thế tốt nhất của mô hình. Các dự án Pig là một nỗ lực đơn giản hóa quá trình phát triển ứng dụng bằng cách trừu tượng hóa một số chi tiết đi qua một ngôn ngữ lập trình cấp cao hơn được gọi là Pig Latin. Theo Site5 web của dự án, ngôn ngữ lập trình cấp cao Pig cho phép các nhà phát triển để xác định cách phân tích được thực hiện. Đổi lại, một trình biên dịch biến đổi đặc điểm kỹ thuật Pig Latin vào chương trình MapReduce. Mục đích là để nhúng một bộ đáng kể của các nhà khai thác song song và chức năng chứa trong một chuỗi các chỉ thị kiểm soát được áp dụng cho các lớp dữ liệu trong một cách đó là hơi tương tự như cách SQL báo cáo được áp dụng đối với cơ sở dữ liệu có cấu trúc truyền thống. Một số ví dụ bao gồm tạo ra các tập dữ liệu, lọc ra những tập con, gia nhập, chia tách các tập dữ liệu, loại bỏ các bản sao. Đối với các ứng dụng đơn giản, sử dụng lợn cung cấp một cách dễ dàng quan trọng của sự phát triển, và các nhiệm vụ phức tạp hơn có thể được thiết kế như trình tự của các nhà khai thác sử dụng. Ngoài ra, việc sử dụng một ngôn ngữ cấp cao cũng cho phép trình biên dịch để xác định cơ hội để tối ưu hóa mà có thể đã bị bỏ qua bởi một lập trình viên thiếu kinh nghiệm. Đồng thời, môi trường Pig cho phép các nhà phát triển để tạo ra người dùng xác định các chức năng mới (UDFs) mà sau đó có thể được đưa vào chương trình phát triển. 7.10 quản tượng (70) Cố gắng sử dụng dữ liệu lớn f
đang được dịch, vui lòng đợi..
