Sử dụng các ngôn ngữ như-SQL với khung công tác MapReduce potx - Pdf 11

Sử dụng các ngôn ngữ như-SQL với khung công tác
MapReduce
Giới thiệu
Trong hai thập kỷ vừa qua, sự gia tăng ổn định về công suất tính toán đã tạo ra một luồng dữ liệu
rộng lớn, mà dần dần đã dẫn đến một sự thay đổi hình mẫu trong kiến trúc điện toán và các cơ
chế xử lý dữ liệu quy mô lớn. Ví dụ, các kính viễn vọng mạnh mẽ trong thiên văn học, các máy
gia tốc hạt trong vật lý và các bộ gen trong sinh học trao khối dữ liệu khổng lồ vào tay các nhà
khoa học. Facebook thu thập 15 terabyte dữ liệu mỗi ngày vào một kho dữ liệu quy mô Petabyte.
Nhu cầu về khai phá dữ liệu quy mô lớn và các ứng dụng phân tích dữ liệu ngày càng tăng trong
cả ngành công nghiệp phần mềm (ví dụ, phân tích dữ liệu web, phân tích luồng nhấn chuột và
phân tích bản ghi nhật ký giám sát-mạng) lẫn các ngành khoa học (ví dụ, phân tích dữ liệu do các
bộ mô phỏng quy mô rất lớn tạo ra, triển khai bộ cảm biến và thiết bị phòng thí nghiệm có thông
lượng cao). Mặc dù các hệ thống cơ sở dữ liệu song song có lợi cho một số các ứng dụng phân
tích dữ liệu này, nhưng chúng rất đắt tiền, khó quản lý và thiếu khả năng chịu lỗi với các truy
vấn chạy lâu dài.
MapReduce là một khung công tác được Google giới thiệu cho việc lập trình các cụm máy tính
thương mại để thực hiện xử lý dữ liệu quy mô lớn trong một lần chạy. Khung công tác này được
thiết kế theo cách mà một cụm MapReduce có thể mở rộng đến hàng ngàn các nút về mặt khả
năng chịu lỗi. Nhưng mô hình lập trình MapReduce có những hạn chế riêng của mình. Luồng dữ
liệu một đầu vào và hai tầng của nó vô cùng cứng nhắc, ngoài thực tế là nó ở bậc rất thấp. Ví dụ,
bạn phải viết mã tùy chỉnh cho ngay cả những hoạt động phổ biến nhất. Do đó, nhiều nhà lập
trình cảm thấy khó chịu với khung công tác MapReduce và thích sử dụng SQL như một ngôn
ngữ khai báo bậc cao. Một số dự án (Apache Pig, Apache Hive và HadoopDB) đã được phát
triển để giảm bớt nhiệm vụ của các nhà lập trình và cung cấp các giao diện khai báo mức cao
trên đỉnh của khung công tác MapReduce.
Trước hết hay xem xét khung công tác MapReduce và sau đó xem xét các khả năng của các hệ
thống khác nhau cung cấp các giao diện bậc cao cho khung công tác MapReduce.
Về đầu trang
Khung công tác MapReduce
Một lợi thế chính về cách tiếp cận của khung công tác MapReduce là ở chỗ nó tách các ứng dụng
ra khỏi các chi tiết về chạy một chương trình phân tán, chẳng hạn như các vấn đề về phân phối

//key: line number, value: line text
for each word w in value:
EmitIntermediate(w, ?1?);

reduce(String key, Iterator values):
//key: a word, values: a list of counts
int wordCount = 0;
for each v in values:
wordCount += ParseInt(v);
Emit(AsString(wordCount));

Bây giờ giả sử chuỗi đầu vào của dòng văn bản trong Liệt kê 2.

Liệt kê 2. Chuỗi đầu vào

1, This is Code Example
2, Example Color is Red
3, Car Color is Green

Liệt kê 3 cho thấy kết quả đầu ra của hàm map của đầu vào này.

Liệt kê 3. Kết quả đầu ra của hàm map

('This', 1), ('is', 1). ('Code', 1), ('Example', 1)
('Example', 1), ('Color', 1), ('is', 1), ('Red', 1)
('Car', 1), ('Color', 1), ('is', 1), ('Green', 1)

Liệt kê 4 cho thấy kết quả đầu ra của hàm reduce (kết quả).

Liệt kê 4. Kết quả đầu ra của hàm reduce

cách của SQL và lập trình theo thủ tục/bậc thấp khi sử dụng MapReduce. Các luồng dữ liệu Pig
Latin có thể là các luồng tuyến tính đơn giản, nhưng cũng có thể là các luồng công việc phức tạp
gồm nhiều điểm nối đến nhiều đầu vào và phân chia dữ liệu thành nhiều luồng để được xử lý
bằng các toán tử khác nhau.
Một chương trình Pig Latin gồm có một loạt các hoạt động hoặc các phép chuyển đổi, được áp
dụng cho dữ liệu đầu vào để tạo ra kết quả đầu ra. Nói chung, các hoạt động mô tả một luồng dữ
liệu mà môi trường thực hiện của Pig chuyển nó thành một biểu diễn có thể thực hiện được và
sau đó được thực hiện. Ở dưới các vỏ bọc này, Pig chuyển các phép chuyển đổi thành một loạt
các công việc MapReduce.
Với Pig, các cấu trúc dữ liệu phong phú hơn nhiều, thường là nhiều giá trị và lồng nhau; và bộ
các phép chuyển đổi, mà bạn có thể áp dụng cho các dữ liệu, mạnh hơn rất nhiều. Cụ thể là, mô
hình dữ liệu Pig Latin gồm bốn kiểu sau:
1. Atom (Nguyên tử) là một giá trị nguyên tử đơn giản như là một chuỗi hoặc một số, ví dụ,
"John".
2. Tuple (Bộ dữ liệu) là một chuỗi các trường, mỗi trường có thể là bất kỳ kiểu dữ liệu nào,
ví dụ, ("John", "Melbourne").
3. Bag (Túi) là một bộ sưu tập về các bộ dữ liệu với các bản sao có thể. Lược đồ của các bộ
dữ liệu hợp thành rất linh hoạt ở đó không phải tất cả các bộ dữ liệu trong một túi cần
phải có cùng số lượng và kiểu trường giống nhau. Túi trong Hình 1 liệt kê hai bộ dữ liệu :
("John","Melbourne") và "Alice",("UNSW" "Sydney"). Hình 1. Một Túi (Bag)

4. Map (Ánh xạ) là một bộ sưu tập về các mục dữ liệu, nơi mà mỗi mục có một mã khóa
liên kết mà có thể tìm kiếm mục này thông qua khóa đó. Như với các túi, lược đồ của các
mục dữ liệu hợp thành rất linh hoạt, tuy nhiên, các khóa được yêu cầu là các nguyên tử
dữ liệu > Map trong Hình 2 liệt kê các mục dữ liệu: K1 >("John","Melbourne") và K2
>30.


DUMP In một quan hệ tới giao diện điều khiển hệ thống FILTER
DISTINCT Loại bỏ các hàng trùng lặp khỏi một quan hệ
FOREACH
GENERATE
Thêm hoặc loại bỏ các trường khỏi một quan hệ
JOIN
N
ối hai hoặc nhiều quan hệ
ORDER Sắp xếp một quan hệ theo một hoặc nhiều trường
LIMIT
Hạn chế kích cỡ của một quan hệ đến một số lượng các bộ dữ liệu tối
đa
STORE Lưu một quan hệ vào hệ thống tệp hoặc thiết bị lưu trữ khác
FILTER Loại bỏ các hàng không mong muốn khỏi một quan hệ
GROUP
Nhóm d
ữ liệu vào một quan hệ duy nhất
CROSS Tạo ra sản phẩm giao cắt qua hai hoặc nhiều quan hệ
UNION Kết hợp hai hoặc nhiều quan hệ vào một quan hệ
SPLIT Chia tách một quan hệ thành hai hoặc nhiều quan hệ
Liệt kê 5 cho thấy một chương trình Pig Latin đơn giản để tìm tất cả các nhân viên có mức lương
cao.

Liệt kê 5. Tìm tất cả các nhân viên có mức lương cao

employees = LOAD 'employee.txt' AS (id, name, salary);
highSalary = FILTER employees BY salary > 100000;
sortedList = ORDER highSalary BY salary DESC;
STORE sortedList INTO ' highSalary _Emp';
DUMP sortedList;

các phân vùng) và một tập con của SQL cho thế giới không cấu trúc của Hadoop, trong khi vẫn
duy trì tính mở rộng và tính linh hoạt mà Hadoop đã có được. Vì vậy, nó hỗ trợ tất cả các kiểu
nguyên thủy chính (ví dụ, số nguyên, các float, các chuỗi) cũng như các kiểu phức tạp (ví dụ, các
ánh xạ, các danh sách, các cấu trúc). Hive hỗ trợ các truy vấn được thể hiện theo một ngôn ngữ
khai báo giống như SQL, là HiveQL (Hive Query Language – Ngôn ngữ truy vấn Tổ ong) và do
đó bất cứ ai đã quen thuộc với SQL đều có thể hiểu dễ dàng. Các truy vấn này tự động biên dịch
thành các công việc MapReduce được thực hiện bằng cách sử dụng Hadoop. Ngoài ra, HiveQL
cho phép những người dùng kết hợp các kịch bản lệnh MapReduce tùy chỉnh vào các truy vấn.
HiveQL hỗ trợ các câu lệnh của DDL (Data Definition Language - Ngôn ngữ định nghĩa dữ
liệu), mà bạn có thể sử dụng để tạo, xóa và thay đổi các bảng trong cơ sở dữ liệu. Nó cho phép
những người dùng tải dữ liệu từ các nguồn bên ngoài và chèn các kết quả truy vấn vào các bảng
Hive thông qua việc tải và chèn các câu lệnh DML (Data Manipulation Language - Ngôn ngữ xử
lý dữ liệu), tương ứng. Tuy nhiên, HiveQL hiện không hỗ trợ cập nhật và xóa các hàng trong các
bảng hiện có (cụ thể là các câu lệnh INSERT INTO, UPDATE và DELETE), mà chúng cho phép sử
dụng các cơ chế rất đơn giản để giải quyết các hoạt động đọc và viết đồng thời mà không cần
thực hiện các giao thức tạo khóa phức tạp. Các thành phần của siêu kho lưu trữ (metastore) là
danh mục hệ thống của Hive, lưu trữ siêu dữ liệu về các bảng bên dưới. Siêu dữ liệu này được
quy định trong quá trình tạo bảng và được sử dụng lại mỗi khi tham khảo bảng đó trong HiveQL.
Siêu kho dữ liệu phân biệt Hive như một giải pháp kho dữ liệu truyền thống khi được so sánh với
các hệ thống xử lý dữ liệu tương tự được xây dựng trên đỉnh của kiến trúc giống-MapReduce
như Pig Latin.
Liệt kê 7 cho thấy các ví dụ về các câu lệnh HiveQL đang mô tả các hoạt động để tạo một bảng,
nạp dữ liệu và truy vấn các nội dung của bảng đó.

Liệt kê 7. Các câu lệnh HiveQL đang mô tả các hoạt động để tạo ra một bảng, tải dữ liệu và
truy vấn các nội dung của bảng đó

CREATE TABLE employee (empID INT, name STRING, salary BIGINT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'

vụ và tầng giao tiếp mạng. Các truy vấn được thể hiện trong SQL, nhưng việc triển khai của
chúng được song song hóa trên các nút bằng cách sử dụng khung công tác MapReduce sao cho
công việc truy vấn đơn lẻ được mở rộng, càng nhiều càng tốt, vào cơ sở dữ liệu nút tương ứng.
Nói chung, các hệ thống cơ sở dữ liệu thương mại song song đã có sẵn trong gần hai thập kỷ và
hiện nay có khoảng một chục các công cụ khác nhau trên thị trường (ví dụ Teradata, Aster Data,
Greenplum). Mục đích chính của các hệ thống này là để cải thiện hiệu năng thông qua việc thực
hiện song song các hoạt động khác nhau như tải dữ liệu, xây dựng các chỉ mục và đánh giá các
truy vấn. Nói chung, một số lý do chủ yếu làm cho MapReduce trở thành một cách tiếp cận được
ưa thích hơn trên một RDBMS song song trong một số kịch bản:
 Định dạng và tải một số lượng dữ liệu rất lớn vào một RDBMS song song kịp thời là một
nhiệm vụ đầy thử thách và tốn thời gian.
 Các bản ghi dữ liệu đầu vào có thể không phải luôn theo cùng một lược đồ. Các nhà phát
triển thường cần có sự linh hoạt để thêm và bớt các thuộc tính và việc giải thích một bản
ghi dữ liệu đầu vào cũng có thể thay đổi theo thời gian.
 Việc xử lý dữ liệu quy mô lớn có thể rất tốn thời gian và vì thế điều quan trọng là giữ cho
công việc phân tích tiếp diễn ngay cả trong trường hợp hỏng hóc. Trong khi hầu hết các
RDBMS song song đều có sự hỗ trợ khả năng chịu lỗi, một truy vấn thường được khởi
động lại từ đầu ngay cả khi một nút trong cụm bị hỏng. Ngược lại, MapReduce xử lý hấp
dẫn hơn các hỏng hóc và có thể khởi động lại chỉ một phần của tính toán đã bị mất do
hỏng hóc này gây ra.
Sự so sánh giữa khung công tác MapReduce và các hệ thống cơ sở dữ liệu song song là một cuộc
tranh luận đã có từ lâu rồi. Một sự so sánh quy mô lớn giữa việc thực hiện Hadoop của khung
công tác MapReduce và các hệ thống quản lý cơ sở dữ liệu SQL song song về hiệu năng và độ
phức tạp phát triển đã được tiến hành. Các kết quả của sự so sánh này cho thấy các hệ thống cơ
sở dữ liệu song song đã hiển thị một lợi thế hiệu năng đáng kể so với MapReduce trong việc thực
hiện một loạt các nhiệm vụ phân tích tập trung vào dữ liệu. Mặt khác, việc thực hiện Hadoop đã
dễ dàng hơn và đơn giản hơn để thiết lập và sử dụng so với các hệ thống cơ sở dữ liệu song song.
MapReduce cũng đã cho thấy là có hiệu năng cao hơn trong việc giảm thiểu số lượng công việc
bị mất khi xảy ra một lỗi phần cứng. Ngoài ra, MapReduce (với việc triển khai nguồn mở của
nó) đại diện cho một giải pháp rất rẻ so với các giải pháp DBMS song song rất tốn kém về mặt

vùng cụ thể khi tải và chia tách dữ liệu nút đơn thành nhiều phân vùng nhỏ hơn hoặc các khối.
SMS planner (Bộ lập kế hoạch SMS) mở rộng HiveQL translator (Bộ phiên dịch HiveQL) và
chuyển đổi SQL thành các công việc MapReduce kết nối đến các bảng được lưu trữ như các tệp
trong HDFS.
Về đầu trang
Jaql
Jaql là một ngôn ngữ truy vấn được thiết kế cho JSON (JavaScript Object Notation – Ký pháp
đối tượng JavaScript), một định dạng dữ liệu phổ biến do tính đơn giản và tính linh hoạt mô hình
hóa của nó. JSON là một cách đơn giản nhưng linh hoạt để biểu diễn dữ liệu trải rộng từ dữ liệu
bằng phẳng đến dữ liệu XML bán-cấu trúc. Trước tiên, Jaql được sử dụng để phân tích dữ liệu
bán cấu trúc quy mô lớn. Nó là một ngôn ngữ truy vấn khai báo, theo chức năng, viết lại các truy
vấn bậc cao, khi thích hợp, thành một truy vấn bậc thấp gồm có các công việc Map-Reduce được
đánh giá bằng cách sử dụng dự án Apache Hadoop. Các tính năng cốt lõi gồm khả năng mở rộng
người dùng và xử lý song song. Jaql có một ngôn ngữ kịch bản lệnh và trình biên dịch, cũng như
một thành phần thời gian chạy. Nó có thể xử lý hoặc là không có lược đồ hoặc chỉ có một lược
đồ một phần. Tuy nhiên, Jaql cũng có thể khai thác thông tin lược đồ cứng nhắc khi nó có sẵn,
cho cả hai loại hiệu năng đang kiểm tra và hiệu năng được cải thiện. Đoạn mã sau trong Liệt kê 9
cho thấy một tài liệu JSON mẫu.

Liệt kê 9. Một tài liệu mẫu JSON

[
{ id: 10,
name: "Joe Smith",
email: "",
zip: 85150
},
{ id: 20,
name: "Alice Jones",
email: "",

);
read(hdfs("docs.dat"))
-> countFields()
-> write(hdfs("fields.dat"));

Toán tử read (đọc) tải dữ liệu thô, trong trường hợp này từ HDFS (Hadoop Distributed File
System – Hệ thống tệp phân tán Hadoop) và chuyển đổi nó thành các giá trị Jaql. Các giá trị này
được luồng con countFields xử lý, mà luồng con này trích xuất các tên trường và tính toán các
tần số của chúng. Cuối cùng, toán tử write (ghi) lưu trữ kết quả vào lại HDFS. Bảng 2 mô tả các
biểu thức cốt lõi của ngôn ngữ kịch bản lệnh Jaql.

Bảng 2. Các biểu thức cốt lõi của ngôn ngữ kịch bản lệnh Jaql
Biểu thức

Mô tả
transform

Biểu thức transform (chuyển đổi) áp dụng một hàm (ho
ặc phép chiếu) cho mọi phần tử
của một mảng để tạo ra một mảng mới.
expand
Biểu thức expand (mở rộng) hầu như thường được sử dụng để lấy ra mảng đầu vào
của nó.
group by
Tương tự như GROUP BY trong SQL, biểu thức group by trong Jaql phân vùng đầu
vào của nó dựa vào một biểu thức phân nhóm và áp dụng một biểu thức tổng hợp cho
mỗi nhóm.
Filter
Biểu thức filter (bộ lọc) giữ lại các giá trị đầu vào mà m
ột vị từ cụ thể đánh giá các giá

một bộ dữ liệu đến hoặc từ mô hình dữ liệu Jaql. Thậm chí đầu vào có thể chỉ đơn giản là các giá
trị được xây dựng trong chính kịch bản lệnh. Bộ biên dịch Jaql đánh giá kịch bản lệnh cục bộ
trên máy tính đã biên dịch kịch bản lệnh, nhưng sinh ra các trình thông dịch trên các nút từ xa
bằng cách sử dụng MapReduce. Trình biên dịch Jaql tự động phát hiện các cơ hội song song
trong một kịch bản lệnh Jaql và chuyển nó thành một tập các công việc MapReduce.
Về đầu trang
Kết luận
MapReduce đã nổi lên như là một cách phổ biến để khai thác sức mạnh của các cụm máy tính
lớn. Hiện nay, MapReduce dùng như một nền tảng cho một số lượng đáng kể các phân tích dữ
liệu lớn. Nó cho phép các nhà lập trình suy nghĩ theo kiểu dữ liệu là trung tâm, ở đó họ có thể tập
trung vào việc áp dụng các phép chuyển đổi cho các tập bản ghi dữ liệu trong khi các chi tiết
thực hiện phân tán và khả năng chịu lỗi được quản lý trong suốt bởi khung công tác MapReduce.
Trong thực tế, nhiều nhà lập trình thích sử dụng các ngôn ngữ khai báo bậc cao (hoặc như-SQL)
để thực hiện các công việc phân tích dữ liệu quy mô lớn song song trong khi để lại tất cả các chi
tiết tối ưu hóa thực hiện cho các công cụ phụ trợ. Trong bài này, bạn đã thấy một tổng quan tiên
tiến về các giao diện khai báo bậc cao cho khung công tác MapReduce. Giảm thiểu gánh nặng
lập trình của bạn với các sự trừu tượng hóa của ngôn ngữ bậc cao, cho phép các hệ thống bên
dưới thực hiện các tối ưu hóa tự động ở mức thực hiện và cải thiện hiệu năng của các nhiệm vụ
của người dùng.


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status