1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Big Data nguồn mở, Phần 1: Hướng dẫn Hadoop: Tạo ứng dụng Hello World với Java, Pig, Hive, Flume, Fuse, Oozie và Sqoop với Informix, DB2 và MySQL ppt

58 2,1K 39

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 58
Dung lượng 734,26 KB

Nội dung

Bài này sẽ cung cấp một định nghĩa về Big Data và sau đó thực hiện một loạt các ví dụ để bạn có thể có được những hiểu biết ban đầu về một số khả năng của Hadoop, công nghệ nguồn mở hàng

Trang 1

Big Data nguồn mở, Phần 1: Hướng dẫn Hadoop: Tạo ứng dụng Hello World với Java, Pig, Hive, Flume, Fuse, Oozie và

Sqoop với Informix, DB2 và MySQL

Có rất nhiều điều thú vị về Big Data và cũng có rất nhiều sự nhầm lẫn về nó Bài này sẽ cung cấp một định nghĩa về Big Data và sau đó thực hiện một loạt các ví dụ

để bạn có thể có được những hiểu biết ban đầu về một số khả năng của Hadoop, công nghệ nguồn mở hàng đầu trong lĩnh vực Big Data Cụ thể, ta tập trung vào những câu hỏi sau:

 Big Data, Hadoop, Sqoop, Hive và Pig là gì và tại sao lĩnh vực này lại có nhiều điều thú vị?

 Hadoop liên quan đến DB2 và Informix của IBM như thế nào? Các công nghệ này có thể chạy với nhau không?

 Tôi có thể bắt đầu với Big Data như thế nào? Có ví dụ nào dễ để thử chạy trên máy tính không?

 Nếu bạn đã biết khái niệm về Hadoop rồi và muốn vào thẳng công việc với các ví dụ mẫu, thì hãy làm như sau

1 Hãy bắt đầu chạy một thể hiện Informix hoặc DB2 của bạn

2 Tải về file ảnh cho máy ảo VMWare từ Trang web của Cloudera và tăng thông số RAM máy ảo lên thành 1,5 GB

3 Chuyển đến mục chứa các ví dụ mẫu

4 Có một thể hiện MySQL đã được xây dựng sẵn trong máy ảo

VMWare này Nếu bạn đang làm các bài thực hành mà không kết nối mạng, hãy sử dụng các ví dụ MySQL này

Ngoài ra, xin vui lòng xem tiếp

Big Data là gì?

Big Data lớn về số lượng, được bắt giữ với tốc độ nhanh, có cấu trúc hoặc không

có cấu trúc, hoặc là bao gồm các yếu tố ở trên Những yếu tố này làm cho Big Data khó bắt giữ lại, khai phá và quản lý nếu dùng các phương thức truyền thống Có rất nhiều ý kiến về lĩnh vực này, đến nỗi có thể cần đến một cuộc tranh luận kéo dài chỉ để định nghĩa thế nào là Big Data

Sử dụng công nghệ Big Data không chỉ giới hạn về các khối lượng lớn Bài này sử dụng các ví dụ mẫu nhỏ để minh họa các khả năng của công nghệ này Tính đến năm 2012, các hệ thống được coi là lớn nằm trong phạm vi 100 Petabyte

Trang 2

Dữ liệu lớn có thể vừa là dữ liệu có cấu trúc, vừa là dữ liệu không có cấu trúc Các

cơ sở dữ liệu quan hệ truyền thống, như Informix và DB2, cung cấp các giải pháp

đã được kiểm chứng với dữ liệu có cấu trúc Thông qua khả năng mở rộng, các cơ

sở dữ liệu này cũng quản lý cả dữ liệu không có cấu trúc Công nghệ Hadoop mang đến những kỹ thuật lập trình mới và dễ sử dụng hơn để làm việc với các kho dữ liệu lớn có cả dữ liệu có cấu trúc lẫn dữ liệu không có cấu trúc

Về đầu trang

Tại sao lại có những điều thú vị ấy?

Có nhiều yếu tố tạo nên sự cường điệu xoay quanh Big Data, bao gồm:

 Mang tính toán và lưu trữ lại cùng với nhau trên phần cứng thông dụng: Cho kết quả tốc độ nhanh với chi phí thấp

 Tỷ số giá hiệu năng: Công nghệ Big Data của Hadoop đưa ra mức tiết kiệm chi phí đáng kể (hãy nghĩ đến một hệ số nhân xấp xỉ 10) với những cải thiện hiệu năng đáng kể (một lần nữa, hãy nghĩ đến một hệ số nhân là 10) Lời lãi của bạn có thể thay đổi Nếu công nghệ hiện tại có thể bị đánh bại nặng nề như vậy, thì thật đáng để xem xét xem Hadoop có thể bổ sung hoặc thay thế các khía cạnh của kiến trúc hiện tại của bạn không

 Khả năng mở rộng quy mô tuyến tính: Tất cả các công nghệ song song đều tuyên bố dễ mở rộng quy mô Hadoop có khả năng mở rộng quy mô kể từ khi phát hành bản mới nhất có khả năng mở rộng giới hạn số lượng các nút vượt quá 4.000

 Truy cập đầy đủ đến dữ liệu không có cấu trúc: Một kho dữ liệu có thể mở rộng quy mô cao với một mô hình lập trình song song thích hợp,

MapReduce, đã là một thách thức cho ngành công nghiệp từ lâu nay Mô hình lập trình của Hadoop không giải quyết tất cả vấn đề, nhưng nó là một giải pháp mạnh cho nhiều nhiệm vụ

Các bản phân phối Hadoop: IBM và Cloudera

Đối với những người mới bắt đầu thì họ thường bối rối rằng "Tôi có thể tìm phần mềm để làm việc với Big Data ở đâu?" Các ví dụ trong bài này đều dựa trên bản phân phối Hadoop miễn phí của Cloudera được gọi là CDH (viết tắt của Cloudera distribution including Hadoop) Bản phân phối này có sẵn dưới dạng một file ảnh máy ảo VMWare từ trang web Cloudera Gần đây IBM đang sửa đổi nền tảng Big Data của mình để chạy trên CDH Xem thông tin chi tiết trong phần Tài nguyên

Trang 3

Thường thì thuật ngữ công nghệ đột phá bị lạm dụng rất nhiều, nhưng có thể nó rất phù hợp trong trường hợp này

 Đối với các giám đốc kỹ thuật: Hadoop là một bộ phần mềm nguồn mở để khai phá Big Data có cấu trúc và không có cấu trúc về công ty của bạn Nó tích hợp với hệ sinh thái Business Intelligence của bạn

 Đối với nhân viên pháp lý: Hadoop là một bộ phần mềm nguồn mở được nhiều nhà cung cấp đóng gói và hỗ trợ Hãy xem phần Tài nguyên về việc trả tiền sở hữu trí tuệ (IP)

 Đối với các kỹ sư: Hadoop là một môi trường song song thực thi map-reduce dựa trên Java, không chia sẻ gì cả Hãy nghĩ đến hàng trăm, hàng ngàn máy tính đang làm việc để giải quyết cùng một vấn đề, có khả năng khôi phục lỗi dựng sẵn Các dự án trong hệ sinh thái Hadoop cung cấp khả năng load (tải)

dữ liệu, hỗ trợ ngôn ngữ cấp cao, triển khai trên đám mây tự động và các khả năng khác

 Đối với chuyên gia bảo mật: Hadoop là một bộ phần mềm bảo

mật-Kerberos

Hadoop có những thành phần nào?

Dự án Hadoop của Apache có hai thành phần cốt lõi, kho lưu trữ tệp gọi là Hadoop Distributed File System (HDFS – Hệ thống tệp phân tán Hadoop) và khung công tác lập trình gọi là MapReduce Có một số dự án hỗ trợ để sử dụng HDFS và

MapReduce Bài này sẽ cung cấp một cái nhìn sơ lược, bạn hãy tìm đọc cuốn sách của OReily "Hadoop The Definitive Guide", tái bản lần thứ 3, để biết thêm chi tiết

Các định nghĩa dưới đây nhằm cung cấp cho bạn những thông tin cơ bản để sử dụng các ví dụ mã tiếp theo Bài này thực sự mong muốn giúp bạn bắt đầu bằng trải nghiệm thực hành với công nghệ này Đây là một bài hướng dẫn hơn là bài hỏi đáp thảo luận

Trang 4

 HDFS: Nếu bạn muốn có hơn 4000 máy tính làm việc với dữ liệu của bạn, thì tốt hơn bạn nên phổ biến dữ liệu của bạn trên hơn 4000 máy tính đó HDFS thực hiện điều này cho bạn HDFS có một vài bộ phận dịch chuyển Các Datanode (Nút dữ liệu) lưu trữ dữ liệu của bạn và Namenode (Nút tên) theo dõi nơi lưu trữ các thứ Ngoài ra còn có những thành phần khác nữa, nhưng như thế đã đủ để bắt đầu

 MapReduce: Đây là mô hình lập trình cho Hadoop Có hai giai đoạn, không ngạc nhiên khi được gọi là Map và Reduce Để gây ấn tượng với các bạn bè của bạn hãy nói với họ là có một quá trình shuffle-sort (ND.: một quá trình

mà hệ thống thực hiện sắp xếp và chuyển các kết quả đầu ra của map tới các đầu vào của các bộ rút gọn) giữa hai giai đoạn Map và Reduce JobTracker (Trình theo dõi công việc) quản lý hơn 4000 thành phần công việc

MapReduce Các TaskTracker (Trình theo dõi nhiệm vụ) nhận các lệnh từ JobTracker Nếu bạn thích Java thì viết mã bằng Java Nếu bạn thích SQL hoặc các ngôn ngữ khác không phải Java thì rất may là bạn có thể sử dụng một tiện ích gọi là Hadoop Streaming (Luồng dữ liệu Hadoop)

 Hadoop Streaming: Một tiện ích để tạo nên mã MapReduce bằng bất kỳ ngôn ngữ nào: C, Perl, Python, C++, Bash, v.v Các ví dụ bao gồm một trình mapper Python và một trình reducer AWK

 Hive và Hue: Nếu bạn thích SQL, bạn sẽ rất vui khi biết rằng bạn có thể viết SQL và yêu cầu Hive chuyển đổi nó thành một tác vụ MapReduce Đúng là bạn chưa có một môi trường ANSI-SQL đầy đủ, nhưng bạn có 4000 ghi chép và khả năng mở rộng quy mô ra nhiều Petabyte Hue cung cấp cho bạn một giao diện đồ họa dựa trên trình duyệt để làm công việc Hive của bạn

 Pig: Một môi trường lập trình mức cao hơn để viết mã MapReduce Ngôn ngữ Pig được gọi là Pig Latin Bạn có thể thấy các quy ước đặt tên hơi khác thường một chút, nhưng bạn sẽ có tỷ số giá-hiệu năng đáng kinh ngạc và tính sẵn sàng cao

 Sqoop: Cung cấp việc truyền dữ liệu hai chiều giữa Hadoop và cơ sở dữ liệu quan hệ yêu thích của bạn

 Oozie: Quản lý luồng công việc Hadoop Oozie không thay thế trình lập lịch biểu hay công cụ BPM của bạn, nhưng nó cung cấp cấu trúc phân nhánh if-then-else và điều khiển trong phạm vi tác vụ Hadoop của bạn

 HBase: Một kho lưu trữ key-value có thể mở rộng quy mô rất lớn Nó hoạt động rất giống như một hash-map để lưu trữ lâu bền (với những người hâm

mộ python, hãy nghĩ đến một từ điển) Nó không phải là một cơ sở dữ liệu quan hệ, mặc dù có tên là HBase

 FlumeNG: Trình nạp thời gian thực để tạo luồng dữ liệu của bạn vào

Hadoop Nó lưu trữ dữ liệu trong HDFS và HBase Bạn sẽ muốn bắt đầu với FlumeNG, để cải thiện luồng ban đầu

Trang 5

 Whirr: Cung cấp Đám mây cho Hadoop Bạn có thể khởi động một hệ thống chỉ trong vài phút với một tệp cấu hình rất ngắn

 Mahout: Máy học dành cho Hadoop Được sử dụng cho các phân tích dự báo

và phân tích nâng cao khác

 Fuse: Làm cho hệ thống HDFS trông như một hệ thống tệp thông thường, do

đó bạn có thể sử dụng lệnh ls, cd, rm và những lệnh khác với dữ liệu HDFS

 Zookeeper: Được sử dụng để quản lý đồng bộ cho hệ thống Bạn sẽ không phải làm việc nhiều với Zookeeper, nhưng nó sẽ làm việc rất nhiều cho bạn Nếu bạn nghĩ rằng bạn cần viết một chương trình có sử dụng Zookeeper thì bạn hoặc là rất, rất thông minh và bạn có thể là một ủy viên cho một dự án Apache hoặc bạn sắp có một ngày rất tồi tệ

Hình 1 cho thấy các phần quan trọng của Hadoop

Hình 1 Kiến trúc Hadoop

HDFS, tầng dưới cùng, nằm trên một cụm phần cứng thông thường Các máy chủ lắp vào tủ khung (rack-mounted) đơn giản, mỗi máy chủ có các CPU lõi 2-Hex, 6 đến 12 đĩa và 32 Gb ram Đối với một công việc map-reduce, tầng trình ánh xạ đọc

từ các đĩa ở tốc độ rất cao Trình ánh xạ phát ra các cặp khóa giá trị được sắp xếp

và được đưa tới trình rút gọn và tầng trình rút gọn tóm lược các cặp key-value Không, bạn không phải tóm lược các cặp key-value, trên thực tế bạn có thể có một tác vụ map-reduce chỉ có có các trình ánh xạ Điều này sẽ trở nên dễ hiểu hơn khi bạn xem ví dụ python-awk

Hadoop tích hợp với cơ sở hạ tầng Informix hoặc DB2 như thế nào?

Hadoop tích hợp rất tốt với cơ sở dữ liệu Informix và cơ sở dữ liệu DB2 thông qua Sqoop Sqoop là công cụ nguồn mở hàng đầu để di chuyển dữ liệu giữa Hadoop và các cơ sở dữ liệu quan hệ Nó sử dụng JDBC để đọc và viết vào Informix, DB2, MySQL, Oracle và các nguồn khác Có các bộ thích ứng được tối ưu hoá cho một vài cơ sở dữ liệu, bao gồm Netezza và DB2 Hãy xem phần Tài nguyên về cách tải

về các bộ thích ứng này Tất cả các ví dụ đều là đặc trưng của Sqoop

Trang 6

Hình 2 Các thiết lập BIOS cho một khách ảo 64bit

Big Data được dùng ở đây thực sự là khá nhỏ Vấn đề không phải là làm cho máy tính của bạn nóng lên khi xử lý một tệp lớn, mà để cho bạn thấy các nguồn dữ liệu rất thú vị và các công việc của map-reduce để trả lời những thắc mắc của bạn Tải về file ảnh máy ảo Hadoop

Trang 7

Bạn cần sử dụng file ảnh máy ảo Cloudera để chạy các ví dụ này Hadoop là một công nghệ để giải quyết các vấn đề Việc đóng gói file ảnh Cloudera cho phép bạn tập trung vào các câu hỏi big-data Nhưng nếu bạn quyết định tự mình lắp ráp tất

cả các bộ phận, Hadoop trở thành vấn đề cần giải quyết, chứ không còn là giải pháp nữa

Tải về một máy ảo Máy ảo CDH4, sản phẩm mới nhất có sẵn ở đây: CDH4 image Phiên bản trước, CDH3, có sẵn ở đây: CDH3 image

Bạn có thể chọn các công nghệ ảo hóa của mình Bạn có thể tải về một môi trường

ảo hóa miễn phí từ VMWare và những phần mềm khác Ví dụ, hãy chuyển đến vmware.com và tải về vmware-player Máy tính của bạn đang chạy Windows, hãy tải về phiên bản vmware-player dành cho windows Các ví dụ trong bài này sẽ sử dụng VMWare cho các ví dụ này và chạy hệ điều hành Linux Ubuntu bằng cách sử dụng "tar" thay vì "winzip" hoặc tương đương

Sau khi tải về, giải nén (untar/unzip) như sau: tar -zxvf

Trang 8

Hình 3 Ảnh ảo Cloudera

Lệnh Vmplayer đi sâu ngay vào máy ảo và khởi động máy ảo Nếu bạn đang sử dụng CDH3, thì bạn sẽ cần phải tắt máy ảo và thay đổi các thiết lập bộ nhớ Sử dụng biểu tượng nút nhấn nguồn bên cạnh đồng hồ ở phía dưới cùng chính giữa màn hình để tắt nguồn máy ảo Sau đó, bạn cần chỉnh sửa quyền truy cập vào các thiết lập máy ảo

Đối với CDH3, bước tiếp theo là bạn tăng bộ nhớ RAM Hầu hết các thiết lập này chỉ có thể thay đổi khi đã tắt máy ảo Hình 4 cho thấy cách truy cập vào các thiết lập này và tăng bộ nhớ RAM được cấp phát lên trên 2GB

Trang 9

Hình 4 Thêm bộ nhớ RAM cho máy ảo

Như hiển thị trong Hình 5, bạn có thể thay đổi các thiết lập mạng thành bridged (được nối cầu) Với thiết lập này, máy ảo sẽ nhận được địa chỉ IP riêng của mình Nếu điều này tạo ra các vấn đề về sử dụng mạng của bạn, thì bạn có thể tùy chọn

sử dụng Network Address Translation (NAT) Bạn sẽ sử dụng mạng để kết nối đến

cơ sở dữ liệu

Trang 10

Hình 5 Thay đổi các thiết lập mạng thành bridged

Bạn bị hạn chế bởi bộ nhớ RAM trên hệ thống máy chủ vật lý, do đó, đừng cố gắng cấp phát bộ nhớ RAM nhiều hơn bộ nhớ RAM hiện có trên máy tính của bạn Nếu bạn làm như vậy, máy tính sẽ chạy rất chậm

Bây giờ, bạn chờ một lát, hãy tiếp tục và bật nguồn cho máy ảo Tài khoản

cloudera được tự động đăng nhập vào lúc khởi động Nếu bạn cần mật khẩu thì mật khẩu của Cloudera là: cloudera

Cài đặt Informix và DB2

Bạn sẽ cần một cơ sở dữ liệu để làm việc với nó Nếu bạn chưa có một cơ sở dữ liệu nào, thì bạn có thể tải về Ấn bản Informix Developer (Phiên bản Informix dành cho nhà phát triển) ở đây hoặc Ấn bản DB2 Express-C miễn phí

Một lựa chọn khác để cài đặt DB2 là tải về file ảnh máy ảo VMWare đã cài đặt sẵn DB2 trên một hệ điều hành Linux SuSE Hãy đăng nhập như là người dùng chủ (root), với mật khẩu là: password

Trang 11

Chuyển sang mã định danh người dùng (userid) là db2inst1 Làm việc trực tiếp trên tài khoản root cũng giống như việc lái xe mà không thắt dây an toàn vậy Hãy liên

hệ với Quản trị viên cơ sở dữ liệu (DBA) của bạn về việc chạy cơ sở dữ liệu Bài này sẽ không trình bày điều đó ở đây Đừng cố gắng cài đặt cơ sở dữ liệu bên trong máy ảo Cloudera vì không có đủ dung lượng đĩa để sử dụng

Máy ảo sẽ kết nối với cơ sở dữ liệu bằng cách sử dụng Sqoop thông qua driver JDBC Bạn sẽ cần có driver JDBC cho cơ sở dữ liệu của mình trong máy ảo Bạn

có thể cài đặt trình điều khiển Informix ở đây

Trình điều khiển DB2 có ở đây:

Trang 12

Trước khi bạn bắt đầu di chuyển dữ liệu giữa cơ sở dữ liệu quan hệ của bạn và Hadoop, bạn cần biết qua về HDFS và MapReduce Có rất nhiều hướng dẫn kiểu

"hello world" cho Hadoop, vì thế các ví dụ ở đây được đưa ra chỉ nhằm để cung cấp đủ thông tin cơ bản để bạn hiểu các bài tập thực hành cơ sở dữ liệu của mình

HDFS cung cấp lưu trữ trên các nút trong cụm của bạn Bước đầu tiên trong việc

sử dụng Hadoop là đưa dữ liệu vào HDFS Mã được hiển thị trong Liệt kê 3 lấy một bản sao của một cuốn sách của Mark Twain và một cuốn sách của James Fenimore Cooper và sao chép các văn bản này vào HDFS

Liệt kê 3 Nạp văn bản cuốn sách của Mark Twain và của James Fenimore Cooper vào HDFS

# install wget utility into the virtual image

sudo yum install wget

# use wget to download the Twain and Cooper's works

$ wget -U firefox http://www.gutenberg.org/cache/epub/76/pg76.txt

$ wget -U firefox http://www.gutenberg.org/cache/epub/3285/pg3285.txt

# load both into the HDFS file system

# first give the files better names

# this next command will fail if the directory already exists

$ hadoop fs -mkdir /user/cloudera

# now put the text into the directory

$ hadoop fs -put HF.txt /user/cloudera

# way too much typing, create aliases for hadoop commands

$ alias hput="hadoop fs -put"

$ alias hcat="hadoop fs -cat"

$ alias hls="hadoop fs -ls"

# for CDH4

Trang 13

$ alias hrmr="hadoop fs -rm -r"

# for CDH3

$ alias hrmr="hadoop fs -rmr"

# load the other article

# but add some compression because we can

Nhiều hướng dẫn trong số các hướng dẫn Hadoop sử dụng ví dụ đếm từ đã có

trong tệp jar ví dụ Hóa ra là rất nhiều phân tích liên quan đến việc đếm và gộp Ví

dụ trong Liệt kê 4 giới thiệu cho bạn cách gọi bộ đếm từ

Liệt kê 4 Đếm các từ trong tác phẩm của Twain và Cooper

# hadoop comes with some examples

# this next line uses the provided java implementation of a

# word count program

# for CDH4:

Trang 14

hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar wordcount HF.txt HF.out

Liệt kê 5 Các thông báo MapReduce - "con đường hạnh phúc"

$ hadoop jar /usr/lib/hadoop/hadoop-examples.jar wordcount HF.txt HF.out

12/08/08 19:23:46 INFO input.FileInputFormat: Total input paths to process : 1 12/08/08 19:23:47 WARN snappy.LoadSnappy: Snappy native library is available 12/08/08 19:23:47 INFO util.NativeCodeLoader: Loaded the native-hadoop library 12/08/08 19:23:47 INFO snappy.LoadSnappy: Snappy native library loaded

12/08/08 19:23:47 INFO mapred.JobClient: Running job:

job_201208081900_0002

12/08/08 19:23:48 INFO mapred.JobClient: map 0% reduce 0%

12/08/08 19:23:54 INFO mapred.JobClient: map 100% reduce 0%

12/08/08 19:24:01 INFO mapred.JobClient: map 100% reduce 33%

12/08/08 19:24:03 INFO mapred.JobClient: map 100% reduce 100%

12/08/08 19:24:04 INFO mapred.JobClient: Job complete:

job_201208081900_0002

Trang 15

12/08/08 19:24:04 INFO mapred.JobClient: Counters: 26

12/08/08 19:24:04 INFO mapred.JobClient: Job Counters

12/08/08 19:24:04 INFO mapred.JobClient: Launched reduce tasks=1

12/08/08 19:24:04 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=5959 12/08/08 19:24:04 INFO mapred.JobClient: Total time spent by all reduces 12/08/08 19:24:04 INFO mapred.JobClient: Total time spent by all maps

waiting

12/08/08 19:24:04 INFO mapred.JobClient: Launched map tasks=1

12/08/08 19:24:04 INFO mapred.JobClient: Data-local map tasks=1

12/08/08 19:24:04 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=9433 12/08/08 19:24:04 INFO mapred.JobClient: FileSystemCounters

12/08/08 19:24:04 INFO mapred.JobClient: FILE_BYTES_READ=192298 12/08/08 19:24:04 INFO mapred.JobClient: HDFS_BYTES_READ=597700 12/08/08 19:24:04 INFO mapred.JobClient: FILE_BYTES_WRITTEN=498740 12/08/08 19:24:04 INFO mapred.JobClient:

HDFS_BYTES_WRITTEN=138218

12/08/08 19:24:04 INFO mapred.JobClient: Map-Reduce Framework

12/08/08 19:24:04 INFO mapred.JobClient: Map input records=11733

12/08/08 19:24:04 INFO mapred.JobClient: Reduce shuffle bytes=192298

12/08/08 19:24:04 INFO mapred.JobClient: Spilled Records=27676

12/08/08 19:24:04 INFO mapred.JobClient: Map output bytes=1033012

12/08/08 19:24:04 INFO mapred.JobClient: CPU time spent (ms)=2430

12/08/08 19:24:04 INFO mapred.JobClient: Total committed heap usage

(bytes)=183701504

12/08/08 19:24:04 INFO mapred.JobClient: Combine input records=113365 12/08/08 19:24:04 INFO mapred.JobClient: SPLIT_RAW_BYTES=113

12/08/08 19:24:04 INFO mapred.JobClient: Reduce input records=13838

12/08/08 19:24:04 INFO mapred.JobClient: Reduce input groups=13838

12/08/08 19:24:04 INFO mapred.JobClient: Combine output records=13838 12/08/08 19:24:04 INFO mapred.JobClient: Physical memory (bytes)

snapshot=256479232

12/08/08 19:24:04 INFO mapred.JobClient: Reduce output records=13838

12/08/08 19:24:04 INFO mapred.JobClient: Virtual memory (bytes)

Trang 16

 Đã kiểm tra để xem liệu các tệp đầu vào có tồn tại không

 Đã kiểm tra để xem liệu thư mục đầu ra đã tồn tại chưa, và nếu có, thì hủy

bỏ công việc Không gì tệ hơn là ghi đè lên hàng giờ tính toán, chỉ bởi một lỗi bàn phím đơn giản

 Đã phân phối tệp jar của Java cho tất cả các nút chịu trách nhiệm thực hiện công việc này Trong trường hợp này, chỉ có một nút duy nhất

 Đã chạy giai đoạn ánh xạ của công việc Thông thường giai đoạn này phân tích cú pháp tệp đầu vào và phát ra một cặp khóa giá trị Lưu ý khóa và giá trị có thể là các đối tượng

 Đã chạy giai đoạn sắp xếp để sắp xếp các kết quả đầu ra của trình ánh xạ dựa trên khóa

 Đã chạy giai đoạn rút gọn, thường giai đoạn này tóm lược luồng key-value

và ghi kết quả đầu ra vào HDFS

 Đã tạo các số liệu đo lường trong tiến trình

Hình 6 cho thấy một trang web ví dụ mẫu về các số liệu đo lường của công việc Hadoop sau khi chạy bài tập thực hành Hive

Trang 17

Hình 6 Trang web ví dụ mẫu của Hadoop

Công việc này đã làm gì và kết quả đầu ra nằm ở đâu? Cả hai đều là những câu hỏi thích hợp và được hiển thị trong Liệt kê 6

Liệt kê 6 Kết quả đầu ra của Map-Reduce

# way too much typing, create aliases for hadoop commands

$ alias hput="hadoop fs -put"

$ alias hcat="hadoop fs -cat"

Trang 18

# now cat the file and pipe it to the less command

$ hcat /user/cloudera/HF.out/part-r-00000 | less

Liệt kê 7 Các thông báo MapReduce – lỗi do kết quả đầu ra đã tồn tại trong HDFS

# way too much typing, create aliases for hadoop commands

$ alias hput="hadoop fs -put"

$ alias hcat="hadoop fs -cat"

Trang 19

Cleaning up the staging area hdfs://0.0.0.0/var/l

# if you run short of space and the namenode enters safemode

# clean up some file space and then

Trang 20

Hình 7 Khám phá HDFS bằng một trình duyệt

Một giao diện điều khiển tinh tế hơn có sẵn miễn phí trong trang web của

Cloudera Nó cung cấp một số khả năng nằm ngoài các giao diện web Hadoop chuẩn Lưu ý rằng tình trạng sức khỏe của HDFS trong Hình 8 được hiển thị là Bad (Kém)

Trang 21

Hình 8 Trình quản lý Cloudera quản lý Các dịch vụ Hadoop

Tại sao tình trạng sức khỏe của HDFS lại kém? Vì trong một máy ảo đơn, HDFS không thể tạo ra ba bản sao của các khối dữ liệu Khi các khối dữ liệu không được sao chép đủ, thì có nguy cơ mất dữ liệu, do đó, sức khỏe của hệ thống là kém Tốt hơn là bạn đừng cố gắng chạy các tác vụ Hadoop chỉ trên một nút đơn

Bạn không bị hạn chế phải dùng Java cho các công việc MapReduce của mình Ví

dụ cuối cùng này của MapReduce sử dụng Hadoop Streaming để hỗ trợ một trình mapper được viết bằng Python và một trình reducer có sử dụng AWK Bạn không cần phải là một chuyên gia Java thì mới làm việc được với Map-Reduce!

Mark Twain không phải là một fan hâm mộ Cooper Trong trường hợp này,

Hadoop sẽ cung cấp một phê bình văn học đơn giản để so sánh giữa Twain và Cooper Phép thử Flesch-Kincaid tính toán mức độ dễ đọc của một văn bản cụ thể Một trong những yếu tố trong phân tích này là độ dài trung bình của câu Việc phân tích cú pháp các câu hóa ra phức tạp hơn so với việc chỉ tìm kiếm dấu chấm

Trang 22

câu Gói phần mềm openNLP và gói phần mềm Python NLTK có các trình phân tích cú pháp câu rất tốt Để đơn giản, ví dụ được hiển thị trong Liệt kê 8 sẽ sử dụng

độ dài từ như là một sự thay thế cho số lượng các âm tiết trong một từ Nếu bạn muốn dùng độ dài từ này cho mức tiếp theo, hãy thực hiện phép thử Flesch-

Kincaid trong MapReduce, duyệt trang web và tính toán các mức dễ đọc cho các trang tin ưa thích của mình

Liệt kê 8 Một phê bình văn học của trình mapper dựa trên Python

# loop on mywords, output the length of each word

for word in mywords:

# the reducer just cares about the first column,

# normally there is a key - value pair

print '%s %s' % (len(word), 0)

Kết quả đầu ra của trình mapper, cho từ "Twain", sẽ là: 5 0 Các độ dài từ bằng số đều được sắp xếp theo thứ tự và được đưa tới trình rút gọn theo thứ tự sắp xếp Trong các ví dụ được hiển thị trong Liệt kê 9 và 10, không cần sắp xếp dữ liệu để

Trang 23

nhận được kết quả đầu ra đúng, nhưng do việc sắp xếp này được xây dựng trong cơ

sở hạ tầng MapReduce nên dù sao cũng sẽ xảy ra

Liệt kê 9 Một trình rút gọn AWK dùng cho phê bình văn học

# the awk code is modified from http://www.commandlinefu.com

# awk is calculating

# NR - the number of words in total

# sum/NR - the average word length

# sqrt(mean2/NR) - the standard deviation

$ cat statsreducer.awk

awk '{delta = $1 - avg; avg += delta / NR; \

mean2 += delta * ($1 - avg); sum=$1+sum } \

END { print NR, sum/NR, sqrt(mean2 / NR); }'

# because we're using Hadoop Streaming, we can test the

# mapper and reducer with simple pipes

# the "sort" phase is a reminder the keys are sorted

# before presentation to the reducer

#in this example it doesn't matter what order the

# word length values are presented for calculating the std deviation

Trang 24

-input HF.txt -output HFstats -file /mapper.py -file \

./statsreducer.awk -mapper /mapper.py -reducer /statsreducer.awk

# CDH3

$ hadoop jar cdh3u4.jar \

/usr/lib/hadoop-0.20/contrib/streaming/hadoop-streaming-0.20.2 input HF.txt -output HFstats -file /mapper.py -file /statsreducer.awk \

-mapper /mapper.py -reducer /statsreducer.awk

/usr/lib/hadoop-0.20/contrib/streaming/hadoop-streaming-0.20.2 input DS.txt.gz -output DSstats -file /mapper.py -file /statsreducer.awk \

-mapper /mapper.py -reducer /statsreducer.awk

Sử dụng Sqoop để ghi dữ liệu từ HDFS vào Informix, DB2 hoặc MySQL thông qua JDBC

Trang 25

Sqoop Apache Project là một Hadoop dựa trên JDBC nguồn mở cho tiện ích di chuyển dữ liệu của cơ sở dữ liệu Ban đầu Sqoop đã được tạo ra trong một cuộc thi lập trình hackathon tại Cloudera và sau đó trở thành nguồn mở

Việc di chuyển dữ liệu từ HDFS sang một cơ sở dữ liệu quan hệ là một trường hợp

sử dụng phổ biến HDFS và Map-Reduce rất giỏi làm công việc nặng Đối với các truy vấn đơn giản hoặc một kho lưu trữ mặt sau cho một trang web, việc bắt giữ lại kết quả đầu ra Map-Reduce trong một kho lưu trữ quan hệ là một mẫu thiết kế tốt Bạn có thể tránh chạy lại việc đếm từ của Map-Reduce bằng cách chỉ di chuyển các kết quả bằng Sqoop vào Informix và DB2 Bạn đã tạo ra dữ liệu về Twain và Cooper, bây giờ hãy di chuyển nó vào một cơ sở dữ liệu, như trong Liệt kê 11

Liệt kê 11 Thiết lập driver JDBC

#Sqoop needs access to the JDBC driver for every

# database that it will access

# please copy the driver for each database you plan to use for these exercises

# the MySQL database and driver are already installed in the virtual image

# but you still need to copy the driver to the sqoop/lib directory

#one time copy of jdbc driver to sqoop lib directory

$ sudo cp Informix_JDBC_Driver/lib/ifxjdbc*.jar /usr/lib/sqoop/lib/

$ sudo cp db2jdbc/db2jcc*.jar /usr/lib/sqoop/lib/

$ sudo cp /usr/lib/hive/lib/mysql-connector-java-5.1.15-bin.jar /usr/lib/sqoop/lib/

Các ví dụ được hiển thị trong các Liệt kê từ 12 đến 15 được trình bày cho từng cơ

sở dữ liệu Hãy đọc ngay vào ví dụ mà bạn quan tâm, gồm có Informix, DB2 hoặc MySQL Đối với các chương trình cơ sở dữ liệu được viết theo nhiều ngôn ngữ lập trình, hãy giải trí với tất cả mọi ví dụ Nếu cơ sở dữ liệu mà bạn chọn không có ở đây thì cũng không phải là một thách thức lớn để chạy các ví dụ mẫu ở những nơi khác

Liệt kê 12 Những người dùng Informix: Sqoop ghi các kết quả đếm từ vào

Informix

Trang 26

# create a target table to put the data

# fire up dbaccess and use this sql

# create table wordcount ( word char(36) primary key, n int);

# now run the sqoop command

# this is best put in a shell script to help avoid typos

$ sqoop export -D sqoop.export.records.per.statement=1 \

fields-terminated-by '\t' driver com.informix.jdbc.IfxDriver \

connect \

"jdbc:informix-sqli://myhost:54321/stores_demo:informixserver=i7;user=me;password=mypw" \ table wordcount export-dir /user/cloudera/HF.out

FROM wordcount AS t WHERE 1=0

12/08/08 21:39:43 INFO manager.SqlManager: Executing SQL statement:

SELECT t.*

FROM wordcount AS t WHERE 1=0

12/08/08 21:39:43 INFO orm.CompilationManager: HADOOP_HOME is

wordcount

12/08/08 21:39:45 INFO manager.SqlManager: Executing SQL statement:

SELECT t.*

FROM wordcount AS t WHERE 1=0

12/08/08 21:39:46 INFO input.FileInputFormat: Total input paths to process : 1 12/08/08 21:39:46 INFO input.FileInputFormat: Total input paths to process : 1

Trang 27

12/08/08 21:39:46 INFO mapred.JobClient: Running job:

job_201208081900_0012

12/08/08 21:39:47 INFO mapred.JobClient: map 0% reduce 0%

12/08/08 21:39:58 INFO mapred.JobClient: map 38% reduce 0%

12/08/08 21:40:00 INFO mapred.JobClient: map 64% reduce 0%

12/08/08 21:40:04 INFO mapred.JobClient: map 82% reduce 0%

12/08/08 21:40:07 INFO mapred.JobClient: map 98% reduce 0%

12/08/08 21:40:09 INFO mapred.JobClient: Task Id :

attempt_201208081900_0012_m_000000_0, Status : FAILED

12/08/08 21:40:11 INFO mapred.JobClient: map 0% reduce 0%

12/08/08 21:40:15 INFO mapred.JobClient: Task Id :

attempt_201208081900_0012_m_000000_1, Status : FAILED

at

com.cloudera.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:4

Trang 28

Task Id : attempt_201208081900_0012_m_000000_2, Status : FAILED

java.sql.SQLException: Unique constraint (informix.u169_821) violated

at

com.cloudera.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:40)

12/08/08 21:40:27 INFO mapred.JobClient: Counters: 7

12/08/08 21:40:27 INFO mapred.JobClient: Job Counters

12/08/08 21:40:27 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=38479 12/08/08 21:40:27 INFO mapred.JobClient:

Total time spent by all reduces waiting after reserving slots (ms)=0

12/08/08 21:40:27 INFO mapred.JobClient:

Total time spent by all maps waiting after reserving slots (ms)=0

12/08/08 21:40:27 INFO mapred.JobClient: Launched map tasks=4

12/08/08 21:40:27 INFO mapred.JobClient: Data-local map tasks=4

12/08/08 21:40:27 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=0

Trang 29

12/08/08 21:40:27 INFO mapred.JobClient: Failed map tasks=1

12/08/08 21:40:27 INFO mapreduce.ExportJobBase:

Transferred 0 bytes in 41.5758 seconds (0 bytes/sec)

12/08/08 21:40:27 INFO mapreduce.ExportJobBase: Exported 0 records 12/08/08 21:40:27 ERROR tool.ExportTool: Error during export: Export job failed!

# despite the errors above, rows are inserted into the wordcount table

# one row is missing

# the retry and duplicate key exception are most likely related, but

# troubleshooting will be saved for a later article

# check how we did

# nothing like a "here document" shell script

$ dbaccess stores_demo - <<eoj

> select count(*) from wordcount;

# here is the db2 syntax

# create a destination table for db2

Ngày đăng: 22/02/2014, 15:20

HÌNH ẢNH LIÊN QUAN

Hình 2. Các thiết lập BIOS cho một khách ảo 64bit - Tài liệu Big Data nguồn mở, Phần 1: Hướng dẫn Hadoop: Tạo ứng dụng Hello World với Java, Pig, Hive, Flume, Fuse, Oozie và Sqoop với Informix, DB2 và MySQL ppt
Hình 2. Các thiết lập BIOS cho một khách ảo 64bit (Trang 6)
Hình 3. Ảnh ảo Cloudera - Tài liệu Big Data nguồn mở, Phần 1: Hướng dẫn Hadoop: Tạo ứng dụng Hello World với Java, Pig, Hive, Flume, Fuse, Oozie và Sqoop với Informix, DB2 và MySQL ppt
Hình 3. Ảnh ảo Cloudera (Trang 8)
Hình 4. Thêm bộ nhớ RAM cho máy ảo - Tài liệu Big Data nguồn mở, Phần 1: Hướng dẫn Hadoop: Tạo ứng dụng Hello World với Java, Pig, Hive, Flume, Fuse, Oozie và Sqoop với Informix, DB2 và MySQL ppt
Hình 4. Thêm bộ nhớ RAM cho máy ảo (Trang 9)
Hình 5. Thay đổi các thiết lập mạng thành bridged - Tài liệu Big Data nguồn mở, Phần 1: Hướng dẫn Hadoop: Tạo ứng dụng Hello World với Java, Pig, Hive, Flume, Fuse, Oozie và Sqoop với Informix, DB2 và MySQL ppt
Hình 5. Thay đổi các thiết lập mạng thành bridged (Trang 10)
Hình 6. Trang web ví dụ mẫu của Hadoop - Tài liệu Big Data nguồn mở, Phần 1: Hướng dẫn Hadoop: Tạo ứng dụng Hello World với Java, Pig, Hive, Flume, Fuse, Oozie và Sqoop với Informix, DB2 và MySQL ppt
Hình 6. Trang web ví dụ mẫu của Hadoop (Trang 17)
Hình 7. Khám phá HDFS bằng một trình duyệt - Tài liệu Big Data nguồn mở, Phần 1: Hướng dẫn Hadoop: Tạo ứng dụng Hello World với Java, Pig, Hive, Flume, Fuse, Oozie và Sqoop với Informix, DB2 và MySQL ppt
Hình 7. Khám phá HDFS bằng một trình duyệt (Trang 20)
Hình 8. Trình quản lý Cloudera quản lý Các dịch vụ Hadoop - Tài liệu Big Data nguồn mở, Phần 1: Hướng dẫn Hadoop: Tạo ứng dụng Hello World với Java, Pig, Hive, Flume, Fuse, Oozie và Sqoop với Informix, DB2 và MySQL ppt
Hình 8. Trình quản lý Cloudera quản lý Các dịch vụ Hadoop (Trang 21)
Hình 10. Giao diện người dùng đồ họa (GUI) Beeswax của Hue cho Hive, xem  truy vấn Hiveql - Tài liệu Big Data nguồn mở, Phần 1: Hướng dẫn Hadoop: Tạo ứng dụng Hello World với Java, Pig, Hive, Flume, Fuse, Oozie và Sqoop với Informix, DB2 và MySQL ppt
Hình 10. Giao diện người dùng đồ họa (GUI) Beeswax của Hue cho Hive, xem truy vấn Hiveql (Trang 41)
Hình 11. Giao diện người dùng đồ họa (GUI) Beeswax của Hue, xem kết quả của - Tài liệu Big Data nguồn mở, Phần 1: Hướng dẫn Hadoop: Tạo ứng dụng Hello World với Java, Pig, Hive, Flume, Fuse, Oozie và Sqoop với Informix, DB2 và MySQL ppt
Hình 11. Giao diện người dùng đồ họa (GUI) Beeswax của Hue, xem kết quả của (Trang 42)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w