Hadoop2.8.1徹底分佈式環境搭建

前言

 

本文搭建了一個由三節點(master、slave一、slave2)構成的Hadoop徹底分佈式集羣(區別單節點僞分佈式集羣),並經過Hadoop分佈式計算的一個示例測試集羣的正確性。java

本文集羣三個節點基於三臺虛擬機進行搭建,節點安裝的操做系統爲Centos7(yum源),Hadoop版本選取爲2.8.0。做者也是初次搭建Hadoop集羣,其間遇到了不少問題,故但願經過該博客讓讀者避免。node

實驗過程

一、基礎集羣的搭建

目的:得到一個能夠互相通訊的三節點集羣linux

下載並安裝VMware WorkStation Pro(支持快照,方便對集羣進行保存)下載地址,產品激活序列號網上自行查找。web

下載CentOS7鏡像,下載地址apache

使用VMware安裝master節點(稍後其餘兩個節點能夠經過複製master節點的虛擬機文件建立)。vim

三個節點存儲均爲30G默認安裝,master節點內存大小爲2GB,雙核,slave節點內存大小1GB,單核centos

二、集羣網絡配置

目的:爲了使得集羣既能互相之間進行通訊,又可以進行外網通訊,須要爲節點添加兩張網卡(能夠在虛擬機啓動的時候另外添加一張網卡,即網絡適配器,也能夠在節點建立以後,在VMware設置中添加)。瀏覽器

兩張網卡上網方式均採用橋接模式,外網IP設置爲自動獲取(經過此網卡進行外網訪問,配置應該按照你當前主機的上網方式進行合理配置,若是不與主機通訊的話能夠採用NAT上網方式,這樣選取默認配置就行),內網IP設置爲靜態IP。bash

本文中的集羣網絡環境配置以下:網絡

master內網IP:192.168.1.100

slave1內網IP:192.168.1.101

slave2內網IP:192.168.1.102

設置完後,能夠經過ping進行網絡測試

注意事項:經過虛擬機文件複製,在VMware更名快速建立slave1和slave2後,可能會產生網卡MAC地址重複的問題,須要在VMware網卡設置中從新生成MAC,在虛擬機複製後須要更改內網網卡的IP。

每次虛擬機重啓後,網卡可能沒有自動啓動,須要手動從新鏈接。

 三、集羣SSH免密登錄設置

目的:建立一個能夠ssh免密登錄的集羣

3.1  建立hadoop用戶

爲三個節點分別建立相同的用戶hadoop,並在之後的操做均在此用戶下操做,操做以下:

$su -

#useradd -m hadoop

#passwd hadoop

爲hadoop添加sudo權限

#visudo

在該行root ALL=(ALL) ALL下添加hadoop ALL=(ALL) ALL保存後退出,並切換回hadoop用戶

#su hadoop

注意事項:三個節點的用戶名必須相同,否則之後會對後面ssh及hadoop集羣搭建產生巨大影響

3.2  hosts文件設置

爲了避免直接使用IP,能夠經過設置hosts文件達到ssh  slave1這樣的的效果(三個節點設置相同)

$sudo vim /etc/hosts

在文件尾部添加以下行,保存後退出:

192.168.1.100  master

192.168.1.101  slave1

192.168.1.102  slave2

注意事項:不要在127.0.0.1後面添加主機名,若是加了master,會形成後面hadoop的一個很坑的問題,在slave節點應該解析出masterIP的時候解析出127.0.0.1,形成hadoop搭建徹底正確,可是系統顯示可用節點一直爲0。

3.3  hostname修改

centos7默認的hostname是localhost,爲了方便將每一個節點hostname分別修改成master、slave一、slave2(如下以master節點爲例)。

$sudo hostnamectl set-hostname master

重啓terminal,而後查看:$hostname

3.3  ssh設置

設置master節點和兩個slave節點之間的雙向ssh免密通訊,下面以master節點ssh免密登錄slave節點設置爲例,進行ssh設置介紹(如下操做均在master機器上操做):

首先生成master的rsa密鑰:$ssh-keygen -t rsa 

設置所有采用默認值進行回車

將生成的rsa追加寫入受權文件:$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

給受權文件權限:$chmod 600  ~/.ssh/authorized_keys

進行本機ssh測試:$ssh maste r正常免密登錄後全部的ssh第一次都須要密碼,此後都不須要密碼

將master上的authorized_keys傳到slave1

sudo scp ~/.ssh/id_rsa.pub hadoop@slave1:~/   

登錄到slave1操做:$ssh slave1輸入密碼登錄  

$cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

修改authorized_keys權限:$chmod 600  ~/.ssh/authorized_keys

退出slave1:$exit

進行免密ssh登錄測試:$ssh slave1

四、java安裝

目的:hadoop是基於Java的,因此要安裝配置Java環境(三個節點均須要操做,如下以master節點爲例)

下載並安裝:$sudo yum install java-1.8.0-openjdk  java-1.8.0-openjdk-devel

驗證是否安裝完成:$java -version

配置環境變量,修改~/.bashrc文件,添加行: export JAVA_HOME=/usr/lib/jvm/java-1.8.0

使環境變量生效:$source ~/.bashrc

五、Hadoop安裝配置

目的:得到正確配置的徹底分佈式Hadoop集羣(如下操做均在master主機下操做)

安裝前三臺節點都須要須要關閉防火牆和selinux

$sudo systemctl stop firewalld.service

$sudo systemctl disable firewalld.service

$sudo vim /usr/sbin/sestatus 

將SELinux status參數設定爲關閉狀態

SELinux status:                 disabled

5.1  Hadoop安裝

 首先在master節點進行hadoop安裝配置,以後使用scp傳到slave1和slave2。

下載Hadoop二進制源碼至master,下載地址,並將其解壓在~/ 主目錄下

$tar -zxvf ~/hadoop-2.8.1.tar.gz -C ~/

$mv ~/hadoop-2.8.1/* ~/hadoop/

注意事項:hadoop有32位和64位之分,官網默認二進制安裝文件是32位的,可是本文操做系統是64位,會在後面hadoop集羣使用中產生一個warning可是不影響正常操做。

5.2  Hadoop的master節點配置

配置hadoop的配置文件core-site.xml  hdfs-site.xml  mapred-site.xml  yarn-site.xml  slaves(都在~/hadoop/etc/hadoop文件夾下)

$cd ~/hadoop/etc/hadoop

$vim core-site.xml其餘文件相同,如下爲配置文件內容:

1.core-site.xml  

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://master:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/home/hadoop/hadoop/tmp</value>
  </property>
</configuration>

2.hdfs-site.xml 

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/home/hadoop/hadoop/tmp/dfs/name</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/home/hadoop/hadoop/tmp/dfs/data</value>
  </property>
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>master:9001</value>
  </property>
</configuration>

3.mapred-site.xml  

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

4.yarn-site.xml

<configuration>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
  </property>
</configuration>

5.slaves

slave1
slave2

5.3  Hadoop的其餘節點配置

此步驟的全部操做仍然是在master節點上操做,以master節點在slave1節點上配置爲例

複製hadoop文件至slave1:$scp -r ~/hadoop hadoop@slave1:~/

5.4  Hadoop環境變量配置

配置環境變量,修改~/.bashrc文件,添加行(每一個節點都須要此步操做,以master節點爲例):

#hadoop environment vars
export HADOOP_HOME=/home/hadoop/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 PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

使環境變量生效:$source ~/.bashrc

六、Hadoop啓動

格式化namenode:$hadoop namenode -format

啓動hadoop:$start-all.sh

master節點查看啓動狀況:$jps

slave1節點查看啓動狀況:$jps

 

slave2節點查看啓動狀況:$jps

Web瀏覽器輸入127.0.0.1:50070,查看管理界面

七、Hadoop集羣測試

目的:驗證當前hadoop集羣正確安裝配置

本次測試用例爲利用MapReduce實現wordcount程序

生成文件testWordCount:$echo "My name is Xie PengCheng. This is a example program called WordCount, run by Xie PengCheng " >> testWordCount

建立hadoop文件夾wordCountInput:$hadoop fs -mkdir /wordCountInput

將文件testWordCount上傳至wordCountInput文件夾:$hadoop fs -put testWordCount /wordCountInput

執行wordcount程序,並將結果放入wordCountOutput文件夾:$hadoop jar ~/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar wordcount /wordCountInput /wordCountOutput

注意事項:/wordCountOutput文件夾必須是沒有建立過的文件夾

查看生成文件夾下的文件:$hadoop fs -ls /wordCountOutput

output/part-r-00000能夠看到程序執行結果:$hadoop fs -cat /wordCountOutpart-r-00000

 

嗯嗯,做者就叫謝鵬程。

相關文章
相關標籤/搜索