Hướng dẫn cài đặt Hadoop

Setup Hadoop
Setup Hadoop

Hadoop được hỗ trợ bởi nền tảng GNU/Linux và hoạt động tốt trên môi trường này. Vì vậy, chúng ta phải sử dụng hệ điều hành Linux để cài đặt Hadoop. Trong trường hợp bạn có một hệ điều hành khác Linux, bạn có thể sử dụng phần mềm VirtualBox để cài hệ điều hành Linux (bài viết sử dụng Ubuntu 14.04 LTS).

Trước khi cài đặt

Trước khi cài đặt Hadoop trong môi trường Linux, ta cần thiết lập Linux bằng cách sử dụng ssh (Secure Shell) thông qua các bước sau.

Tạo một User

Đầu tiên, ta cần tạo một tài khoản riêng dành cho Hadoop để tách biệt Hadoop file system với Unix file system. Ta thực hiện các bước sau để tạo một user:

  • Truy cập quyền root bằng lệnh “su”.
  • Tạo một user từ root account bằng lệnh “useradd username”, “passwd hadoop”.
  • Bây giờ ta có thể sử dụng user vừa mới tạo bằng lệnh “su username”.

Mở Linux terminal và nhập các lệnh sau để tạo một user.

$ su
password:
# useradd hadoop
# passwd hadoop
New passwd:
Retype new passwd
authentication failure
authentication failure

Nếu bạn gặp lỗi truy xuất quyền Root. Lý do root account mặc định bị vô hiệu hóa bởi Ubuntu, vì vậy root không có password, cho nên lệnh su bị lỗi truy cập quyền Root. Ta có thể khắc phục qua câu lệnh sau

lucky@lucky-pc:~$ sudo -i
[sudo] password for lucky:
root@lucky-pc:~# useradd hadoop
root@lucky-pc:~# passwd hadoop
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Truy xuất tài khoản thành công

root@lucky-pc:~# su hadoop
hadoop@lucky-pc:/root$

Thiết lập SSH và phát sinh Key

SSH đòi hỏi được thiết lập để thực hiện các thao tác khác nhau trên cluster như start, stop, hay phân tán các lệnh daemon shell. Để xác thực user khác nhau trên Hadoop, ta cần cung cấp thông tin cặp khóa public/private cho Hadoop user.

Đầu tiên, ta phát sinh cặp key/value bằng SSH (ta giữ các giá trị mặc định bằng cách nhấn Enter).

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/lucky/.ssh/id_rsa):
Created directory '/home/lucky/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/lucky/.ssh/id_rsa.
Your public key has been saved in /home/lucky/.ssh/id_rsa.pub.
The key fingerprint is:
ab:e4:49:f4:d5:ea:25:0d:c3:6e:b6:46:db:c8:40:67 lucky@lucky-pc
The key's randomart image is:
+--[ RSA 2048]----+
|       .E..      |
|.  .   ... +     |
|... . o o o .    |
| +.  . = o       |
| o+.  . S .      |
|o.++..   .       |
|..oo.            |
|                 |
|                 |
+-----------------+

Copy public key id_rsa.pub vào authorized_keys, và phân quyền read/write cho owner của authorized_keys đó.

linux permission
linux permission
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

Xem thêm về lệnh cat.

Xem thêm về phân quyền trên linux.

Trước khi phân quyền
-rw-rw-r-- 1 lucky lucky 396 Sep 12 09:23 authorized_keys

Sau khi phân quyền
-rw------- 1 lucky lucky 396 Sep 12 09:23 authorized_keys

Cài đặt Java

Java là điều kiện tiên quyết để cài đặt Hadoop. Trước hết, bạn nên kiểm tra java đã có trong hệ thống của bạn hay chưa bằng lệnh:

$ java -version

Nếu java đã được cài đặt, bạn sẽ nhận được thông báo bên dưới

java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

Nếu java chưa được cài đặt, bạn có thể xem hướng dẫn cài đặt tại đây.

Download Hadoop

Download và giải nén hadoop-2.7.1 (tìm phiên bản mới nhất tại đây) từ Apache software foundation, sau đó đổi tên thư mục thành hadoop qua các dòng lệnh sau.

$ su
password:
# cd /usr/local
# wget http://apache.claz.org/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz
# tar xzf hadoop-2.7.1.tar.gz
# mv hadoop-2.7.1 hadoop
# exit

Các chế độ hoạt động trong Hadoop

Sau khi download Hadoop, ta có thể quản lý Hadoop cluster qua một trong ba chế độ sau:

  • Local/Standalone Mode : mặc định, Hadoop được thiết lập ở chế độ standalone có thể chạy tiến trình java đơn (single java process).
  • Pseudo Distributed Mode : chế độ mô phỏng phân tán trên máy tính đơn. Mỗi Hadoop daemon như hdfs, yarn, MapReduce, sẽ chạy như một tiến trình java riêng biệt. Chế độ này rất hữu ích cho giai đoạn development.
  • Fully Distributed Mode : chế độ phân tán thực tế trên ít nhất từ hai hay nhiều các máy trạm (cluster). Ta sẽ đi chi tiết hơn về chế độ này ở các bài viết sau.

Cài đặt Hadoop ở chế độ Standalone

Trong phần này, ta sẽ nói về việc cài đặt Hadoop 2.7.1 trong chế độ standalone. Ở chế độ này, các Hadoop daemon sẽ không chạy, thay vì vậy mọi tiến trình đều được thực hiện trong một JVM (máy ảo Java) duy nhất.

Chế độ standalone phù hợp khi chạy các tác vụ MapReduce trong quá trình development. Do mọi thứ đều dễ dàng test và debug.

Cài đặt Hadoop

Ta thiết lập biến môi trường cho Hadoop vào file ~/.bashrc.

export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin

Trước khi tiếp tục, ta nên kiểm tra Hadoop đã hoạt động hay chưa. Ta load lại file .bashrc và kiểm tra hadoop qua dòng lệnh sau.

$ source .bashrc
$ hadoop version

Nếu mọi thứ đều hoạt động, ta sẽ nhận được thông báo bên dưới

Hadoop 2.7.1
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 15ecc87ccf4a0228f35af08fc56de536e6ce657a
Compiled by jenkins on 2015-06-29T06:04Z
Compiled with protoc 2.5.0
From source with checksum fc0a1a23fc1868e4d5ee7fa2b28a58a
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.7.1.jar

Điều này có nghĩa là chế độ standalone của Hadoop đã hoạt động. Mặc định, Hadoop được thiết lập để chạy chế độ không phân tán (non-distributed) trên một máy đơn.

Chạy một ví dụ

Hãy kiểm tra một ví dụ đơn giản của Hadoop. Bộ cài đặt Hadoop cung cấp các ví dụ về MapReduce ở dạng các file jar, thực thi các chức năng cơ bản của MapReduce như tính số Pi, đếm số lượng từ với danh sách các file cho trước.

$ cd $HADOOP_HOME/share/hadoop/mapreduce/
$ ls
hadoop-mapreduce-client-app-2.7.1.jar
hadoop-mapreduce-client-common-2.7.1.jar
hadoop-mapreduce-client-core-2.7.1.jar
hadoop-mapreduce-client-hs-2.7.1.jar
hadoop-mapreduce-client-hs-plugins-2.7.1.jar
hadoop-mapreduce-client-jobclient-2.7.1.jar
hadoop-mapreduce-client-jobclient-2.7.1-tests.jar
hadoop-mapreduce-client-shuffle-2.7.1.jar
hadoop-mapreduce-examples-2.7.1.jar
lib
lib-examples
sources

Ta tiến hành chạy thử ví dụ trong file hadoop-mapreduce-examples-2.7.1.jar. File này chứa các mã thực thi MapReduce, có chức năng đếm số lượng từ khi cho trước tập các file văn bản.

Bước 1

Ta tạo một thư mục input chứa các file văn bản *.txt. Ví dụ, tôi tạo một thư mục input ngoài Desktop để dễ theo dõi.

$ cd ~/Desktop
$ mkdir input
$ cp $HADOOP_HOME/*.txt input
$ ls -l input/
total 24
-rw-r--r-- 1 lucky lucky 15429 Sep 12 14:30 LICENSE.txt
-rw-r--r-- 1 lucky lucky 101 Sep 12 14:30 NOTICE.txt
-rw-r--r-- 1 lucky lucky 1366 Sep 12 14:30 README.txt

Các file này được copy từ thư mục cài đặt của Hadoop.

Bước 2

Ta bắt đầu chạy tác vụ đếm số lượng từ Hadoop cung cấp với thư mục chứa tập văn bản là input.

$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount input output

Bước 3

Bước 2 sẽ thực hiện các thao tác xử lý cần thiết và lưu kết quả vào file output/part-r00000, ta có thể kiểm tra kết quả trả về.

$cat output/*

Ta sẽ có danh sách các từ trong văn bản kèm theo là số lượng mà chương trình đếm được.

"AS" 4
"Contribution" 1
"Contributor" 1
"Derivative" 1
"Legal" 1
"License" 1
"License" 1
"Licensor" 1
"NOTICE" 1
"Not" 1
"Object" 1
"Source" 1
"Work" 1
"You" 1
"Your" 1
"[]" 1
"control" 1
"printed" 1
"submitted" 1
"50%" 1
"BIS", 1
"C" 1
"Don't" 1
"ECCN" 1
("NCLUDING" 2
.............

Cài đặt Hadoop ở chế độ Pseudo Distributed

Ta thực hiện các bước sau để cài đặt Hadoop ở chế độ Pseudo Distributed

Bước 1: Thiết lập Hadoop

Ta thiết lập biến môi trường cho Hadoop bằng cách thêm các dòng lệnh sau vào file ~/.bashrc.

export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_INSTALL=$HADOOP_HOME
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

Ta cập nhật tất cả các thay đổi vào hệ thống đang chạy. Lưu ý, mọi thiết lập biến môi trường đều thực hiện dưới quyền root, đăng nhập bằng lệnh su.

$ source ~/.bashrc

Bước 2: Cấu hình Hadoop

Ta có thể tìm thấy tất cả các file cấu hình của Hadoop trong thư mục $HADOOP_HOME/etc/hadoop. Ta cần thay đổi các thông số cấu hình tùy theo cơ sở hạn tầng Hadoop mà bạn đang có.

$ cd $HADOOP_HOME/etc/hadoop
$ ls
capacity-scheduler.xml httpfs-env.sh mapred-env.sh
configuration.xsl httpfs-log4j.properties mapred-queues.xml.template
container-executor.cfg httpfs-signature.secret mapred-site.xml.template
core-site.xml httpfs-site.xml slaves
hadoop-env.cmd kms-acls.xml ssl-client.xml.example
hadoop-env.sh kms-env.sh ssl-server.xml.example
hadoop-metrics2.properties kms-log4j.properties yarn-env.cmd
hadoop-metrics.properties kms-site.xml yarn-env.sh
hadoop-policy.xml log4j.properties yarn-site.xml
hdfs-site.xml mapred-env.cmd

Để phát triển ứng dụng Hadoop với Java, ta cần reset biến môi trường java trong file hadoop-env.sh bằng cách thay giá trị ${JAVA_HOME} của JAVA_HOME bằng vị trí thư mục hệ thống java hiện tại.

# The java implementation to use.
export JAVA_HOME=/usr/local/jdk

Sau đây là danh sách các file cần hiệu chỉnh để cấu hình Hadoop.

core-site.xml

File này chứa thông tin như port number sử dụng cho Hadoop instance, cấp phát bộ nhớ cho hệ thống file, giới hạn bộ nhớ để lưu trữ dữ liệu, và kích thước của bộ đệm Read/Write.

Mở file core-site.xml và thêm các thuộc tính sau vào giữa thẻ ,

fs.default.name
hdfs://localhost:9000

hdfs-site.xml

File này chứa thông tin như giá trị của dữ liệu sao chép, đường dẫn namenode, và đường dẫn datanode của hệ thống file cục bộ hiện tại. Nghĩa là nơi bạn muốn lưu trữ cơ sở hạ tầng của Hadoop.

Giả sử ta có các thông tin sau.

dfs.replication (data replication value) = 1
(In the below given path /hadoop/ is the user name.
hadoopinfra/hdfs/namenode is the directory created by hdfs file system.)
namenode path = //home/hadoop/hadoopinfra/hdfs/namenode
(hadoopinfra/hdfs/datanode is the directory created by hdfs file system.)
datanode path = //home/hadoop/hadoopinfra/hdfs/datanode

Mở file này ra và thêm các thuộc tính vào giữa thẻ ,

dfs.replication
1

dfs.name.dir
file:///home/hadoop/hadoopinfra/hdfs/namenode

dfs.data.dir
file:///home/hadoop/hadoopinfra/hdfs/datanode

Lưu ý: Các cấu hình trên là do người dùng định nghĩa, ta có thể thay đổi giá trị trên tùy theo ý muốn của mình.

yarn-site.xml

File này được dùng để cấu hình yarn vào Hadoop. Mở file yarn-site.xml và thêm các thuộc tính vào giữa thẻ , .

yarn.nodemanager.aux-services
mapreduce_shuffle

mapred-site.xml

File này dùng để xác định MapReduce framework nào bạn đang sử dụng. Mặc định, Hadoop chứa template file yarn-site.xml. Trước hết, ta cần sao chép file từ mapred-site.xml.template sang mapred-site.xml bằng dòng lệnh sau.

$ cp mapred-site.xml.template mapred-site.xml

Mở file mapred-site.xml và thêm các thuộc tính vào giữa thẻ , .

mapreduce.framework.name
yarn

Kiểm tra việc cài đặt Hadoop

Ta thực hiện các bước sau để kiểm tra việc cài đặt Hadoop

Bước 1: Cài đặt Name Node

Cài đặt namenode bằng câu lệnh “hdfs namenode -format” như sau.

$ cd ~
$ hdfs namenode -format

Kết quả mong đợi trả về bên dưới.

15/09/12 16:10:00 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = lucky-pc/127.0.1.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 2.7.1
...
...
15/09/12 16:10:01 INFO common.Storage: Storage directory /home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted.
15/09/12 16:10:02 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
15/09/12 16:10:02 INFO util.ExitUtil: Exiting with status 0
15/09/12 16:10:02 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at lucky-pc/127.0.1.1
************************************************************/

Bước 2: Kiểm tra Hadoop dfs

Dòng lệnh sau dùng để start dfs. Thực thi dòng lệnh này sẽ khởi động hệ thống file Hadoop.

$ start-dfs.sh

Kết quả mong đợi như bên dưới:

15/09/12 16:47:03
Starting namenodes on [localhost]
localhost: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-lucky-pc.out
localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-lucky-pc.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-lucky-pc.out

Nếu bạn gặp lỗi Connection refused

Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.
Starting namenodes on []
localhost: ssh: connect to host localhost port 22: Connection refused
localhost: ssh: connect to host localhost port 22: Connection refused
Starting secondary namenodes [0.0.0.0]
0.0.0.0: ssh: connect to host 0.0.0.0 port 22: Connection refused**

Trường hợp này có thể do ssh service không hoạt động trên máy của bạn. Các file script như start-all.sh, stop-all.sh, start-dfs.sh cần ssh hoạt động. Nên ta cần cài đặt open-ssh lên server bằng dòng lệnh bên dưới.

$ sudo apt-get install openssh-server
$ sudo /etc/init.d/ssh restart

Ta kiểm tra ssh service có hoạt động hay không

netstat -tulpn | grep 22
tcp 0 0 0.0.0.0:<strong>22</strong> 0.0.0.0:* LISTEN 1<strong>22</strong>16/sshd
tcp6 0 0 :::<strong>22</strong> :::* LISTEN 1<strong>22</strong>16/sshd

Bước 3: Kiểm tra Yarn Script

Dòng lệnh bên dưới dùng để khởi động yarn script. Thực thi dòng lệnh này sẽ khởi động yarn daemons.

$ start-yarn.sh

Kết quả mong đợi hiển thị bên dưới.

starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-root-resourcemanager-lucky-pc.out
localhost: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-lucky-pc.out

Bước 4: Truy cập Hadoop qua trình duyệt web

Port number mặc định để truy cập Hadoop là 50070. Dùng địa chỉ url sau để truy cập Hadoop trên trình duyệt web.

http://localhost:50070/
Accessing Hadoop
Accessing Hadoop

Bước 5: Kiểm tra tất cả các ứng dụng cho Cluster

Port number mặc định để truy cập tất cả các ứng dụng cho cluster là 8088. Sử dụng địa chỉ url sau để truy cập vào service này.

http://localhost:8088/
Accessing all applications for cluster
Accessing all applications for cluster

Nguồn: http://www.tutorialspoint.com/hadoop/hadoop_enviornment_setup.htm

Xem cách cài đặt Hadoop chỉ qua 3 cú nhấp chuột.

9 thoughts on “Hướng dẫn cài đặt Hadoop

  1. Hi anh,
    Em đã cài đặt như theo hướng dẫn của anh nhưng đến bước cài đặt môi trường thì nó lỗi như thế này ạ. Em chưa có kinh nghiẹm làm trên Linux (em cài cho CentOS 7) nên mong anh thông cảm ạ.

    [root@localhost local]# export JAVA_HOME=/usr/local/jdk
    [root@localhost local]# export JRE_HOME=$JAVA_HOME/jre
    [root@localhost local]# export HADOOP_HOME=/usr/local/hadoop
    [root@localhost local]# export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin
    [root@localhost local]# source .bashrc
    bash: .bashrc: No such file or directory

    Em cảm ơn a nhiều,

    Like

    1. hi em, em thực hiện các bước sau:
      1)
      cd ~ # để về thư mục gốc
      vi .bashrc # để tạo file .bashrc nếu chưa có, cửa sổ của vim sẽ hiện ra

      2)
      paste các đoạn code trên vào file .bashrc
      nhấn phím Esc, gõ ‘:x’ sau đó Enter để lưu thông tin (có thể dùng nano hoặc editor nào khác nếu em chưa quen dùng vim)

      3)
      source .bashrc # để load lại biến môi trường vừa thêm vào.

      Like

  2. Chào Anh, em làm như anh rồi mà không hiểu lỗi gì mong anh giúp đỡ, em xin cám ơn
    lucky@ubuntu:~$ ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/lucky/.ssh/id_rsa): Created directory ‘/home/lucky/.ssh’
    Created directory ‘/home/lucky/.ssh’.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    open Created directory ‘/home/lucky/.ssh’ failed: No such file or directory.
    Saving the key failed: Created directory ‘/home/lucky/.ssh’.
    lucky@ubuntu:~$

    Like

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s