1 前言
在講述Hadoop集群搭建之前,首先要了解Hadoop和集群兩個(gè)名詞,Hadoop是由Apache基金會(huì)開(kāi)發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu),簡(jiǎn)單理解就是大數(shù)據(jù)技術(shù)應(yīng)用的基礎(chǔ)。集群可以理解為多臺(tái)裝有hadoop的服務(wù)器。搭建Hadoop集群的目的就是為了管理多臺(tái)服務(wù)器,使多臺(tái)服務(wù)器之間能夠協(xié)調(diào)工作。本文選擇了3臺(tái)阿里云服務(wù)器。從下圖中可以對(duì)整個(gè)大數(shù)據(jù)架構(gòu)有了大體的了解。

Hadoop主要有HDFS(分布式文件存儲(chǔ)系統(tǒng))、Yarn(集群資源管理與調(diào)度)和MapReduce(分布式計(jì)算框架)組成。Hadoop集群中分為主機(jī)(master)和從機(jī)(slave),本文配置一臺(tái)阿里云服務(wù)器為主機(jī)和從機(jī)。其余兩臺(tái)為從機(jī)。HDFS(分布式文件存儲(chǔ)系統(tǒng))在主機(jī)上稱(chēng)為Namenode節(jié)點(diǎn),在從機(jī)上稱(chēng)為Datanode節(jié)點(diǎn)。Namenode維護(hù)HDFS的文件系統(tǒng)樹(shù)以及文件樹(shù)中所有的文件和文件夾的元數(shù)據(jù)??梢岳斫鉃閣in系統(tǒng)中文件夾屬性中的那些信息,Datanode是存儲(chǔ)和檢索數(shù)據(jù)的地方??梢岳斫鉃閣in系統(tǒng)中文件夾中實(shí)際數(shù)據(jù)。

Yarn(集群資源管理與調(diào)度)在主機(jī)上稱(chēng)為ResourceManager節(jié)點(diǎn),在從機(jī)上稱(chēng)為NodeManager。ResourceManager是全局的資源管理器,負(fù)責(zé)整個(gè)系統(tǒng)的資源管理和分配,NodeManager是節(jié)點(diǎn)上的資源和任務(wù)管理器。定時(shí)地向ResourceManager匯報(bào)本節(jié)點(diǎn)的資源使用情況。
MapReduce(分布式計(jì)算框架)顧名思義就是計(jì)算框架,有啥特點(diǎn)呢,就是分布式,可以把大型數(shù)據(jù)處理任務(wù)分解成很多單個(gè)簡(jiǎn)單的任務(wù),然后再把各個(gè)處理結(jié)果合在一起。計(jì)算過(guò)程可以百度了解。
2 Hadoop集群搭建

2.1 服務(wù)器系統(tǒng)設(shè)置
網(wǎng)上教程多采用虛擬機(jī)創(chuàng)建多個(gè)linux系統(tǒng)來(lái)搭建Hadoop集群,我覺(jué)得虛擬機(jī)有弊端就采用了阿里云服務(wù)器。阿里云服務(wù)器購(gòu)買(mǎi)選配過(guò)程后續(xù)再介紹。
- hosts文件修改
hosts是一個(gè)沒(méi)有擴(kuò)展名的系統(tǒng)文件,其基本作用就是將一些常用的網(wǎng)址域名與其對(duì)應(yīng)的 IP 地址建立一個(gè)關(guān)聯(lián)“ 數(shù)據(jù)庫(kù) ”。當(dāng)用戶在瀏覽器中輸入一個(gè)需要登錄的網(wǎng)址時(shí),系統(tǒng)會(huì)首先自動(dòng)從hosts文件中尋找對(duì)應(yīng)的 IP 地址,一旦找到,系統(tǒng)就會(huì)立即打開(kāi)對(duì)應(yīng)網(wǎng)頁(yè),如果沒(méi)有找到,則系統(tǒng)會(huì)將網(wǎng)址提交 DNS 域名解析服務(wù)器進(jìn)行 IP 地址的解析。就如你訪問(wèn)本地的時(shí)候,你輸入127.0.0.1和localhost是一致的。hosts文件修改就是在添加三臺(tái)服務(wù)器IP和域名的映射。vi /etc/hosts添加一下映射
172.27.66.8 master 172.27.66.10 slave1 172.27.66.9 slave2
后續(xù)訪問(wèn)域名和訪問(wèn)IP的效果是一樣的。
按照IP地址修改三臺(tái)服務(wù)器的主機(jī)名
hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2
- SSH免密登錄
SSH免密登錄是為了各個(gè)服務(wù)器之間訪問(wèn)不在需要密碼。三臺(tái)服務(wù)器分別執(zhí)行一遍如下命令。執(zhí)行完該命令會(huì)在root/.ssh下生成密鑰。
ssh-keygen -t rsa
#在slave1和slave2下分別把id_rsa.pub發(fā)送到主機(jī)上,并重新命令
scp id_rsa.pub root@master:~/.ssh/id_rsa.pub.slave1
scp id_rsa.pub root@master:~/.ssh/id_rsa.pub.slave2
在主機(jī)root/.ssh下把id_rsa.pub、id_rsa.pub.slave1、id_rsa.pub.slave2追加到authorized_keys中。
cat id_rsa.pub >> authorized_keys
cat id_rsa.pub.slave1 >> authorized_keys
cat id_rsa.pub.slave2 >> authorized_keys
然后把a(bǔ)uthorized_keys傳回到slave1和slave2中
scp authorized_keys root@slave1:~/.ssh
scp authorized_keys root@slave2:~/.ssh
最后修改文件權(quán)限。
chmod 755 ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
2.2 Hadoop安裝
hadoop各組件軟件下載地址:
清華鏡像:https://mirrors.tuna.tsinghua.edu.cn/apache/
- 各模塊配置文件修改
Hadoop的版本為3.2.1,軟件包hadoop-3.2.1.tar.gz解壓到/usr/local下,
tar -zxvf hadoop-3.2.1.tar.gz
安裝完成后進(jìn)入/usr/local/hadoop-3.2.1/etc/hadoop,修改配置文件為:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、workers,
#打開(kāi)文件的命令
vi core-site.xml
core-site.xml在<configuration> ----</configuration>之間添加如下配置,注意修改hadoop.tmp.dir路徑(按照自己系統(tǒng)的路徑)
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop-3.2.1/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
hdfs-site.xml在<configuration> ----</configuration>之間添加如下配置,注意修改dfs.datanode.data.dir和dfs.namenode.name.dir路徑。dfs.replication副本參數(shù)。同datanode個(gè)數(shù)。
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop-3.2.1/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop-3.2.1/hdfs/datanode</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
<description>need not permissions</description>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
</configuration>
yarn-site.xml在<configuration> ----</configuration>之間添加如下配置。
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<description>The address of the applications manager interface in the RM.</description>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<description>The address of the scheduler interface.</description>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<property>
<description>The http address of the RM web application.</description>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:18088</value>
</property>
<property>
<description>The https adddress of the RM web application.</description>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>${yarn.resourcemanager.hostname}:18090</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<property>
<description>The address of the RM admin interface.</description>
<name>yarn.resourcemanager.admin.address</name>
<value>${yarn.resourcemanager.hostname}:8033</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
mapred-site.xml在<configuration> ----</configuration>之間添加如下配置。
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>
workers下添加如下內(nèi)容。
slave1
slave2
- 環(huán)境變量設(shè)置
hadoop-env.sh、yarn-env.sh兩個(gè)文件下,添加java的地址,環(huán)境變量的目的就是為了便于訪問(wèn)。
export JAVA_HOME=/usr/local/jdk1.8.0_261

2.3 JDK8安裝
java的版本為jdk-8u261-linux-x64.tar.gz,解壓到/usr/local下
tar -zxvf jdk-8u261-linux-x64.tar.gz -C /usr/local
設(shè)置環(huán)境變量
vi /etc/profile
#添加如下內(nèi)容
JAVA_HOME=/usr/local/jdk1.8.0_261
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
#立即生效環(huán)境變量
source /etc/profile
2.4 hadoop集群測(cè)試
#將主機(jī)下配置好的hadoop文件整體發(fā)送到兩個(gè)從機(jī)上
scp -r /usr/local/hadoop-3.2.1 root@slave1:/usr/local
scp -r /usr/local/hadoop-3.2.1 root@slave2:/usr/local
#添加hadoop的環(huán)境變量
export HADOOP_HOME=/usr/local/hadoop-3.2.1
export PATH="$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH"
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
#在主機(jī)下格式化namenode
/usr/local/hadoop-3.1.1/bin/hdfs namenode -format
#啟動(dòng)和關(guān)閉HDFS
start-dfs.sh
stop-dfs.sh
#啟動(dòng)和關(guān)閉yarn
start-yarn.sh
stop-yarn.sh
#啟動(dòng)全部
start-all.sh
stop-all.sh
啟動(dòng)集群后在主機(jī)上輸入jps顯示

在從機(jī)上輸入jps顯示

輸入hdfs dfsadmin -report顯示

總結(jié)
Hadoop集群搭建,按照步驟一步一步搭建,難度不大。
不求點(diǎn)贊 只求有用
本文由微信公眾號(hào)《大數(shù)據(jù)分析師知識(shí)分享》發(fā)布