環(huán)境準(zhǔn)備
- 下載vagrant和virtualbox,并安裝
- vagrant:https://www.vagrantup.com/
- virtualbox:https://www.virtualbox.org/
- 虛擬機(jī)配置
- 1臺(tái)master: memory 2048m 硬盤(pán)20G
- 2臺(tái)slave: memory 1024m 硬盤(pán)10G
安裝步驟
- 從官網(wǎng)下載centos鏡像:
vagrant box add centos/7
- 創(chuàng)建vagrantfile所在文件夾,并創(chuàng)建兩個(gè)文件Vagrantfile和init.sh
mkdir /project touch VagrantFile touch init.sh
其中VagrantFile是vagrant的啟動(dòng)配置文件套菜, init.sh是初始環(huán)境的安裝腳本
- 編輯VagrantFile文件亲善, 內(nèi)容如下
Vagrant.configure("2") do |config|
config.vm.define :master1, primary: true do |master|
master.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "hadoop-master1", "--memory", "512"]
end
master.vm.box = "centos/7"
master.vm.hostname = "hadoop-master1"
master.vm.network :private_network, ip: "192.168.10.10"
end
(1..2).each do |i|
config.vm.define "slave#{i}" do |node|
node.vm.box = "centos/7"
node.vm.hostname = "hadoop-slave#{i}"
node.vm.network :private_network, ip: "192.168.10.1#{i}"
node.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
end
end
end
#manage hosts file
config.hostmanager.enabled = true
config.hostmanager.manage_host = true
config.hostmanager.manage_guest = true
#provision
config.vm.provision "shell", path: "init.sh", privileged: false
end
可以看到, 我們一共創(chuàng)建了4個(gè)虛擬機(jī)環(huán)境 逗柴,分別是master1, slave1, slave2, slave3
- 啟動(dòng)虛擬機(jī)蛹头, 驗(yàn)證配置是否正確
vagrant up
啟動(dòng)過(guò)程中如果有打印如下信息, 不需要理會(huì)
slave3: Warning: Connection aborted. Retrying...
slave3: Warning: Connection reset. Retrying...
slave3: Warning: Connection aborted. Retrying...
slave3: Warning: Connection reset. Retrying...
正常啟動(dòng)后戏溺,我們就可以使用以下命令登錄到虛擬機(jī)了
vagrant ssh master1
我們可以運(yùn)行以下命令渣蜗, 測(cè)試host-manager
[vagrant@hadoop-master1 /]$ ping hadoop-slave1
PING hadoop-slave1 (192.168.10.11) 56(84) bytes of data.
64 bytes from hadoop-slave1 (192.168.10.11): icmp_seq=1 ttl=64 time=0.453 ms
64 bytes from hadoop-slave1 (192.168.10.11): icmp_seq=2 ttl=64 time=0.377 ms
64 bytes from hadoop-slave1 (192.168.10.11): icmp_seq=3 ttl=64 time=0.429 ms
64 bytes from hadoop-slave1 (192.168.10.11): icmp_seq=4 ttl=64 time=0.387 ms
可以看到, 我們并沒(méi)有配置host文件旷祸,主機(jī)可以自動(dòng)標(biāo)識(shí)
-
使用securecrt做為ssh客戶(hù)端
一般情況下耕拷, 我們習(xí)慣使用securecrt等工具進(jìn)行主機(jī)的操作,但是如果你直接使用securecrt的時(shí)候托享,會(huì)報(bào)找不到public key的問(wèn)題:
這個(gè)時(shí)候骚烧,我們可以做如下配置
1.下載安裝puttygen
https://the.earth.li/~sgtatham/putty/latest/w64/puttygen.exe
2.打開(kāi)Putty Key Generator,點(diǎn)擊"Load"按鈕闰围,然后選擇主機(jī)的privatekey, 路徑為.vagrant\machines\master1\virtualbox\private_key赃绊。
3.Load成功后,選擇菜單中的"Conversions”—>"Export OpenSSH key"
4.然后會(huì)彈出保存文件對(duì)話(huà)框羡榴,選擇一個(gè)你需要的名字碧查,比如"openssh-key",保存到~/.ssh目錄中去
注意:這一步保存的文件名不能有任何后綴,按照原文作者所述校仑,如果用了比如openssh-key.pub的公鑰文件忠售,則SecureCRT會(huì)在同樣目錄下尋找名為"openssh-key"的私鑰
5.在puttygen的界面者冤,還需要選擇save public key,保存publickey到~/.ssh目錄中
6.這樣档痪, 我們同時(shí)生成了新的公鑰和私鑰
打開(kāi)securecrt涉枫,登好主機(jī)IP和用戶(hù)名后,需要做如下操作:
這樣腐螟,就可以使用securecrt進(jìn)行登錄了
- 編寫(xiě)provision文件
前面安裝vagrant的時(shí)候說(shuō)到愿汰,provision的作用是幫助我們進(jìn)行主機(jī)環(huán)境的初始化工作,現(xiàn)在我們來(lái)編寫(xiě)init.sh乐纸,具體內(nèi)容根據(jù)實(shí)際情況進(jìn)行刪減衬廷。在provision里,我只是安裝了linux環(huán)境必需的一些組件汽绢,具體hadoop集群需要的組件我會(huì)使用ansible進(jìn)行安裝吗跋。
sudo yum install -y epel-release
sudo yum install -y lrzsz.x86_64
sudo yum install -y nmap-ncat.x86_64
sudo yum install -y net-tools
sudo yum install -y vim-enhanced.x86_64
sudo yum install -y sshpass
編寫(xiě)完后,運(yùn)行命令進(jìn)行生效
vagrant provision
- 設(shè)置ssh互信
參考編寫(xiě)ssh互信腳本
在ssh登錄過(guò)程中宁昭,可能會(huì)報(bào)Permission denied (publickey,gssapi-keyex,gssapi-with-mic)跌宛,解決方法如下:vim /etc/ssh/sshd_config
, 修改如下配置為yes
PubkeyAuthentication yes
PasswordAuthentication yes
重啟systemctl restart sshd
- 安裝JDK
yum install -y java-1.8.0-openjdk-devel
安裝完Jdk后, 記得要到hadoop-env.sh
中配置java_home
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64
- hadoop配置文件
一共需要配置4個(gè)文件积仗, core-site.xml hdfs-site.xml yarn-site.xml mappr-site.xml workers, 以上文件路徑都位于etc/hadoop/中
- core-site.xml
<configuration>
<!-- 設(shè)置 resourcemanager 在哪個(gè)節(jié)點(diǎn)-->
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-master1</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.10.10:8088</value>
</property>
<!-- reducer取數(shù)據(jù)的方式是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- hdfs-site.xml
<configuration>
<!-- 設(shè)置namenode的http通訊地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop-master1:50090</value>
</property>
<!-- 設(shè)置hdfs副本數(shù)量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 設(shè)置namenode存放的路徑 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/vagrant/hadoop-3.0.3/tmp/dfs/name</value>
</property>
<!-- 設(shè)置datanode存放的路徑 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/vagrant/hadoop-3.0.3/tmp/dfs/data</value>
</property>
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
</property>
</configuration>
- yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-master1</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.10.10:8088</value>
</property>
<!-- reducer取數(shù)據(jù)的方式是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- mapred-site.xml
<configuration>
<!-- 通知框架MR使用YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- workers
hadoop-slave1
hadoop-slave2
worker文件只需要在master節(jié)點(diǎn)中進(jìn)行配置疆拘,workdrs中默認(rèn)配置為localhost,此時(shí)為偽分布式配置
- 配置環(huán)境變量
export HADOOP_HOME=/home/vagrant/hadoop-3.0.3
- 同步hadoop文件夾到slave節(jié)點(diǎn)相同路徑下
- 啟停集群
啟動(dòng)運(yùn)行sbin/start-all.sh
, 停止運(yùn)行sbin/stop-all.sh
訪問(wèn)namenode的web管理界面:http://hadoop-master1:9870
訪問(wèn)yarn的web管理界面:http://192.168.10.10:8088