學(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文件進行下載


下載完成后將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進行下載

下載完成后,傳輸?shù)椒?wù)器上。
3.配置環(huán)境變量
此時在/data/software下已經(jīng)有hadoop和jdk的安裝包了,下面需要配置環(huán)境變量來讓他們正常工作。

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

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

使用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)境變量安裝成功


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

這個腳本是每次進入bash都會執(zhí)行,就省去了我們手動source /etc/environment這個操作。
二 hadoop簡單配置
1. 單機模式(本地模式)
hadoop的默認模式就是單機模式,在/data/software/hadoop/sbin下有一些用于啟動的腳本文件。

先直接用start-all.sh啟動一下(hadoop啟動會使用ssh程序,請確保已經(jīng)安裝,如果沒有,執(zhí)行
sudo apt-get install openssh-server)
因為單機模式使用的是本地文件系統(tǒng),可以看到?jīng)]有啟動名稱節(jié)點和數(shù)據(jù)節(jié)點,而啟動的ResourceManager和NodeManager是用于資源調(diào)度的,所以單機模式適合用于本地調(diào)試mapreduce程序。
執(zhí)行一下 hadoop fs命令可以看到如下提示

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

可以看到hadoop直接使用的就是本地文件系統(tǒng)。
2.偽分布式
單機模式一般只適用于編寫mapreduce程序的測試運行,不適合hadoop學(xué)習(xí)和實際運用。
偽分布式是hadoop在單機環(huán)境下模擬運行一個集群,會啟動hadoop的所有進程,適合用來學(xué)習(xí)hadoop的基本組件。
hadoop的主要配置文件都在/data/software/hadoop/etc/hadoop下

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

<?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>
- hdfs-site.xml(hdfs的相關(guān)配置)
vim hdfs-site.xml

<?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>
- 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>
- yarn-site.xml(yarn的相關(guān)配置)
vim yarn-site.xml

<?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)

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

可以看到所有節(jié)點都已經(jīng)啟動了。
通過ifconfig獲取一下服務(wù)器的ip

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

至此,偽分布式配置完成。偽分布式是屬于麻雀雖小,但五臟俱全,適合去了解一下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

我根據(jù)ubuntu01 克隆了其他四臺機器
1. 規(guī)劃ip
首先我們得規(guī)劃一下每臺機器的ip,然后配置一下hosts
選擇虛擬機->設(shè)置

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

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

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

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

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地址和自己想的域名映射上去,這樣之后就可以用域名進行訪問了

2. 修改hadoop配置
對偽分布式下的配置進行修改以變成分布式
- 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>
- 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>
- mapred-site.xml
不做更改
- 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>
-
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é)點上了

同樣的我們根據(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í)行情況了

4.啟動hadoop
所有節(jié)點文件同步完成之后
然后清空一下每臺機器下的/data/hadoop目錄
rm -rf /data/hadoop
因為克隆過去的時候?qū)⒅癶adoop01的機器的節(jié)點信息帶過去了,不刪除的話可能會導(dǎo)致啟動出錯
然后再hadoop namenode -format格式化一下文件,然后start-all.sh啟動hadoop

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

可以看到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é)點情況

其他的webui端口
secondNamenode 50090
datanode 50075
三 hadoop的文檔
可以訪問http://hadoop.apache.org/docs/r2.9.0/獲取hadoop 2.9.0的文檔
對hdfs和mapreduce都有很好的說明

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


