hadoop學(xué)習(xí)之hadoop簡易安裝配置

學(xué)習(xí)環(huán)境清單
ubuntu 16.04
windows 7
hadoop 2.9.0
jdk 8

一 下載安裝hadoop

首先創(chuàng)建好目錄,用于后續(xù)文件的歸類存放,執(zhí)行下述命令

sudo mkdir -p /data/software #用于存放下載的軟件

接下來都用默認賬戶進行操作

1.下載hadoop

訪問 http://hadoop.apache.org/releases.html進行下載,我學(xué)習(xí)的版本是2.9.0,選擇binary文件進行下載

image.png
image.png

下載完成后將hadoop-2.9.0.tar.gz文件傳輸?shù)絬buntu服務(wù)器上.

也可以直接在服務(wù)器中輸入下面命令直接在服務(wù)器上下載
sudo wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz -P /data/software

2.下載jdk

hadoop依賴于jdk,所以需要再下載一下jdk。
訪問 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html進行下載

image.png

下載完成后,傳輸?shù)椒?wù)器上。

3.配置環(huán)境變量

此時在/data/software下已經(jīng)有hadoop和jdk的安裝包了,下面需要配置環(huán)境變量來讓他們正常工作。


image.png

先將兩個文件解壓
tar -zxvf jdk-8u161-linux-x64.tar.gz
tar -zxvf hadoop-2.9.0.tar.gz

解壓完成后

image.png

由于目錄名比較長,為兩個目錄建立一下軟連接,以便后續(xù)好設(shè)置環(huán)境變量
ln -s hadoop-2.9.0/ hadoop
ln -s jdk1.8.0_161/ jdk

image.png

使用vim編輯/etc/environment文件sudo vim /etc/environment,在其中加入如下配置

JAVA_HOME="/data/software/jdk"
HADOOP_HOME="http://data/software/hadoop" PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin"

編輯完成之后執(zhí)行source /etc/environment命令

然后執(zhí)行javac命令和hadoop version命令,出現(xiàn)如下界面,即證明環(huán)境變量安裝成功

image.png

image.png

不過這樣當我們重啟機器或者切換用戶,環(huán)境變量將會丟失,需要重新source /etc/environment
可以vim編輯一下/etc/bash.bashrc這個文件sudo vim /etc/bash.bashrc,在這個文件的末尾追加一下這個命令

image.png

這個腳本是每次進入bash都會執(zhí)行,就省去了我們手動source /etc/environment這個操作。

二 hadoop簡單配置

1. 單機模式(本地模式)

hadoop的默認模式就是單機模式,在/data/software/hadoop/sbin下有一些用于啟動的腳本文件。

image.png

先直接用start-all.sh啟動一下(hadoop啟動會使用ssh程序,請確保已經(jīng)安裝,如果沒有,執(zhí)行sudo apt-get install openssh-server)
image.png

因為單機模式使用的是本地文件系統(tǒng),可以看到?jīng)]有啟動名稱節(jié)點和數(shù)據(jù)節(jié)點,而啟動的ResourceManager和NodeManager是用于資源調(diào)度的,所以單機模式適合用于本地調(diào)試mapreduce程序。

執(zhí)行一下 hadoop fs命令可以看到如下提示

image.png

然后再執(zhí)行一下hadoop fs -ls /看一下有什么文件

image.png

可以看到hadoop直接使用的就是本地文件系統(tǒng)。

2.偽分布式

單機模式一般只適用于編寫mapreduce程序的測試運行,不適合hadoop學(xué)習(xí)和實際運用。
偽分布式是hadoop在單機環(huán)境下模擬運行一個集群,會啟動hadoop的所有進程,適合用來學(xué)習(xí)hadoop的基本組件。

hadoop的主要配置文件都在/data/software/hadoop/etc/hadoop下

image.png

下面來修改這4個文件來完成偽分布式的配置
創(chuàng)建目錄用于存放hadoop文件系統(tǒng)的數(shù)據(jù)
sudo mkdir -p /data/hadoop

  1. core-site.xml(hadoop的核心配置)

vim core-site.xml

image.png
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
      <property>
                <name>fs.defaultFS</name>
                <value>hdfs://localhost/</value>
       </property>
      <property>
                <name>hadoop.tmp.dir</name>
                <value>/data/hadoop</value>
       </property>
</configuration>  
  1. hdfs-site.xml(hdfs的相關(guān)配置)
    vim hdfs-site.xml
image.png
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
        <property>
                <!--配置hdfs中文件的副本數(shù),默認為3,偽分布式下置為1-->
                <name>dfs.replication</name>
                <value>1</value>
        </property>
</configuration>
  1. mapred-site.xml(mapreduce的相關(guān)配置)
    這個文件目錄下默認是沒有的,執(zhí)行cp mapred-site.xml.template mapred-site.xml獲取,然后再編輯
    vim mapred-site.xml
    image.png
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
        <property>
                <!--配置mapreduce的框架名稱-->
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>
  1. yarn-site.xml(yarn的相關(guān)配置)
    vim yarn-site.xml
image.png
<?xml version="1.0"?>
<configuration>
        <property>
                <!--配置yarn調(diào)度的主機-->
                <name>yarn.resourcemanager.hostname</name>
                <value>localhost</value>
        </property>
        <property>
                <!--NodeManager上運行的附屬服務(wù)。需配置成mapreduce_shuffle,才可運行MapReduce程序-->
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

配置完畢,執(zhí)行hadoop namenode -format格式化一下文件系統(tǒng)

image.png

格式化完成后再執(zhí)行一下start-all.sh

image.png

可以看到所有節(jié)點都已經(jīng)啟動了。

通過ifconfig獲取一下服務(wù)器的ip

image.png

這時可以訪問一下hdfs的webui來看一下,ip地址:50070。
我的是http://192.168.92.141:50070/

image.png

至此,偽分布式配置完成。偽分布式是屬于麻雀雖小,但五臟俱全,適合去了解一下hadoop的基本操作。

3.分布式

偽分布式雖然可以滿足我們的基本學(xué)習(xí),但是在真正環(huán)境下,都是多節(jié)點協(xié)同工作的,偽分布式屬于單節(jié)點,不利于我們了解多節(jié)點下hadoop的工作流程。

我使用了5個節(jié)點進行學(xué)習(xí)

一個namenode名稱節(jié)點 hadoop01
一個secondeNamenode輔助名稱節(jié)點 hadoop05
三個datanode數(shù)據(jù)節(jié)點 hadoop02、hadoop03、hadoop04

image.png

我根據(jù)ubuntu01 克隆了其他四臺機器

1. 規(guī)劃ip

首先我們得規(guī)劃一下每臺機器的ip,然后配置一下hosts

選擇虛擬機->設(shè)置

image.png

可以看到網(wǎng)絡(luò)為nat模式

image.png

再查看虛擬網(wǎng)絡(luò)編輯器


image.png

配置一下子網(wǎng)ip和子網(wǎng)掩碼


image.png

然后修改每臺虛擬機的這個文件,配置一下ip
sudo vim /etc/network/interfaces

image.png
auto lo
iface lo inet loopback
auto ens33
iface ens33 inet static
address 192.168.92.141 #ip地址
netmask 255.255.255.0 #子網(wǎng)掩碼
gateway 192.168.92.2 #網(wǎng)關(guān)
dns-nameservers 192.168.92.2 #dns服務(wù)器地址

配置完之后再修改每臺主機的/etc/hosts文件,將自己配置的ip地址和自己想的域名映射上去,這樣之后就可以用域名進行訪問了

image.png
2. 修改hadoop配置

對偽分布式下的配置進行修改以變成分布式

  1. core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
        <property>
                <!--hadoop文件系統(tǒng)地址-->
                <name>fs.defaultFS</name>
                <value>hdfs://hadoop01:8020/</value>
        </property>
        <property>
                <!--hadoop文件系統(tǒng)文件的存放目錄-->
                <name>hadoop.tmp.dir</name>
                <value>/data/hadoop</value>
        </property>
</configuration>  
  1. hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
        <property>
            <!--hadoop的文件副本數(shù)-->
             <name>dfs.replication</name>
             <value>3</value>
        </property>
        <property>
            <!--輔助名稱節(jié)點的webui訪問地址-->
            <name>dfs.namenode.secondary.http-address</name>
            <value>hadoop05:50090</value>
        </property>
</configuration>
  1. mapred-site.xml

不做更改

  1. yarn-site.xml
<?xml version="1.0"?>
<configuration>
    <property>
        <!--yarn的資源管理主機地址-->
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop01</value>
    </property>
    <property>
        <!--NodeManager上運行的附屬服務(wù)。需配置成mapreduce_shuffle,才可運行MapReduce程序-->
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
 </configuration>
  1. slaves
    這個配置文件是用來配置所有數(shù)據(jù)節(jié)點的


    image.png

將數(shù)據(jù)節(jié)點三個hadoop02、hadoop03、hadoop04寫入即可

3.同步文件

修改完hadoop配置之后需要將配置同步到所有節(jié)點。

如果在每個節(jié)點中都去vim編輯修改的話,無疑是一個很讓人煩躁的工作。

我們可以通過rsync這個工具把文件同步到其他節(jié)點上

在使用這個工具之前,先配置一下免密登錄,以便之后不需要每次都去輸入密碼。我以hadoop01這臺機器為主機,執(zhí)行下述命令,以使hadoop01可以免密登錄到hadoop02、hadoop03、hadoop04、hadoop05上

ssh-keygen -t rsa  #生成密鑰
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop02 #將密鑰添加到遠程機器hadoop02上
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop03 #將密鑰添加到遠程機器hadoop03上
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop04 #將密鑰添加到遠程機器hadoop04上
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop05 #將密鑰添加到遠程機器hadoop05上
ssh hadoop02 #這樣就可以不用輸入密碼登錄到hadoop02上(第一次使用還是需要輸入密碼的,之后就不需要了)

免密登錄配置完成之后,下面我們可以使用如下命令,將指定文件同步到其他機器上

rsync -rvl 文件路徑 user@host:文件路徑
rsync -rvl /data/hadoop/etc/hadoop/ hadoop@hadoop01:/data/hadoop/etc/hadoop/

我們有四個節(jié)點,同步一個文件或者目錄也需要執(zhí)行四次,也是比較麻煩的,根據(jù)這個命令的固定格式,我們可以寫一個腳本文件,只調(diào)用一次就可以完成所有節(jié)點的同步。

可以在/usr/local/sbin下建立一個文件,命名為mysync。這個目錄默認是配置在環(huán)境變量下的,在其下的可執(zhí)行腳本可以在任意處執(zhí)行。
sudo touch /usr/local/sbin/mysync

然后給其賦予執(zhí)行權(quán)限

sudo chmod a+x /usr/local/sbin/mysync

腳本內(nèi)容如下

#!/bin/bash
pcount=$#
#如果沒有參數(shù),那么給出提示
if((pcount < 1));then
 echo no args
 exit;
fi
#如果給出了路徑,獲取其絕對路徑
p1=$1;
#獲取文件名
fname=`basename $p1` 
#獲取目錄名
dname=`cd -P $(dirname $p1);pwd`
#獲取當前用戶
cuser=`whoami`;
#循環(huán)節(jié)點,同步文件,用于hadoop01節(jié)點
for((host=2;host < 6;host=host+1));do
  echo -------------  start send hadoop0$host    --------------------
  rsync -rvl $dname/$fname $cuser@hadoop0$host:$dname
  echo -------------    finished hadoop0$host    --------------------
done

這樣我們只需執(zhí)行一下 mysync /data/software/hadoop/etc/hadoop即可將文件同步到所有節(jié)點上了

image.png

同樣的我們根據(jù)這個可以再寫一個腳本,用于所有節(jié)點的命令的調(diào)用
sudo touch /usr/local/sbin/mycall
sudo chmod a+x /usr/local/sbin/mycall

腳本內(nèi)容如下

#!/bin/bash
pcount=$#
if(( pcount < 1));then
   echo no args
   exit;
fi

for((host=1;host<6;host=host+1));do
  echo ------- start operate hadoop0$host  -----------
  #ssh遠程執(zhí)行命令
  ssh hadoop0$host $@
  echo -------   finished hadoop@$host     ------------
done

這樣我們就可以看到每個節(jié)點的命令執(zhí)行情況了

image.png
4.啟動hadoop

所有節(jié)點文件同步完成之后

然后清空一下每臺機器下的/data/hadoop目錄

rm -rf /data/hadoop

因為克隆過去的時候?qū)⒅癶adoop01的機器的節(jié)點信息帶過去了,不刪除的話可能會導(dǎo)致啟動出錯

然后再hadoop namenode -format格式化一下文件,然后start-all.sh啟動hadoop

image.png

使用剛才寫的腳本,看一下每一個節(jié)點啟動的進程情況
mycall jps

image.png

可以看到hadoop01啟動了名稱節(jié)點和資源管理器節(jié)點,由hadoop01進行統(tǒng)一調(diào)度,hadoop02、hadoop03、hadoop04三個節(jié)點啟動了數(shù)據(jù)節(jié)點和節(jié)點管理器,用于數(shù)據(jù)的存儲和被調(diào)度,hadoop05啟動了輔助名稱節(jié)點,用于同步名稱節(jié)點的數(shù)據(jù)。至此,hadoop的分布式搭建完成

可以通過webui查看節(jié)點情況


image.png

其他的webui端口
secondNamenode 50090
datanode 50075

三 hadoop的文檔

可以訪問http://hadoop.apache.org/docs/r2.9.0/獲取hadoop 2.9.0的文檔
對hdfs和mapreduce都有很好的說明

image.png

最下方有四個配置文件的所有配置項的說明。


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容