Chuẩn bị:
+Cài đặt Vmware Workstation, máy ảo ubuntu và cài vmware tools
+Vm–>Settings–>chọn như hình sau:
Trong hình SharedCloud là thư mục dùng chung của hệ điều hành của bạn và Ubuntu. Ubuntu sẽ tìm thấy folder SharedCloud trong /mnt/hgfs/
+Cài đặt ssh:
$ sudo apt-get install ssh
+Cài đặt Java: download jdk-6u23-linux-i586.bin đặt trong thư mục dùng chung (SharedCloud)
$ cd /usr/java
$ /mnt/hgfs/SharedCloud/jdk-6u23-linux-i586.bin
+Cài đặt Hadoop: download hadoop-0.19.2.tar.gz đặt trong SharedCloud
$ tar –zxvf /mnt/hgfs/SharedCloud/hadoop-0.19.2.tar.gz
NB: phiên bản hadoop-0.21.0.tar.gz ko có gói ví dụ sắp được tiến hành trong bài này
+Edit conf/hadoop-env.sh: có thể dùng Text editor có sẵn trong Ubuntu hoặc dùng lệnh nano conf/hadoop-env.sh để sửa lại theo đường dẫn cài đặt của java
export JAVA_HOME=/usr/java/jdk1.6.0_23 (nhớ bỏ dấu # đầu câu)
Tiến hành:
Hadoop cung cấp 3 cách hoạt động, thí nghiệm này dùng ví dụ sẵn có WordCount(thống kê tổng cộng tần số xuất hiện của từng chữ trong nhiều file) để minh họa cho 3 mô hình
+Chạy trên 1 máy (Single Node):
$ cd hadoop-0.19.2
$ mkdir input
$ cd input
$ echo “hello world”>text1.txt
$ echo “hello hadoop”>text2.txt
$ cd
$ bin/hadoop jar hadoop-0.19.2-examples.jar wordcount input ouput
$ cat output/*
+Phân bố giả(Pseudo-Distributed)
Cách này mô phỏng theo ứng dụng thật của Hadoop bằng cách tạo ra nhiều process (NameNode, DataNode, JobTracker, TaskTracker, Secondary NameNode) chạy trên cùng 1 máy.
Sửa file conf/hadoop-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
Tạo cặp mật mã :
$ ssh-keygen –t rsa
Sau đó cứ nhấn enter liên tiếp.
$ cd .ssh
$ cp id_rsa.pub authorized_keys
$ ssh localhost
$ cd
Chạy ví dụ:
$ bin/hadoop namenode –format
$ bin/start-all.sh
Có thể mở internet explorer ra xem trạng thái của distributed file system tại http://localhost:50070, của Jobtracker tại http://localhost:50030, của TaskTracker tại http://localhost:50060
Chạy tiếp các lệnh sau:
$ bin/hadoop fs –put input in
$ bin/hadoop jar hadoop-0.19.2-examples.jar wordcount in out
$ bin/hadoop fs –cat out/*
Kết thúc tất cả process:
$ bin/stop-all.sh
Notes:
Khi tạo new folder nếu báo lỗi không đủ quyền thì có thể đặt sudo trước lệnh tạo.
Để ý chữ thường hay chữ hoa, ví dụ bạn gõ sai thành bin/hadoop NameNode –format thì luôn báo lỗi
+Phân bố hoàn toàn (fully-distributed)
Cài thêm 2 máy ảo (ubuntu), cài gói java, sửa hostname lại thành ubuntu1, ubuntu2, ubuntu3
$ sudo hostname ubuntu1
$ sudo gedit /etc/hostname
Ubuntu1 sẽ làm NameNode, sửa file /etc/hosts theo địa chỉ ip của các máy:
127.0.0.1 localhost
192.168.1.31 ubuntu1
192.168.1.32 ubuntu2
192.168.1.33 ubuntu3
Máy ubuntu2 và ubuntu3 làm DataNode, cũng sửa /etc/hosts lại
127.0.0.1 localhost
192.168.1.31 ubuntu1
192.168.1.32 ubuntu2
127.0.0.1 localhost
192.168.1.31 ubuntu1
192.168.1.33 ubuntu3
Tạo user tên grid trên 3 máy:
$ useradd –m grid
$ passwd grid
Trên 3 máy đều tạo folder ssh
$ mkdir .ssh
Trên ubuntu1 tạo cặp mật mã và copy sang 2 máy còn lại
$ ssh-keygen –t rsa
$ cd .ssh
$ cp id_rsa.pub authorized_keys
$ scp authorized_keys ubuntu2:/home/grid/.ssh
$ scp authorized_keys ubuntu3:/home/grid/.ssh
Trên 3 máy
$ chmod 644 authoried_keys
Config hadoop
Trên ubuntu1
$ tar –zxvf /mnt/hgfs/SharedCloud/hadoop-0.19.2.tar.gz
Sửa đường dẫn Java trong conf/hadoop-env.sh lại cho đúng
Sửa file conf/hadoop-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://ubuntu1:9000</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>ubutu1:9001</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
Sửa conf/master với nội dung ubuntu1; conf/slaves với nội dung ubuntu2 và ubuntu3
Copy hadoop từ ubuntu1 sang 2 máy còn lại:
$ scp –r hadoop-0.19.2 ubuntu2:/home/grid
$ scp –r hadoop-0.19.2 ubuntu3:/home/grid
Nếu các máy ubuntu2 và ubuntu3 sử dụng java có version khác với ubuntu1 hoặc cài java ở thư mục khác thì phải sửa lại conf/hadoop-env.sh cho phù hợp
Chạy hadoop
$ bin/hadoop namenode –format
$ bin/start-all.sh
Tạo folder input chứa 2 file như phần trước
$ bin/hadoop dfs –put input in
$ bin/hadoop jar hadoop-0.19.2-examples.jar wordcount in out
$ bin/hadoop dfs –cat out/*
Kết thúc
$ bin/stop-all.sh
Notes:
1/Sau khi start-all, bạn có thể xem status của hệ thống tại http://ubuntu1:50070, http://ubuntu1:50030
2/Khi muốn format lại NameNode thì làm như sau:
Dùng bin/stop-all.sh
Xóa folder HADOOP_HOME/tmp
Format lại NameNode
Khởi động lại
3/Sau khi start-all nhưng không kết nối được trang http://ubuntu1:50070, chứng tỏ NameNode chưa được khởi động đúng, nếu dùng lệnh stop-all thì báo là no namenode to stop, cần khởi động lại lần nữa
4/Khi dùng lệnh bin/hadoop dfs -put input in thì báo lỗi could only be replicated to 0 nodes, instead of 1, mở http://ubuntu1:50070 thì thấy livenodes: 0 (livenodes trường hợp này phải là 2 mới đúng), format lại NameNode có thể khắc phục lỗi này (nhưng không phải lúc nào cũng thành công).
5/Qua thí nghiệm nhận thấy, lệnh start-all thường không khởi động đầy đủ 5 processes (như 2 lỗi 3/ và 4/), trường hợp này có thể dùng bổ sung 2 lệnh
bin/start-dfs.sh (khởi động NameNode và DataNode)
bin/start-mapred.sh (khởi động JobTracker và TaskTracker)