Xử lý dữ liệu phân tán bằng Hadoop, Phần 2: Đi xa hơn nữa

Cài đặt và cấu hình một cụm có nhiều nút

Bài báo đầu tiên trong loạt bài này cho biết cách sử dụng Hadoop trong một cụm nút đơn. Bài viết này vẫn tiếp tục với một thiết lập nâng cao hơn, sử dụng nhiều nút để xử lý song song. Bài này trình bày các kiểu nút khác nhau cần thiết cho các cụm có nhiều nút và tìm hiểu chức năng của MapReduce trong một môi trường song song. Bài viết này cũng đi sâu vào các khía cạnh quản lý của Hadoop—theo cả hai dòng lệnh và dựa vào Web.

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.

Sức mạnh thực sự của kiến trúc điện toán phân tán Hadoop nằm ở sự phân tán của nó. Nói cách khác, khả năng phân tán công việc tới nhiều nút song song cho phép Hadoop mở rộng đến cơ sở hạ tầng lớn và, tương tự như vậy, xử lý một lượng dữ liệu lớn. Bài viết này bắt đầu bằng việc phân chia của một kiến trúc Hadoop phân tán và sau đó tìm hiểu cấu hình phân tán và cách sử dụng.

Kiến trúc Hadoop phân tán

Nhớ lại từ Phần 1 của loạt bài này là tất cả các trình tiện ích (daemon) Hadoop đã chạy trên cùng một máy chủ. Mặc dù không sử dụng tính chất song song của Hadoop, cấu hình giả phân tán này cho phép dễ dàng thử nghiệm các tính năng của Hadoop với thiết lập tối thiểu. Bây giờ, hãy tìm hiểu tính chất song song của Hadoop khi sử dụng một cụm các máy.

Từ Phần 1, cấu hình Hadoop quy định rằng tất cả các trình tiện ích Hadoop chạy trên một nút duy nhất. Vì vậy, trước tiên chúng ta hãy xem xét Hadoop được phân phối tự nhiên cho hoạt động song song như thế nào. Trong một thiết lập Hadoop phân tán, bạn sẽ có một nút chủ và một số các nút tớ (xem Hình 1).

Hình 1. Phân chia nút chủ và nút tớ của Hadoop
Phân chia nút chủ và nút tớ của Hadoop

Như trong Hình 1, nút chủ bao gồm các nút tên (namenode), nút tên thứ cấp và các trình tiện ích của trình theo dõi công việc (jobtracker) (được gọi là các trình tiện ích chủ). Ngoài ra, đây là nút để từ đó bạn quản lý cụm cho các mục đích của cuộc trình diễn này (bằng cách sử dụng tiện ích và trình duyệt Hadoop). Các nút tớ bao gồm trình theo dõi tác vụ (tasktracker) và nút dữ liệu (datanode) (được gọi là các trình tiện ích tớ). Sự khác biệt của việc thiết lập này là nút chủ chứa các trình tiện ích cung cấp việc quản lý và kết hợp cụm Hadoop, ở đó nút tớ chứa các trình tiện ích triển khai thực hiện các hàm lưu trữ cho hệ thống tệp Hadoop (HDFS) và chức năng MapReduce (chức năng xử lý dữ liệu).

Với cuộc trình diễn này, bạn tạo một nút chủ và hai nút tớ đặt trên một mạng LAN. Thiết lập này được thể hiện trong Hình 2. Bây giờ, chúng ta hãy tìm hiểu việc cài đặt Hadoop để phân phối cho nhiều nút và cấu hình của nó.

Hình 2. Cấu hình cụm Hadoop
Cấu hình cụm Hadoop

Để đơn giản hóa việc triển khai, bạn sử dụng công nghệ ảo hóa, cung cấp một số lợi thế. Mặc dù có thể không có lợi về hiệu năng trong việc thiết lập này, nhưng nhờ sử dụng ảo hóa, có thể tạo ra một cài đặt Hadoop và sau đó nhân bản nó cho các nút khác. Vì lý do này, cụm Hadoop của bạn nên xuất hiện như sau đây, khi chạy các nút chủ và tớ như các máy ảo (VM) trong bối cảnh của một lớp ảo hóa (hypervisor) trên một máy chủ duy nhất (xem Hình 3).

Hình 3. Cấu hình cụm Hadoop trong một môi trường ảo
Cấu hình cụm Hadoop trong một môi trường ảo

Nâng cấp Hadoop

Trong Phần 1, bạn đã cài đặt một bản phân phối riêng cho Hadoop, chạy trên một nút đơn (cấu hình-giả). Trong bài này, bạn cập nhật cho một cấu hình phân tán. Nếu bạn mới bắt đầu loạt bài này ở đây, hãy đọc qua Phần 1 để cài đặt cấu hình-giả Hadoop trước tiên.

Trong cấu hình-giả này, bạn đã không đặt cấu hình, do tất cả mọi thứ đã được cấu hình sẵn cho một nút đơn. Bây giờ, bạn cần cập nhật cho cấu hình này. Đầu tiên, hãy kiểm tra cấu hình hiện tại bằng cách sử dụng lệnh update-alternatives như trong Liệt kê 1. Lệnh này cho bạn biết cấu hình này là gì khi sử dụng conf.pseudo (ưu tiên cao nhất).

Liệt kê 1. Kiểm tra cấu hình Hadoop hiện tại
$ update-alternatives --display hadoop-0.20-conf
hadoop-0.20-conf - status is auto.
 link currently points to /etc/hadoop-0.20/conf.pseudo
/etc/hadoop-0.20/conf.empty - priority 10
/etc/hadoop-0.20/conf.pseudo - priority 30
Current `best' version is /etc/hadoop-0.20/conf.pseudo.
$

Tiếp theo, tạo một cấu hình mới bằng cách sao chép một một cấu hình đang tồn tại (trong trường hợp này là conf.empty, như trong Liệt kê 1):

$ sudo cp -r /etc/hadoop-0.20/conf.empty /etc/hadoop-0.20/conf.dist
$

Cuối cùng, kích hoạt và kiểm tra cấu hình mới:

Liệt kê 2. Kích hoạt và kiểm tra cấu hình Hadoop
$ sudo update-alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf \ 
      /etc/hadoop-0.20/conf.dist 40
$ update-alternatives --display hadoop-0.20-conf
hadoop-0.20-conf - status is auto.
 link currently points to /etc/hadoop-0.20/conf.dist
/etc/hadoop-0.20/conf.empty - priority 10
/etc/hadoop-0.20/conf.pseudo - priority 30
/etc/hadoop-0.20/conf.dist - priority 40
Current `best' version is /etc/hadoop-0.20/conf.dist.
$

Bây giờ, bạn có một cấu hình mới gọi là conf.dist để bạn sử dụng cho cấu hình phân tán mới. Trong giai đoạn này, khi chạy trong một môi trường ảo hóa, bạn sao chép nút này thành hai nút bổ sung để dùng như là các nút dữ liệu.


Cấu hình Hadoop cho hoạt động phân tán

Bước tiếp theo là tạo ra tất cả các nút giống nhau. Bạn làm việc này trong các tệp /etc/hadoop-0.20/conf.dist có tên là mastersslaves. Ba nút trong ví dụ này được gán cho các địa chỉ IP tĩnh, như được hiển thị ở đây (từ /etc/hosts):

Liệt kê 3. Các nút Hadoop cho thiết lập này (/etc/hosts)
master 192.168.108.133
slave1 192.168.108.134
slave2 192.168.108.135

Vì vậy, trên nút chủ, bạn cập nhật /etc/hadoop-0.20/conf.dist/masters để xác định nút chủ, nó xuất hiện như sau:

master

và sau đó xác định các nút tớ trong /etc/hadoop-0.20/conf.dist/slaves, trong đó có hai dòng như sau:

slave1
slave2

Tiếp theo, từ mỗi nút, kết nối qua Secure Shell (ssh) đến mỗi nút trong số các nút khác để bảo đảm rằng ssh không cần mật khẩu đang hoạt động. Mỗi một trong các tệp (masters, slaves) được Hadoop sử dụng để bắt đầu và dừng các tiện ích mà bạn đã sử dụng trong Phần 1 của loạt bài này.

Tiếp theo, tiếp tục với cấu hình Hadoop-cụ thể trong thư mục con /etc/hadoop-0.20/conf.dist. Những thay đổi sau đây là cần thiết trên tất cả các nút (một nút chủ và hai nút tớ), theo như tài liệu Hadoop định nghĩa. Đầu tiên, xác định nút chủ HDFS trong tệp core-site.xml (Liệt kê 4), trong đó định nghĩa máy chủ và cổng của nút tên (lưu ý việc sử dụng địa chỉ IP của nút chủ). Tệp core-site.xml định nghĩa các đặc tính lõi của Hadoop.

Liệt kê 4. Định nghĩa nút chủ HDFS trong tệp core-site.xml
<configuration>

  <property>
    <name>fs.default.name<name>
    <value>hdfs://master:54310<value>
    <description>The name and URI of the default FS.</description>
  <property>

<configuration>

Tiếp theo, xác định trình theo dõi công việc của MapReduce. Trình theo dõi công việc này có thể tồn tại trên nút riêng của nó, nhưng với cấu hình này, hãy đặt nó trên nút chủ như trong Liệt kê 5. Các tệp mapred-site.xml chứa các đặc tính MapReduce.

Liệt kê 5. Định nghĩa trình theo dõi công việc của MapReduce trong tệp mapred-site.xml
<configuration>

  <property>
    <name>mapred.job.tracker<name>
    <value>master:54311<value>
    <description>Map Reduce jobtracker<description>
  <property>

<configuration>

Cuối cùng, xác định các yếu tố bản sao mặc định (Liệt kê 6). Giá trị này xác định số lượng các bản sao sẽ được tạo và thường không lớn hơn ba. Trong trường hợp này, bạn xác định nó là 2 (số các nút dữ liệu của bạn). Giá trị này được định nghĩa trong tệp hdfs-site.xml, trong tệp đó có chứa các đặc tính HDFS.

Liệt kê 6. Định nghĩa bản sao mặc định cho dữ liệu trong tệp hdfs-site.xml
<configuration>

  <property>
    <name>dfs.replication<name>
    <value>2<value>
    <description>Default block replication<description>
  <property>

<configuration>

Các mục cấu hình được hiển thị trong Liệt kê 4, Liệt kê 5, và Liệt kê 6) là các phần tử cần thiết để thiết lập phân tán của bạn. Hadoop cung cấp một số lượng lớn các tùy chọn cấu hình ở đây, chúng cho phép bạn điều chỉnh toàn bộ môi trường. Phần Tài nguyên cung cấp thêm nhiều thông tin về những thứ sẵn có.

Với cấu hình của bạn đã hoàn thành, bước tiếp theo là định dạng nút tên của bạn (nút chủ HDFS). Với hoạt động này, hãy sử dụng tiện ích hadoop-0.20, xác định nút tên và hoạt động (-format):

Liệt kê 7. Định dạng nút tên
user@master:~# sudo su -
root@master:~# hadoop-0.20 namenode -format
10/05/11 18:39:58 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = master/127.0.1.1
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 0.20.2+228
STARTUP_MSG:   build =  -r cfc3233ece0769b11af9add328261295aaf4d1ad; 
************************************************************/
10/05/11 18:39:59 INFO namenode.FSNamesystem: fsOwner=root,root
10/05/11 18:39:59 INFO namenode.FSNamesystem: supergroup=supergroup
10/05/11 18:39:59 INFO namenode.FSNamesystem: isPermissionEnabled=true
10/05/11 18:39:59 INFO common.Storage: Image file of size 94 saved in 0 seconds.
10/05/11 18:39:59 INFO common.Storage: 
  Storage directory /tmp/hadoop-root/dfs/name has been successfully formatted.
10/05/11 18:39:59 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/127.0.1.1
************************************************************/
root@master:~#

Với nút tên của bạn được định dạng, đây là lúc khởi động trình tiện ích của Hadoop. Bạn làm việc này giống như với cấu hình giả-phân tán của bạn trước đây trong Phần 1, trừ quá trình này thực hiện cùng công việc cho một cấu hình phân tán. Lưu ý ở đây là mã này khởi động nút tên và nút tên thứ cấp (như được biểu thị bằng lệnh jps):

Liệt kê 8. Khởi động nút tên
root@master:~# /usr/lib/hadoop-0.20/bin/start-dfs.sh
starting namenode, logging to 
  /usr/lib/hadoop-0.20/bin/../logs/hadoop-root-namenode-mtj-desktop.out
192.168.108.135: starting datanode, logging to 
  /usr/lib/hadoop-0.20/bin/../logs/hadoop-root-datanode-mtj-desktop.out
192.168.108.134: starting datanode, logging to 
  /usr/lib/hadoop-0.20/bin/../logs/hadoop-root-datanode-mtj-desktop.out
192.168.108.133: starting secondarynamenode, 
  logging to /usr/lib/hadoop-0.20/logs/hadoop-root-secondarynamenode-mtj-desktop.out
root@master:~# jps
7367 NameNode
7618 Jps
7522 SecondaryNameNode
root@master:~#

Nếu bây giờ bạn kiểm tra một trong các nút tớ (các nút dữ liệu) bằng cách sử dụng lệnh jps, bạn sẽ thấy rằng có một trình tiện ích của nút dữ liệu hiện đang tồn tại trên mỗi nút:

Liệt kê 9. Kiểm tra nút dữ liệu trên một trong các nút tớ
root@slave1:~# jps
10562 Jps
10451 DataNode
root@slave1:~#

Bước tiếp theo là khởi động các trình tiện ích MapReduce (trình theo dõi công việc và trình theo dõi tác vụ). Bạn thực hiện việc này như trong Liệt kê 10. Lưu ý rằng kịch bản khởi động trình theo dõi công việc trên nút chủ (theo như cấu hình của bạn định nghĩa, xem Liệt kê 5) và các trình theo dõi tác vụ trên mỗi nút tớ. Một lệnh jps trên nút chủ cho thấy trình theo dõi công việc hiện đang chạy.

Liệt kê 10. Khởi động các trình tiện ích của MapReduce
root@master:~# /usr/lib/hadoop-0.20/bin/start-mapred.sh
starting jobtracker, logging to 
  /usr/lib/hadoop-0.20/logs/hadoop-root-jobtracker-mtj-desktop.out
192.168.108.134: starting tasktracker, logging to 
  /usr/lib/hadoop-0.20/bin/../logs/hadoop-root-tasktracker-mtj-desktop.out
192.168.108.135: starting tasktracker, logging to 
  /usr/lib/hadoop-0.20/bin/../logs/hadoop-root-tasktracker-mtj-desktop.out
root@master:~# jps
7367 NameNode
7842 JobTracker
7938 Jps
7522 SecondaryNameNode
root@master:~#

Cuối cùng, hãy kiểm tra một nút tớ bằng lệnh jps. Ở đây, bạn thấy rằng một trình tiện ích của trình theo dõi tác vụ đã nối trình tiện ích của nút dữ liệu tới mỗi nút dữ liệu tớ:

Liệt kê 11. Kiểm tra nút dữ liệu trên một trong các nút tớ
root@slave1:~# jps
7785 DataNode
8114 Jps
7991 TaskTracker
root@slave1:~#

Các mối quan hệ giữa các kịch bản khởi động, các nút và các trình tiện ích đã khởi động được thể hiện trong Hình 4. Như bạn thấy, kịch bản lệnh start-dfs khởi động các nút tên và các nút dữ liệu, ở đó kịch bản lệnh start-mapred khởi động một trình theo dõi công việc và các trình theo dõi tác vụ.

Hình 4. Mối quan hệ của các kịch bản lệnh khởi động và các trình tiện ích cho mỗi nút
Mối quan hệ của các kịch bản lệnh khởi động và các trình tiện ích cho mỗi nút

Thử nghiệm HDFS

Bây giờ Hadoop đã khởi động và đang chạy trên cụm của bạn, bạn có thể chạy một vài thử nghiệm để đảm bảo rằng nó hoạt động (xem Liệt kê 12). Đầu tiên, hãy đưa ra lệnh (fs) của hệ thống tệp qua tiện ích hadoop-0.20 và yêu cầu hoạt động df (đĩa trống). Như với Linux®, lệnh này chỉ đơn giản xác định khoảng không gian đã dùng hết và có sẵn cho thiết bị cụ thể. Vì vậy, với hệ thống tệp vừa được định dạng, bạn vẫn chưa sử dụng khoảng không gian nào. Tiếp theo, hãy thực hiện một hoạt động ls trên thư mục gốc của HDFS, tạo một thư mục con, danh sách nội dung của nó và gỡ bỏ nó. Cuối cùng, bạn có thể thực hiện lệnh fsck (kiểm tra tệp hệ thống) trên HDFS bằng cách sử dụng lệnh fsck trong tiện ích hadoop-0.20. Tất cả điều này cho bạn biết —cùng với nhiều thông tin khác (chẳng hạn như đã phát hiện có 2 nút dữ liệu)—rằng hệ thống tệp vẫn chạy tốt.

Liệt kê 12. Kiểm tra HDFS
root@master:~# hadoop-0.20 fs -df
File system		Size	Used	Avail		Use%
/		16078839808	73728	3490967552	0%
root@master:~# hadoop-0.20 fs -ls /
Found 1 items
drwxr-xr-x   - root supergroup          0 2010-05-12 12:16 /tmp
root@master:~# hadoop-0.20 fs -mkdir test
root@master:~# hadoop-0.20 fs -ls test
root@master:~# hadoop-0.20 fs -rmr test
Deleted hdfs://192.168.108.133:54310/user/root/test
root@master:~# hadoop-0.20 fsck /
.Status: HEALTHY
 Total size:	4 B
 Total dirs:	6
 Total files:	1
 Total blocks (validated):	1 (avg. block size 4 B)
 Minimally replicated blocks:	1 (100.0 %)
 Over-replicated blocks:	0 (0.0 %)
 Under-replicated blocks:	0 (0.0 %)
 Mis-replicated blocks:		0 (0.0 %)
 Default replication factor:	2
 Average block replication:	2.0
 Corrupt blocks:		0
 Missing replicas:		0 (0.0 %)
 Number of data-nodes:		2
 Number of racks:		1

The filesystem under path '/' is HEALTHY
root@master:~#

Thực hiện một công việc MapReduce

Bước tiếp theo là thực hiện một công việc MapReduce (Ánh xạ Rút gọn) để xác nhận rằng toàn bộ thiết lập của bạn đang hoạt động đúng (xem Liệt kê 13). Bước đầu tiên của quá trình này là đưa ra một số dữ liệu. Vì vậy, hãy bắt đầu bằng cách tạo một thư mục để chứa dữ liệu đầu vào của bạn (gọi là input), bạn làm việc này bằng cách sử dụng tiện ích hadoop-0.20 bằng lệnh tạo thư mục mkdir. Rồi, sử dụng lệnh put của tiện ích hadoop-0.20 để đặt hai tệp vào HDFS. Bạn có thể kiểm tra các nội dung của thư mục đầu vào bằng cách sử dụng lệnh ls của tiện ích Hadoop.

Liệt kê 13. Tạo dữ liệu đầu vào
root@master:~# hadoop-0.20 fs -mkdir input
root@master:~# hadoop-0.20 fs -put \ 
                /usr/src/linux-source-2.6.27/Doc*/memory-barriers.txt input
root@master:~# hadoop-0.20 fs -put \ 
                /usr/src/linux-source-2.6.27/Doc*/rt-mutex-design.txt input
root@master:~# hadoop-0.20 fs -ls input
Found 2 items
-rw-r--r--  2 root supergroup  78031 2010-05-12 14:16 /user/root/input/memory-barriers.txt
-rw-r--r--  2 root supergroup  33567 2010-05-12 14:16 /user/root/input/rt-mutex-design.txt
root@master:~#

Tiếp theo, bắt đầu công việc MapReduce đếm từ (wordcount). Như trong mô hình giả-phân tán, bạn chỉ định thư mục con đầu vào của bạn (trong đó có chứa các tệp đầu vào) và thư mục kết quả đầu ra (vẫn chưa có nhưng sẽ được nút tên tạo ra và nằm cùng với dữ liệu kết quả):

Liệt kê 14. Chạy công việc đếm từ MapReduce trên cụm
root@master:~# hadoop-0.20 jar \ 
                /usr/lib/hadoop-0.20/hadoop-0.20.2+228-examples.jar wordcount input output
10/05/12 19:04:37 INFO input.FileInputFormat: Total input paths to process : 2
10/05/12 19:04:38 INFO mapred.JobClient: Running job: job_201005121900_0001
10/05/12 19:04:39 INFO mapred.JobClient:  map 0% reduce 0%
10/05/12 19:04:59 INFO mapred.JobClient:  map 50% reduce 0%
10/05/12 19:05:08 INFO mapred.JobClient:  map 100% reduce 16%
10/05/12 19:05:17 INFO mapred.JobClient:  map 100% reduce 100%
10/05/12 19:05:19 INFO mapred.JobClient: Job complete: job_201005121900_0001
10/05/12 19:05:19 INFO mapred.JobClient: Counters: 17
10/05/12 19:05:19 INFO mapred.JobClient:   Job Counters 
10/05/12 19:05:19 INFO mapred.JobClient:     Launched reduce tasks=1
10/05/12 19:05:19 INFO mapred.JobClient:     Launched map tasks=2
10/05/12 19:05:19 INFO mapred.JobClient:     Data-local map tasks=2
10/05/12 19:05:19 INFO mapred.JobClient:   FileSystemCounters
10/05/12 19:05:19 INFO mapred.JobClient:     FILE_BYTES_READ=47556
10/05/12 19:05:19 INFO mapred.JobClient:     HDFS_BYTES_READ=111598
10/05/12 19:05:19 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=95182
10/05/12 19:05:19 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=30949
10/05/12 19:05:19 INFO mapred.JobClient:   Map-Reduce Framework
10/05/12 19:05:19 INFO mapred.JobClient:     Reduce input groups=2974
10/05/12 19:05:19 INFO mapred.JobClient:     Combine output records=3381
10/05/12 19:05:19 INFO mapred.JobClient:     Map input records=2937
10/05/12 19:05:19 INFO mapred.JobClient:     Reduce shuffle bytes=47562
10/05/12 19:05:19 INFO mapred.JobClient:     Reduce output records=2974
10/05/12 19:05:19 INFO mapred.JobClient:     Spilled Records=6762
10/05/12 19:05:19 INFO mapred.JobClient:     Map output bytes=168718
10/05/12 19:05:19 INFO mapred.JobClient:     Combine input records=17457
10/05/12 19:05:19 INFO mapred.JobClient:     Map output records=17457
10/05/12 19:05:19 INFO mapred.JobClient:     Reduce input records=3381
root@master:~#

Bước cuối cùng là tìm hiểu dữ liệu đầu ra. Vì bạn đã chạy công việc đếm từ MapReduce rồi, nên kết quả chỉ có một tệp (được rút gọn từ các tệp ánh xạ đã xử lý). Tệp này chứa một danh sách các bộ dữ liệu đại diện cho các từ được tìm thấy trong các tệp đầu vào và số lần chúng xuất hiện trong tất cả các tệp đầu vào:

Liệt kê 15. Kiểm tra kết quả đầu ra của công việc MapReduce
root@master:~# hadoop-0.20 fs -ls output
Found 2 items
drwxr-xr-x   - root supergroup          0 2010-05-12 19:04 /user/root/output/_logs
-rw-r--r--   2 root supergroup      30949 2010-05-12 19:05 /user/root/output/part-r-00000
root@master:~# 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
root@master:~#

Các giao diện quản lý Web

Mặc dù tiện ích hadoop-0.20 rất linh hoạt và phong phú, những đôi khi sử dụng Giao diện người dùng đồ họa (GUI) để thay thế lại thuận tiện hơn. Bạn có thể đính kèm nút tên cho việc kiểm tra hệ thống tệp thông qua http://master:50070 và tới trình theo dõi công việc qua GUI. Thông qua nút tên, bạn có thể kiểm tra HDFS, như trong Hình 5, ở đây bạn kiểm tra thư mục đầu vào (trong đó chứa dữ liệu đầu vào của bạn—xem lại từ Liệt kê 13).

Hình 5. Kiểm tra HDFS qua nút tên
Kiểm tra HDFS qua nút tên

Thông qua trình theo dõi công việc, bạn có thể kiểm tra các công việc đang chạy hay đã hoàn thành rồi. Trong Hình 6, bạn có thể thấy việc kiểm tra của công việc cuối cùng của bạn (từ Liệt kê 14). Hình này cho thấy các dữ liệu khác nhau được phát ra như kết quả đầu ra cho yêu cầu tư liệu Java (JAR) ngoài trạng thái và số lượng các nhiệm vụ. Lưu ý ở đây là hai nhiệm vụ ánh xạ được thực hiện (một cho mỗi tệp đầu vào) và một nhiệm vụ rút gọn (để rút gọn hai đầu vào ánh xạ).

Hình 6. Kiểm tra trạng thái của một công việc đã hoàn thành
Kiểm tra trạng thái của một công việc đã hoàn thành

Cuối cùng, bạn có thể kiểm tra trạng thái của các nút dữ liệu của bạn thông qua nút tên. Trang chủ của nút tên xác định số nút đang hoạt động (live) và nút không còn hoạt động nữa (như là các liên kết) và cho phép bạn kiểm tra chúng thêm nữa. Trang được hiển thị trong Hình 7 cho thấy các nút dữ liệu đang hoạt động của bạn ngoài các số liệu thống kê cho mỗi nút dữ liệu.

Hình 7. Kiểm tra trạng thái của các nút dữ liệu đang hoạt động
Kiểm tra trạng thái của các nút dữ liệu đang hoạt động

Có thể có nhiều khung nhìn khác nhau thông qua các giao diện Web của nút tên và trình theo dõi công việc, nhưng để cho ngắn gọn, bộ mẫu này được hiển thị. Trong các trang Web của nút tên và trình theo dõi công việc, bạn sẽ tìm thấy một số các liên kết sẽ dẫn bạn tới các thông tin bổ sung về cấu hình và hoạt động của Hadoop (bao gồm cả các bản ghi nhật ký thời gian chạy).


Đi xa hơn nữa

Trong bài này, bạn đã thấy một cấu hình phân tán-giả từ Cloudera có thể được chuyển đổi thành một cấu hình phân tán hoàn toàn như thế nào. Lạ thật, chỉ cần một vài bước cùng với một giao diện giống nhau cho các ứng dụng MapReduce đã làm cho Hadoop trở thành một công cụ có ích duy nhất để xử lý phân tán. Ngoài ra thật thú vị để tìm hiểu khả năng mở rộng của Hadoop. Bằng cách thêm vào các nút dữ liệu mới (cùng với việc cập nhật các tệp XML và các tệp tớ của chúng trong nút chủ), bạn có thể dễ dàng mở rộng Hadoop ngay cả trong các mức xử lý song song cao hơn. Phần 3, bài đăng cuối cùng trong loạt bài về Hadoop, sẽ tìm hiểu cách phát triển một ứng dụng MapReduce cho Hadoop.

Tài nguyên

Học tập

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

  • Hadoop được phát triển thông qua Quỹ phần mềm Apache.
  • Đánh giá các sản phẩm IBM theo cách phù hợp nhất cho với bạn: hãy tải về một bản dùng thử sản phẩm, hãy thử một sản phẩm trực tuyến, sử dụng một sản phẩm trong một môi trường đám mây hoặc dành một vài giờ trong SOA Sandbox để tìm hiểu cách triển khai thực hiện có hiệu quả kiến trúc hướng dịch vụ (SOA-Service Oriented Architecture).

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ở, Công nghệ Java
ArticleID=646772
ArticleTitle=Xử lý dữ liệu phân tán bằng Hadoop, Phần 2: Đi xa hơn nữa
publish-date=04152011