1 準備工作
1.1 節(jié)點準備
在開始安裝系統(tǒng)之前,我們需要先準備5個節(jié)點,他們均通過CentOS 7 Minimal方式安裝。網(wǎng)絡及系統(tǒng)規(guī)劃如下:
| 主機名稱 | IP地址 | 操作系統(tǒng) | 身份 |
|---|---|---|---|
| master | 192.168.137.100 | CentOS 7 | NameNode、ResourceManager、NtpServer |
| secondary | 192.168.137.101 | CentOS 7 | SecondaryNameNode、NodeManager |
| slave1 | 192.168.137.102 | CentOS 7 | DataNode、NodeManager |
| slave2 | 192.168.137.103 | CentOS 7 | DataNode、NodeManager |
| slave3 | 192.168.137.104 | CentOS 7 | DataNode、NodeManager |
| 主機 | NN | DN | RM | NM | Hive |
|---|---|---|---|---|---|
| master | Y | Y | Y | ||
| secondary | Y | Y | Y | ||
| slave1 | Y | Y | |||
| slave2 | Y | Y | |||
| slave3 | Y | Y |
1.2 系統(tǒng)架構
在開始配置master和slave節(jié)點之前,了解Hadoop集群的不同組件十分重要。
1.2.1 Master ——NameNode
主節(jié)點上主要包括了分布式文件系統(tǒng)、資源調(diào)度。它主要包括兩個守護進程:
1、NameNode
主要用來管理分布式文件系統(tǒng),保存HDFS的元數(shù)據(jù)信息,比如命名空間信息、塊信息等。類似于Linux Ext4文件系統(tǒng)的inode信息,Windows FAT文件系統(tǒng)的文件分配表。
當它運行的時候,這些信息是放在內(nèi)存中的,只有重啟的時候,才會將這些信息持久化到磁盤中。

2、ResourceManager
通過YARN來管理資源,讓分布式系統(tǒng)中的任務,可以在各個slave節(jié)點上正常執(zhí)行。
1.2.2 Secondary——NameNode
單從名字上,它好像是Master NameNode的備份,實際上不是,它是用來在系統(tǒng)中提供CheckPoint Node——輔助NameNode正常工作的。

1.2.3 slave——數(shù)據(jù)節(jié)點
數(shù)據(jù)節(jié)點主要用來保存實際的數(shù)據(jù),以及運行各種任務。一般也包括兩個守護進程:
1、DataNode
從物理層面負責數(shù)據(jù)的存儲。
2、NodeManager
管理節(jié)點上任務的執(zhí)行。
2. 系統(tǒng)安裝
為了方便,建議大家使用Vmware虛擬機安裝——可以安裝一個系統(tǒng),裝好必要的軟件JDK并設置好環(huán)境變量之后,再克隆生成其他幾個。
2.1 系統(tǒng)準備
CentOS下載: http://mirrors.163.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1804.iso
VMware Workstation Pro v14.0下載: https://download3.vmware.com/software/wkst/file/VMware-workstation-full-14.0.0-6661328.exe
序列號:**FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA**
2.2 系統(tǒng)安裝
2.2.1 安裝CentOS 7
安裝5臺CentOS系統(tǒng),名稱分別為master、secondary、slave1、slave2和slave3。

2.2.2 創(chuàng)建用戶并設置密碼
在每臺電腦上,分別執(zhí)行以下指令創(chuàng)建用戶,設置密碼:
useradd -m hadoop -G hadoop -s /bin/bash
passwd hadoop
2.2.3 配置網(wǎng)絡
我們通過手工方式來設置電腦的IP地址。注意:每臺電腦的IP地址應該是不一致的。
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # 靜態(tài)IP地址
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=9b6a5e1f-fd3b-4324-ab4c-7b2be4846ca8
DEVICE=ens33
ONBOOT=yes # 開機自動啟用
IPADDR="192.168.137.100" # IP地址(同一網(wǎng)絡中,每臺應該不一致)
PREFIX="24"
GATEWAY="192.168.137.2" # 網(wǎng)關
DNS1="61.128.192.68" # DNS服務器
ZONE=public
2.2.4 配置主機名
編輯每臺電腦上的/etc/hostname,依次設置為:
master
master
secondary
secondary
slave1
slave1
slave2
slave2
slave3
slave3
2.2.5 配置主機域名解析
將每臺電腦上的/etc/hosts,全部按照以下設置(全都一樣):
192.168.137.100 master
192.168.137.101 secondary
192.168.137.102 slave1
192.168.137.103 slave2
192.168.137.104 slave3
2.3 軟件安裝
2.3.1 Java安裝
執(zhí)行以下指令,安裝JDK(Java Development Kit)——Hadoop運行必備。
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
yum install wget
yum install ntp
2.3.2 設置Java環(huán)境變量
先編輯/etc/profile,在文件最后加入以下內(nèi)容:
# Setting Java Home Environment
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64
export PATH=$PATH:$JAVA_HOME/bin
然后執(zhí)行:
source /etc/profile
java -version
如果看到以下信息,則說明JDK安裝成功:

2.4網(wǎng)絡設置
2.4.1 關閉防火墻
systemctl disable firewalld
systemctl stop firewalld
2.4.2 關閉SELinux
SELinux是用來加強Linux安全的一種機制,不過在使用hadoop的時候,最好在每臺電腦上都關閉它:
1、臨時關閉
命令行執(zhí)行:
setenforce 0
2、永久關閉
編輯/etc/selinux/config文件,將:
SELINUX=enforcing
修改為:
SELINUX=disable
重啟計算機之后,即永久生效。
2.4.3 設置免密登錄
Hadoop集群的啟動,是master來自動控制其他計算機的。為了達到這個目標,我們首先要在master上可以不用輸入密碼通過ssh登錄secondary、slave1、slave2和slave3計算機。
1、設置密鑰
在master電腦上,執(zhí)行以下指令生成密鑰(ssh-keygen的生成步驟比較多,可以直接按回車):
ssh-keygen -t rsa
2、分發(fā)密鑰
接下來分發(fā)密鑰到每臺電腦上(包括本機的Master):
ssh-copy-id master
ssh-copy-id secondary
ssh-copy-id slave1
ssh-copy-id slave2
ssh-copy-id slave3
3、測試免密登錄
在master電腦上,執(zhí)行:
ssh master
ssh secondary
ssh slave1
ssh slave2
ssh slave3
如果可以全部不用輸入密碼訪問,則大功告成。
3 安裝Hadoop
絕大多數(shù)朋友采用的Hadoop安裝方式,都是通過手工方式安裝的,本文也是如此。
3.0 準備hadoop安裝目錄
在每臺電腦上,執(zhí)行以下指令準備hadoop安裝目錄:
sudo mkdir -p /opt/hadoop
sudo chown -R hadoop /opt/hadoop
3.1 下載hadoop
hadoop目前的最新版本,是3.0.1。所有的版本,都可以在 這里下載。
這個壓縮包里面,已經(jīng)包括了Hadoop HDFS、Yarn、Map Reduce等各種組件,我們不需要單獨下載。
cd /home/hadoop
wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.0.1/hadoop-3.0.1.tar.gz
sudo mkdir -p /opt/hadoop
sudo chown -R hadoop /opt/hadoop
3.2 解壓縮
tar zxvf hadoop-3.0.1.tar.gz
這樣一來,在/home/hadoop/下會出現(xiàn)一個hadoop-3.0.1子目錄,Hadoop的所有組件都在這個目錄中——它就是Hadoop系統(tǒng)的家目錄,將它拷貝到/opt/hadoop下。
mv hadoop-3.0.1/* /opt/hadoop/
3.3 配置HDFS運行環(huán)境
同樣,編輯/etc/profile。在文件的最后,加入以下內(nèi)容:
# Hadoop Environment Variables
export HADOOP_HOME=/opt/hadoop/
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JRE_HOME/ lib:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/mapreduce/*
3.4 配置Hadoop
hadoop的配置文件,都位于$HADOOP_HOME/etc/hadoop目錄下。
3.4.1 hadoop-env.sh
用vi編輯hadoop-env.sh文件。
vi /opt/modules/hadoop/etc/hadoop/hadoop-env.sh
配置JAVA_HOME變量:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64
3.4.1 core-site.xml
用vi編輯core-site.xml文件。
vi $HADOOP_HOME/etc/hadoop/core-site.xml
具體配置信息如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定HDFS老大(namenode)的通信地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!-- 指定hadoop運行時產(chǎn)生文件的存儲路徑 -->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/data/hadoop</value>
</property>
</configuration>
3.4.2 hdfs-site.xml
vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
具體配置信息如下:
<!-- /opt/hadoop/etc/hadoop/hdfs-site.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 設置namenode的http通訊地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<!-- 設置hdfs副本數(shù)量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 設置namenode存放的路徑 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/data/hadoop/dfs/name</value>
</property>
<!-- 設置datanode存放的路徑 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/data/hadoop/dfs/data</value>
</property>
<!-- 設置Secondary NameNode的地址 -->
<property>
<name>dfs.secondary.http.address</name>
<value>secondary:50090</value>
</property>
</configuration>
3.4.3 配置slaves
在/opt/hadoop/etc/hadoop/slaves(hadoop 2.x及以前的版本,文件名為slaves, 3.x之后為workers,hostname或者IP地址,一行一個:
vi $HADOOP_HOME/etc/hadoop/slaves
slave1
slave2
slave3
3.4.4 分發(fā)
1、創(chuàng)建需要分發(fā)配置文件的機器列表 /opt/hadoop/machines,包括如下內(nèi)容:
secondary
slave1
slave2
slave3
2、分發(fā)hadoop
for x in `cat /opt/hadoop/machines` ; \
do echo $x ; \
scp -r /opt/hadoop/ $x:/opt/hadoop/ ; \
done;
3.4.5 運行HDFS
1、格式化hdfs文件系統(tǒng)
在master上,執(zhí)行:
hdfs namenode -format
格式化文件系統(tǒng)。
2、啟動hdfs服務
在hadoop-master上,執(zhí)行:
start-dfs.sh
你會看到啟動了一個NameNode,一個Secondary NameNode和3個DataNode。

3.4.4 測試啟動成功
在hadoop-master和各臺計算機上,分別執(zhí)行執(zhí)行:
jps
你會看到程序的運行結果。
1、Hadoop-master
主要包括NameNode進程。

2、Hadoop-Secondary
主要包括Secondary NameNode進程。

3、Hadoop-slave1、Hadoop-slave2和Hadoop-slave3
主要包括DataNode進程。

3.5 配置YARN和Map Reduce
3.5.1 配置mapreduce
編輯mapred-site.xml 文件:
vi $HADOOP_HOME/etc/hadoop/mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 通知框架MR使用YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
3.5.2 配置YARN
編輯yarn-site.xml文件:
vi $HADOOP_HOME/etc/hadoop/yarn-site.xml
<?xml version="1.0"?>
<configuration>
<!-- 設置 resourcemanager 在哪個節(jié)點-->
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!-- reducer取數(shù)據(jù)的方式是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
3.5.3 啟動YARN
執(zhí)行以下指令啟動yarn:
start-yarn.sh

這將會啟動ResourceManager和NodeManager。
其中,ResourceManager在NodeName上運行,NodeManager在Slave上運行。

4 安裝ntp時間服務
hadoop服務,要求各個節(jié)點的時間嚴格同步,所以我們需要在master上創(chuàng)建一個ntp時間服務,其他節(jié)點跟它同步。
4.1 安裝ntp服務
執(zhí)行以下指令安裝:
sudo yum install ntp
4.2 配置時間同步
我們使用,hadoop、hbase等服務時,要求各個節(jié)點的時間嚴格同步。這就需要用到時間同步服務器,不過我們常見的Internet時間同步服務器不太靠譜,所以我們需要搭建一個ntp時間服務——最好讓其他節(jié)點與它同步。
4.2.1 最簡單的方法
直接與Aliyun時鐘服務器同步:
傳送門: ntp時間同步配置
5 安裝hive
5.1 安裝hive
5.1.1 準備工作
? 在master上下載、解壓縮
wget wget http://mirrors.hust.edu.cn/apache/hive/hive-3.1.0/apache-hive-3.1.0-bin.tar.gz
tar zxvf apache-hive-3.1.0-bin.tar.gz
5.1.2 轉(zhuǎn)移到Hive目錄
在每臺電腦上,創(chuàng)建hive目錄:
sudo mkdir -p /opt/hive
在master電腦上,轉(zhuǎn)移文件到Hive目錄
sudo mv apache-hive-3.1.0-bin/* /opt/hive/
5.1.4 設置hive目錄訪問權限
chown -R hadoop:hadoop /opt/hive
5.1.4 分發(fā)Hive目錄到所有節(jié)點
for x in `cat /opt/hadoop/machines` ; \
do echo $x ; \
scp /opt/hive/ $x:/opt/hive/ ; \
done;
5.1.5 設置Hive環(huán)境變量
sudo vi /etc/profile
export HIVE_HOME=/opt/hive
export PATH=$PATH:$HIVE_HOME/bin

5.2 配置hive目錄及訪問權限
在hadoop-master上,執(zhí)行以下指令:
hadoop fs -mkdir /tmp
hadoop fs -mkdir /user
hadoop fs -mkdir /user/hive
hadoop fs -mkdir /user/hive/warehouse
hdfs dfs -chmod g+w /tmp
hdfs dfs -chmod g+w /user/hive/warehouse

5.3 配置hive
默認配置下的Hive,使用的是Derby元數(shù)據(jù)庫,它只能從本地連接,并且只支持一個用戶。所以我們就直接改為MySQL數(shù)據(jù)庫作為元數(shù)據(jù)庫。
5.3.1安裝MySQL
sudo yum install mariadb-server mariadb
sudo systemctl start mariadb
sudo systemctl enable mariadb
5.3.2 配置MySQL允許遠程訪問
MySQL默認配置下,不允許遠程訪問。我們要修改為允許遠程訪問。在Master主機上,執(zhí)行以下指令登錄MySQL:
mysql -u root
然后新建root可以從遠程訪問的賬號,并授權:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
5.3.1 設置環(huán)境變量
5.3.2 配置hive-env.sh
cd /opt/hive/conf
cp hive-env.sh.template hive-env.sh
vi hive-env.sh
主要配置一個參數(shù):指定HADOOP_HOME目錄。如果本機已經(jīng)安裝了Hadoop,并且設置了HADOOP_HOME環(huán)境變量,則不需要配置。

5.3.2 設置hive-site.xml
修改hive配置文件
cd hive-2.3.3/conf
cp hive-default.xml.template hive-site.xml
vi hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>system:java.io.tmpdir</name>
<value>/opt/hive/iotmp</value>
</property>
<property>
<name>system:user.name</name>
<value>${user.name}</value>
</property>
<!-- 數(shù)據(jù)庫地址設置 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/metastore?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- MySQL賬號和密碼設置 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>All4Icode</value>
</property>
</configuration>
5.3.6 準備MySQL驅(qū)動
sudo yum install unzip
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.47.zip
unzip mysql-connector-java-5.1.47.zip
cp mysql-connector-java-5.1.47/mysql-connector-java-5.1.47.jar /opt/hive/lib
5.3.7 初始化MySQL元數(shù)據(jù)庫
schematool -initSchema -dbType mysql
看下初始化的數(shù)據(jù)庫信息:
schematool -dbType mysql -info

5.4 啟動
[hadoop@master ~]$ hive
hive> show databases;
OK
default
Time taken: 1.139 seconds, Fetched: 1 row(s)
hive> create table test(id int, name string);
OK
Time taken: 0.742 seconds
hive> show tables;
OK
test
Time taken: 0.082 seconds, Fetched: 1 row(s)
hive>
5.5 簡單使用
5.5.1 看下hive在hdfs中創(chuàng)建的目錄
hadoop fs -ls -R /user/hive

5.5.2 看下hive在MySQL中創(chuàng)建的表
mysql> use metastore;
mysql> select * from TBLS;

6 安裝HBase
6.0 HBase架構圖

6.1 準備工作
1、下載
wget http://mirrors.shu.edu.cn/apache/hbase/2.0.2/hbase-2.0.2-bin.tar.gz
2、解壓縮
tar zxvf hbase-2.0.2-bin.tar.gz
3、設置目錄
在Master電腦上:
sudo mkdir /opt/hbase
sudo chown -R hadoop:hadoop /opt/hbase
mv hbase-2.0.2/* /opt/hbase/
secondary、slave1、slave2、slave3電腦上:
sudo mkdir /opt/hbase
sudo chown -R hadoop:hadoop /opt/hbase
4、設置HBase環(huán)境變量
我們計劃在master電腦啟用HBase master、幾臺slave電腦上啟用RegionServer。
在master電腦上,編輯/etc/profile文件,加入相關的環(huán)境變量:
sudo vi /etc/profile
在文件的最后加入以下信息:
export HBASE_HOME=/opt/hbase
export PATH=$PATH:$HBASE_HOME/bin
分發(fā)到每臺電腦上,執(zhí)行以下指令使設置生效:
sudo scp /etc/profile root@slave1:/etc/profile
sudo scp /etc/profile root@slave2:/etc/profile
sudo scp /etc/profile root@slave3:/etc/profile
master、slave1、slave2、slave3電腦上分別執(zhí)行以下指令:
source /etc/profile
6.2 配置
HBase的配置文件,都位于$HBASE_HOME下的conf目錄中:
1、hbase-env.sh
主要用來設置JAVA_HOME環(huán)境變量,我們是集中在/etc/profile中進行設置——這里可以不用設置。
# 根據(jù)自己的實際JAVA_HOME目錄配置
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64
# 默認使用自帶的Zookeeper,配置為false則使用我們部署的
export HBASE_MANAGES_ZK=false
2、 hbase-site.xml
<property>
<name>hbase.tmp.dir</name>
<value>home/hadoop/data/hbase/tmp</value>
</property>
# HBase的hdfs根目錄
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
#采用zookeeper分部署部署
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
# zookeeper節(jié)點
<property>
<name>hbase.zookeeper.quorum</name>
<value>slave1,slave2,slave3</value>
</property>
3、 regionservers
編輯regionservers:
vi $HBASE_HOME/conf/regionservers
保證內(nèi)容如下:
slave1
slave2
slave3
6.3 分發(fā)文件
scp -r /opt/hbase/* slave1:/opt/hbase
scp -r /opt/hbase/* slave2:/opt/hbase
scp -r /opt/hbase/* slave3:/opt/hbase
6.3 啟動HBase
執(zhí)行start-hbase.sh。
start-hbase.sh
至此,包括hadoop、yarn、hive和HBase不適用HA的服務器集群搭建完畢。