前言
此實(shí)驗(yàn)搭建3個(gè)虛擬節(jié)點(diǎn),一個(gè)mater,一個(gè)slave1,一個(gè)slave2
集群簡介
HADOOP集群具體來說包含兩個(gè)集群:HDFS集群和YARN集群,兩者邏輯上分離,但在物理上常在一起。
HDFS集群負(fù)責(zé)海量數(shù)據(jù)的存儲(chǔ),集群中的角色主要有:
NameNode、DataNode、SecondaryNode
YARN集群負(fù)責(zé)海量數(shù)據(jù)運(yùn)算時(shí)的資源調(diào)度,集群中的角色主要有:
ResourceManager、NodeManager
那mapreduce是什么呢?它其實(shí)是一個(gè)分布式運(yùn)算編程框架,是應(yīng)用程序開發(fā)包,由用戶按照編程規(guī)范進(jìn)行程序開發(fā),后打包運(yùn)行在HDFS集群上,并且受到Y(jié)ARN集群的資源調(diào)度管理。
一、集群部署方式
Hadoop部署方式分三種:
1、Standalone mode(獨(dú)立模式)
獨(dú)立模式又稱為單機(jī)模式,僅1個(gè)機(jī)器運(yùn)行1個(gè)java進(jìn)程,主要用于調(diào)試。
2、Pseudo-Distributed mode(偽分布式模式)
偽分布模式也是在1個(gè)機(jī)器上運(yùn)行HDFS的NameNode和DataNode、YARN的 ResourceManger和NodeManager,但分別啟動(dòng)單獨(dú)的java進(jìn)程,主要用于調(diào)試。
3、Cluster mode(群集模式)單節(jié)點(diǎn)模式-高可用HA模式
集群模式主要用于生產(chǎn)環(huán)境部署,會(huì)使用n臺(tái)主機(jī)組成一個(gè)Hadoop集群。這種部署模式下,主節(jié)點(diǎn)和從節(jié)點(diǎn)會(huì)分開部署在不同的機(jī)器上。
二、Hadoop集群規(guī)劃
Hadoop是典型的主從架構(gòu)。HDFS的NameNode是主,DataNode是從,YARN的ResourceManager是主,NodeManager是從。在正式集群部署之前,我們首先要做規(guī)劃,規(guī)劃好每個(gè)主機(jī)/節(jié)點(diǎn)分別運(yùn)行Hadoop的哪些進(jìn)程,這樣做,至少有兩個(gè)好處:1、指導(dǎo)部署,沒有規(guī)劃圖,很可能部署過程中就容易迷失,一個(gè)小小的細(xì)節(jié)沒處理好,可能導(dǎo)致集群啟動(dòng)失??;2、方便日后查詢,例如查詢哪些進(jìn)程在哪些節(jié)點(diǎn)上運(yùn)行等。
此次部署的規(guī)劃如下:(說明:每個(gè)人的虛擬機(jī)的IP網(wǎng)段可能都不一樣,要根據(jù)實(shí)際虛擬機(jī)修改下表的IP地址,我的是192.168.241.xxx)
Hadoop集群規(guī)劃
主機(jī)IP |
主機(jī)的主機(jī)名 |
HDFS |
YARN |
192.168.241.100 |
master |
NameNode DataNode |
ResourceManager NodeManager |
192.168.241.101 |
slave1 |
SecondaryNameNode DataNode |
NodeManager |
192.168.241.102 |
slave2 |
DataNode |
NodeManager |
2.1集群環(huán)境準(zhǔn)備
集群模式主要用于生產(chǎn)環(huán)境部署,需要多臺(tái)主機(jī),并且這些主機(jī)之間可以相互訪問,我們在之前搭建好基礎(chǔ)環(huán)境的三臺(tái)虛擬機(jī)上進(jìn)行Hadoop的搭建。
(1)找到之前偽分布式hadoop虛擬機(jī)的路徑
(2)創(chuàng)建三個(gè)文件夾master、slave1、slave2,然后復(fù)制步驟1中找到的虛擬機(jī)文件,并分別粘貼一份到這三個(gè)文件夾中
(3)用VMware Workstation,打開master、slave1、slave2文件夾下的虛擬機(jī),并重命名,以防萬一與之前偽分布式的虛擬機(jī)搞混了
2.2修改master、slave1、slave2的ip
master、slave1、slave2這三臺(tái)虛擬機(jī)是從原有的虛擬機(jī)拷貝過來的,所有東西都是一樣的,包括環(huán)境變量、已安裝的程序(jdk、redis、hadoop、hbase等)、ip、主機(jī)名。而不同的主機(jī),ip肯定不能一樣,所以要修改這三臺(tái)虛擬機(jī)的ip和主機(jī)名。
打開網(wǎng)卡配置文件,將IPADDR修改為部署規(guī)劃的master ip,然后保存退出
代碼示例如下:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
ip修改后,重啟網(wǎng)卡重啟網(wǎng)卡,并驗(yàn)證是否可以訪問外網(wǎng):
代碼示例如下:
systemctl restart network
ping www.baidu.com
執(zhí)行hostnamectl set-hostname ...(master/slave1/slave2),將主機(jī)名分別改為master、slave1、slave2
退出root,再重新登錄,命令行提示符看到最新的主機(jī)名
2.3修改master、slave1、slave2的主機(jī)名和IP的映射
我們知道,網(wǎng)絡(luò)中,都是通過IP來通信的,在集群中,如果想要通過主機(jī)名通信,則還要設(shè)置IP來與之對(duì)應(yīng),類似于域名要綁定IP。編輯/etc/hosts這個(gè)文件,然后追加一條記錄,master、slave1、slave2三個(gè)主機(jī)的/etc/hosts新增的映射記錄一樣
能ping成功三個(gè)主機(jī)名,說明映射配置成功
提示:為了避免手寫錯(cuò)誤,master的hosts映射配置好后,可以通過scp命令,將master修改好的/etc/hosts文件,同步到slave1、slave2主機(jī)上。
2.4設(shè)置免密登錄
想要在機(jī)器1上,遠(yuǎn)程控制機(jī)器2,常用的方案就是在機(jī)器1安裝ssh客戶端,機(jī)器2安裝ssh服務(wù)端,ssh客戶端和ssh服務(wù)端之間的通信協(xié)議是ssh協(xié)議。在linux系統(tǒng)中ssh命令,就是一個(gè)ssh客戶端程序,sshd服務(wù),就是一個(gè)ssh服務(wù)端程序。在windows中,給大家提供的mobaxterm是一個(gè)圖形化界面的ssh客戶端。因?yàn)閙aster、slave1、slave2三個(gè)節(jié)點(diǎn)都是從之前的已經(jīng)安裝好Hadoop偽分布式的虛擬機(jī)復(fù)制而來,而當(dāng)時(shí)已經(jīng)設(shè)置了免密登錄,故不需再設(shè)置了,也就是master可以免密登錄到master、slave1、slave2。
2.5關(guān)閉防火墻
防火墻實(shí)質(zhì)是一個(gè)程序,它可以控制系統(tǒng)進(jìn)來或者出去的流量,Centos7默認(rèn)情況下,防火墻是開機(jī)自起的,在集群部署模式下,各個(gè)節(jié)點(diǎn)之間的進(jìn)程要通信,為了方便,一般都要關(guān)閉防火墻。同理,之前已經(jīng)設(shè)置不允許防火墻開機(jī)自啟,默認(rèn)開機(jī)是關(guān)閉的,故也不需要操作。
2.6刪除Hadoop偽分布式數(shù)據(jù)
因?yàn)閙aster、slave1、slave2三個(gè)節(jié)點(diǎn)都是從之前的已經(jīng)安裝好Hadoop偽分布式的虛擬機(jī)復(fù)制而來,為了保證整個(gè)進(jìn)程環(huán)境干凈,我們需要?jiǎng)h除這三個(gè)節(jié)點(diǎn)/usr/local/hadoop-2.7.1/data路徑。
2.7修改hadoop配置文件
vi core-site.xml,該配置文件內(nèi)容如下:
<configuration>
<!-- hdfs分布式文件系統(tǒng)名字/地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!--存放namenode、datanode數(shù)據(jù)的根路徑 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-2.7.1/data</value>
</property>
</configuration>
vi hdfs-site.xml,該配置文件內(nèi)容如下:?
<configuration>
<!-- 數(shù)據(jù)塊副本數(shù) -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- secondary namenode 按照規(guī)劃部署到slave1上 -->
<property>
<name>dfs.secondary.http.address</name>
<value>slave1:50090</value>
</property>
</configuration>
?vi yarn-site.xml,該配置文件內(nèi)容如下:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
?vi mapred-site.xml,該配置文件內(nèi)容如下:
vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
slaves文件里面記錄的是集群主機(jī)名。一般有以下兩種作用:
一是:配合一鍵啟動(dòng)腳本,如start-dfs.sh、stop-yarn.sh用來進(jìn)行集群啟動(dòng),這時(shí)候slaves文件里面的主機(jī)標(biāo)記的就是從節(jié)點(diǎn)角色所在的機(jī)器。
二是:可以配合hdfs-site.xml里面dfs.hosts屬性形成一種白名單機(jī)制。
dfs.hosts指定一個(gè)文件,其中包含允許連接到NameNode的主機(jī)列表,必須指定文件的完整路徑名,那么所有在slaves中的主機(jī)才可以加入的集群中。如果值為空,則允許所有主機(jī)。
vi slaves,該配置文件內(nèi)容如下:
2.8將master主機(jī)上的hadoop配置文件,同步到其他兩個(gè)主機(jī)上
scp第一個(gè)參數(shù)*表示當(dāng)前路徑下的所有文件,第二個(gè)參數(shù)冒號(hào)左邊表示目標(biāo)主機(jī),冒號(hào)右邊表示目標(biāo)主機(jī)的路徑。pwd打印出當(dāng)前路徑
整句命令的作用是將當(dāng)前路徑下的所有文件,以root身份,同步到slave1、slave2的pwd輸出的路徑下
2.9時(shí)間同步
hadoop集群各個(gè)節(jié)點(diǎn)之間的時(shí)間應(yīng)該一致,也就是master當(dāng)前時(shí)間如果是2023-01-01 01:01:01,那么slave1和slave2上也應(yīng)該是這個(gè)時(shí)間,如果各個(gè)節(jié)點(diǎn)之間時(shí)間不一致/不同步,那么集群就會(huì)出現(xiàn)一些錯(cuò)誤。ntp(Network Time Protocol,網(wǎng)絡(luò)時(shí)間協(xié)議)是一種跟時(shí)間設(shè)置相關(guān)的協(xié)議??蛻舳?服務(wù)端架構(gòu),ntp.api.bz是一個(gè)公開的ntp服務(wù)器,執(zhí)行ntpdate ntp.api.bz命令,可以從這個(gè)ntp服務(wù)器拉取時(shí)間并更新當(dāng)前機(jī)器的時(shí)間。在master、slave1、slave2上分別執(zhí)行該命令,即可完成時(shí)間同步,此時(shí)三個(gè)節(jié)點(diǎn)的時(shí)間應(yīng)該是一致的。
2.10NameNode格式化
格式化只需格式化一次,以后啟動(dòng)Hadoop集群時(shí),不需要再格式化。
在master上執(zhí)行格式化命令:hdfs namenode -format
2.11hadoop集群的啟動(dòng)和停止
啟動(dòng):start-all.sh
停止:stop-all.sh
master啟動(dòng)了四個(gè)進(jìn)程,與規(guī)劃表對(duì)應(yīng)
?slave1啟動(dòng)了三個(gè)進(jìn)程,與規(guī)劃表對(duì)應(yīng)
?slave2啟動(dòng)了三個(gè)進(jìn)程,與規(guī)劃表對(duì)應(yīng)
2.12查看hdfs的web管理頁面
瀏覽器訪問master的50070端口:http://192.168.1241.100:50070
?可以看到hdfs有三個(gè)datanode節(jié)點(diǎn),沒有節(jié)點(diǎn)可用的磁盤空間是 16.99GB
2.13查看yarn的web管理頁面
驗(yàn)證是否部署成功
192.168.241.100:8088/cluster/nodes
?IP改為本人真實(shí)IP,訪問該地址,看到該頁面,YARN組件部署成功
hadoop部署總結(jié):
互聯(lián)網(wǎng)的快速發(fā)展帶來了數(shù)據(jù)快速增加,海量數(shù)據(jù)的存儲(chǔ)已經(jīng)不是一臺(tái)機(jī)器所能處理的問題了。Hadoop的技術(shù)應(yīng)運(yùn)而生,對(duì)于偽分布式存儲(chǔ),Hadoop有自己的一套系統(tǒng)Hadoop distribution file system來處理,為什么分布式存儲(chǔ)需要一個(gè)額外的系統(tǒng)來處理,而不是就把1TB以上的文件分開存放就好了呢,如果不采用新的系統(tǒng),我們存放的東西沒辦法進(jìn)行一個(gè)統(tǒng)一的管理。存放在A電腦的東西只能在連接到A去找,存在B的又得單獨(dú)去B找,繁瑣目不便干管理,而這個(gè)分布式存儲(chǔ)文件系統(tǒng)能把這些文件分開存儲(chǔ)的過程透明化,用戶看不到文件是怎么存儲(chǔ)在不同電腦上,看到的只是一個(gè)統(tǒng)一的管理界面?,F(xiàn)在的云盤就是很好的給用戶這種體驗(yàn)。對(duì)于分布式計(jì)算,在對(duì)海量數(shù)據(jù)進(jìn)行處理的時(shí)候,一臺(tái)機(jī)器肯定也是不夠用的,所以也需要考慮將將數(shù)據(jù)分在不同的機(jī)器上并行的進(jìn)行計(jì)算,這樣不僅可以節(jié)省大量的硬件的1/0開銷,也能夠?qū)⒓涌煊?jì)算的速度。
三、HBase部署
3.1配置文件
打開hbase根目錄的cof目錄下的hbase-site.xml文件,并添加兩個(gè)配置項(xiàng),將hbase數(shù)據(jù)存放在hdfs
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://20210322072-master:9000/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/hbase-1.4.8/zk_data</value>
</property>
</configuration>
啟動(dòng)hadoop和hbase
hbase?啟動(dòng)命令:?start-hbase.sh
?執(zhí)行jps,確認(rèn)hbase是否部署成功
?執(zhí)行hbase shell命令,連接到hbase
3.2創(chuàng)建表
第一個(gè)參數(shù)是表名,要用單引號(hào)括起來;第二個(gè)參數(shù)及之后的參數(shù),指定列族,并修改版本數(shù)的數(shù)量為2,即只保留兩個(gè)版本的數(shù)據(jù)
?查看表
3.3表信息查詢?
用desc命令查看表結(jié)構(gòu),desc的輸出中,一個(gè)大括號(hào)對(duì)應(yīng)一個(gè)列族,每個(gè)字段對(duì)應(yīng)列族的一個(gè)屬性
3.4表結(jié)構(gòu)修改
?用alter命令添加新的列族
?查看是否添加成功
?將add_new_columns列族的版本數(shù)改為3
?刪除add_new_columns列族
3.5 刪除表
先disable,再使用drop命令刪除表并查看
3.6 數(shù)據(jù)插入
用put插入一條記錄,get命令可以查看指定表的某個(gè)row key的所有列的單元格最新版本的值
3.7數(shù)據(jù)更新
3.8數(shù)據(jù)刪除
刪除某個(gè)cell最新的數(shù)據(jù),用delete刪除指定表的指定cell的最新的值,但版本1的數(shù)據(jù)還在
?再delete一次,版本1的數(shù)據(jù)也沒了
刪除指定row key的某個(gè)列族的數(shù)據(jù)
?刪除指定row key的所有數(shù)據(jù)?
3.9數(shù)據(jù)查詢
根據(jù)row key獲取一行數(shù)據(jù)
清空表數(shù)據(jù)
?插入幾條記錄,用get命令查看指定表的指定row key的數(shù)據(jù)
?查看表的所有數(shù)據(jù)
用scan命令可以掃描出指定表的所有數(shù)據(jù)
指定條件來查詢數(shù)據(jù)
?查詢出在[STARTROW,ENDROW]范圍內(nèi)的row key,且顯示一行
?查看表的行數(shù)
3.10使用過濾器查詢
Hbase利用過濾器查詢時(shí)會(huì)進(jìn)行全表掃描(例如表里有1億行,如果直接用過濾器查詢,那么就會(huì)遍歷這1億行,一條一條來匹配滿足條件的數(shù)據(jù)),查詢效率低下,所以所用過濾器查詢時(shí),查詢的數(shù)據(jù)量要小,也就是先用STARTROW、ENDROW來縮小范圍(范圍查不用全表掃描,相對(duì)快很多),然后再用過濾器過濾滿足條件的數(shù)據(jù)。即scan+filter。
過濾器一般需配合比較運(yùn)算符或比較器共同使用。
文章來源:http://www.zghlxwxcb.cn/news/detail-720794.html
hbase部署總結(jié):
部署比較簡單的,唯一注意的就是hbase-site.xml中的hadoop節(jié)點(diǎn)配置,一定要是當(dāng)前的active節(jié)點(diǎn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-720794.html
到了這里,關(guān)于【Hadoop】創(chuàng)建Hadoop集群(3個(gè)節(jié)點(diǎn))—— 安裝部署一個(gè)3個(gè)節(jié)點(diǎn)構(gòu)成的hbase集群的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!