Hadoop 入門教程(超詳細)

1 Hadoop 介紹

1.1 Hadoop 是什麼

  • Hadoop 是一個由 Apache 基金會所開發的分佈式系統基礎架構。
  • 主要解決,海量數據的存儲和海量數據的分析計算問題。
  • 廣義上來說,Hadoop 通常是指一個更廣泛的概念 —— Hadoop 生態圈。

1.2 Hadoop 的發展歷史

  1. Lucene 框架是 Doug Cutting 開創的開源軟件,用 java 書寫代碼,實現與 Google 類似的全文搜索功能,它提供了全文檢索引擎的架構,包括完整的查詢引擎和索引引擎 。

  2. 2001年年底 Lucene 成爲 apache 基金會的一個子項目。

  3. 對於海量數據的場景,Lucene 面對與 Google 同樣的困難:存儲數據困難,檢索速度慢。

  4. 學習和模仿 Google 解決這些問題的辦法 :微型版 Nutch。

  5. 可以說 Google 是 hadoop 的思想之源(Google 在大數據方面的三篇論文)。

    GFS —>HDFS
    Map-Reduce —>MR
    BigTable —>Hbase

  6. 2003-2004 年,Google 公開了部分 GFS 和 Mapreduce 思想的細節,以此爲基礎 Doug Cutting 等人用了 2 年業餘時間實現了 DFS 和 Mapreduce機制,使 Nutch 性能飆升 。

  7. 2005 年Hadoop 作爲 Lucene 的子項目 Nutch 的一部分正式引入 Apache 基金會。

  8. 2006 年 3 月份,Map-Reduce 和 Nutch Distributed File System (NDFS) 分別被納入稱爲 Hadoop 的項目中。

  9. 名字來源於 Doug Cutting 兒子的玩具大象。
    在這裏插入圖片描述

  10. Hadoop 就此誕生並迅速發展,標誌這雲計算時代來臨。

1.3 Hadoop 三大發行版本

  Apache、Cloudera、Hortonworks

  1. Apache 版本最原始(最基礎)的版本,對於入門學習最好。

  2. Cloudera在大型互聯網企業中用的較多。

    ① 2008 年成立的 Cloudera 是最早將 Hadoop 商用的公司,爲合作伙伴提供 Hadoop 的商用解決方案,主要是包括支持、諮詢服務、培訓。
    ② 2009 年 Hadoop 的創始人 Doug Cutting 也加盟 Cloudera 公司。Cloudera 產品主要爲 CDH,Cloudera Manager,Cloudera Support。
    ③ CDH 是Cloudera 的 Hadoop 發行版,完全開源,比 Apache Hadoop 在兼容性,安全性,穩定性上有所增強。
    ④ Cloudera Manager 是集羣的軟件分發及管理監控平臺,可以在幾個小時內部署好一個 Hadoop 集羣,並對集羣的節點及服務進行實時監控。Cloudera Support 即是對 Hadoop 的技術支持。
    ⑤ Cloudera 的標價爲每年每個節點 4000 美元。Cloudera 開發並貢獻了可實時處理大數據的 Impala 項目。

  3. Hortonworks 文檔較好。

    ① 2011 年成立的 Hortonworks 是雅虎與硅谷風投公司 Benchmark Capital 合資組建。
    ② 公司成立之初就吸納了大約 25 名至 30 名專門研究Hadoop的雅虎工程師,上述工程師均在 2005 年開始協助雅虎開發 Hadoop,貢獻了 Hadoop 80% 的代碼。
    ③ 雅虎工程副總裁、雅虎 Hadoop 開發團隊負責人 Eric Baldeschwieler 出任 Hortonworks 的首席執行官。
    ④ Hortonworks 的主打產品是 Hortonworks Data Platform(HDP),也同樣是 100% 開源的產品,HDP 除常見的項目外還包括了 Ambari,一款開源的安裝和管理系統。
    ⑤ HCatalog,一個元數據管理系統,HCatalog 現已集成到 Facebook 開源的 Hive 中。Hortonworks 的 Stinger 開創性的極大的優化了 Hive 項目。Hortonworks 爲入門提供了一個非常好的,易於使用的沙盒。
    ⑥ Hortonworks 開發了很多增強特性並提交至核心主幹,這使得 Apache Hadoop 能夠在包括 Window Server 和 Windows Azure 在內的 microsoft Windows 平臺上本地運行。定價以集羣爲基礎,每10 個節點每年爲 12500 美元。

1.4 Hadoop 的優勢

  1. 高可靠性: Hadoop 底層維護多個數據副本,所以即使 Hadoop 某個計算元素或存儲出現故障,也不會導致數據的丟失。
  2. 高擴展性: 在集羣間分配任務數據,可方便的擴展數以千計的節點。
  3. 高效性: 在 MapReduce 的思想下,Hadoop 是並行工作的,以加快任務處理速度。
  4. 高容錯性: 能夠自動將失敗的任務重新分配。

1.5 Hadoop 的組成

  1. Hadoop 1.x 和 hadoop 2.x 的區別
    在這裏插入圖片描述
    在 Hadoop 1.x 時代,Hadoop 中的 MapReduce 同時處理業務邏輯運算和資源調度,耦合性較大。
    在 Hadoop 2.x 時代,增加了 Yarn。Yarn 只負責資源的調度,MapReduce 只負責運算。

  2. HDFS 框架概述

    NameNode(nn): 存儲文件的元數據,如文件名,文件目錄結構,文件屬性(生成時間、副本數、文件權限),以及每個文件的塊所在的 DataNode 等。
    DataNode(dn): 在本地文件系統存儲文件塊數據,以及塊數據校驗和。
    Secondary DataNode(2nn): 用來監控 HDFS 狀態的輔助後臺程序,每隔一段時間獲取 HDFS 元數據的快照。

  3. Yarn 結構概述
    在這裏插入圖片描述
    ResourceManager(RM):

      (1)處理客戶端請求。
      (2)監控 NodeManager。
      (3)啓動或監控 ApplicationMaster。
      (4)資源的分配與調度。

    NodeManager(NM):

      (1)管理單個節點上的資源。
      (2)處理來自 ResourceManager 的命令。
      (3)處理來自 ApplicationMaster 的命令。
      (4)資源的分配與調度。

    ApplicationMaster(AM):

      (1)負責數據的切分。
      (2)爲應用程序申請資源並分配給內部的任務。
      (3)任務的監控與容錯。

    Container:

      Container 是 Yarn 中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等。

  4. MapReduce 架構概述

    MapReduce 將計算過程分爲兩個階段:Map 階段和 Reduce 階段。

    ① Map 階段並行處理輸入的數據。
    ② Reduce 階段對 Map 結果進行彙總。

1.6 大數據技術生態體系

在這裏插入圖片描述

2 Hadoop 環境搭建

2.1 虛擬機環境準備

  1. 克隆虛擬機

  2. 修改克隆虛擬機的靜態IP

    ① vim /etc/sysconfig/network-scripts/ifcfg-網卡名稱

    終端上輸入 ifconfigip addr,找出網卡名稱在這裏插入圖片描述
    ② 將 BOOTPROTO=dhcp 改成 BOOTPROTO=staticONBOOT=no 改成 ONBOOT=yes
    ③ 並在文件尾部添加以下內容

IPADDR=192.168.217.129
NETMASK=255.255.255.0
GATEWAY=192.168.217.2
DNFS1=192.168.217.2

  在這裏插入圖片描述

  ④ 重啓網關服務

systemctl restart network
  1. 修改主機名
hostnamectl set-hostname lyh
  1. 關閉防火牆

    ① 關閉防火牆

systemctl stop firewalld

  ② 禁止防火牆開機啓動

systemctl disable firewalld

  ③ 關閉 Selinux

vim /etc/sysconfig/selinux

  將 SELINUX=enforcing 改成 SELINUX=disabled

2.2 安裝 jdk

  1. 將 jdk-8u151-linux-x64.tar.gz 安裝包通過 xftp 傳到 CentOS 7 上
  2. 創建 /usr/local/java 文件夾
mkdir /usr/local/java
  1. 將 jdk 壓縮包解壓到 /usr/local/java 目錄下
tar -zxvf jdk-8u151-linux-x64.tar.gz -C /usr/local/java/  
  1. 配置 jdk 的環境變量
vim /etc/profile

  添加以下內容:

# JAVAHOME
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
  1. 讓配置文件生效
source /etc/profile
  1. 輸入 java、javac、java -version 命令檢驗 jdk 是否安裝成功

    注意:如果之前安裝過 jdk 或 系統自帶 jdk,我們需要卸載這些 jdk

    ① 查詢已安裝的 jdk 列表

rpm -qa | grep jdk

  ② 刪除已經安裝的 jdk

yum -y remove XXX(上面查詢到的 jdk 名稱)

   注意:如果終端出現以下錯誤:/var/run/yum.pid 已被鎖定,PID 爲 1610 的另一個程序正在運行。則輸入以下命令:

rm -f /var/run/yum.pid

   之後再執行以上刪除 jdk 的命令

  ③ 重新讓配置文件生效

source /etc/profile

  ④ 輸入 java、javac、java -version 命令檢驗 jdk 是否安裝成功

2.3 安裝 Hadoop

Hadoop 官網

  1. 將 hadoop-2.7.7.tar.gz 安裝包通過 xftp 傳到 CentOS 7 上
  2. 創建 /hadoop 文件夾
mkdir /hadoop
  1. 將 hadoop 壓縮包解壓到 /haddop 的目錄下
tar -zxvf hadoop-2.7.7.tar.gz -C /hadoop/  
  1. 配置 hadoop 環境變量

    ① 在 /etc/profile 文件的尾部添加以下內容:

#HADOOP
export HADOOP_HOME=/hadoop/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

  ② 使配置文件生效

source /etc/profile
  1. 測試是否安裝成功
hadoop version

在這裏插入圖片描述

3 Hadoop 的運行模式

  Hadoop 的運行模式包括:本地模式、僞分佈式模式、完全分佈式模式。

3.1 本地運行模式

3.1.1 官方 Grep 案例

  1. 在 hadoop-2.7.7 文件下面創建一個 input 文件夾
mkdir input
  1. 將 Hadoop 的 xml 配置文件複製到 input
cp etc/hadoop/*.xml input
  1. 在 hadoop-2.7.7 目錄下,執行 share 目錄下的 MapReduce 程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar grep input/ output 'dfs[a-z.]+'
  1. 查看輸出結果
    在這裏插入圖片描述

3.1.2 官方 WordCount 案例

  1. 在 hadoop-2.7.7 文件下面創建一個 wcinput 文件夾
mkdir wcinput
  1. 在 wcinput 文件下創建一個 wc.input 文件
vim wc.input

  在文件中輸入以下內容:

hadoop yarn
hadoop mapreduce
spark
spark
  1. 在 hadoop-2.7.7 目錄下,執行 share 目錄下的 MapReduce 程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount wcinput/ wcoutput
  1. 查看結果
    在這裏插入圖片描述

3.2 僞分佈式運行模式

3.2.1 啓動 HDFS 並運行 MapReduce 程序

  1. 配置集羣,修改 Hadoop 的配置文件(/hadoop/hadoop-2.7.7/etc/hadoop 目錄下)

    ① core-site.xml

<configuration>
  <!-- 指定HDFS中NameNode的地址 -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://lyh:9000</value>
  </property>

  <!-- 指定Hadoop運行時產生文件的存儲目錄 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/hadoop/hadoop-2.7.7/data/tmp</value>
  </property>
</configuration>

  ② hadoop-env.sh

   修改 JAVA_HOME 路徑:

# The java implementation to use.
export JAVA_HOME=/usr/local/java/jdk1.8.0_151

  ③ hdfs-site.xml

<configuration>
  <!-- 指定HDFS副本的數量 -->
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>
  1. 啓動集羣

    ① 格式化 NameNode(第一次啓動時格式化,以後就不要總格式化)

hdfs namenode -format

  ② 啓動 NameNode

hadoop-daemon.sh start namenode

  ③ 啓動 DataNode

hadoop-daemon.sh start datanode
  1. 查看集羣

    ① 查看是否啓動成功
    在這裏插入圖片描述
    ② web 端查看 HDFS 文件系統

    http://192.168.217.129:50070
    在這裏插入圖片描述

  2. 操作集羣

    ① 在 HDFS 文件系統上創建一個 input 文件夾

hdfs dfs -mkdir -p /user/lyh/input

  ② 將測試文件內容上傳到文件系統上

hdfs dfs -put wcinput/wc.input /user/lyh/input/

  ③ 在 hadoop-2.7.7 目錄下,運行 MapReduce 程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/lyh/input/ /user/lyh/output

  ④ 查看輸出結果

   命令行查看:

hdfs dfs -cat /user/atguigu/output/*

在這裏插入圖片描述
   瀏覽器頁面查看:
在這裏插入圖片描述

3.2.2 啓動 YARN 並運行 MapReduce 程序

  1. 配置集羣,修改 Hadoop 的配置文件(/hadoop/hadoop-2.7.7/etc/hadoop 目錄下)

    ① yarn-site.xml

<configuration>
  <!-- Reducer獲取數據的方式 -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

  <!-- 指定YARN的ResourceManager的地址 -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>lyh</value>
  </property>
</configuration>

  ② yarn-env.sh

   修改 JAVA_HOME 路徑:

export JAVA_HOME=/usr/local/java/jdk1.8.0_151

  ③ mapred-env.sh

   修改 JAVA_HOME 路徑:

export JAVA_HOME=/usr/local/java/jdk1.8.0_151

  ④ 將 mapred-site.xml.template 重新命名爲 mapred-site.xml

mv mapred-site.xml.template mapred-site.xml
<configuration>
  <!-- 指定MR運行在YARN上 -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
  1. 啓動集羣

    ① 啓動前必須保證 NameNode 和 DataNode 已經啓動
    ② 啓動 ResourceManager

yarn-daemon.sh start resourcemanager

  ③ 啓動NodeManager

yarn-daemon.sh start nodemanager
  1. 查看集羣

    ① 查看是否啓動成功
    在這裏插入圖片描述
    ② web 端查看 YARN 頁面

    http://192.168.217.129:8088
    在這裏插入圖片描述

  2. 操作集羣

    ① 刪除 HDFS 文件系統上的 output 文件

hdfs dfs -rm -R /user/lyh/output

  ② 在 hadoop-2.7.7 目錄下,運行 MapReduce 程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/lyh/input  /user/lyh/output

  ③ 查看運行結果

   命令行查看:

hdfs dfs -cat /user/lyh/output/*

在這裏插入圖片描述
   瀏覽器頁面查看:
在這裏插入圖片描述

3.2.3 配置歷史服務器

  爲了查看程序的歷史運行情況,需要配置一下歷史服務器。

  1. 配置 mapred-site.xml

    在該文件裏面增加以下配置:

  <!-- 歷史服務器端地址 -->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>lyh:10020</value>
  </property>

  <!-- 歷史服務器web端地址 -->
  <property>
     <name>mapreduce.jobhistory.webapp.address</name>
     <value>lyh:19888</value>
  </property>
  1. 啓動歷史服務器
mr-jobhistory-daemon.sh start historyserver
  1. 查看歷史服務器是否啓動
    在這裏插入圖片描述

  2. 查看 JobHistory

    http://192.168.217.129:19888/
    在這裏插入圖片描述

3.2.4 配置日誌的聚集

  日誌聚集概念:應用運行完成以後,將程序運行日誌信息上傳到 HDFS 系統上。
  日誌聚集功能好處:可以方便的查看到程序運行詳情,方便開發調試。

  注意:開啓日誌聚集功能,需要重新啓動 NodeManager 、ResourceManager 和 HistoryManager。

  1. 關閉 NodeManager 、ResourceManager 和 HistoryManager
yarn-daemon.sh stop resourcemanager
yarn-daemon.sh stop nodemanager
mr-jobhistory-daemon.sh stop historyserver
  1. 配置 yarn-site.xml

    在該文件裏面增加以下配置:

  <!-- 日誌聚集功能使能 -->
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>

  <!-- 日誌保留時間設置7天 -->
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
  <value>604800</value>
  </property>
  1. 啓動 NodeManager 、ResourceManager 和 HistoryManager
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
mr-jobhistory-daemon.sh start historyserver
  1. 刪除HDFS上已經存在的輸出文件
hdfs dfs -rm -R /user/lyh/output
  1. 在 hadoop-2.7.7 目錄下,執行 WordCount 程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/lyh/input /user/lyh/output
  1. 查看日誌
    在這裏插入圖片描述

3.3 完全分佈式運行模式

3.3.1 虛擬機準備

  1. 準備(克隆) 3 臺客戶機
主機名稱 IP 地址
master 192.168.217.130
slave1 192.168.217.131
slave2 192.168.217.132
  1. 每臺機器分別修改 /etc/hosts 文件,將每個機器的 hostname 和 ip 對應
vim /etc/hosts
192.168.217.130 master
192.168.217.131 slave1
192.168.217.132 slave2
  1. 之後詳細操作查看 2.1

3.3.2 編寫集羣分發腳本 xsync

  1. scp(secure copy)安全拷貝

    ① scp 定義:

      scp 可以實現服務器與服務器之間的數據拷貝。

    ② 基本語法:

scp -r 要拷貝的文件路徑/名稱  目的用戶@主機:目的路徑/名稱
  1. rsync(remote synchronize)遠程同步工具

    ① rsync 定義:

      rsync 主要用於備份和鏡像。具有速度快、避免複製相同內容和支持符號鏈接的優點。

      rsync 和 scp 區別:用 rsync 做文件的複製要比 scp 的速度快,rsync 只對差異文件做更新。scp 是把所有文件都複製過去。

    ② 基本語法:

rsync -rvl 要拷貝的文件路徑/名稱  目的用戶@主機:目的路徑/名稱

  說明:-v:顯示覆制過程 、-l:拷貝符號鏈接

  1. xsync 集羣分發腳本

    需求:循環複製文件到所有節點的相同目錄下

    ① 在 /usr/local/bin 目錄下創建 xsync 文件

vim xsync

   在文件中輸入以下內容:

#!/bin/bash
#1 獲取輸入參數個數,如果沒有參數,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi

#2 獲取文件名稱
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 獲取上級目錄到絕對路徑
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 獲取當前用戶名稱
user=`whoami`

#5 循環
for i in master slave1 slave2
  do
    echo "****************** $i *********************"
    rsync -rvl $pdir/$fname $user@$i:$pdir
  done

  ② 修改腳本 xsync 具有執行權限

chmod 777 xsync

  ③ 調用腳本形式:xsync 文件名稱

3.3.3 集羣配置

  1. 集羣部署規劃
master slave1 slave2
HDFS NameNode
DataNode
DataNode SecondaryNameNode
DataNode
YARN NodeManager ResourceManager
NodeManager
NodeManager
  1. 配置集羣

    ⑴ 配置核心文件

      配置 core-site.xml

<configuration>
  <!-- 指定HDFS中NameNode的地址 -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
  </property>

  <!-- 指定Hadoop運行時產生文件的存儲目錄 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/hadoop/hadoop-2.7.7/data/tmp</value>
  </property>
</configuration>

  ⑵ HDFS 配置文件

   ① 配置 hadoop-env.sh

    修改 JAVA_HOME 路徑:

# The java implementation to use.
export JAVA_HOME=/usr/local/java/jdk1.8.0_151

   ② 配置 hdfs-site.xml

<configuration>
  <!-- 指定HDFS副本的數量 -->
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
  
  <!-- 指定Hadoop輔助名稱節點主機配置 -->
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>slave2:50090</value>
  </property>
</configuration>

  ⑶ YARN 配置文件

   ① 配置 yarn-env.sh

   修改 JAVA_HOME 路徑:

export JAVA_HOME=/usr/local/java/jdk1.8.0_151

   ② 配置 yarn-site.xml

<configuration>
  <!-- Reducer獲取數據的方式 -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

  <!-- 指定YARN的ResourceManager的地址 -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>slave1</value>
  </property>

  <!-- 日誌聚集功能使能 -->
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>

  <!-- 日誌保留時間設置7天 -->
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
  <value>604800</value>
  </property>
</configuration>

  ⑷ MapReduce 配置文件

   ① 配置 mapred-env.sh

    修改 JAVA_HOME 路徑:

export JAVA_HOME=/usr/local/java/jdk1.8.0_151

   ② 配置 mapred-site.xml

<configuration>
  <!-- 指定MR運行在YARN上 -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>

  <!-- 歷史服務器端地址 -->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>master:10020</value>
  </property>

  <!-- 歷史服務器web端地址 -->
  <property>
     <name>mapreduce.jobhistory.webapp.address</name>
     <value>master:19888</value>
  </property>
</configuration>
  1. 在集羣上分發配置好的 Hadoop 目錄
xsync /hadoop/

3.3.4 集羣單點啓動

  1. 如果集羣是第一次啓動,需要格式化 NameNode
hadoop namenode -format
  1. 在 master上啓動 NameNode
hadoop-daemon.sh start namenode
  1. 在 master、slave1 和 slave2 上分別啓動 DataNode
hadoop-daemon.sh start datanode

3.3.5 配置 SSH 無密登錄

  1. 免密登錄原理
    在這裏插入圖片描述

  2. 生成公鑰和私鑰

    在 /root 目錄下輸入:

ssh-keygen -t rsa

  然後敲(三個回車),就會在 .ssh 目錄下生成兩個文件 id_rsa(私鑰)、id_rsa.pub(公鑰)

  1. 將公鑰拷貝到要免密登錄的目標機器上
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
  1. 在另兩臺機器上也做 2、3 操作

3.3.6 羣起集羣

  1. 配置 slaves(/hadoop/hadoop-2.7.7/etc/hadoop/slaves)

    ① 在該文件中增加如下內容:

master
slave1
slave2

  注意:該文件中添加的內容結尾不允許有空格,文件中不允許有空行。

  ② 同步所有節點配置文件

xsync slaves
  1. 啓動集羣

    ① 如果集羣是第一次啓動,需要格式化 NameNode (注意格式化之前,一定要先停止上次啓動的所有 namenode 和 datanode 進程,然後再刪除 data 和 log 數據)

hdfs namenode -format

  ② 啓動 HDFS

start-dfs.sh

  ③ 啓動 YARN(slave1 上)

注意:NameNode 和 ResourceManger 如果不是同一臺機器,不能在 NameNode 上啓動 YARN,應該在 ResouceManager 所在的機器上啓動 YARN。

start-yarn.sh
  1. 編寫查看集羣所有節點 jps 腳本 alljps

    ① 在 /usr/local/bin 目錄下創建文件 alljps

vim alljps

   在文件中輸入以下內容:

#!/bin/bash

for i in master slave1 slave2
  do
    echo "****************** $i *********************"
    ssh $i "source /etc/profile && jps"
  done

  ② 修改腳本 alljps 具有執行權限

chmod 777 alljps

  ③ 調用腳本形式:alljps
  在這裏插入圖片描述

3.3.7 集羣時間同步

  時間同步的方式:找一個機器,作爲時間服務器,所有的機器與這臺集羣時間進行定時的同步,比如,每隔十分鐘,同步一次時間。

  1. 時間服務器配置(必須 root 用戶)

    ① 安裝 ntp

yum install ntp

  ② 修改 ntp 配置文件

vim /etc/ntp.conf

  修改內容如下:

   ⑴ 授權 192.168.1.0-192.168.1.255 網段上的所有機器可以從這臺機器上查詢和同步時間

#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

   ⑵ 集羣在局域網中,不使用其他互聯網上的時間

#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

   ⑶ 當該節點丟失網絡連接,依然可以採用本地時間作爲時間服務器爲集羣中的其他節點提供時間同步

server 127.127.1.0
fudge 127.127.1.0 stratum 10

  ③ 修改/etc/sysconfig/ntpd 文件

vim /etc/sysconfig/ntpd

   添加內容如下(讓硬件時間與系統時間一起同步)

SYNC_HWCLOCK=yes

  ④ 重新啓動 ntpd 服務

systemctl restart ntpd.service

  ⑤ 設置 ntpd 服務開機啓動

systemctl enable ntpd.service
  1. 其他機器配置(必須root用戶)

    在其他機器配置10分鐘與時間服務器同步一次

crontab -e

   編寫定時任務如下:

*/10 * * * * /usr/sbin/ntpdate master
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章