Cài đặt và sử dụng Hadoop (II)
+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)