一、Hadoop運行模式html
Hadoop有三種運行模式,分別以下:java
單機(非分佈式)模式node
僞分佈式(用不一樣進程模仿分佈式運行中的各種節點)模式ubuntu
徹底分佈式模式bash
注:前兩種能夠在單機運行,最後一種用於真實的集羣環境,一般用在生產環境上。咱們能夠搭建本地的僞分佈式模式來模擬分佈式環境的執行。ssh
二、Hadoop的安裝及配置分佈式
環境:Ubuntu16.04LTS,Hadoop 2.5.2,oop
準備四臺機器,ip及主機名以下:測試
192.168.184.158 master日誌
192.168.184.167 slave1
192.168.184.168 slave2
192.168.184.169 slave3
安裝步驟以下:
一、安裝ssh和jdk:略
二、增長一個用戶組用戶,用於hadoop運行及訪問。
root@ubuntu:~# sudo addgroup hadoop
root@ubuntu:~# sudo adduser –ingroup hadoop hadoop
給hadoop用戶添加權限,打開/etc/sudoers文件;
sudo gedit /etc/sudoers
按回車鍵後就會打開/etc/sudoers文件了,給hadoop用戶賦予root用戶一樣的權限。
在root ALL=(ALL:ALL) ALL下添加
hadoop ALL=(ALL:ALL) ALL,
三、配置多機無密碼訪問
sudo gedit /etc/hosts
分別在四臺機上修改hosts文件爲如下內容
127.0.0.1 localhost
192.168.184.158 master
192.168.184.167 slave1
192.168.184.168 slave2
192.168.184.169 slave3
在每臺機生成SSH證書,配置SSH無密碼登錄,詳見:http://www.cnblogs.com/ycblus/p/5653123.html
將slave1,slave2,slave3的公鑰分發至master,並分別將內容加入authorized_keys中:
三臺機分別進入/home/hadoop/.ssh目錄執行:
hadoop@slave1$: scp -r id_rsa.pub hadoop@master:/home/hadoop/.ssh/slave1.txt
hadoop@slave2$: scp -r id_rsa.pub hadoop@master:/home/hadoop/.ssh/slave2.txt
hadoop@slave3$: scp -r id_rsa.pub hadoop@master:/home/hadoop/.ssh/slave3.txt
要使四臺主機可以相互無密碼訪問,把master主機的合併後的authorized_keys分發至其餘三臺主機便可。,
進入/home/hadoop/.ssh目錄執行:
hadoop@master: scp -r authorized_keys hadoop@slave1:/home/hadoop/.ssh/
hadoop@master: scp -r authorized_keys hadoop@slave2:/home/hadoop/.ssh/
hadoop@master: scp -r authorized_keys hadoop@slave3:/home/hadoop/.ssh/
四、配置完成,測試一下:
hadoop@master:~$ ssh slave1
hadoop@slave1:~$ ssh master
首先是:下載,解壓縮,分配權限。
hadoop-2.5.2.tar.gz下載後放在/home/hadoop/software下
執行
hadoop@master:/home/hadoop/software# tar zxzf hadoop-2.5.2.tar.gz
到此就安裝完畢。
配置環境變量
四、在/home/hadoop/.bashrc文件中添加環境變量信息。
配置jdk+hadoop環境變量
sudo gedit ~/.bashrc
#HADOOP VARIABLES START
export JAVA_HOME=/opt/Java
export HADOOP_INSTALL=/home/hadoop/software
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
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
#HADOOP VARIABLES END
執行生效:
source ~/.bashrc
驗證環境變量是否配置成功,以下:
export、echo $HADOOP_HOME、java -version
下面說說如何配置和啓動:
基本思路是配置hadoop-env.sh、core-site.xml、mapred-site.xml、hdfs-site.xml、slave配置
首先創建一個用來存放數據的目錄:mkdir /home/hadoop/ software/hadoop/hadoop-datastore
打開/home/hadoop/software/hadoop/etc/hadoop/core-site.xml,配置以下
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/software/hadoop/hadoop-datastore/tmp/</value>
</property>
<property>
<!--fs.default.name指定NameNode的IP地址和端口號-->
<name>fs.defaultFS</name>
<value>hdfs://192.168.184.158:9000</value>
</property>
</configuration>
打開/home/hadoop/software/hadoop/etc/hadoop/mapred-site.xml,配置以下
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>http://192.168.184.158:9001</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx512m -Ddb2.jcc.charsetDecoderEncoder=3</value>
</property>
</configuration>
打開/home/hadoop/software/hadoop/etc/hadoop/hdfs-site.xml,配置以下
<configuration>
<property>
<!--block的副本數,默認爲3;你能夠設置爲1 這樣每一個block只會存在一份。-->
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/software/hadoop/hadoop-datastore/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/software/hadoop/hadoop-datastore/tmp/dfs/data</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
打開/home/hadoop/software/hadoop/etc/hadoop/hadoop-env.sh,添加JAVA_HOME的配置:如:
export JAVA_HOME=/home/hadoop/software/jdk1.6.0_31
打開/home/hadoop/software/hadoop/etc/hadoop/slaves,修改以下,表示datanode節點
slave1
slave2
slave3
最後,將master上配置好的hadoop文件分發至另外三臺機器,ok,配置完畢。
格式化HDFS:
hadoop@master:~$ /home/hadoop/software/hadoop/bin/hadoop namenode -format
啓動HDFS和MapReduce
hadoop@master: start-all.sh
中止服務:
hadoop@master:~ stop-all.sh
經過jps查看進程是否啓動成功
hadoop@master: jps
9544 NameNode
9905 ResourceManager
33096 Jps
9747 SecondaryNameNode
出現如上信息,表示hadoop啓動成功。
netstat -at|grep 50030
netstat -at|grep 50070
查看端口是否正常
注意:有時候有些啓動不成功,能夠在/home/hadoop/software/hadoop/logs/查看日誌信息進行診斷。
訪問http://master:50070能夠看到NameNode以及整個分佈式文件系統的狀態,瀏覽分佈式文件系統中的文件以及日誌等。
4.問題:
1.hadoop 啓動後頁面訪問看不到節點信息:
Hadoop集羣全部的DataNode都啓動不了解決辦法
正確的處理方法是,到你的每一個Slave下面去,找到.../usr/hadoop/tmp/dfs/ -ls
會顯示有: data這裏須要把data文件夾刪掉。接着直接在剛纔的目錄下啓動hadoop
2:使用不一樣的用戶啓動hadoop後出現hdfs沒法啓動的狀況:查日誌發現錯誤以下:java.io.FileNotFoundException: /home/hadoop/software/hadoop/hadoop-datastore/tmp/dfs/name/in_use.lock (Permission denied)
這有兩種場景出現,
1):在原來正常的時候,有一次忽然使用了原來不一樣的用戶啓動了一次hadoop。這種場景會產生一個in_use.lock 文件夾在你設置的目錄中,這時候能夠刪除這個文件夾直接,而後從新啓動
2):在格式化hadoop的時候和當期啓動的用戶不是同一個,也會致使該問題。這個時候可使用格式化hadoop的那個用戶從新啓動hadoop。也能夠解決此錯誤。