大數據學習之旅2——從零開始搭hadoop完全分佈式集群
- 2019 年 10 月 3 日
- 筆記
前言
本文從零開始搭hadoop完全分佈式集群,大概花費了一天的時間邊搭邊寫博客,一步一步完成完成集群配置,相信大家按照本文一步一步來完全可以搭建成功。需要注意的是本文限於篇幅和時間的限制,也是為了突出重點,一些很基礎的操作就不再詳細介紹,如果是完全不懂linux,建議先看一下Linux的基礎教程,再進行hadoop配置。同時建議,hadoop安裝版本不宜很高。第一次寫這麼長的博客,希望對大家有所幫助,如果有幫到你,可以點個推薦哦。哈哈。(圖片壓縮的有些模糊,大家諒解一下)
1 安裝linux
篇幅限制,不再介紹,網上很多教程。
1.1添加一個用戶
useradd hduser passwd *****
2配置用戶具有root權限
(1)查看並修改sudoers的文件權限:
首先在root用戶下修改 /etc/sudoers 文件權限,將 只讀 改為 可以修改
修改權限命令
chmod 777 /etc/sudoers
修改前:
修改後:
(2)修改sudoers配置文件
命令
vim /etc/sudoers
添加 haduer權限信息
(3)將sudosers訪問權限恢復440
命令
chmod 440 /etc/sudoers
3創建文件夾module、software
(1)將賬戶切換為新建用戶hduser ,並在/opt目錄下創建文件夾module、software文件夾
module文件夾用於存放解壓後的文件,software文件夾用於存放原始的壓縮文件
命令
su hduser sudo mkdir module sudo mkdir software
(2)創建後修改module、software文件夾的所有者為hduser
修改文件或文件夾所有者命令
sudo chown hduser:hduser module/ software/
原有的rh空文件夾可以刪掉(也可以不刪)
命令 sudo rm -rf rh
4安裝JDK
(1)刪除原有openJDK(如果有的話)
查詢命令 rpm -qa | grep java
卸載命令 sudo rpm -e 軟件名稱
(我這個機器沒發現openJDK就不展示了,但是大多數的linux默認都存在openJDK,需要卸載後再安裝Oracle的JDK)
(2)安裝JDK
JDK安裝有兩種方式,一種直接yum安裝,方便快捷,前提是連着網。
首先執行查看可安裝jdk版本的命令 yum -y list java*
然後選擇自己需要的jdk版本進行安裝,比如安裝JDK1.8,輸入命令
yum install -y java-1.8.0-openjdk-devel.x86_64
然後等待安裝完成即可,輸入 java -version 查看安裝完成後的jdk版本
這個jdk安裝目錄可以在 usr/lib/jvm下找到
第二種就是手動安裝了,也是本文採用的方法
首先在Oracle官網下載jdk,注意下載linux版本,我使用的是jdk-8u144-linux-x64.tar.gz
將jdk複製到Linux中,並將其移動到/opt/software目錄下
移動命令 sudo mv “當前jdk壓縮包的路徑” /opt/software
解壓到/opt/module目錄下
解壓命令 tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
解壓完成後配置jdk環境變量
命令 sudo vim /etc/profile
在文件尾部追加jdk路徑,並保存
#JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_144 export PATH=$PATH:$JAVA_HOME/bin
生效配置文件命令 source /etc/profile
輸入java -version查看是否成功
5安裝hadoop
從官網下載Hadoophttps://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/
然後的安裝步驟和安裝jdk步驟基本一樣。
將hadoop-2.7.2.tar.gz複製到Linux中,並移動到/opt/softwate目錄下
移動命令 sudo mv /hadoop-2.7.2.tar.gz /opt/software/
解壓到/opt/module命令 tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
配置hadoop環境變量 sudo vim /etc/profile
在文件末尾添加
##HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-2.7.2 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
保存退出後,生效配置文件 source /etc/profile
驗證是否成功 hadoop version
6修改主機靜態IP
(1)命令 vim /etc/udev/rules.d/70-persistent-net.rules
複製本機的物理IP地址00:0c:29:8f:28:40
(2)命令 sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0 (etho為本機的名字,可以修改,上面的截圖最後一個就是這個名字)
將HDADDR的IP改為之前複製的那個IP(如果沒這個HDADDR項,那就跳過,不用改了)
將BOOTPROTO項改為static靜態獲取,將ONBOOT改為yes,那麼開機自動生效
添加IPADDR項並設置為192.168.115.161(當然你完全可以設置為其他的靜態IP)
添加GATEWAY項並設置為192.168.115.2(這個為網關,根據你的IP設置相應的網關,前三個如:192.168.115和設置的IP前三個要一樣,最後一位一般都設為2)
添加DNS1並設置為
7修改主機名稱
命令 sudo vim /etc/sysconfig/network
為hadoop201 (你也可以設為其他名字)
保存後,可以輸入hostname查看本機的主機名(hostname在重啟後生效,當然也有其他生效方式,reboot重啟最簡單)
8配置hosts文件
配置hosts文件,方便以後的集群操作
輸入命令 sudo vim /etc/hosts
在文件末尾追加
192.168.115.161 hadoop201
(集群最少要有三個節點,我就順便把要裝的其他的節點也加上了)
9關閉防火牆
關閉防火牆,方便遠程操控(不同版本命令有所不同,可以上網百度一下, centos6和centos7命令有些區別)
關閉防火牆命令: systemctl stop firewalld.service
關閉開機啟動: systemctl disable firewalld
執行完以上8步驟後可以reboot重啟一下,這樣基礎的準備工作就完成了。
如果使用的是虛擬機的話,就將配置好的一個虛擬機完全克隆一下,克隆2個新節點,克隆完成後只需要修改新節點的靜態IP和修改hostname名就行了(使用克隆節點修改靜態IP時,注意vim /etc/udev/rules.d/70-persistent-net.rules編輯時要刪掉多餘的之前的IP設置,並將文件末尾NAME=”eth1”這樣的名字改為NAME=”eth0”)
如果是真實主機的話,就重複上述8個步驟,再新建兩個節點
有三個節點後,下面開始進行集群配置
10配置集群
建議使用root賬號登錄
首先在第一台機器上配置
(1)配置hadoop-env.sh
首先進入/opt/module/hadoop-2.7.2目錄下 cd /opt/module/hadoop-2.7.2
修改JAVA_HOME路徑
命令 vim etc/hadoop/hadoop-env.sh
(2)配置core-site.xml
命令與上面相似 vim etc/hadoop/core-site.xml
<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop201:9000</value> </property> <!-- 指定Hadoop運行時產生文件的存儲目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property>
(3)配置hdfs.site.xml
<!-- 指定HDFS副本的數量 --> <property> <name>dfs.replication</name> <value>3</value> </property>
上述配置在第一台機器上完成後,其他機器暫時不用管
11 SSH無密登錄配置
(1)生成公鑰私鑰
在第一台機器上使用 hduser賬號登錄
修改配置 vim /etc/ssh/sshd_config
找到以下三行,去除注釋保存
#RSAAuthentication yes #PubkeyAuthentication yes #PermitRootLogin yes
然後在任意目錄下輸入命令
ssh-keygen -t rsa
回車3次,生成公鑰和私鑰
(2)將公鑰拷貝到要免密登錄的目標機器上
ssh-copy-id hadoop201 ssh-copy-id hadoop202 ssh-copy-id hadoop203
(分發密鑰過程中需要輸入yes和對應目標機器的密碼)
hadoop201剛剛使用的是hduser賬號生成和分發的密鑰,切換賬號為root再進行一次生成密鑰和分發密鑰
同樣在即將配置為yarn節點的hadoop202主機採用hduser賬號配置無密登錄到hadoop201、hadoop202、hadoop203節點
以上操作是為了後續集群群起做鋪墊
(3)編寫xsync腳本(用於文件同步)
hadoop201上,在在/home/atguigu目錄下創建bin目錄,並在bin目錄下xsync創建文件,
文件內容如下:
#!/bin/bash #1 獲取輸入參數個數,如果沒有參數,直接退出 pcount=$# if((pcount==0)); then echo no args; exit; fi #2 獲取文件名稱 p1=$1 fname=`basename $p1` echo fname=$fname #3 獲取上級目錄到絕對路徑 pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir #4 獲取當前用戶名稱 user=`whoami` #5 循環 for((host=201; host<204; host++)); do echo ------------------- hadoop$host -------------- rsync -rvl $pdir/$fname $user@hadoop$host:$pdir done
然後修改腳本 xsync 具有執行權限 命令
chmod 777 xsync
12同步文件
首先將xsync腳本文件分發到其他節點
命令
xsync /home/hduser/bin
注意:如果將xsync放到/home/atguigu/bin目錄下仍然不能實現全局使用,可以將xsync移動到/usr/local/bin目錄下。
(1)在hadoop201上操作,將hosts文件分發給其他節點(如果是虛擬機克隆的話,hosts裏面有節點信息就不用分發了)
xsync /etc/hosts
(2)配置slaves
首先進入目錄 cd /opt/module/hadoop-2.7.2/ 下
命令 vim etc/hadoop/slaves
在文件中增加下列內容
hadoop102 hadoop103 hadoop104
(注意:slaves文件內不允許有空格,如果有的話會導致一些節點群起失敗)
(注意2:配置slaves文件的前提是hosts文件已經有了這些節點的信息)
分發slaves配置文件 xsync etc/hadoop/slaves
13集群配置
還是在hadoop201上操作,然後把文件分發給其他節點,以減少工作量
(1)集群部署規劃
|
Hadoop201 |
Hadoop202 |
Hadoop203 |
HDFS
|
NameNode DataNode |
DataNode |
SecondaryNameNode DataNode |
YARN |
NodeManager |
ResourceManager NodeManager |
NodeManager |
(2)配置集群
首先 cd /opt/module/hadoop-2.7.2/ 進入hadoop安裝目錄下
配置core-site.xml
命令 vim etc/hadoop/core-site.xml
在文件中編寫如下配置
<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop201:9000</value> </property> <!-- 指定Hadoop運行時產生文件的存儲目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property>
配置hadoop-env.sh
命令 vim etc/hadoop/hadoop-env.sh
修改JAVA_HONE路徑 export JAVA_HOME=/opt/module/jdk1.8.0_144 (較詳細操作看第10小節)
配置hdfs-site.xml
命令 vim etc/hadoop/hdfs-site.xml
在文件中編寫如下配置
<property> <name>dfs.replication</name> <value>3</value> </property> <!-- 指定Hadoop輔助名稱節點主機配置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop203:50070</value> </property>
配置yarn-env.sh
命令 vim etc/hadoop/yarn-env.sh
修改JAVA_HOME目錄(去掉注釋修改目錄)
export JAVA_HOME=/opt/module/jdk1.8.0_144 (詳情參考第10小節)
配置yarn-site.xml
命令 vim etc/hadoop/yarn-site.xml
在文件中增加下列配置
<!-- Reducer獲取數據的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop202</value> </property>
配置mapred-env.sh
(參考第10小節)
配置mapred-site.xml
首先修改文件名稱
cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
再進行配置命令 vim etc/hadoop/mapred-site.xml
在文件中加入下列配置
<!-- 指定MR運行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
(3)集群文件配置好後分發配置文件
命令
xsync /opt/module/hadoop-2.7.2/
14集群群起
終於來到了激動人心的環節,集群群起(也就是一下啟動整個集群)
(1)如果集群是第一次啟動,需要格式化namenode (在格式化前,一定要停止上次啟動的所有namenode和datanode進程,然後再刪除hadoop安裝目錄下的data和log數據)
格式化命令
bin/hdfs namenode -format
每個節點都格式化一遍
(注意不要隨便格式化集群哦)
(2)啟動HDFS
在hadoop201上群起HDFS
群起命令
sbin/start-dfs.sh
查看當前節點啟動的項目
命令
jps
然後在hadoop202上啟動yarn
群起命令
sbin/start-yarn.sh
集群完全啟動後各節點的狀態如下
這樣整個集群就成功啟動了
如果要停止集群
在hadoop201上停止集群的hdfs命令
sbin/stop-dfs.sh
在hadoop202上停止集群yarn命令
sbin/stop-yarn.sh
15瀏覽器查看集群狀態
(前提瀏覽器那個主機的hosts有這些節點的信息,不然就老老實實輸入ip地址,如:把hadoop201替換為192.168.115.161)
在瀏覽器中輸入 http://hadoop201:50070 查看namenode狀態
輸入 http://hadoop201:50075 查看datanode狀態
輸入 http://hadoop203:50070 查看secondarynamenode狀態
後續:
hadoop集群搭建完後,真正生產環境中還需要同步集群時間,操作集群時一般都是通過遠程終端(如xshell、SecureCRT等終端軟件ssh登錄)操控,這些大家可以查看一下相關博客,還是比較簡單的。
如果要轉載的話,大家註明一下轉載鏈接即可。