Xử lý dữ liệu phân tán bằng Hadoop, Phần 1: Khởi đầu

Cài đặt và cấu hình một cụm đơn giản

Bài viết này—bài đầu tiên trong loạt bài về Hadoop—tìm hiểu khung công tác Hadoop, bao gồm các phần tử cơ bản của nó, như hệ thống tệp Hadoop (HDFS) và các kiểu nút được dùng phổ biến. Tìm hiểu cách cài đặt và cấu hình một cụm (cluster) Hadoop chỉ có một nút và đi sâu nghiên cứu ứng dụng MapReduce. Cuối cùng, khám phá các cách để theo dõi và quản lý Hadoop bằng cách sử dụng các giao diện Web lõi của nó.

M. Tim Jones, Tác giả độc lập, Emulex

M. Tim Jones author photoM. Tim Jones là một kiến trúc sư chương trình cơ sở nhúng và là tác giả của Trí tuệ nhân tạo (AI): Một cách tiếp cận hệ thống, lập trình ứng dụng GNU/Linux (bây giờ là ấn bản thứ hai của nó), lập trình ứng dụng AI (ấn bản thứ hai của nó), và lập trình các ngăn BSD (BSD Sockets) từ một quan điểm đa ngôn ngữ. Nền tảng kỹ thuật của ông trải rộng từ việc phát triển các nhân chương trình (kernel) cho vệ tinh địa tĩnh đến kiến trúc các hệ thống nhúng và phát triển giao thức kết nối mạng. Ông là một kỹ sư tư vấn của Emulex Corp tại Longmont, Colorado.



15 04 2011

Kết nối với Tim

Tim là một trong những tác giả viết nhiều và nổi tiếng nhất của chúng tôi. Hãy duyệt tất cả các bài viết của Tim trên developerWorks. Xem tiểu sử của Tim và kết nối với anh ta, các tác giả khác và các độc giả cùng tham gia trong My developerWorks.

Mặc dù Hadoop là lõi thu gọn dữ liệu cho một số các máy tìm kiếm lớn nhất, tốt hơn là mô tả như là một khung công tác để xử lý dữ liệu phân tán. Và không chỉ có dữ liệu, mà còn rất nhiều dữ liệu, khi cần đến các máy tìm kiếm và dữ liệu đã duyệt mà chúng thu thập. Là một khung công tác phân tán, Hadoop làm lợi cho nhiều ứng dụng từ việc xử lý dữ liệu song song.

Bài viết này không có ý giới thiệu cho bạn về Hadoop và kiến trúc của nó mà đúng hơn là chỉ trình bày cách thiết lập Hadoop đơn giản. Trong phần Tài nguyên, bạn có thể tìm thêm nhiều chi tiết về kiến trúc, các thành phần và lý thuyết hoạt động của Hadoop. Vì lý do đó, chúng ta hãy đi ngay vào việc cài đặt và cấu hình Hadoop.

Thiết lập ban đầu

Nguồn gốc của Hadoop

Dự án Hadoop của Apache được gợi ý và phát triển từ công việc trước đây của Google. Mặc dù Google nắm giữ bằng sáng chế cho phương pháp xử lý dữ liệu quy mô lớn này, nên họ đã hào phóng cấp giấy phép cho Hadoop. Xem phần Tài nguyên để biết thêm nhiều chi tiết.

Với phần trình bày này, chúng ta sử dụng bản phân phối Hadoop của Cloudera. Bạn sẽ được hỗ trợ về một loạt các bản phân phối Linux® khác ở đó, vì vậy thật lý tưởng để bắt đầu.

Bài viết này trước tiên giả định rằng hệ thống của bạn đã cài đặt công nghệ Java™ ((bản phát hành tối thiểu là 1.6) và cURL. Nếu chưa có, trước hết bạn cần phải bổ sung thêm những thứ đó (xem phần Tài nguyên để biết thêm thông tin về việc cài đặt này).

Vì đang chạy trên Ubuntu (bản phát hành Intrepid), nên tôi sử dụng tiện ích apt để lấy bản phân phối Hadoop. Quá trình này khá đơn giản và cho phép tôi lấy các gói mã nhị phân mà không cần thêm các chi tiết tải về và xây dựng nguồn. Đầu tiên, tôi nói với apt về trang Web Cloudera. Rồi tôi tạo một tệp mới trong /etc/apt/sources.list.d/cloudera.list và thêm đoạn văn bản sau đây:

deb http://archive.cloudera.com/debian intrepid-cdh3 contrib
deb-src http://archive.cloudera.com/debian intrepid-cdh3 contrib

Nếu bạn đang chạy bản phát hành Jaunty hoặc bản phát hành khác, chỉ cần thay thế intrepid bằng tên của bản phát hành cụ thể của bạn (sự hỗ trợ hiện nay bao gồm Hardy, Intrepid, Jaunty, Karmic và Lenny).

Tiếp theo, tôi lấy khóa-apt từ Cloudera để xác nhận hợp lệ gói phần mềm đã tải về:

$ curl -s http://archive.cloudera.com/debian/archive.key | \
sudo apt-key add - sudo apt-get update

Rồi cài đặt Hadoop cho một cấu hình giả phân tán (tất cả các trình tiện ích của Hadoop chạy trên một máy chủ):

$ sudo apt-get install hadoop-0.20-conf-pseudo
$

Lưu ý rằng cấu hình này cần khoảng 23MB (chưa kể các gói phần mềm apt khác bất kỳ đã kéo về mà chưa hiện ra). Việc cài đặt này là lý tưởng để làm việc với Hadoop và tìm hiểu về các phần tử và các giao diện của nó.

Cuối cùng, tôi thiết lập SSH chưa có mật khẩu. Nếu bạn cố gắng sử dụng ssh localhost và cụm từ mật khẩu cần thiết, bạn sẽ cần phải thực hiện các bước sau đây. Tôi giả định rằng đây là một hộp Hadoop chuyên dụng, do bước này có một vài sự ngầm định về bảo mật (xem Liệt kê 1).

Liệt kê 1. Thiết lập với SSH-chưa có mật khẩu
$ sudo su -
# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

Một lưu ý cuối cùng là bạn cần phải đảm bảo rằng máy chủ của bạn có đủ dung lượng lưu trữ cho nút dữ liệu (bộ nhớ đệm). Bộ nhớ không đủ rất dễ nhận thấy (như các lỗi cho biết không có khả năng sao chép lại một nút).


Khởi động Hadoop

Bây giờ, bạn đã sẵn sàng để khởi động Hadoop, cách làm hiệu quả là bạn khởi động từng trình tiện ich (daemon) của Hadoop. Nhưng trước tiên, hãy định dạng Hệ thống tệp Hadoop (HDFS) của bạn bằng cách sử dụng lệnh hadoop. Lệnh hadoop có một số cách sử dụng, chúng ta sẽ tìm hiểu ngay một số trong các cách sử dụng đó.

Trước tiên, yêu cầu nút tên (namenode) định dạng tệp hệ thống DFS. Bạn làm điều này như là một phần của việc cài đặt, nhưng thật có ích để biết việc này khi bạn cần tạo một hệ thống tệp sạch.

# hadoop-0.20 namenode -format

Sau khi nhận được yêu cầu, hệ thống tệp sẽ được định dạng và trả về một số thông tin. Tiếp theo, khởi động các trình tiện ích của Hadoop. Hadoop khởi động năm trình tiện ích trong cấu hình giả phân tán này: nút tên (namenode), nút tên thứ cấp, nút dữ liệu (datanode), trình theo dõi công việc (jobtracker ) và trình theo dõi tác vụ (tasktracker ). Khi một trong các trình tiện ích đã được khởi động, bạn sẽ thấy một số lượng nhỏ văn bản được phát ra cho mỗi một trình tiện ích (xác định nơi lưu trữ các bản ghi nhật ký của nó). Mỗi trình tiện ích đang được khởi động để chạy ở chế độ nền (như là một trình tiện ích). Hình 1 minh họa nút giả phân tán ngay khi việc khởi động hoàn tất.

Hình 1. Cấu hình Hadoop giả phân tán
Sơ đồ khối của cấu hình Hadoop giả phân tán

Hadoop cung cấp một số công cụ trình trợ giúp để đơn giản hóa việc khởi động của nó. Các công cụ này được phân loại khi bắt đầu (như start-dfs) và dừng lại (như stop-dfs). Kịch bản lệnh ngắn sau đây minh họa cách khởi động nút Hadoop:

# /usr/lib/hadoop-0.20/bin/start-dfs.sh
# /usr/lib/hadoop-0.20/bin/start-mapred.sh
#

Để xác minh rằng các trình tiện ích đang chạy, bạn có thể sử dụng lệnh jps (là một tiện ích ps cho các quá trình xử lý JVM). Lệnh này liệt kê năm trình tiện ích và các trình nhận dạng quá trình xử lý của chúng.

Bây giờ các trình tiện ích Hadoop đang chạy, chúng ta hãy xem xét lại chúng để giới thiệu xem mỗi trình tiện ích thực hiện cái gì trong khung công tác Hadoop. Nút tên (namenode) là các máy chủ chính trong Hadoop và quản lý vùng tên miền của hệ thống tệp và truy cập vào các tệp được lưu trữ trong cụm. Ngoài ra còn có một nút tên thứ cấp, không phải là một trình tiện ích dự phòng cho nút tên, nhưng cung cấp nhiệm vụ xác định điểm kiểm tra định kỳ và nhiệm vụ nội dịch để thay thế. Bạn sẽ tìm thấy một nút tên và một nút tên thứ cấp trong một cụm Hadoop.

Nút dữ liệu (datanode) quản lý lưu trữ được gắn vào một nút, trong đó có thể có nhiều nút trong một cụm. Mỗi nút lưu trữ dữ liệu sẽ có một trình tiện ích của nút dữ liệu đang chạy.

Cuối cùng, mỗi cụm sẽ có một trình theo dõi công việc (jobtracker) duy nhất chịu trách nhiệm bố trí công việc tại các nút dữ liệu và một trình theo dõi tác vụ (tasktracker) cho mỗi nút dữ liệu để thực hiện các công việc thực tế. Trình theo dõi công việc và trình theo dõi tác vụ hoạt động theo một thỏa thuận chủ-tớ, ở đây trình theo dõi công việc phân phối công việc trên các nút dữ liệu còn trình theo dõi tác vụ thực hiện nhiệm vụ. Trình theo dõi công việc cũng xác nhận hợp lệ công việc cần thiết và nếu nút dữ liệu bị hỏng vì lý do nào đó thì bố trí lại nhiệm vụ trước đó.

Trong cấu hình đơn giản này, tất cả các nút chỉ nằm trên cùng một nút (xem Hình 1). Tuy nhiên, do thảo luận ở trên, thật dễ dàng để xem cách Hadoop tạo việc xử lý công việc song song. Mặc dù kiến trúc đơn giản, nhưng Hadoop tạo cách dễ dàng để phân phối dữ liệu, cân bằng tải và xử lý song song một lượng lớn dữ liệu theo khả năng chịu lỗi.


Kiểm tra Hệ thống tệp Hadoop (HDFS)

Bạn có thể thực hiện một vài thử nghiệm để đảm bảo rằng Hadoop đã khởi động và chạy bình thường (ít nhất là nút tên). Do biết rằng tất cả các quá trình của bạn có sẵn, bạn có thể sử dụng lệnh hadoop để kiểm tra vùng tên cục bộ (xem Liệt kê 2).

Liệt kê 2. Kiểm tra truy cập vào HDFS
# hadoop-0.20 fs -ls /
Found 2 items
drwxr-xr-x   - root supergroup          0 2010-04-29 16:38 /user
drwxr-xr-x   - root supergroup          0 2010-04-29 16:28 /var
#

Từ đó, bạn có thể thấy rằng nút tên đã chạy và có khả năng cung cấp vùng tên cục bộ. Lưu ý rằng bạn đang sử dụng một lệnh có tên là hadoop-0.20 để kiểm tra hệ thống tệp. Tiện ích này là cách bạn tương tác với cụm Hadoop, từ việc kiểm tra hệ thống tệp đến chạy các công việc trên cụm đó. Lưu ý cấu trúc lệnh sau: Sau khi chỉ ra tiện ích hadoop-0.20, bạn xác định một lệnh (trong trường hợp này, là shell của hệ thống tệp chung) và một hoặc nhiều tùy chọn (trong trường hợp này, bạn yêu cầu một danh sách tệp bằng cách sử dụng lệnh ls). Khi hadoop-0.20 là một trong các giao diện chính của bạn với cụm Hadoop, bạn sẽ thấy tiện ích này được sử dụng khá hơn một chút qua bài viết này. Liệt kê 3 cung cấp một số phép toán bổ sung của hệ thống tệp để bạn có thể tìm hiểu giao diện này thêm một chút nữa (tạo một thư mục con mới có tên là test, liệt kê nội dung của nó, rồi loại bỏ nó).

Liệt kê 3. Tìm hiểu thao tác hệ thống tệp trong Hadoop
# hadoop-0.20 fs -mkdir test
# hadoop-0.20 fs -ls test
# hadoop-0.20 fs -rmr test
Deleted hdfs://localhost/user/root/test
#

Thử nghiệm Hadoop

Bây giờ bạn đã cài đặt Hadoop và đã thử nghiệm giao diện cơ bản với hệ thống tệp của nó, đây là lúc thử nghiệm Hadoop trong một ứng dụng thực. Trong ví dụ này, bạn sẽ thấy quá trình MapReduce trên một tập dữ liệu nhỏ. Người ta đặt tên map (ánh xạ) và reduce (rút gọn) theo các hàm trong lập trình chức năng có cung cấp khả năng lõi cho việc rút gọn dữ liệu. Map liên quan đến quá trình cắt dữ liệu đầu vào thành một tập các vấn đề con nhỏ hơn để xử lý (trong đó các vấn đề con được phân phối cho các trình hoạt động song song). Reduce liên quan đến việc ráp lại các câu trả lời từ các vấn đề con thành một tập kết quả đầu ra. Lưu ý rằng tôi vẫn chưa định nghĩa xử lý có nghĩa là gì ở đây, do khung công tác cho phép bạn tự xác định việc này. MapReduce chính tắc là việc tính toán sự xuất hiện của từ trong một tập các tài liệu.

Qua thảo luận ở trên, bạn sẽ có một tập các đầu vào và một tập kết quả của các đầu ra. Bước đầu tiên là tạo một thư mục con đầu vào trong hệ thống tệp, trong đó bạn sẽ đặt công việc của mình. Bạn thực hiện việc này bằng cách sử dụng:

# hadoop-0.20 fs -mkdir input

Tiếp theo, đặt một số công việc vào thư mục con đầu vào. Trong trường hợp này, sử dụng lệnh put (đặt) để di chuyển một tệp từ hệ thống tệp cục bộ vào HDFS (xem Liệt kê 4). Lưu ý định dạng dưới đây, di chuyển tệp mã nguồn đến thư mục con HDFS (đầu vào). Sau khi thực hiện xong, bạn sẽ có hai tệp văn bản trong HDFS sẵn sàng để được xử lý.

Liệt kê 4. Di chuyển các tệp vào HDFS
# hadoop-0.20 fs -put /usr/src/linux-source-2.6.27/Doc*/memory-barriers.txt  input
# hadoop-0.20 fs -put /usr/src/linux-source-2.6.27/Doc*/rt-mutex-design.txt  input
#

Tiếp theo, bạn có thể kiểm tra sự có mặt của các tệp bằng cách sử dụng lệnh ls (xem Liệt kê 5).

Liệt kê 5. Kiểm tra các tệp trong HDFS
# hadoop-0.20 fs -ls input
Found 2 items
-rw-r--r--  1 root supergroup 78031 2010-04-29 17:35 /user/root/input/memory-barriers.txt
-rw-r--r--  1 root supergroup 33567 2010-04-29 17:36 /user/root/input/rt-mutex-design.txt 
#

Khi công việc của bạn đã chắc chắn ở trong HDFS, bạn có thể thực hiện hàm MapReduce. Hàm này này đòi hỏi một lệnh đơn nhưng yêu cầu trong một thời gian dài, như trong Liệt kê 6. Lệnh này yêu cầu thực hiện một tệp tư liệu JAR (Java Archive). Nó thực sự triển khai thực hiện một số khả năng, nhưng ví dụ này tập trung vào wordcount (đếm từ). Trình tiện ích của jobtracker yêu cầu nút dữ liệu thực hiện công việc MapReduce, tạo nên lượng kết quả đầu ra đáng kể (nhỏ hơn ở đây, vì bạn chỉ xử lý hai tệp). Nó cho thấy sự phát triển của các hàm map và reduce và sau đó cung cấp một số số liệu thống kê về vào/ra (I/O) cho cả hai hệ thống tệp và xử lý các bản ghi.

Liệt kê 6. Thực hiện một công việc MapReduce với tần suất từ (wordcount)
# hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-0.20.2+228-examples.jar \ 
    wordcount input output
10/04/29 17:36:49 INFO input.FileInputFormat: Total input paths to process : 2
10/04/29 17:36:49 INFO mapred.JobClient: Running job: job_201004291628_0009
10/04/29 17:36:50 INFO mapred.JobClient:  map 0% reduce 0%
10/04/29 17:37:00 INFO mapred.JobClient:  map 100% reduce 0%
10/04/29 17:37:06 INFO mapred.JobClient:  map 100% reduce 100%
10/04/29 17:37:08 INFO mapred.JobClient: Job complete: job_201004291628_0009
10/04/29 17:37:08 INFO mapred.JobClient: Counters: 17
10/04/29 17:37:08 INFO mapred.JobClient:   Job Counters 
10/04/29 17:37:08 INFO mapred.JobClient:     Launched reduce tasks=1
10/04/29 17:37:08 INFO mapred.JobClient:     Launched map tasks=2
10/04/29 17:37:08 INFO mapred.JobClient:     Data-local map tasks=2
10/04/29 17:37:08 INFO mapred.JobClient:   FileSystemCounters
10/04/29 17:37:08 INFO mapred.JobClient:     FILE_BYTES_READ=47556
10/04/29 17:37:08 INFO mapred.JobClient:     HDFS_BYTES_READ=111598
10/04/29 17:37:08 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=95182
10/04/29 17:37:08 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=30949
10/04/29 17:37:08 INFO mapred.JobClient:   Map-Reduce Framework
10/04/29 17:37:08 INFO mapred.JobClient:     Reduce input groups=2974
10/04/29 17:37:08 INFO mapred.JobClient:     Combine output records=3381
10/04/29 17:37:08 INFO mapred.JobClient:     Map input records=2937
10/04/29 17:37:08 INFO mapred.JobClient:     Reduce shuffle bytes=47562
10/04/29 17:37:08 INFO mapred.JobClient:     Reduce output records=2974
10/04/29 17:37:08 INFO mapred.JobClient:     Spilled Records=6762
10/04/29 17:37:08 INFO mapred.JobClient:     Map output bytes=168718
10/04/29 17:37:08 INFO mapred.JobClient:     Combine input records=17457
10/04/29 17:37:08 INFO mapred.JobClient:     Map output records=17457
10/04/29 17:37:08 INFO mapred.JobClient:     Reduce input records=3381

Với việc xử lý đã hoàn thành, hãy kiểm tra kết quả. Nhớ lại rằng xuất phát của công việc là tính toán số lần các từ xuất hiện trong các tệp đầu vào. Kết quả đầu ra này được phát ra như là một tệp của bộ dữ liệu, đại diện cho từ và số lần nó xuất hiện ở đầu vào. Bạn có thể sử dụng lệnh cat (sau khi tìm các tệp kết quả đầu ra cụ thể) thông qua tiện ích hadoop-0.20 để phát hành các dữ liệu này (xem Liệt kê 7).

Liệt kê 7. Xem lại kết quả đầu ra từ hoạt động đếm từ MapReduce
# hadoop-0.20 fs -ls /user/root/output
Found 2 items
drwxr-xr-x   - root supergroup          0 2010-04-29 17:36 /user/root/output/_logs
-rw-r--r--   1 root supergroup      30949 2010-04-29 17:37 /user/root/output/part-r-00000
#  
# hadoop-0.20 fs -cat output/part-r-00000 | head -13
!= 1
"Atomic 2
"Cache 2
"Control 1
"Examples 1
"Has 7
"Inter-CPU 1
"LOAD 1
"LOCK" 1
"Locking 1
"Locks 1
"MMIO 1
"Pending 5
#

Bạn cũng có thể trích xuất các tệp từ HDFS khi sử dụng tiện ích hadoop-0.20 (xem Liệt kê 8). Bạn làm điều này dễ dàng với tiện ích get (tương tự như put đã thực hiện ở trên để viết các tệp vào HDFS). Với phép toán get, hãy xác định một tệp trong HDFS để trích ra (từ thư mục con kết quả đầu ra của bạn) và tên tệp để viết vào hệ thống tệp cục bộ (output.txt).

Liệt kê 8. Trích xuất kết quả đầu ra từ HDFS
# hadoop-0.20 fs -get output/part-r-00000 output.txt
# cat output.txt | head -5
!= 1
"Atomic 2
"Cache 2
"Control 1
"Examples 1
#

Hãy xem một ví dụ khác khi dùng cùng một tệp JAR nhưng có cách sử dụng khác (ở đây, bạn sẽ tìm hiểu một grep song song). Đối với việc thử nghiệm này, hãy sử dụng các tệp đầu vào hiện có của bạn nhưng loại bỏ các thư mục con kết quả đầu ra để tạo lại nó cho thử nghiệm này:

# hadoop-0.20 fs -rmr output
Deleted hdfs://localhost/user/root/output

Tiếp theo, yêu cầu công việc MapReduce cho grep. Trong trường hợp này, grep được thực hiện song song (ánh xạ) và sau đó các kết quả grep được kết hợp lại (rút gọn). Liệt kê 9 cung cấp kết quả đầu ra cho mô hình sử dụng này (nhưng trong trường hợp này, một số kết quả đầu ra đã được lược bớt cho ngắn gọn). Lưu ý rằng yêu cầu lệnh ở đây, nơi mà yêu cầu của bạn là một grep lấy đầu vào từ thư mục con có tên là input (đầu vào) và đặt kết quả trong thư mục con có tên là output (đầu ra). Tham số cuối cùng là chuỗi mà bạn tìm kiếm (trong trường hợp này là 'kernel').

Liệt kê 9. Thực hiện một công việc MapReduce cho việc tìm kiếm từ (grep)
# hadoop-0.20 jar /usr/lib/hadoop/hadoop-0.20.2+228-examples.jar \ 
   grep input output 'kernel'
10/04/30 09:22:29 INFO mapred.FileInputFormat: Total input paths to process : 2
10/04/30 09:22:30 INFO mapred.JobClient: Running job: job_201004291628_0010
10/04/30 09:22:31 INFO mapred.JobClient:  map 0% reduce 0%
10/04/30 09:22:42 INFO mapred.JobClient:  map 66% reduce 0%
10/04/30 09:22:45 INFO mapred.JobClient:  map 100% reduce 0%
10/04/30 09:22:54 INFO mapred.JobClient:  map 100% reduce 100%
10/04/30 09:22:56 INFO mapred.JobClient: Job complete: job_201004291628_0010
10/04/30 09:22:56 INFO mapred.JobClient: Counters: 18
10/04/30 09:22:56 INFO mapred.JobClient:   Job Counters 
10/04/30 09:22:56 INFO mapred.JobClient:     Launched reduce tasks=1
10/04/30 09:22:56 INFO mapred.JobClient:     Launched map tasks=3
10/04/30 09:22:56 INFO mapred.JobClient:     Data-local map tasks=3
10/04/30 09:22:56 INFO mapred.JobClient:   FileSystemCounters
10/04/30 09:22:56 INFO mapred.JobClient:     FILE_BYTES_READ=57
10/04/30 09:22:56 INFO mapred.JobClient:     HDFS_BYTES_READ=113144
10/04/30 09:22:56 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=222
10/04/30 09:22:56 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=109
...
10/04/30 09:23:14 INFO mapred.JobClient:     Map output bytes=15
10/04/30 09:23:14 INFO mapred.JobClient:     Map input bytes=23
10/04/30 09:23:14 INFO mapred.JobClient:     Combine input records=0
10/04/30 09:23:14 INFO mapred.JobClient:     Map output records=1
10/04/30 09:23:14 INFO mapred.JobClient:     Reduce input records=1
#

Khi công việc hoàn thành, hãy kiểm tra thư mục đầu ra (để xác định tệp kết quả) và sau đó thực hiện một phép toán cat của hệ thống tệp để xem nội dung của nó (xem Liệt kê 10).

Liệt kê 10. Kiểm tra đầu ra của công việc MapReduce
# hadoop-0.20 fs -ls output
Found 2 items
drwxr-xr-x  - root supergroup    0 2010-04-30 09:22 /user/root/output/_logs
-rw-r--r--  1 root supergroup   10 2010-04-30 09:23 /user/root/output/part-00000
# hadoop-0.20 fs -cat output/part-00000
17 kernel
#

Các giao diện dựa trên Web

Bạn đã thấy cách kiểm tra việc HDFS, nhưng nếu bạn đang tìm kiếm thông tin về hoạt động của Hadoop, bạn sẽ tìm thấy các giao diện Web có ích. Hãy nhớ rằng ở trên cụm Hadoop là nút tên, trong đó quản lý HDFS. Bạn có thể tìm hiểu các chi tiết mức cao của hệ thống tệp này (như vùng không gian có sẵn và được sử dụng và các nút dữ liệu có sẵn) cũng như các công việc đang chạy qua http://localhost:50070. Bạn có thể nghiên cứu sâu hơn về trình theo dõi công việc (trạng thái công việc) thông qua http://localhost:50030. Lưu ý rằng trong cả hai trường hợp này, bạn tham chiếu localhost, vì tất cả trình tiện ích đang chạy trên cùng một máy chủ.


Đi xa hơn nữa

Bài viết này đã tìm hiểu việc cài đặt và cấu hình ban đầu của một cụm Hadoop (giả-phân tán) đơn giản (trong trường hợp này, khi sử dụng bản phân phối của Cloudera cho Hadoop). Tôi chọn bản phân phối cụ thể này vì nó đã đơn giản hóa việc cài đặt và cấu hình ban đầu của Hadoop. Bạn có thể tìm thấy một số bản phân phối khác cho Hadoop (bao gồm cả mã nguồn) tại apache.org. Xem phần Tài nguyên để biết thêm thông tin.

Nhưng điều gì sẽ xảy ra nếu bạn thiếu tài nguyên phần cứng để mở rộng cụm Hadoop của mình cho các nhu cầu cụ thể của bạn? Hóa ra Hadoop rất phổ biến, bạn có thể dễ dàng chạy nó trong các cơ sở hạ tầng điện toán đám mây khi sử dụng các máy ảo của Hadoop được dựng sẵn và các máy chủ cho thuê. Amazon cung cấp các AMI (Amazon Machine Images – Các hình ảnh của máy của Amazon) cũng như tính toán tài nguyên trong Amazon Elastic Compute Cloud (EC2 - Đám mây điện toán linh hoạt của Amazon). Ngoài ra, gần đây Microsoft đã công bố sự hỗ trợ sắp tới cho Hadoop trong nền tảng các dịch vụ Azure của Windows (Windows® Azure Services Platform).

Từ bài viết này, thật dễ dàng để xem cách Hadoop tiến hành tính toán phân tán đơn giản để xử lý các bộ dữ liệu lớn. Bài viết tiếp theo trong loạt bài này sẽ tìm hiểu cách cấu hình Hadoop trong một cụm có nhiều nút với các ví dụ bổ sung. Hẹn gặp lại bạn lần sau!

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

Thảo luận

  • Dành hết tâm trí cho cộng đồng My developerWorks. Kết nối với những người sử dụng developerWorks khác trong khi tìm hiểu các blog theo hướng nhà phát triển, các diễn đàn, các nhóm và các wiki.

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Nguồn mở
ArticleID=646764
ArticleTitle=Xử lý dữ liệu phân tán bằng Hadoop, Phần 1: Khởi đầu
publish-date=04152011