本地Hadoop集羣搭建

什麼是Hadoop?

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

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

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

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

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

機器設置

如下配置都是針對Ubuntu系統的。我準備了3臺機器:apache

  • 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,安裝方式略。bash

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免密登陸其餘節點。app

  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:ssh

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

參考資料

相關文章
相關標籤/搜索