本地Hadoop集群搭建


什么是Hadoop?

Hadoop是一個開源的Apache項目,通常用來進行大數據處理。

Hadoop集群的架構:
master節點維護分布式文件系統的所有信息,並負責調度資源分配,在Hadoop集群中node-master就是master的角色,其包括兩個服務:

  • NameNode: 負責管理分布式文件系統,維護了數據塊在集群中的存儲信息;
  • ResourceManager: 管理YARN任務,同時負責在worker節點的調度和執行。

worker節點負責存放數據,並提供執行任務的能力。在worker節點上包含兩個進程:

  • DataNode: 管理在該節點上存放的物理數據,稱為NameNode
  • NodeManager: 管理在該節點上運行的任務。

機器設置

以下配置都是針對Ubuntu系統的。我准備了3台機器:

  • node-master: 192.168.0.113
  • node1: 192.168.0.114
  • node2: 192.168.0.115

用戶hadoop創建

  1. 創建用戶hadoop,並設置密碼:
sudo adduser hadoop
  1. hadoop用戶添加到sudo用戶組獲取管理員權限:
sudo adduser hadoop sudo

安裝JDK

我安裝的是JDK8,安裝方式略。

host文件配置

為了節點之間可以方便的通過名字來通信,我們在hosts文件中加入如下內容:

192.168.0.113  node-master
192.168.0.114  node1
192.168.0.115  node2
192.168.0.116  node3

配置ssh免密登錄

配置了ssh證書后,master階段通過ssh免密登錄其他節點。

  1. 使用hadoop用戶登錄到mastr機器,並創建SSH證書:
ssh-keygen -b 4096 -C 'hadoop-yarn'
  1. 查看生成的公鑰,並復制下公鑰的內容:
cat /home/hadoop/.ssh/id_rsa.pub
  1. 在每個機器的/home/hadoop/.ssh文件夾下創建名為master.pub的文件,並將上面復制的公鑰信息粘貼到里面;
  2. 將證書信息拷貝到已授權秘鑰文件中:
cat ~/.ssh/master.pub >> ~/.ssh/authorized_keys

Hadoop安裝

登錄到node-master,下載hadoop,並解壓:

http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz
tar -xzf hadoop-3.1.3.tar.gz
ln -s hadoop-3.1.3 hadoop

環境變量設置

  1. 添加Hadoop可執行目錄到PATH。修改/home/hadoop/.profile,添加如下內容:
PATH=/home/hadoop/hadoop/bin:/home/hadoop/hadoop/sbin:$PATH
  1. 添加hadoop到shell的PATH路徑。修改.bashrc,添加下面的內容:
export HADOOP_HOME=/home/hadoop/hadoop
export PATH=${PATH}:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

MASTER節點設置

設置JAVA_HOME

這里我安裝的是ORACLE版本的JDK,目錄/usr/local/jdk,修改~/hadoop/etc/hadoop-env.sh,設置JAVA_HOME:

export JAVA_HOME=/usr/local/jdk

設置NameNode的位置

修改~/hadoop/etc/hadoop/core-site.xml文件,設置NameNode的路徑為node-master的9000端口:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
        <property>
            <name>fs.default.name</name>
            <value>hdfs://node-master:9000</value>
        </property>
    </configuration>

設置HDFS路徑

修改hdfs-site.xml,內容如下:

<configuration>
    <property>
            <name>dfs.namenode.name.dir</name>
            <value>/home/hadoop/data/nameNode</value>
    </property>

    <property>
            <name>dfs.datanode.data.dir</name>
            <value>/home/hadoop/data/dataNode</value>
    </property>

    <property>
            <name>dfs.replication</name>
            <value>1</value>
    </property>
</configuration>

最后一個屬性dfs.replication表示該集群上的數據被冗余多少倍。注意replication的值不要超過worker節點的實際數量。

設置YARN作為任務調度器

修改mapred-site.xml,設置YARN作為默認的MapReduce操作的框架:

<configuration>
    <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
    </property>
    <property>
            <name>yarn.app.mapreduce.am.env</name>
            <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    </property>
    <property>
            <name>mapreduce.map.env</name>
            <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    </property>
    <property>
            <name>mapreduce.reduce.env</name>
            <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    </property>
</configuration>

配置YARN

修改yarn-site.xmlyarn.resourcemanager.hostname的值設置為node-master的ip地址:

<configuration>
    <property>
            <name>yarn.acl.enable</name>
            <value>0</value>
    </property>

    <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>203.0.113.0</value>
    </property>

    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>
</configuration>

設置Worker

創建一個名為workers的啟動腳本,用來啟動需要的進程。修改~/hadoop/etc/hadoop/workers,把所有的worker節點都加進去。

修改內存分配

默認的內存分配對於內存小於8GB的機器並不合適,所有對低內存的機器需要做一些特殊配置。
一個YARN任務的執行會用用到兩種類型的資源:

  • 應用MASTER(AM)負責監控應用並協調集群中的exector;
  • AM創建的Executor才會真正的執行任務。對MapReduce任務,exectors上會並行的執行map或者reduce的操作。
    兩者都是運行在worker節點上。每個worker節點運行一個NodeManager的進程,該進程負責在該節點上創建容器。整個集群被ResourceManager管理,ResourceManger在所有的worker節點上根據容量需求以及當前的負載,進行容器的分配與創建。

為了集群能夠正常工作,下面4個配置必須合理的配置:

  1. 單個節點上YARN容器最多可以分配多少內存。這個配置的值需要比其他的都大,否則容器分配會被拒,application會失敗。但是,這個值不應該是該節點的實際內存大小。該配置是yarn.nodemanager.resource.memory-mb,配置在yarn-site.xml中;
  2. 每個容器可以分配的最大最小內存。如果一個容器申請的內存超過設置的最大值,否則分配會失敗,並會被分配成最小內存的整數倍。配置yarn.scheduler.maximum-allocation-mbyarn.scheduler.minimum-allocation-mb,都在yarn-site.xml文件中配置;
  3. ApplicationMaster分配的內存大小。yarn.app.mapreduce.am.resource.mb,配置在mapred-site.xml中;
  4. 每個map或者reduce操作可以分配的內存大小。這個值需要小於最大內存大小。mapreduce.map.memory.mbmapreduce.reduce.memory.mb,都配置在mapred-site.xml

以上四個類型的配置之間的關系如下圖:

image

以2G內存的節點為例,可行的配置如下:

屬性
yarn.nodemanager.resource.memory-mb 1536
yarn.scheduler.maximum-allocation-mb 1536
yarn.scheduler.minimum-allocation-mb 128
yarn.app.mapreduce.am.resource.mb 512
mapreduce.map.memory.mb 256
mapreduce.reduce.memory.mb 256
  1. 修改home/hadoop/hadoop/etc/hadoop/yarn-site.xml,添加如下配置:
<property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>1536</value>
</property>

<property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>1536</value>
</property>

<property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>128</value>
</property>

<property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
</property>

最后一個配置禁用虛擬內存檢查。

  1. 修改/home/hadoop/hadoop/etc/hadoop/mapred-site.xml, 添加如下內容:
<property>
        <name>yarn.app.mapreduce.am.resource.mb</name>
        <value>512</value>
</property>

<property>
        <name>mapreduce.map.memory.mb</name>
        <value>256</value>
</property>

<property>
        <name>mapreduce.reduce.memory.mb</name>
        <value>256</value>
</property>

格式化HDFS

和正常的單機文件系統一樣,HDFS在使用之前也需要格式化。在node-master上,運行如下命令:

hdfs namenode -format

到這里,hadoop的安裝完成了,可以運行了。

運行和監控

接下來看下如何在NameNode和DataNodes上啟動HDFS,以及如何進行監控。

HDFS的啟停

  1. 在node-master上運行下面的命令啟動HDFS:
start-dfs.sh

這個命令會在node-master上啟動NameNodeSecondaryNameNode進程,同時在數據節點上創建DataNode進程。數據節點根據workers文件中的配置。

  1. 檢查node-master和其他節點上的進程情況,可以通過jps命令來查看。在node-master上運行jps,可以看到NameNode和SecondaryNameNode,在worker節點上運行jps課題看到DataNode進程。
  2. 在node-master上通過下面的命令開停止hdfs:
stop-dfs.sh

監控HDFS集群

  1. 通過hdfs dfsadmin命令可以獲得一些有用的信息:
  2. 另外HDFS提供了一個Web UI來查看hdfs集群的狀態,訪問地址: http://node-master-IP:9870

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM