前言:java
本文章是轉載的,本身又加上了一些本身的筆記整理的node
詳細地址請查看Ubuntu 12.04搭建hadoop單機版環境linux
Hadoop的三種運行模式apache
獨立模式:無需任何守護進程,全部程序都在單個JVM上執行。ubuntu
僞分佈模式:Hadoop守護進程運行在本地機器上,模擬一個小規模的集羣。vim
全分佈模式:Hadoop守護進程運行在一個集羣中。bash
一. 安裝Ubuntu;服務器
二. 在Ubuntu下建立hadoop用戶組和用戶;ssh
1. 建立hadoop用戶組:jvm
sudo groupadd hadoop |
如圖:
2. 建立hadoop用戶:
sudo useradd -ms /bin/bash -g hadoop hadoop |
如圖:
3. 給hadoop用戶添加sudo權限,打開/etc/sudoers文件:
sudo gedit /etc/sudoers |
按回車鍵後就會打開/etc/sudoers文件了,給hadoop用戶賦予root用戶一樣的權限。
在root ALL=(ALL:ALL) ALL下添加hadoop ALL=(ALL:ALL) ALL,
hadoop ALL=(ALL:ALL) ALL |
如圖:
三. 在Ubuntu下安裝JDK
使用以下命令執行便可:
sudo apt-get install openjdk-6-jre |
(這裏我本身下載的jdk,具體的安裝方法見個人另外一篇Linux下安裝JDK和Eclipse)
如圖:
四. 修改機器名
每當ubuntu安裝成功時,咱們的機器名都默認爲:ubuntu ,但爲了之後集羣中可以容易分辨各臺服務器,須要給每臺機器取個不一樣的名字。機器名由 /etc/hostname文件決定。
1. 打開/etc/hostname文件:
sudo gedit /etc/hostname |
2. 將/etc/hostname文件中的ubuntu改成你想取的機器名。這裏我取"dubin-ubuntu"。 重啓系統後纔會生效。
3. 爲了完全的改變你的主機名,還須要更改vim /etc/hosts,將其中的
127.0.1.1改爲和你hostname中同樣的名字
五. 安裝ssh服務
這裏ssh能夠實現遠程登陸和管理,具體能夠參考其餘相關資料。安裝ssh的目的就是爲了啓動守護進行,且必須是無密碼登錄的。
安裝openssh-server,
sudo apt-get install ssh openssh-server |
這時假設您已經安裝好了ssh,您就能夠進行第六步了哦~
6、 創建ssh無密碼登陸本機
首先要轉換成hadoop用戶,執行如下命令:
su - hadoop |
如圖:
ssh生成密鑰有rsa和dsa兩種生成方式,默認狀況下采用rsa方式。
1. 建立ssh-key,,這裏咱們採用rsa方式:
ssh-keygen -t rsa -P "" |
如圖:
(注:回車後會在~/.ssh/下生成兩個文件:id_rsa和id_rsa.pub這兩個文件是成對出現的)
2. 進入~/.ssh/目錄下,將id_rsa.pub追加到authorized_keys受權文件中,開始是沒有authorized_keys文件的:
cd ~/.ssh cat id_rsa.pub >> authorized_keys |
如圖:
(完成後就能夠無密碼登陸本機了。)
3. 登陸localhost:
ssh localhost |
如圖:
( 注:當ssh遠程登陸到其它機器後,如今你控制的是遠程的機器,須要執行退出命令才能從新控制本地主機。)
4. 執行退出命令:
exit |
七. 安裝hadoop
這裏個人安裝版本爲:hadoop-1.1.2(http://www.apache.org/dyn/closer.cgi/hadoop/common/ )
1. 假設hadoop-0.20.203.tar.gz在桌面,將它複製到安裝目錄 /usr/local/下:
sudo cp hadoop-1.1.2.tar.gz /usr/local/ |
2. 解壓hadoop-1.1.2.tar.gz:
cd /usr/local sudo tar -zxf hadoop-1.1.2.tar.gz |
3. 將解壓出的文件夾更名爲hadoop:
sudo mv hadoop-1.1.2 hadoop1.1.2 |
4. 將該hadoop1.1.2文件夾的屬主用戶設爲hadoop:
sudo chown -R hadoop:hadoop hadoop1.1.2 |
5. 打開hadoop/conf/hadoop-env.sh文件:
vim hadoop1.1.2/conf/hadoop-env.sh |
6. 配置conf/hadoop-env.sh(找到#export JAVA_HOME=...,去掉#,而後加上本機jdk的路徑):
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk |
這個主要就是爲了配置hadoop運行環境的jdk路徑
7. 打開conf/core-site.xml文件:
sudo gedit hadoop/conf/core-site.xml |
編輯以下:
<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl"href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
該文件主要是 fs.default.name,是一個描述集羣中NameNode結點的URI(包括協議、主機名稱、端口號)。該配置文件主要用於設置Hadoop的默認文件系統,而文件系統由URI指定,這裏咱們設置的是hdfs文件系統。這裏的這種配置方式是屬於僞分佈式模式,當配置爲全分佈式模式的時候,須要改成hdfs://namenod/。集羣裏面的每一臺機器都須要知道NameNode的地址。DataNode結點會先在NameNode上註冊,這樣它們的數據才能夠被使用。獨立的客戶端程序經過這個URI跟DataNode交互,以取得文件的塊列表。
8. 打開conf/mapred-site.xml文件:
vim hadoop1.1.2/conf/mapred-site.xml |
編輯以下:
<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl"href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
該配置文件主要用於配置JobTracker的主機(或者IP)和端口,一樣這是僞分佈模式,當在全分佈式模式中value的值爲jobtracker:8021
9. 打開conf/hdfs-site.xml文件:
vim hadoop/conf/hdfs-site.xml |
編輯以下:
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/datalog1,/usr/local/hadoop/datalog2</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/data1,/usr/local/hadoop/data2</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
dfs.replication -它決定着系統裏面的文件塊的數據備份個數。對於一個實際的應用,它 應該被設爲3(這個 數字並無上限,但更多的備份可能並無做用,並且會佔用更多的空間)。少於三個的備份,可能會影響到數據可靠性(系統故障時,也許會形成數據丟失)
dfs.data.dir - 這是DataNode結點被指定要存儲數據的本地文件系統路徑。DataNode結點上的這個路徑沒有必要徹底相同,由於每臺機器的環境極可能是不同的。但若是每臺機器上的這個路徑都是統一配置的話,會使工做變得簡單一些。默認的狀況下,它的值hadoop.tmp.dir, 這個路徑只能用於測試的目的,由於,它極可能會丟失掉一些數據。因此,這個值最好仍是被覆蓋。
dfs.name.dir - 這是NameNode結點存儲hadoop文件系統信息的本地系統路徑。這個值只對NameNode有效,DataNode並不須要使用到它。
10. 打開conf/masters文件,添加做爲secondarynamenode的主機名,做爲單機版環境,這裏只需填寫 localhost 就Ok了。
vim hadoop/conf/masters |
11. 打開conf/slaves文件,添加做爲slave的主機名,一行一個。做爲單機版,這裏也只需填寫 localhost就Ok了。
vim hadoop/conf/slaves |
八. 在單機上運行hadoop
1. 進入hadoop目錄下,格式化hdfs文件系統,初次運行hadoop時必定要有該操做,
cd /usr/local/hadoop/ bin/hadoop namenode -format |
2. 當你看到下圖時,就說明你的hdfs文件系統格式化成功了。
3. 啓動bin/start-all.sh:
bin/start-all.sh |
4. 檢測hadoop是否啓動成功:
jps |
若是有Namenode,SecondaryNameNode,TaskTracker,DataNode,JobTracker五個進程,就說明你的hadoop單機版環境配置好了!
以下圖:
後記:
1 該部署安裝環境以下:
VirtualBox-4.2.16-86992-Win
ubuntu12.04
jdk-6u33-linux-i586.bin
hadoop-1.1.2.tar.gz
通過測試徹底能夠正常運行
2 在執行hadoop命令的時候,都是調用hadoop/bin中的命令,能夠將hadoop安裝路徑設置到path中,這樣每次執行hadoop就不用加上絕對路徑了。具體的作法以下:
sudo vim /etc/profile添加兩句
export HADOOP_INSTALL=/usr/local/hadoop1.1.2
PATH=$HADOOP_INSTALL/bin:$PATH 而後註銷後輸入hadoop version便可
3 因爲在複製hadoop的時候已經建立了專門的用戶與用戶組來操做hadoop,必定要爲該hadoop安裝ssh無密碼登錄,在安裝hadoop的時候,記得也要全稱用剛建立的用戶來安裝,且必定要使用
chown -R hadoop:hadoop hadoop1.1.2來將全部的文件權限改成hadoop用戶。在安裝後,若是使用jps只是顯示幾個進程,能夠切換到root中,再次執行該命令chown -R hadoop:hadoop hadoop1.1.2
當安裝後,若是jps顯示的進程不到5個,則能夠將hadoop安裝目錄下生成data1和data2或者datalog1和datalog2刪除了,再從新利用bin/hadoop namenode -format
4 分佈式存儲的角度來講,集羣中的結點由一個NameNode和若干個DataNode組成,另有一個SecondaryNameNode做爲NameNode的備份。從分佈式應用的角度來講,集羣中的結點由一個JobTracker和若干個TaskTracker組成,JobTracker負責任務的調度,TaskTracker負責並行執行任務。TaskTracker必須運行在DataNode上,這樣便於數據的本地計算。JobTracker和NameNode則無須在同一臺機器上。