史上最全的單機(jī)hadoop集群搭建

零零散散兩周時(shí)間颤殴,終于在單機(jī)環(huán)境下搭建起來(lái)了一個(gè)4節(jié)點(diǎn)的hadoop集群。在這篇文章中纫事,我將分成如下部分進(jìn)行分享

  1. 使用vagrant在本地運(yùn)行虛擬機(jī)
  2. 使用vagrant在本地搭建多機(jī)網(wǎng)絡(luò)
  3. Hadoop 基礎(chǔ)環(huán)境搭建
  4. Hadoop 集群的簡(jiǎn)單驗(yàn)證
  5. Hadoop HA 模式搭建及驗(yàn)證
  6. 搭建過(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 安裝

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 * * * *
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拒迅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子她倘,更是在濱河造成了極大的恐慌璧微,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硬梁,死亡現(xiàn)場(chǎng)離奇詭異前硫,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)荧止,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門屹电,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人跃巡,你說(shuō)我怎么就攤上這事危号。” “怎么了素邪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵外莲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我兔朦,道長(zhǎng)偷线,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任沽甥,我火速辦了婚禮声邦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘摆舟。我一直安慰自己亥曹,他們只是感情好英融,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著歇式,像睡著了一般驶悟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上材失,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天痕鳍,我揣著相機(jī)與錄音,去河邊找鬼龙巨。 笑死笼呆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旨别。 我是一名探鬼主播诗赌,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼秸弛!你這毒婦竟也來(lái)了铭若?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤递览,失蹤者是張志新(化名)和其女友劉穎叼屠,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體绞铃,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡镜雨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了儿捧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荚坞。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖菲盾,靈堂內(nèi)的尸體忽然破棺而出颓影,到底是詐尸還是另有隱情,我是刑警寧澤亿汞,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布瞭空,位于F島的核電站,受9級(jí)特大地震影響疗我,放射性物質(zhì)發(fā)生泄漏咆畏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一吴裤、第九天 我趴在偏房一處隱蔽的房頂上張望旧找。 院中可真熱鬧,春花似錦麦牺、人聲如沸钮蛛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)魏颓。三九已至岭辣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甸饱,已是汗流浹背沦童。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叹话,地道東北人偷遗。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像驼壶,于是被迫代替她去往敵國(guó)和親氏豌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355