一、前言
hadoop 在分布式計算攀唯,大數(shù)據(jù)領(lǐng)域一直享有盛名,也零零碎碎看過一些 hadoop 相關(guān)的東西渴丸,但卻沒有真正實戰(zhàn)過侯嘀,一是工作還暫時未涉及到 hadoop ,二是安裝 hadoop 集群沒有那個硬件基礎(chǔ)谱轨。
現(xiàn)在換了一個內(nèi)存大點的電腦戒幔,不能浪費這個資源,于是便來搭個 hadoop 集群吧土童。
二诗茎、hadoop 集群環(huán)境
這里準備3個虛擬機節(jié)點。
我是用 VMware10 虛擬了一個 Ubuntu16.04 環(huán)境献汗,然后再克隆兩個 Ubuntu16.04 節(jié)點環(huán)境敢订。
因為是在同一臺機器上搭建 hadoop 集群,所以虛擬機網(wǎng)絡(luò)設(shè)置是NAT模式罢吃。(Vmware虛擬機三種網(wǎng)絡(luò)模式詳解
三個節(jié)點準備好楚午,通過 ifconfig 命令查看 ip , 三個節(jié)點的 ip 分別為:
192.168.184.131
192.168.184.133
192.168.184.134
這里打算 131 當(dāng)作 master 節(jié)點尿招,用于運行hadoop程序中的namenode矾柜、secondorynamenode和jobtracker任務(wù)。 133 和 134 當(dāng)作 slave 節(jié)點就谜,主要將運行hadoop程序中的datanode和tasktracker任務(wù)怪蔑。
在準備好這3個結(jié)點之后,分別將主機名重命名丧荐,命名主機名的方法饮睬,修改 /etc/hostname 文件:
gedit /etc/hostname
我這里對三個節(jié)點分別命名為:master, slave1, slave2。
三篮奄、搭建過程記錄
在做好上述準備后捆愁,正式開始。
3.1窟却、創(chuàng)建 hadoop 賬戶
首先創(chuàng)建 hadoop 賬戶昼丑,并配置管理員權(quán)限。
安裝 Hadoop 那么需要創(chuàng)建一個 Hadoop 用戶夸赫,畢竟創(chuàng)建一個新的用戶菩帝,配置環(huán)境相對更加干凈一些。
創(chuàng)建一個hadoop 用戶,并使用 /bin/bash作為shell:
sudo useradd -m hadoop -s /bin/bash
設(shè)置密碼:
sudo passwd hadoop
增加管理員權(quán)限:
sudo adduser hadoop sudo
三個節(jié)點都執(zhí)行相同操作呼奢。
3.2宜雀、配置hosts文件
配置 hosts 文件主要用于確定每個結(jié)點的 IP 地址,方便后續(xù) master 結(jié)點能快速查到并訪問各個結(jié)點握础。
三個節(jié)點都需要修改辐董,內(nèi)容一致,如下:
sudo gedit /etc/hosts
3.3禀综、配置ssh免密碼連入
1.Hadoop 中的集群简烘,單點模式是需要使用到SSH登錄,Ubuntu默認參數(shù)了 SSH client定枷, 還需要安裝SSH Server:
sudo apt-get update
sudo apt-get install openssh-server
2.安裝之后就可以使用 SSH 登錄本機孤澎,生成 master 的公鑰,在 master 節(jié)點終端運行:
ssh localhost # 使用此命令登錄一次 (會輸入一次 yes)欠窒,用于生成 ~/.ssh 目錄
cd ~/.ssh
ssh-keygen -t rsa # 執(zhí)行此命令后一直按回車即可覆旭,會在 ~/.ssh 下生成 id_rsa 私鑰文件 和 id_rsa.pub 公鑰文件。
3.在 master 節(jié)點配置無密碼 ssh 本機岖妄,這一步還是在 master 節(jié)點上運行:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 加入授權(quán)
4.完成此命令后型将,運行 ssh 驗證一下
ssh localhost
此時不需密碼驗證。
5.讓主結(jié)點(master)能通過SSH免密碼登錄兩個子結(jié)點(slave)
前四步可以讓 master ssh 本機無密碼登錄衣吠,還需讓 master ssh 免密登錄兩個 slave 節(jié)點茶敏,為了實現(xiàn)這個功能壤靶,兩個slave結(jié)點的公鑰文件中必須要包含主結(jié)點的公鑰信息缚俏。
切換到 slave1 節(jié)點,拷貝 master 節(jié)點公鑰信息:
scp hadoop@master:~/.ssh/id_rsa.pub ./master_isa.pub
接著在 slave1 節(jié)點上將 master 的 ssh 公匙保存到相應(yīng)位置:
cat ~/.ssh/master_isa.pub >> ~/.ssh/authorized_keys
然后 切回到 master 節(jié)點:
ssh slave1
首次需要 yes 確認贮乳。
6.然后 slave2 執(zhí)行同樣的操作忧换。
3.4、配置 JDK
三個節(jié)點都要安裝 JDK向拆,也可以將這步挪到前面亚茬,先裝好一個節(jié)點的 JDK,然后克隆其他的節(jié)點浓恳。
具體安裝參考:https://www.zybuluo.com/w1992wishes/note/1207973
安裝好后刹缝,并配置相應(yīng)的環(huán)境變量。
3.5颈将、安裝 hadoop
1.首先下載 hadoop 相應(yīng)版本梢夯,可以到如下路徑查找 hadoop 各版本:
https://archive.apache.org/dist/hadoop/common/
將下載的壓縮包解壓:
sudo tar -zxvf /opt/hadoop-2.7.4.tar.gz
mv hadoop-2.7.4 hadoop # 改名
2.添加 Hadoop 環(huán)境變量:
sudo gedit /etc/profile
保存后使配置生效:
source /etc/profile
hadoop # 查看Hadoop
hadoop version # 查看 hadoop 的安裝版本
3.6、配置 hadoop 相關(guān)文件:
操作之前關(guān)閉每臺機器的防火墻 sudo ufw disable晴圾。
1.編輯 hadoop-env.sh颂砸,配置 hadoop JDK 依賴:
gedit hadoop-env.sh
2.配置 slaves:
gedit slaves
保存所有的 slave 節(jié)點 (slave1、slave2),將文件首行的 localhost 刪除人乓。
3.配置 core-site.xml:
core-site.xml 配置集群的全局參數(shù)勤篮,主要定義了系統(tǒng)級別的參數(shù),如 :HDFS URL色罚、Hadoop 的臨時目錄等信息碰缔。
gedit core-site.xml
在 <configuration> </configuration>
標(biāo)簽里面添加如下內(nèi)容:
<property>
<!-- 指定 HDFS 的 nameService,與(hdfs-site.xml)對應(yīng) -->
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<!-- 指定 hadoop 運行時產(chǎn)生文件的存儲路徑 -->
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop/hadoop_tmp</value>
<description>Abase for other temporary directories.</description>
</property>
4.配置 hdfs-site.xml:
gedit hdfs-site.xml
在 <configuration> </configuration>
標(biāo)簽里面添加如下內(nèi)容:
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<!-- 文件的副本數(shù)保屯,默認為 3手负;這里只有兩臺 DataNode 所以這里設(shè)置為 2 -->
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<!-- NameNode 數(shù)據(jù)目錄 -->
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/hadoop_tmp/dfs/name</value>
</property>
<property>
<!-- DataNode 數(shù)據(jù)目錄 -->
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/hadoop_tmp/dfs/data</value>
</property>
這之后創(chuàng)建 name 和 data 目錄:
cd /opt/hadoop
mkdir -p hadoop_tmp/dfs/name # -p 代表遞歸創(chuàng)建目錄
cd hadoop_tmp/dfs/
mkdir data
5.配置 yarn-site.xml:
gedit yarn-site.xml
在 <configuration> </configuration>
標(biāo)簽里面添加如下內(nèi)容:
<property>
<!-- 指定 YARN 的 ResourceManager 的地址,NameNode 節(jié)點中的一個 -->
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<!-- reducer 取數(shù)據(jù)的方式是 mapreduce_shuffle -->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
6.配置 mapred-site.xml:
默認文件名為 mapred-site.xml.template姑尺,配置這個文件前竟终,需要將這個文件重命名:
mv mapred-site.xml.template mapred-site.xml
gedit mapred-site.xml
<property>
<!-- 通知框架 MR 使用 YARN -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:19888</value>
</property>
3.7、Hadoop 集群
將 Hadoop 分發(fā)切蟋,在 master 機器配置完成以后统捶, 將 /opt/hadoop 文件夾復(fù)制到各個節(jié)點上:
先在 master 節(jié)點壓縮:
cd /opt/hadoop
sudo tar czvf hadoop.master.tar.gz hadoop/
然后切到 slave 節(jié)點:
scp hadoop@master:/opt/hadoop.master.tar.gz /opt
sudo tar xzvf hadoop.master.tar.gz
解壓后配置 hadoop 環(huán)境變量,然后 hadoop version 驗證一下柄粹。
至此喘鸟,如果集群已經(jīng)安裝完畢。
四驻右、運行 Hadoop 集群
1.首次啟動需要先在 master 節(jié)點執(zhí)行 namenode 的格式化:
cd /opt/hadoop/bin
hdfs namenode -format # 格式化文件系統(tǒng)
2.當(dāng)格式化通過之后什黑,就可以啟動 hadoop 了,啟動必須在 master 節(jié)點上運行:
start-dfs.sh
通過 jps 查看堪夭,master 節(jié)點至少有三個進程愕把, slave1 和 slave2 至少有 2 個:
通過 web 界面查看是否配置成功,在瀏覽器中輸入http://192.168.184.131:50070:
3.啟動 strat-yarn.sh:
start-yarn.sh
通過 hdfs dfsadmin -report 命令森爽,查看集群是否正常啟動:
hdfs dfsadmin -report
4.可選啟動命令 mr-jobhistory-daemon.sh start historyserver:
這個腳本的服務(wù)是實現(xiàn) web 查看作業(yè)的歷史運行情況恨豁,有些情況下,作業(yè)運行完了爬迟,在 web 端就無法查看運行情況橘蜜,可以通過開啟這個的守護進程來達到查看歷史任務(wù)。
5.關(guān)閉集群:
# 關(guān)閉集群的操作必須在 hadoop20 執(zhí)行
stop-yarn.sh
stop-dfs.sh # 單獨啟動 HDFS 集群
start-mapred.sh # 單獨啟動 Map/Reduce
start-all.sh # 同時啟動HDFS和Map/Reduce
mr-jobhistory-daemon.sh stop historyserver
# 從主節(jié)點 master 關(guān)閉 hadoop付呕,主節(jié)點會關(guān)閉所有從節(jié)點的 NameNode 進程
stop-all.sh
五计福、附:HDFS 常用操作
hadoop fs -ls
# 列出HDFS下的文件
hadoop fs -mkdir /input
# 在 HDFS / 目錄下創(chuàng)建 input 文件夾
hadoop fs -ls /input
# 列出 HDFS 下某個文檔中的文件
hadoop fs -put test1.txt /input/test
# 上傳文件到指定 HDFS /input 目錄下并重新命名,只有所有的 DataNode 都接收完數(shù)據(jù)才算成功
hadoop fs -get /in getin
# 從 HDFS 獲取文件并且重新命名為 getin徽职,同 put 一樣可操作文件也可操作目錄
hadoop fs -rmr /output
# 從 HDFS 上刪除指定文件
hadoop fs -cat /input/*
# 查看 HDFS 上 input 目錄的內(nèi)容
hdfs dfsadmin -report
# 查看 HDFS 的基本統(tǒng)計信息
hdfs dfsadmin -safemode enter # 進入安全模式
hdfs dfsadmin -safemode leave # 退出安全模式