hadoop分佈式集羣搭建筆記

1、Hadoop運行模式

Hadoop有三種運行模式,分別如下:

單機(非分佈式)模式

僞分佈式(用不同進程模仿分佈式運行中的各類節點)模式

完全分佈式模式

注:前兩種可以在單機運行,最後一種用於真實的集羣環境,通常用在生產環境上。我們可以搭建本地的僞分佈式模式來模擬分佈式環境的執行。

 

2、Hadoop的安裝及配置

環境:Ubuntu16.04LTS,Hadoop 2.5.2,

準備四臺機器,ip及主機名如下:

192.168.184.158 master

192.168.184.167 slave1

192.168.184.168 slave2

192.168.184.169 slave3

 

安裝步驟如下:

1、安裝ssh和jdk:略

 

2、增加一個用戶組用戶,用於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,

 

 

 

3、配置多機無密碼訪問

 

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/

 

 

4、配置完成,測試一下:

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

 

到此就安裝完畢。

 

配置環境變量

4、在/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。也可以解決此錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章