1. 程式人生 > >hadoop2.7.1在vmware上3臺centos7虛擬機器上的完全分散式叢集搭建

hadoop2.7.1在vmware上3臺centos7虛擬機器上的完全分散式叢集搭建

  • 叢集架構
  • centos7的安裝
  • 安裝java
  • hadoop全分佈
  • ssh無密碼登入
  • hadoop叢集正常啟動測試

以下內容均屬個人理解,如有偏差,望大家諒解。

叢集架構

3臺虛擬機器都在同一個區域網中,網段是192.168.10.0,子網掩碼是:255.255.255.0。

主節點:master.hadoop 192.168.10.2 namenode,SecondaryNamenode,Resource
NameNode
從節點:slavea.hadoop 192.168.10.3 datanode,nodemanage
從節點:slaveb.hadoop 192.168.10.4 datanode,nodemanage

centos7的安裝

注意事項:網路選項為橋接。
橋接是將虛擬機器當成物理機連線外網。和我們的物理主機在同一個區域網內。需要修改/etc/sysconfig/network-scripts/ifcfg-eno16777736,具體修改BOOTPROTO=static。
NAT是將虛擬機器與物理主機隔開,但虛擬機器仍可通過NAT服務上網,但是物理主機Ping不到虛擬機器,同時,VMnet8的ip是閘道器。

以主節點為例

建立hadoop賬戶,以hadoop賬戶登入。

關閉防火牆:因為防火牆會限制埠的開放。
Linux命令(centos最原始的防火牆是firewall。iptables服務是最新的)是:
firewall-cmd –state 查詢防火牆狀態
systemctl stop firewalld.service 關閉防火牆
systemctl disable firewalld.service 禁止firewall開機啟動

關閉SELinux服務:SELinux是對系統檔案許可權的控制。
Linux命令:
禁止SELinux開機啟動
sudo vi /etc/sysconfig/selinux
將”SELINUX=enforcing”改成”SELINUX=disabled”,儲存退出
關閉SELinux服務
sudo setenforce 0
查詢SELinux服務的狀態
sudo getenforce
為Permissive則可。

修改主機名
1.修改/etc/hosts(主機與ip的對映檔案) 在原有的基礎上加上
192.168.10.2 master.hadoop
2.修改/etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=master.hadoop

可以用echo $hostname測試一下

修改ip
修改/etc/sysconfig/network-script/ifcfg-eno16777736,修改或新增以下內容(以下內容有關ip部分根據自己情況填寫):

BOOTPROTO=static
ONBOOT=yes

GATEWAY=192.168.10.1
IPADDR=192.168.10.2
NETMASK=255.255.255.0
DNS1=202.117.112.3

安裝java

java 安裝包 jdk-8u65-linux-x64.tar.gz
1.解壓到/usr/java目錄下得到jdk1.8.0_65,tar -zxvf jdk-8u65-linux-x64.tar.gz -C /usr/java/。
2.配置環境:
修改/etc/profile檔案,新增以下內容:

#set java enviroment
export JAVA_HOME=/usr/java/jdk1.8.0_65
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

source /etc/profile來即時更新bash的環境。
判斷jdk配置是否成功:
java -version

java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

得到這個即表示配置成功。

hadoop全分佈

1.下載解壓hadoop-2.7.1.tar.gz到/usr/hadoop。
2.將hadoop目錄的擁有許可權設定成hadoop賬戶。
3.修改/etc/profile,新增以下內容:

#set HADOOP
HADOOP_PREFIX=/usr/hadoop
export HADOOP_PREFIX
export PATH=$PATH:$HADOOP_PREFIX/sbin

4.修改/etc/hadoop/mapred-env.sh,新增以下內容:

 export JAVA_HOME=/usr/java/jdk1.8.0_65

5.在/usr/hadoop下建立目錄tmp,用於存放hdfs的相關資料。

6.修改配置檔案:
1)/etc/hadoop/core-site.xml

<configuration>
    <property>
             <name>fs.defaultFS</name>
             <value>hdfs://192.168.10.2:9000</value>
    </property>
    <property>
             <name>io.file.buffer.size</name>
             <value>131072</value>
    </property>
    <property>
             <name>hadoop.tmp.dir</name>
             <value>file:///usr/hadoop/tmp</value>
    </property>

</configuration>

2) /etc/hadoop/hdfs-site.xml

<configuration>
    <property>
             <name>dfs.namenode.name.dir</name>
             <value>file:///usr/hadoop/tmp/dfsnamenode</value>
    </property>
     <property>
             <name>dfs.datanode.data.dir</name>
             <value>file:///usr/hadoop/tmp/dfsdatanode</value>
    </property>

    <property>
             <name>dfs.blocksize</name>
             <value>268435456</value>
    </property>
     <property>
             <name>dfs.replication</name>
             <value>1</value>
    </property>
    <property>
             <name>dfs.namenode.handle.count</name>
             <value>100</value>
    </property>
     <property>
             <name>dfs.datanode.http.address</name>
             <value>0.0.0.0:50076</value>
    </property>
</configuration>

3) /etc/hadoop/mapred-site.xml

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

4) /etc/hadoop/yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
     <property>
            <name>yarn.log-aggregation-enable </name>
            <value>false</value>
     </property>
      <property>
            <name>yarn.resourcemanager.address </name>
            <value>192.168.10.2:8032</value>
     </property>
     <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
     </property>
     <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>master.hadoop</value>
     </property>

</configuration>

5)修改/etc/hadoop/slaves檔案,來告知主節點有哪兩個子節點

slavea.hadoop
slaveb.hadoop

主機配置告一段落。

其餘兩子節點

1.利用vmware的克隆功能,克隆跟主節點一模一樣的兩個子節點。
2.修改ip,將兩臺子節點ip改為192.168.10.3,192.168.10.4。
3.修改主機名,將兩臺子節點主機名改為:slavea.hadoop,slaveb.hadoop。

ssh無密碼登入

1.修改/etc/hosts ,在原有的基礎上分別新增另外兩臺主機ip對映關係,三臺虛擬機器統一內容為:

27.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6

192.168.10.2 master.hadoop
192.168.10.3 slavea.hadoop
192.168.10.4 slaveb.hadoop

2.對master.hadoop節點的hadoop使用者使用如下命令生成金鑰對:

ssh-keygen -t rsa -P ''

在/home/hadoop/.ssh目錄下生成id_rsa和id_rsa.pub。

3.將公鑰id_rsa.pub追加到授權的key中:

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

4.修改authorized_keys的許可權:

chmod 600 ~/.ssh/authorized_keys

5.ssh localhost 若無密碼登入,則設定成功。

6.將authorized_keys檔案以及id_rsa檔案用scp命令分別複製到其他2個節點,即可實現節點之間免密碼登入了。。

//複製到slava.hadoop的目錄下,複製到slaveb.hadoop目錄命令類似
scp ~/.ssh/authorized_keys slavea.hadoop@192.168.10.3:~/.ssh
scp ~/.ssh/id_rsa slavea.hadoop@192.168.10.3:~/.ssh

hadoop叢集正常啟動測試

1.首先需要格式化一下namenode。

$HADOOP_PREFIX/bin/hdfs namenode -format

2.啟動所有的程序服務。

start-all.sh

3.用jps命令檢視一下所有的服務程序是否啟動。

master.hadoop

slavea.hadoop

slaveb.hadoop

4.可以通過網頁檢視叢集執行情況:

這裡寫圖片描述
這裡寫圖片描述

這裡寫圖片描述

5.關閉叢集

stop-all.sh