centos下hadoop-2.6.0完全分散式搭建
一、Hadoop執行模式:
Hadoop有三種執行模式,分別如下:
單機(非分散式)模式
偽分散式(用不同程序模仿分散式執行中的各類節點)模式
完全分散式模式
注:前兩種可以在單機執行,最後一種用於真實的叢集環境,通常用在生產環境上。我們可以搭建本地的偽分散式模式來模擬分散式環境的執行。
二、軟硬體裝置及安裝前環境搭建:
作業系統:CentOS 6.5
軟體版本:hadoop-2.6.0,jdk-1.7.0_79
在每臺linux虛擬機器上,安裝:vim,ssh
sudo apt-get install vim
sudo apt-get install ssh
叢集架構:包括3個節點:1個Master,3個Salve,節點之間區域網連線,可以相互ping通。節點IP地址分佈如下:
主機名 IP 系統版本 Hadoopnode hadoop程序名
Master 192.168.137.100 CetOS6.5 master namenode,jobtracker
Slave1 192.168.137.101 CetOS 6.5 slave datanode,tasktracker
Slave2 192.168.137.102 CetOS 6.5 slave datanode,tasktracker
1:jdk-1.7.0——79安裝:
上傳jdk tar包。將其移動到/usr/lib/java目錄中(如果/usr中沒有java目錄自行建立)。
#mvjdk-1.7.0_79 /usr/lib/java
2:新增環境變數配置jdk:
在/etc/profile中新增
JAVA_HOME=/usr/lib/java/jdk1.7.0_79
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
exportJAVA_HOME
exportPATH export CLASSPATH
3:生效java變數:
source/etc/profile
如圖即表示jdk安裝配置已完成。
4:修改主機名和網路配置:
#vim /etc/sysconfig/network
NETWORKING=yes
分別對三臺主機設定:
HOSTNAME=Master
HOSTNAME=Slave0
HOSTNAME=Slave1
同時修改:hosts
#vim/etc/hosts
三臺主機均新增如下:
在每臺linux上,sudo vim /etc/hosts 編寫hosts檔案。將主機名和ip地址的對映填寫進去。編輯完後,結果如下:
5:配置ssh,實現免密登陸:
無密碼登陸,效果也就是在master上,通過 ssh slave0 或 ssh slave1 就可以登陸到對方計算機上。而且不用輸入密碼。
新增hadoop使用者併為其設定密碼:
#useradd hadoop
#passwd hadoop
為hadoop使用者配置root許可權,讓其可執行root命令。
#vim /etc/sudoers
切換到hadoop使用者:su hadoop
三臺主機上,使用 ssh-keygen -t rsa 一路按回車就行了。
剛才都作甚了呢?主要是設定ssh的金鑰和金鑰的存放路徑。 路徑為~/.ssh下。
開啟~/.ssh 下面有三個檔案
authorized_keys,已認證的keys
id_rsa,私鑰
id_rsa.pub,公鑰 三個檔案。
下面就是關鍵的地方了,(我們要做ssh認證。進行下面操作前,可以先搜關於認證和加密區別以及各自的過程。)
①在master上將公鑰放到authorized_keys裡。命令:sudo cat id_rsa.pub >> authorized_keys
②將master上的authorized_keys放到其他linux的~/.ssh目錄下。
(直接將三個主機的公鑰放到authorizedkey中,然後分別將此檔案放到三個主機的~/.ssh目錄下面)
命令:sudo scp [email protected]:~/.ssh
sudo scp authorized_keys 遠端主機使用者名稱@遠端主機名或ip:存放路徑。
③修改authorized_keys許可權,命令:chmod 644 authorized_keys
④測試是否成功
在任意一臺主機使用ssh Master/Slave0/Slave1不用密碼,直接進入系統。這就表示成功了。
注:ssh連線The authenticity of host can't beestablished需要輸入使用者和密碼才能登陸。
修改/etc/ssh/ssh_config檔案的配置,以後則不會再出現此問題
最後面新增:
StrictHostKeyCheckingno
UserKnownHostsFile/dev/null
三、hadoop上傳安裝於配置:
1:上傳hadoop:
把hadoop上傳到伺服器並解壓打/usr/local目錄中
tar-zxvf hadoop-2.6.0.tar.gz -C /usr/local
切換到/usr/local目錄下,修改hadoop-2.6.0的所有者。
chown -R hadoop.hadoop hadoop-2.6.0
2:vim ~/.bashrc修改bash配置檔案,簡單配置環境變數。
exportHADOOP_INSTALL=/usr/local/hadoop-2.6.0
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
執行hdfs,如果看到hadoop提示,則,hadoo已經完成安裝了。3:建立hadoop的一些關鍵目錄:
程式碼如下:mkdir /home/hadoop
cd /home/hadoop
mkdir hadoop2.6.0
cd /home/hadoop/hadoop2.6.0
mkdir tmp dfs
cd /home/hadoop/hadoop2.6.0/dfs
mkdir data name
4:hadoop配置:
4.1:配置hadoop-env.sh
cd/usr/local/hadoop-2.6.0/etc/hadoop
vim hadoop-env.sh
4.2:配置core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop2.6.0/tmp</value>
</property>
</configuration>
此修改為自己master的主機名+9000 <name>fs.default.name</name>
<value>hdfs://Master:9000</value>
4.3:配置hdfs-site.xml:
cd/usr/local/hadoop-2.6.0/etc/hadoop
程式碼如下:
<pre name="code" class="plain"><configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/hadoop2.6.0/dfs/name</value>
<description>Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently.</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/hadoop2.6.0/dfs/data</value>
<description>Comma separated list of paths on the local filesystem of a DataNode where it should store its blocks.</description>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
4.4:配置:mapred-site.xml:
程式碼如下:<property>
<name>mapred.job.tracker</name>
<value>Master:9001</value>
</property>
注:value為master主機名。注意:如果/usr/local/hadoop/etc/hadoop/mapred-site.xml檔案沒有但是有/usr/local/hadoop/etc/hadoop/mapred-site.xml.template那麼最好修改下面這個檔案,然後複製一份,改名為上面的名字
4.5:修改配置slaves:
4.6:格式化HDFS檔案系統的namenode:
cd /usr/local/hadoop-2.6.0
bin/hdfs namenode -format
四、hadoop叢集啟動與關閉:
/usr/local/hadoop-2.6.0/sbin/start-dfs.sh //這個是啟動
/usr/local/hadoop-2.6.0/sbin/stop-dfs.sh //這個是關閉
啟動完成以後使用jps檢視輸出: 如果master有三個程序,slave0,slave1均有兩個相同的程序,此時我們的叢集啟動成功了。 Master:
Slave0:
Slave1:
至此,分散式搭建成功。