1. 程式人生 > >Hadoop 部署文檔

Hadoop 部署文檔

原本 sin releases 網絡文件系統 service www cluster 參考 兩個文件

  • Hadoop 部署文檔
    • 1 先決條件
    • 2 下載二進制文件
    • 3 修改配置文件
      • 3.1 core-site.xml
      • 3.2 hdfs-site.xml
      • 3.3 mapred-site.xml
      • 3.4 yarn.xml
      • 3.5 slaves
      • 3.6 hadoop-env.sh
    • 4 將配置好的 Hadoop 分發到其他節點
    • 5 啟動集群
      • 5.1 格式化 HDFS
      • 5.2 啟動集群
    • 6 提交示例任務
    • 7 坑
      • 7.1 hostname 配置
      • 7.2 format 命令
      • 7.3 日誌
      • 7.4 配置文件的同步
    • 8 參考

本文檔中的集群包含 192.168.105.10/11/12 三臺機器。三臺機器的 hostname 分別設為 ivic10/ivic11/ivic12,其中第一臺機器作為 master,後兩臺作為 slaves。

1 先決條件

在開始安裝 Hadoop 之前,請確認集群的每臺機器上均已安裝 JDK1.8(註意是 SunJDK 而不是 OpenJDK),並且已經配置好密鑰登陸(服務器兩兩之間可以無密碼SSH登陸)。

除此之外還需要在三臺機器的 /etc/hosts 文件中寫入以下內容(需要root權限)

192.168.105.10 ivic10
192.168.105.11 ivic11
192.168.105.12 ivic12

配置好以後,在任意一臺機器上可以用 hostname 無密碼 SSH 登陸到另外兩臺機器上

#在ivic10上操作
ssh ivic11
#如果一切正常,應該可以直接登陸到ivic11上

2 下載二進制文件

在Hadoop的 release 頁面中有數個版本可以選擇,因為後續要在 Hadoop 集群上部署其他應用,所以這裏選擇兼容性最好的 2.7.7 版本。

mkdir ~/bigdata
cd ~/bigdata
#Apache網站上的鏡像太慢,從清華鏡像下載
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
#解壓到當前文件夾
tar -xzvf hadoop-2.7.7.tar.gz -C .

3 修改配置文件

首先在 ~/.profile 中添加環境變量

export HADOOP_HOME=/home/ivic/bigdata/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin

source 命令讓環境變量立即生效

source ~/.profile

然後切換到 Hadoop 的配置文件目錄下,開始修改 Hadoop 的配置文件 cd ~/bigdata/hadoop-2.7.7/etc/hadoop

3.1 core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ivic10:9000/</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/tmp/hadoop-2.7.7</value>
    </property>
</configuration>

通過fs.defaultFS指定 NameNode 的 IP 地址和端口號,通過hadoop.tmp.dir指定臨時文件存放路徑

3.2 hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/ivic/bigdata/hdfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/ivic/bigdata/hdfs/data</value>
    </property>
</configuration>

dfs.replication 指定備份數目為 3,dfs.name.dir 指定 NameNode 的文件存儲路徑,dfs.data.dir 指定 DataNode 的文件存儲路徑。

3.3 mapred-site.xml

#將mapred-site.xml.template復制一份
cp mapred-site.xml.template mapreduce-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

3.4 yarn.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>ivic10</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    <description>Whether virtual memory limits will be enforced for containers</description>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>4</value>
        <description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>
    </property>
</configuration>

配置後兩項是因為在部署 Flink on Yarn 的過程中出現了 FlinkYarnSession 無法啟動的問題,從 StackOverflow 得知應該在此處加上這兩項配置,否則虛擬內存占用會超出限制導致 Flink 無法啟動。

3.5 slaves

ivic11
ivic12

3.6 hadoop-env.sh

export JAVA_HOME=/usr/local/jdk1.8.0_201

4 將配置好的 Hadoop 分發到其他節點

#需要先在11/12節點上建立 /homne/ivic/bigdata/ 文件夾
scp -r /home/ivic/bigdata/hadoop-2.7.7 192.168.105.11:/home/ivic/bigdata/hadoop-2.7.7
scp -r /home/ivic/bigdata/hadoop-2.7.7 192.168.105.12:/home/ivic/bigdata/hadoop-2.7.7

然後分別在其他節點上配置環境變量 HADOOP_HOMEPATH

5 啟動集群

5.1 格式化 HDFS

cd ~/bigdata/hadoop-2.7.7
hdfs namenode -format

註意:此命令只有在第一次啟動前需要執行,目的是格式化 NameNode

5.2 啟動集群

#啟動 HDFS
./sbin/start-dfs.sh
#啟動 YARN
./sbin/start-yarn.sh
#以上兩條命令也可以用 ./sbin/start-all.sh 代替
#關閉集群 ./sbin/stop-all.sh

使用 jps 命令查看服務運行情況

#master節點中運行的服務
25928 SecondaryNameNode
25742 NameNode
26387 Jps
26078 ResourceManager
#slave節點中運行的服務
24002 NodeManager
23899 DataNode
24179 Jps

6 提交示例任務

如果一切順利,現在可以向 Hadoop 提交任務了。這裏我們使用 Hadoop 自帶的實例程序運行 wordcount 任務,以此驗證 Hadoop 是否部署成功。

cd ~/bigdata/hadoop-2.7.7
#把當前路徑下的 LICENSE.txt 文件復制到 HDFS 中
hadoop fs -put ./LICENSE.txt /wordcount/input
#提交任務,最後兩個參數分別指定任務的輸入和輸出
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /wordcount/input /wordcount/output
#查看輸出路徑
hadoop fs -ls /wordcount/output
#如果一切正常,該路徑下包含兩個文件
#第一個文件是空文件,表示任務運行成功
/wordcount/output/_SUCCESS
#第二個文件是輸出文件,統計了 LICENSE.txt 中每個單詞出現的次數
/wordcount/output/part-r-00000

7 坑

7.1 hostname 配置

之前部署 Hadoop 的時候都是在 192.168.7.x 的機器上,那些機器的 hostname 和 hosts 都已經配置好了,直接用就行。但是 192.168.105.x 的這幾臺機器並沒有配好,每臺機器的 hostname 都是 ivic。
一開始嫌麻煩就沒配,在配置文件裏直接填了 IP 地址,結果最後啟動集群以後就出現了一個很奇怪的現象————用 jps 命令查看每個節點的服務,一切正常,但在 web ui 裏看不到可用的 DataNode,總可用空間是 0。後來看 DataNode 上的日誌文件才發現是 hostname 無法解析,不知道為什麽 Hadoop 把 IP 地址當作 hostname 了。於是重新配置 hostname,配好以後再重啟 Hadoop,問題解決。

hostname 的 配置過程如下(這幾臺機器上裝的是 Ubuntu 18.04,不同系統的配置過程略有區別)

#將該文件中的內容修改為想要的hostname,比如ivic10
sudo vim /etc/hostname
#讓修改立即生效
hostname ivic10

7.2 format 命令

在排查上一個問題的過程時,我曾經嘗試把 Hadoop 集群停掉然後用 hdfs namenode -format 命令格式化 NameNode,達到“恢復出廠設置”的效果。然而這樣做以後再啟動 hdfs,原本能啟動的 DataNode 現在也啟動不了了。瀏覽 NameNode 的日誌發現問題出在 DataNode 的 cluster id 和 NameNode 不一致,所以無法啟動。原來 format 命令會為 NameNode 生成一個新的 cluster id,而 DataNode 的 cluster id 信息存儲在 dfs.datanode.data.dir 中,並沒有發生變化,因此會產生沖突。解決方案是在執行 format 命令之後刪除所有 DataNode 的 dfs.datanode.data.dir,也就是 /home/ivic/bigdata/hdfs/data文件夾。

7.3 日誌

Hadoop 的日誌系統很完善,出了問題在日誌裏都能找到原因。如果 NameNode 啟動不了,就去看 NameNode 的日誌,DataNode 啟動不了,就去看 DataNode 的日誌。日誌文件路徑為 $HADOOP_HOME/logs

7.4 配置文件的同步

如果集群用的是 nfs,改一臺機器的配置文件其他機器上就全部同步修改好了(不過要註意不要把 dfs.namenode.name.dirdfs.datanode.data.dir 配置到網絡文件系統上)。

如果沒有 nfs 該怎麽辦呢,難道每次都要手動修改所有機器上的配置文件嗎?不是滴,這時候就需要祭出神器 rsync 了,只要用一條命令就可以把修改推送到其他機器上。

舉個例子,比如你剛在 ivic10 上修改了 $HADOOP_HOME/etc/hadoop/ 路徑下的 core-site.xml,hdfs-site.xml,yarn.xml 三個文件,如何把修改同步到 ivic11 和 ivic12 呢?

cd $HADOOP_HOME/etc
for ip in 11 12; do rsync -r hadoop ivic@ivic${ip}:/home/ivic/bigdata/hadoop-2.7.7/etc; done

搞定。

8 參考

  1. FS Shell Commands
  2. rsync 的使用方法
  3. Hadoop 分布式集群搭建
  4. Hadoop Cluster Setup

Hadoop 部署文檔