搭建hadoop也有一段時間了,真是太沒有效率了,小小的記錄一下。
我的OS是ubuntu11.04,hadoop版本是0.20.203.0,jdk是1.6.0_33。
一共3臺電腦:
ip 作用
172.16.95.50 namenode,jobtracker
172.16.95.51 datanode1,tasktracker
172.16.95.52 datanode2,tasktracker
3臺電腦通過交換機組成局域網,保證能相互ping通,當然,之前用虛擬機按照同樣的做法也成功了,只是要注意VM虛擬機網絡連接要用橋接方式,如果是虛擬機,完全可以配置好一臺後複製或者克隆~
步入主題:
1.修改hosts
sudo
gedit
/etc/hosts
修改爲:
127.0.0.1 localhost
172.16.95.50 namenode
172.16.95.51 datanode1
172.16.95.52 datanode2
2.修改hostname(如何需要的話)
sudo
gedit
/etc/hostname
改成相應的主機名,172.16.95.50 的改爲namenode,兩外兩臺分別改爲datanode1和datanode2.
3.3臺主機建立相同的用戶,我這裏是ubuntu,分組名也是ubuntu。本身我是沒有通過創建過程的,因爲我在安裝系統時就是用的同樣的用戶名ubuntu,這裏提供創建用戶和用戶組的方式:
先創建ubuntu用戶組:
sudo
addgroup ubuntu
sudo
adduser -ingroup ubuntu ubuntu
給ubuntu用戶添加權限,打開/etc/sudoers文件:
sudo
gedit
/etc/sudoers
在root ALL=(ALL:ALL) ALL下添加ubuntu ALL=(ALL:ALL) ALL,
ubuntu ALL=(ALL:ALL) ALL
4.安裝jdk
兩種方法,一種是自己下載jdk安裝包,然後手動安裝,配置環境變量,第二種是用ubuntu強大的apt-get install搞定,自選。
方法一:
我這裏是自己下載的jdk的bin文件,然後
(1)把jdk安裝文件拷貝到/home/ubuntu目錄下,然後安裝
cp jdk-6u33-linux-i586.bin /home/ubuntu
cd/home/ubuntu
chmodu+x chmod(賦予可執行權限)
./jdk-6u33-linux-i586.bin(安裝)
(2)安裝已完成修改環境變量並且把java安裝到系統
修改/etc/environment如下
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/ubuntu/jdk1.6.0_33/bin:/home/ubuntu/jdk1.6.0_33/jre/bin"
CLASSPATH=.:/home/ubuntu/jdk1.6.0_33/lib:/home/ubuntu/jdk1.6.0_33/jre/lib
JAVA_HOEM=/home/ubuntu/jdk1.6.0_33
方法二:
ubuntu下一條命令即可:
sudo
apt-get
install
openjdk-6-jre
查看Java版本確定已經安裝到系統:
java-version
如果看到版本說明安裝成功。
5.安裝ssh
使用命令
sudo
apt-get
install
ssh
openssh-server
sudo
apt-get
install
ssh
6.配置ssh,無密碼登錄
做這一步之前首先建議所有的機子全部轉換爲hadoop用戶,以防出現權限問題的干擾。
切換的命令爲:
su -ubuntu
ssh生成密鑰有rsa和dsa兩種生成方式,默認情況下采用rsa方式。
1. 創建ssh-key,,這裏我們採用rsa方式
ssh
-keygen -t rsa -P
""
2. 進入~/.ssh/目錄下,將id_rsa.pub追加到authorized_keys授權文件中,開始是沒有authorized_keys文件的;
cd
~/.
ssh
cat
id_rsa.pub >> authorized_keys
7.爲namenode安裝hadoop(很多步驟可以用圖形界面操作,如果喜歡用命令行,這裏也提供些命令)
(1)首先下載hadoop,一般會下載到/home/ubuntu/下載裏面,進入/home/ubuntu/
將其複製到/home/ubuntu/hadoop下,我之前在/home/ubuntu
新建了一個hadoop文件夾,並且在hadoop文件夾下建立tmp文件夾,以後用到。
sudo
cp
hadoop-0.20.203.0rc1.
tar
.gz
/home/ubuntu/hadoop
解壓hadoop-0.20.203.tar.gz;
cd
/home/ubuntu/hadoop
sudo
tar
-zxvf hadoop-0.20.203.0rc1.
tar
.gz
sudo
chown
-R ubuntu:ubuntu hadoop-0.20.203.0
(2)修改hadoop的hadoop-env.sh文件
配置conf/hadoop-env.sh(找到#export JAVA_HOME=...,去掉#,然後加上本機jdk的路徑);
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
(這裏是用ubuntu自動安裝的路徑,如果是手動安裝的,選擇自己的jdk安裝路徑,我的是export JAVA_HOME=/home/ubuntu/jdk1.6.0_33
(3)配置core-site.xml文件
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://namenode:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/ubuntu/hadoop/tmp</value>
</property>
</configuration>
(4)配置mapred-site.xml文件<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>namenode:9001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/home/ubuntu/hadoop/tmp</value>
</property>
</configuration>
(5)配置hdfs-site.xml文件
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/ubuntu/hadoop/name1, /home/ubuntu/hadoop/name2</value>
<description> </description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/ubuntu/hadoop/data1, /home/ubuntu/hadoop/data2</value>
<description> </description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
(注意tmp文件夾已經建立,這裏的name1,name2,data1,data2不要建立,格式化的時候自動生成)(6)打開conf/masters文件,添加作爲secondarynamenode的主機名,這裏需填寫ubuntu就Ok了
(7)打開conf/slaves文件,添加作爲slave的主機名,一行一個。
8.將namenode上的文件傳到兩個datanode上
(1)公鑰的複製
scp
/home/ubuntu/.
ssh
/id_rsa
.pub ubuntu@datanode1:/home/ubuntu/
.
ssh
/
scp
/home/ubuntu/.
ssh
/id_rsa
.pub ubuntu@datanode2:/home/ubuntu/
.
ssh
/
cat
/home/ubuntu/
.
ssh
/id_rsa
.pub
>> /home/ubuntu/
.
ssh
/authorized_keys
scp
-r
/home/ubuntu/
hadoop
ubuntu@datanode1
:
/home/ubuntu
scp
-r
/home/ubuntu/
hadoop
ubuntu@datanode2
:
/home/ubuntu
9.啓動hadoop
(1)首先格式化,進入hadoop目錄
cd /home/ubuntu/hadoop/hadoop-0.20.203.0
執行:bin/hadoop namenode -format
這時會在hadoop目錄下建造name1,在
hadoop-0.20.203.0
目錄下建立一個沒有名稱的目錄。(2)啓動hadoop:bin/start-all.sh
顯示如下:
starting namenode, logging to /home/ubuntu/hadoop/hadoop-0.20.203.0/bin/../logs/hadoop-ubuntu-namenode-namenode.out
datanode2: starting datanode, logging to /home/ubuntu/hadoop/hadoop-0.20.203.0/bin/../logs/hadoop-ubuntu-datanode-datanode2.out
datanode1: starting datanode, logging to /home/ubuntu/hadoop/hadoop-0.20.203.0/bin/../logs/hadoop-ubuntu-datanode-datanode1.out
namenode: starting secondarynamenode, logging to /home/ubuntu/hadoop/hadoop-0.20.203.0/bin/../logs/hadoop-ubuntu-secondarynamenode-namenode.out
starting jobtracker, logging to /home/ubuntu/hadoop/hadoop-0.20.203.0/bin/../logs/hadoop-ubuntu-jobtracker-namenode.out
datanode1: starting tasktracker, logging to /home/ubuntu/hadoop/hadoop-0.20.203.0/bin/../logs/hadoop-ubuntu-tasktracker-datanode1.out
datanode2: starting tasktracker, logging to /home/ubuntu/hadoop/hadoop-0.20.203.0/bin/../logs/hadoop-ubuntu-tasktracker-datanode2.out
namenode輸入:jps
9393 NameNode
9670 JobTracker
9592 SecondaryNameNode
9779 Jps
在datanode輸入jps會顯示有Datanode和Tasktracker.說明啓動正常。
(3)停止:
bin/stop-all.sh
顯示如下:
stopping jobtracker
datanode1: stopping tasktracker
datanode2: stopping tasktracker
stopping namenode
datanode1: stopping datanode
datanode2: stopping datanode
namenode: stopping secondarynamenode
這樣,hadoop的搭建暫告結束。
如果有什麼錯誤,請指出討論。
參考文章http://www.db89.org/post/2012-06-05/hadoopjiqunhuanjing