零零散散兩周時(shí)間颤殴,終于在單機(jī)環(huán)境下搭建起來(lái)了一個(gè)4節(jié)點(diǎn)的hadoop集群。在這篇文章中纫事,我將分成如下部分進(jìn)行分享
- 使用vagrant在本地運(yùn)行虛擬機(jī)
- 使用vagrant在本地搭建多機(jī)網(wǎng)絡(luò)
- Hadoop 基礎(chǔ)環(huán)境搭建
- Hadoop 集群的簡(jiǎn)單驗(yàn)證
- Hadoop HA 模式搭建及驗(yàn)證
- 搭建過(guò)程中遇到的問(wèn)題码耐,及解決方案
1. 使用vagrant在本地運(yùn)行虛擬機(jī)
vagrant是一個(gè)用于創(chuàng)建和部署虛擬化開(kāi)發(fā)環(huán)境的工具褐荷,它能很方便地在本地生成多個(gè)虛擬機(jī)器,進(jìn)而幫助我們?cè)诒镜貙?shí)現(xiàn)集群搭建熙含。
1.1 vagrant 安裝
1.2 vagrant box 下載安裝
首先在這里找到你想要的box: https://app.vagrantup.com/boxes/search
1.2.1 vagrant 命令下載安裝
使用vagrant之前谒府,先在本地新建一個(gè)文件夾 ~/hadoop-full/vagrant
。后續(xù)所有的操作都在此文件加下進(jìn)行争便。
vagrant init centos/7
vagrant up
vagrant init 會(huì)創(chuàng)建一個(gè)VagrantFile文件级零,vagrant up會(huì)在啟動(dòng)的時(shí)候下載一個(gè)centos/7的虛擬機(jī)。該方式下載的比較慢滞乙,比較推薦使用第二種方式安裝box
1.2.2 手動(dòng)下載安裝
在搜索列表里面點(diǎn)擊自己想要下載的box進(jìn)入詳情頁(yè)奏纪,然后點(diǎn)擊選擇想要下載的版本,進(jìn)入該版本的詳情頁(yè)斩启。在詳情頁(yè)URL的后面加上/providers/virtualbox.box
(例如:https://app.vagrantup.com/centos/boxes/7/versions/2004.01/providers/virtualbox.box)序调, 即可下載該版本的box。
下載完后兔簇,就可以用vagrant來(lái)添加box了发绢。 將下載下來(lái)的box轉(zhuǎn)移到~/hadoop-full/vagrant
,然后使用 vagrant box add <boxName> <boxFilePath>
命令 添加box
vagrant box add CentOS-7 CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box
添加完box后垄琐,使用vagrant box list
來(lái)查看box是否添加成功边酒。在確定box添加成功后,就可以初始化box了 vagrnat init CentOS-7
(注意這里的CentOS-7就是在添加box的時(shí)候指定的boxName)狸窘。在初始化之后墩朦,會(huì)生成一個(gè)VagrantFile文件,該文件包含了虛擬機(jī)的各種配置信息翻擒,在后面我們會(huì)用到氓涣。接下來(lái),我們就可以使用vagrant up
啟動(dòng)虛擬機(jī)啦韭寸。
Note: 更多關(guān)于vagrant的使用細(xì)節(jié)春哨,可以去訪問(wèn)vagrant的官網(wǎng)。這里我做減法恩伺,只介紹如何使用vagrant在本地搭建集群
2 使用vagrant在本地搭建多機(jī)網(wǎng)絡(luò)
要想在本地搭建起一個(gè)4節(jié)點(diǎn)的hadoop集群赴背,就需要使用vagrant創(chuàng)建四個(gè)虛擬機(jī)節(jié)點(diǎn),并保證四節(jié)點(diǎn)之間可以相互通信。在上面的介紹中我們知道凰荚,vagrant在啟動(dòng)虛擬機(jī)時(shí)燃观,會(huì)去讀取VagrantFile文件配置,那么我們只需要在VagrantFile里面配置好四臺(tái)虛擬機(jī)便瑟,并指定它們的網(wǎng)絡(luò)模式缆毁,就能啟動(dòng)4臺(tái)虛擬機(jī)。
2.1 VagrantFIle配置
boxes = [
{
:name => "hadoop1",
:mem => "1024",
:cpu => "1"
},
{
:name => "hadoop2",
:mem => "1024",
:cpu => "1"
},
{
:name => "hadoop3",
:mem => "1024",
:cpu => "1"
},
{
:name=> "hadoop4",
:mem => "1024",
:cpu => "1"
}
]
Vagrant.configure("2") do |config|
# box名稱
config.vm.box = "CentOS-7"
# 循環(huán)設(shè)置每臺(tái)虛擬機(jī)
boxes.each do |opts|
config.vm.define opts[:name] do |config|
# 配置 hostname
config.vm.hostname = opts[:name]
# 配置內(nèi)存和CPU
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--memory", opts[:mem]]
v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
end
# 配置 IP
config.vm.network "private_network", type: "dhcp"
end
end
end
注意:為了簡(jiǎn)單起見(jiàn)到涂,這里的網(wǎng)絡(luò)模式選擇"private_network", ip地址自動(dòng)分配脊框。如果只想快速搭建集群,可以不用花很多時(shí)間研究網(wǎng)絡(luò)模式這塊践啄。當(dāng)然vagrant官網(wǎng)已經(jīng)給出了很詳盡的介紹浇雹,感興趣的可以去看看。
配置完VagrantFile后屿讽,可以vagrant up 啟動(dòng)虛擬就昭灵,此刻你就會(huì)發(fā)現(xiàn),在你本地有4臺(tái)虛擬機(jī)啟動(dòng)伐谈,每臺(tái)都分配有一個(gè)ip地址烂完。
2.2 虛擬機(jī)相互通信
首先使用vagrant ssh hadoop1 登陸到名字為hadoop1的虛擬機(jī)中(名稱是在VagrantFile中指定的)。新啟動(dòng)的虛擬機(jī)诵棵,有很多功能未安裝抠蚣,可以使用yum進(jìn)行安裝。比如 yum -y install net-tools
. 在安裝完net-tools后非春,就可以使用ifconfig查看hadoop1虛擬機(jī)的IP了柱徙;依照此方法一次得到4臺(tái)虛擬機(jī)的IP
節(jié)點(diǎn)名 | IP地址 |
---|---|
hadoop1 | 172.28.128.3 |
hadoop2 | 172.28.128.4 |
hadoop3 | 172.28.128.5 |
hadoop4 | 172.28.128.6 |
在確定完各臺(tái)虛擬機(jī)的IP后,就可以使用ping 命令來(lái)檢查各虛擬機(jī)之間的通信狀況了,如:ping 172.28.128.4
為了簡(jiǎn)化后續(xù)的網(wǎng)路連接操作奇昙,我們可以在每臺(tái)虛擬機(jī)的 /etc/hosts中添加ip映射關(guān)系护侮,如
172.28.128.3 hadoop1
172.28.128.4 hadoop2
172.28.128.5 hadoop3
172.28.128.6 hadoop4
還有一點(diǎn)非常重要,就是一定要關(guān)閉每臺(tái)虛擬機(jī)的防火墻設(shè)置储耐,因?yàn)楹罄m(xù)節(jié)點(diǎn)之間要相互通信羊初,如果沒(méi)能關(guān)閉防火墻,集群的之間的通信就會(huì)受阻什湘,從而集群搭建失敗长赞。可以使用如下命令關(guān)閉防火墻
firewall-cmd --state #檢查防火墻狀態(tài)
sudo systemctl stop firewalld.service #停止firewall
sudo systemctl disable firewalld.service #禁止firewall開(kāi)機(jī)啟動(dòng)
3. Hadoop 集群環(huán)境搭建
3.1 下載Hadoop安裝包
這里我選擇的是hadoop 3.2.1 版本https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
將安裝包放在放在~/hadoop-full/vagrant
目錄下闽撤,這樣當(dāng)啟動(dòng)虛擬機(jī)時(shí)得哆,每臺(tái)虛擬機(jī)的/vagrant目錄下,就會(huì)有Hadoop的安裝包哟旗。然后解壓安裝包tar -xzvf hadoop-3.2.1.tar.gz
3.2 下載java包
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
注意要選擇linux版本贩据。將下載下來(lái)的安裝包放到~/hadoop-full/vagrant
下栋操,并解壓。
3.3 Hadoop環(huán)境搭建
3.3.1 hadoop饱亮,java 配置
環(huán)境搭建主要是為各虛擬機(jī)配置hadoop環(huán)境和 java環(huán)境矾芙,首先在~/hadoop-full/vagrant
目錄下,使用vagrant up
啟動(dòng)虛擬機(jī)近上。
依次進(jìn)入到hadoop1, hadoop2, hadoop3, hadoop4 在/etc/profile文件中添加hadoop 和java 配置
export JAVA_HOME=/vagrant/jdk1.8.0_261
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/vagrant/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
并執(zhí)行source etc/profile 使之生效剔宪。接下來(lái)可以使用下面的命令來(lái)驗(yàn)證安裝配置是否成功
java -version
hadoop version
最后進(jìn)入/vagrant/hadoop-3.2.1/etc/hadoop/hadoop-env.sh, 在里面為Hadoop增加Java配置 export JAVA_HOME=/vagrant/jdk1.8.0_261
3.3.2 虛擬機(jī)之間免密登陸
首先確保各臺(tái)虛擬機(jī)能免密登陸自己. 在每臺(tái)虛擬機(jī)上執(zhí)行下面的命令
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
然后將主機(jī)hadoop1的公鑰分發(fā)到hadoop2壹无,hadoop3, hadoop4
scp id_dsa.pub hadoop2:~/.ssh/hadoop1.pub
接著將hadoop1.pub 公鑰添加到hadoop2,hadoop3,hadoop3 的 authorized_keys中
cat ~/.ssh/hadoop1.pub >> ~/.ssh/authorized_keys
3.3.3 Hadoop集群配置
進(jìn)入虛擬機(jī)/vagrant/hadoop-3.2.1/etc/hadoop
目錄下
3.3.3.1 core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
</property>
3.3.3.2 hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/hadoop/tmp/name</value>
<description>為了保證元數(shù)據(jù)的安全一般配置多個(gè)不同目錄</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/tmp/data</value>
<description>datanode 的數(shù)據(jù)存儲(chǔ)目錄</description>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
<description>HDFS 的數(shù)據(jù)塊的副本存儲(chǔ)個(gè)數(shù), 默認(rèn)是3</description>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>hadoop3:50090</value>
<description>secondarynamenode 運(yùn)行節(jié)點(diǎn)的信息葱绒,和 namenode 不同節(jié)點(diǎn)</description>
</property>
</configuration>
在指定dataNode、nameNode文件夾的時(shí)候格遭,一定要自己先創(chuàng)建 /data/hadoop/tmp/data
和 /data/hadoop/tmp/name
文件夾哈街,并賦予文件權(quán)限
sudo mkdir -p /data/hadoop/tmp/data
sudo mkdir -p /data/hadoop/tmp/name
sudo chmod -R 777 /data
sudo chown -R vagrant /data
3.3.3.3 mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
3.3.3.4 workers
在workers文件中留瞳,添加slaves機(jī)器
hadoop2
hadoop3
hadoop4
3.3.3.5 masters
添加masters文件, 指定集群master服務(wù)器
hadoop1
3.3.3.6初始化hdfs并啟動(dòng)
hdfs namenode -format
start-all.sh
然后打開(kāi)網(wǎng)頁(yè)驗(yàn)證:172.28.128.3:9870
4. Hadoop HA搭建
集群分配
虛擬機(jī) | NN | DN | JN | ZKFC | ZK | RM | NM |
---|---|---|---|---|---|---|---|
hadoop1 | * | * | * | ||||
hadoop2 | * | * | * | * | * | * | |
hadoop3 | * | * | * | * | * | ||
hadoop4 | * | * | * | * |