說明
配置單機的hadoop也有一些時間了,參考了許多的部落格,也做了好多的嘗試,最後終于成功了,這裡寫下自己配置過程中的步驟,隻要按照這個步驟來應該是不會有問題的。如果有問題可以回帖提問,樓主這裡已經解決了好多的遇到的問題。注:這裡的大多數操作時按照michael-noll的部落格來進行的。
這裡使用的hadoop是1.2.1其它版本的hadoop于此類似。下面開始進行配置:
Step1: 建立hadoop的使用者組和使用者名
~$ sudo addgroup hadoop
~$ sudo adduser - -ingroup hadoop hadoop
至此建立了hadoop使用者組和hadoop使用者名,下面讓hadoop使用者具有管理者的權限,修改 /etc/sudoers
~$ sudo vim /etc/sudoers
在root ALL=(ALL:ALL) ALL下添加hadoop ALL=(ALL:ALL) ALL
下面切換到hadoop使用者:
~$ su hadoop
Step2: 配置SSH
hadoop使用SSH進行通信,是以我們需要配置SSH,并且為了保證各節點在通路的過程中不需要手動輸入密碼,是以要配置SSH為無密碼。
SSH無密碼原理:master(namenode/jobtrack)作為用戶端,要實作無密碼公鑰認證,連接配接到伺服器slave(datanode/tasktracker)上時,需要在master上生成一個公鑰對,包括一個公鑰和一個私鑰,而後将公鑰複制到所有的slave上。當master通過SSH連接配接slave時,slave就會生成一個随機數并用master的公鑰對随機數進行加密,并發送給master。Master收到密鑰加密數之後再用私鑰解密,并将解密數回傳給slave,slave确認解密數無誤後就允許master進行連接配接了。這就是一個公鑰認證的過程,期間不需要使用者手工輸入密碼。重要過程是将用戶端master複制到slave上。
2.1 安裝SSH
通過下面的指令安裝ssh的伺服器,一般用戶端已經在ubuntu中安裝過了。
[email protected]:$ sudo apt-get install openssh-server
下面啟動并測試是否安裝成功: 出現如下表示安裝成功,然後進行無密碼的SSH的配置,因為部落格截圖上傳圖檔不友善是以在一起截了。
至此完成了無密碼的SSH配置。 需要說明的是,在
- [email protected]:~$ ssh-keygen -t rsa -P ""
的時候會将公鑰和密鑰儲存在 ~/.ssh/下面。
Step3 :配置JDK
3.1 安裝jdk
之是以配置jdk是因為hadoop後面的運作要用到java環境,ubuntu是自帶jdk的。但是這裡我自己又下載下傳了jdk并将它安裝在了/usr/java/ 目錄下。
在将jdk拷貝到相應的目錄下之後用下面的指令進行解壓
[email protected]:/usr/java$ ./jdk-6u45-linux-i586.bin
3.2 配置環境變量
java的環境變量可以在~/.bashrc中添加,也可以在~/.profile中添加,這其中的差別可以到網上去搜,這裡我們是在~/.profile 中添加:
[email protected]:/usr/java$ vim ~/.profile
在後面添加:
PATH=$PATH:$HOME/bin
export JAVA_HOME=/usr/java/jdk1.6.0_45
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
export CLASSPATH=$JAVA_HOME/lib:.
儲存退出;然後檢視效果
[email protected]:/usr/java$ source ~/.profile
[email protected]:/usr/java$ java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) Client VM (build 20.45-b01, mixed mode, sharing)
Step4 :配置hadoop
4.1 下載下傳安裝hadoop
這裡選的hadoop的版本是:1.2.1下載下傳位址是:http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-1.2.1/ 選擇hadoop-1.2.1-tar.gz進行下載下傳。
- [email protected]:/usr/local$ sudo tar xzf hadoop-1.1.2.tar.gz (注意,我已将hadoop-1.1.2.tar.gz拷貝到usr/local/hadoop,然後轉到hadoop使用者上)
- 下面是重命名hadoop-1.2.1為haoop,為了之後添加路徑友善
- [email protected]michaelnju:/usr/local$ sudo mv hadoop-1.1.2 /usr/local/hadoop
要確定所有的操作都是在使用者hadoop下完成的,是以将該hadoop檔案夾的屬主使用者設為hadoop
- [email protected]:/usr/local$ sudo chown -R hadoop:hadoop hadoop
4.2 配置hadoop
4.2.1 首先是配置 /usr/local/hadoop/conf/hadoop-env.sh
[email protected]:/usr/local/hadoop$ vim conf/hadoop-env.sh
在# The java implementation to use. Required.下面加入:
export JAVA_HOME=/usr/java/jdk1.6.0_45
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:/usr/local/hadoop/bin
儲存退出後運作:
[email protected]:/usr/local/hadoop$ source conf/hadoop-env.sh
讓配置生效,之後運作:
[email protected]:/usr/local/hadoop$ hadoop version
如果出現下面,表示hadoop配置成功。
Warning: $HADOOP_HOME is deprecated.
Hadoop 1.2.1
Subversion https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152
Compiled by mattf on Mon Jul 22 15:23:09 PDT 2013
From source with checksum 6923c86528809c4e7e6f493b6b413a9a
This command was run using /usr/local/hadoop/hadoop-core-1.2.1.jar
至此我們完成了單機hadoop的建立。
下面我們來進行單擊的測試,我在hadoop下建立了一個test_in/file1.txt和file2.txt
[email protected]:/usr/local/hadoop/test_in$ ll
總用量 16
drwxr-xr-x 2 hadoop hadoop 4096 4月 10 19:52 ./
drwxr-xr-x 19 hadoop hadoop 4096 4月 10 19:50 ../
-rw-r--r-- 1 root root 54 4月 10 19:52 file1.txt
-rw-r--r-- 1 root root 51 4月 10 19:52 file2.txt
之後用下面指令來執行,先是拷貝檔案到hdfs然後再執行wordcout,然後在再檢視結果
[email protected]:/usr/local/hadoop$ hadoop dfs -copyFromLocal ./test_in test_in
[email protected]:/usr/local/hadoop$ bin/hadoop jar hadoop-examples-1.2.1.jar wordcount test_in test_out
這裡的test_in 和test_out都是hdfs檔案系統,不能事先建立。
[email protected]:/usr/local/hadoop$ hadoop dfs -cat test_out/*
Warning: $HADOOP_HOME is deprecated.
good 2
hadoop 4
hahh 2
hello 4
is 2
michael 1
michel 1
world 2
下面的配置用來完成僞分布式的配置:
4.2.2 禁用IPV6
因為之前在配置的過程中,啟動時還有問題,最後是将IPV6手動關閉并重新開機之後才成功的,如果所在網絡沒有一IPV6,不需要設定,關閉的方式是進行如下編輯:
$ vim /etc/sysctl.conf
#disable ipv6後添加
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
然後重新開機電腦,檢視
$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
如果是1,表示已經關閉。
4.2.3 配置 conf/core-site.xml
core-site.xml是Hadoop Core的配置項,例如HDFS和MapReduce常用的I/O設定等。注意如果是hadoop2.2.X等版本的話,這些配置檔案的路徑是不一樣的,可自己到網上去搜尋路徑。
因為之前配置的時候建立的目錄是在Hadoop/tmp/檔案下,導緻最後運作hadoop的時候找不到namenode.進入logs/檔案檢視發現是目前目錄是inconsistent的,是以就将目錄建在/app/Hadoop/tmp下。
在配置core-site.xml的時候需要先建立目錄:
$ sudo mkdir -p /app/hadoop/tmp
$ sudo chown hadoop:hadoop /app/hadoop/tmp
#and if you want to tighten up security, chmod from 755 to 750...
$ sudo chmod 750 /app/hadoop/tmp
之後是:
had[email protected]:/usr/local/hadoop$ vim conf/core-site.xml
#将<configutation></configuration>之間修改為
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop/tmp</value>
</property>
儲存退出
4.2.4 配置 conf/mapred-site.xml
mapred-site.xml: MapReduce 守護程序的配置項,包括jobtracker和tasktracker。下面依次介紹配置過程。
[email protected]:/usr/local/hadoop$ vim conf/mapred-site.xml
<property
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
4.2.5 配置 conf/hdfs-site.xml
hdfs-site.xml:Hadoop 守護程序的配置項,包括namenode,輔助namenode和datanode等。
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
4.3 運作hadoop
下面我們來啟動hadoop。
首先是進行namenode的初始化工作:
[email protected]:/usr/local/hadoop$ bin/hadoop namenode -format
Warning: $HADOOP_HOME is deprecated.
14/04/10 12:43:59 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = michaelpc/127.0.1.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.2.1
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013
STARTUP_MSG: java = 1.6.0_45
************************************************************
之後是運作hadoop:
[email protected]:/usr/local/hadoop$ bin/start-all.sh
Warning: $HADOOP_HOME is deprecated.
starting namenode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hadoop-namenode-michaelpc.out
localhost: starting datanode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hadoop-datanode-michaelpc.out
localhost: starting secondarynamenode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hadoop-secondarynamenode-michaelpc.out
starting jobtracker, logging to /usr/local/hadoop/libexec/../logs/hadoop-hadoop-jobtracker-michaelpc.out
localhost: starting tasktracker, logging to /usr/local/hadoop/libexec/../logs/hadoop-hadoop-tasktracker-michaelpc.out
注意隻有下面的六個程序均運作才表示運作成功
[email protected]:/usr/local/hadoop$ jps
4490 DataNode
4858 TaskTracker
4345 NameNode
4634 SecondaryNameNode
4923 Jps
4716 JobTracker
到此我們完成了僞分布式的搭建。下面可以在網頁上檢視節點運作的資訊等。
- http://localhost:50070/ – web UI of the NameNode daemon
- http://localhost:50030/ – web UI of the JobTracker daemon
- http://localhost:50060/ – web UI of the TaskTracker daemon
如下圖:
Step5 :運作WordCount事例程式
5.1 運作程式
實驗所用的資料是從國外一個免費的電子書下載下傳網站上下載下傳的三個文檔,分别是pg20417.txt等等。儲存在/tmp/gutenberg上。下面是下載下傳的連結:
- The Outline of Science, Vol. 1 (of 4) by J. Arthur Thomson
我們下載下傳的是Plain Text UTF-8的形式,儲存在/tmp/test_in/目錄下,也可以将多個的檔案放在這個下面。
//現将檔案通過下面的指令拷貝到hadoop的檔案系統hdfs中
[email protected]:/usr/local/hadoop/bin$ hadoop dfs -copyFromLocal /tmp/test_in /user/hadoop/test_file
//下面檢視一下檔案:
[email protected]:/usr/local/hadoop/bin$ hadoop dfs -ls /user/hadoop/
Warning: $HADOOP_HOME is deprecated.
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2014-04-10 19:15 /user/hadoop/test_file
//通過下面的語句進行運作,注意 wordcoutn file1path file2path 的文法。其中file2path是事先不存在的。
[email protected]:/usr/local/hadoop$ bin/hadoop jar hadoop-examples-1.2.1.jar wordcount /user/hadoop/test_file /user/hadoop/out_file
這個時候可以去檢視網頁上的狀态。
5.2 檢視程式的運作狀态
首先看一下是否産生輸出檔案:
[email protected]:/usr/local/hadoop$ hadoop dfs -ls /user/hadoop/
Warning: $HADOOP_HOME is deprecated.
Found 2 items
drwxr-xr-x - hadoop supergroup 0 2014-04-10 19:22 /user/hadoop/out_file
drwxr-xr-x - hadoop supergroup 0 2014-04-10 19:15 /user/hadoop/test_file
再檢視一下結果:
[email protected]:/usr/local/hadoop$ hadoop dfs -cat /user/hadoop/out_file/*
這時候你發現被刷屏了,這時候可以拷貝hdfs檔案到正常檔案中用head指令檢視
[email protected]:/usr/local/hadoop$ bin/hadoop dfs -getmerge /user/hadoop/out_file /tmp/out_file
Warning: $HADOOP_HOME is deprecated.
14/04/10 19:46:53 INFO util.NativeCodeLoader: Loaded the native-hadoop library
[email protected]:/usr/local/hadoop$ ll /tmp/out_file
-rwxrwxrwx 1 hadoop hadoop 55 4月 10 19:46 /tmp/out_file*
[email protected]:/usr/local/hadoop$ head /tmp/out_file
-copyFromLocal 1
dfs 2
hadoop 1
hdfs 1
hello 1
world 1
至此已經完成了所有操作,如果讀者在配置過程中有任何問題都可以回帖詢問。