Hadoop實戰篇(1)

Hadoop實戰篇(1)

Hadoop實戰篇1

做者 | WenasWeihtml

前言

在前面介紹過了Hadoop-離線批處理技術的總體架構,接下來便開始學習安裝配置並使用 Hadoop ; 將從如下幾點介紹:java

  • Linux 環境的配置與安裝 Hadoop
  • Hadoop 的三種安裝模式介紹
  • 本地模式安裝
  • 僞集羣模式安裝

一 Linux環境的配置與安裝Hadoop

Hadoop須要使用到 Linux 環境上的一些基本的配置須要,Hadoop 用戶組和用戶添加,免密登陸操做,JDK安裝node

1.1 VMWare中Ubuntu網絡配置

在使用 VMWare 安裝 Ubuntu18.04-Linux 操做系統下時產生系統配置問題能夠經過分享的博文進行配置,CSDN跳轉連接: VMWare中Ubuntu網絡配置git

其中包含了如下幾個重要操做步驟:apache

  • buntu系統信息與修改主機名
  • Windows設置VMWare的NAT網絡
  • Linux網關設置與配置靜態IP
  • Linux修改hosts文件
  • Linux免密碼登陸

1.2 Hadoop 用戶組和用戶添加

1.2.1 添加Hadoop用戶組和用戶

以 root 用戶登陸 Linux-Ubuntu 18.04虛擬機,執行命令:瀏覽器

$ groupadd hadoop
$ useradd -r -g hadoop hadoop
1.2.2 賦予Hadoop用戶目錄權限

/usr/local 目錄權限賦予 Hadoop 用戶, 命令以下:服務器

$ chown -R hadoop.hadoop /usr/local/
$ chown -R hadoop.hadoop /tmp/
$ chown -R hadoop.hadoop /home/
1.2.3 賦予Hadoop用戶sodu權限

編輯/etc/sudoers文件,在root ALL=(ALL:ALL) ALL下添加hadoop ALL=(ALL:ALL) ALL微信

$ vi /etc/sudoers

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
root    ALL=(ALL:ALL) ALL
hadoop  ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL
1.2.4 賦予Hadoop用戶登陸密碼
$ passwd hadoop

Enter new UNIX password: 輸入新密碼
Retype new UNIX password: 確認新密碼
passwd: password updated successfully

1.3 JDK安裝

Linux安裝JDK能夠參照分享的博文《Logstash-數據流引擎》-<第三節:Logstash安裝>--(第二小節: 3.2 Linux安裝JDK進行)安裝配置到每一臺主機上,CSDN跳轉連接: Logstash-數據流引擎網絡

1.4 Hadoop官網下載

官網下載:https://hadoop.apache.org/rel... Binary download架構

  • 使用 wget 命名下載(下載目錄是當前目錄):

例如:version3.3.0 https://mirrors.bfsu.edu.cn/a...

$ wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
  • 解壓、移動到你想要放置的文件夾: /usr/local

    $ mv ./hadoop-3.3.0.tar.gz /usr/local
    
    $ cd /usr/local
    
    $ tar -zvxf hadoop-3.3.0.tar.gz

1.5 配置Hadoop環境

  • 修改配置文件/etc/profile:

    $ vi /etc/profile
    
    # 類同JDK配置添加
    export JAVA_HOME=/usr/local/java/jdk1.8.0_152
    export JRE_HOME=/usr/local/java/jdk1.8.0_152/jre
    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export HADOOP_HOME=/usr/local/hadoop-3.3.0
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
  • 使配置文件生效

    $ source /etc/profile
  • 查看Hadoop配置是否成功

    $ hadoop version
    
    Hadoop 3.3.0
    Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r aa96f1871bfd858f9bac59cf2a81ec470da649af
    Compiled by brahma on 2020-07-06T18:44Z
    Compiled with protoc 3.7.1
    From source with checksum 5dc29b802d6ccd77b262ef9d04d19c4
    This command was run using /usr/local/hadoop-3.3.0/share/hadoop/common/hadoop-common-3.3.0.jar

    從結果能夠看出,Hadoop版本爲 Hadoop 3.3.0,說明 Hadoop 環境安裝並配置成功。

二 Hadoop 的三種安裝模式介紹

Hadoop 提供了3種不一樣獲得安裝模式,分別爲單機模式、僞集羣模式和集羣模式。

2.1 單機模式

單機模式(本地模式):Hadoop默認模式、即非分佈式模式、無需進行其餘配置便可運行非分佈式,即java單進程,方便進行調試、跟蹤和排除問題,只須要在 Hadoop 的 hadoop-env.sh 文件中配置 JAVA_HOME 便可。

本地單機模式以 Hadoop Jar 命令運行 Hadoop 程序,並將運行結果直接輸出到本地磁盤。

2.2 僞集羣模式

Hadoop在單節點(單點故障問題)上以僞分佈式的方式運行,Hadoop進程以分離的java進程來運行,節點既做爲NameNode也做爲DataNode,同時讀取的是HDFS中的文件。可以在邏輯上提供與集羣模式同樣的運行環境,在物理上僞集羣模式部署在單臺服務器上:而集羣模式須要部署在多臺服務器上,以實現物理上的徹底集羣分佈。

僞集羣模式中須要在 Hadoop 的 hadoop-env.sh 文件中配置JAVA HOME 外,還要配置 Hadoop 所使用的文件系統、HDFS 的副本數量和 YARN 地址,以及服務器的 SSH 免密碼登陸等。
僞集羣模式以 HadopJar 命令運行 Hadoop 程序,並將運行結果輸出到 HDFS 中。

2.3 集羣模式

集羣模式也稱徹底集羣模式,它與僞集羣模式有着本質的區別: 集羣模式是在物理服務器上實現的徹底分佈式集羣,部署在多臺物理服務器上;而僞集羣模式在邏輯上是集羣模式,但它是部署在單臺物理服務器上的。

對於生產環境,要求 Hadoop 環境的高可靠性和高可用性,每每某個節點故障就會致使整個集羣不可用;同時,要求生產環境的數據必須可靠,某個數據節點出現故障或者數據發生丟失後,數據必須可恢復。這就要求生產環境上必須部署Hadoop 的集羣模式,以應對生產環境的各類要求。

集羣模式的部署是3種安裝模式中最複雜的,它須要部署在多臺物理服務器上,要提早將服務器環境規劃好,除了要配置 Hadoop 所使用的文件系統、HDFS 的副本數量和 YARN 地址外。還要配置各臺服務器之間的 SSH 免密碼登陸、各 Hadoop 節點之間的 RPC通訊、NameNode 失敗自動切換機制、HA高可用等。另外,還須要安裝配置分佈式應用協調服務--Zookeeper。

集羣模式以 Hadoop Jar 命令運行 Hadoop 程序,並將運行結果輸出到 HDFS 中。

三 單機模式

3.1 修改Hadoop配置文件

單機模式下修改 Hadoop 配置文件 hadoop-env.sh,添加上 Java 環境配置路徑

$ vi /usr/local/hadoop-3.3.0/etc/hadoop/hadoop-env.sh

# 查找到JAVA_HOME並添加JAVA_HOME地址
export JAVA_HOME=/usr/local/java/jdk1.8.0_152

3.2 建立測試數據文件

  • 建立目錄/home/hadoop/input:

    $mkdir -p /home/hadoop/input
  • 建立測試數據文件data.input:

    $ cd /home/hadoop/input/
    
    $ vi data.input
    
    # 寫入數據內容
    hadoop  mapreduce hive flume
    hbase spark storm flume
    sqoop  hadoop  hive  kafka
    spark  hadoop  storm

3.3 運行Hadoop測試用例

運行 Hadoop 自帶的 MapReduce 示例程序,統計指定文件中的單詞個數。

  • 運行 Hadoop 自帶的 MapReduce 程序命令:

    $ hadoop jar /usr/local/hadoop-3.3.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /home/hadoop/input/data.input /home/hadoop/output
  • 通用格式說明以下:

    • hadoop jar: 以 Hadoop 命令行的形式運行 MapReduce程序;
    • /usr/local/hadoop-3.3.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar: Hadoop 自帶的 MapReduce 程序所在 Jar 包的完整路徑;
    • wordcount: 標識使用的是單詞計數的 MapReduce 程序,由於 hadoop-mapreduce-examples-3.3.0.jar 文件中存在多個MapReduce程序。
  • 參數說明以下。

    • /home/hadoop/input/data.input: 輸入 data.input 文件所在的本地完整路徑名稱;
    • /home/hadoop/output: 本地結果數據輸出目錄,不能手動建立,須要Hadoop程序建立。
  • 執行成功結果:

    2021-06-02 01:08:40,374 INFO mapreduce.Job:  map 100% reduce 100%
    2021-06-02 01:08:40,375 INFO mapreduce.Job: Job job_local794874982_0001 completed successfully
  • 查看文件結果

查看/home/hadoop/output文件夾和生成文件以下:

$ cd /home/hadoop/output
$ /home/hadoop/output# ll
total 20
drwxr-xr-x 2 root root 4096 Jun  2 01:08 ./
drwxr-xr-x 4 root root 4096 Jun  2 01:08 ../
-rw-r--r-- 1 root root   76 Jun  2 01:08 part-r-00000
-rw-r--r-- 1 root root   12 Jun  2 01:08 .part-r-00000.crc
-rw-r--r-- 1 root root    0 Jun  2 01:08 _SUCCESS
-rw-r--r-- 1 root root    8 Jun  2 01:08 ._SUCCESS.crc

查看統計數據文件part-r-00000:

$ cat part-r-00000

# 統計單詞個數結果
flume    2
hadoop    3
hbase    1
hive    2
kafka    1
mapreduce    1
spark    2
sqoop    1
storm    2

四 僞集羣模式安裝

Hadoop 在單節點上以僞分佈式的方式運行、Hadoop 進程以分離的 Java 進程來運行,節點即爲 NameNode 也做爲 DataNode,同時、讀取的是 HDFS 中的文件。
須要修改的配置文件:core-site.xml 和 hdfs-site.xml、mapred-site.xml,每一個配置以聲明 property 的 name 和 value 的方式實現。

4.1 僞集羣文件配置

對於 Hadoop 僞集羣模式的配置,除了須要配置hadoop-env.sh 文件外,還須要配置如下4個文件:core site.xml、hdfs-site.xml、mapred-site.xml 和 yarn-site.xml,每一個文件與hadoop-env.sh 文件在同一個目錄下,各文件的做用以下:

4.1.1 core-site.xml

指定 NameNode 的位置,hadoop.tmp.dir 是 Hadoop 文件系統依賴的基礎配置,不少路徑都依賴它。若是hdfs-site.xml 中不配置 Namenode 和 DataNode 的存放
位置,則默認就放在這個路徑中。

  • core-site.xml 配置文件以下:

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
      <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop-3.3.0/tmp</value>
        <description>Abase for other temporary directories.</description>
      </property>
          <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop1:9000</value>
       </property>
    </configuration>

    注意: 其中的 hadoop1 爲配置的主機名

4.1.2 hdfs-site.xml

配置NameNode和 DataNode存放文件的具體路徑,配置副本的數量。

  • hdfs-site.xml 配置文件以下:

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
             <property>
               <name>dfs.replication</name>
               <value>1</value>
          </property>
          <property>
               <name>dfs.namenode.name.dir</name>
               <value>/usr/local/hadoop-3.3.0/tmp/dfs/name</value>
          </property>
          <property>
               <name>dfs.datanode.data.dir</name>
               <value>/usr/local/hadoop-3.3.0/tmp/dfs/data</value>
          </property>
    </configuration>

    注意: 僞分佈式只有一個節點,因此 dfs.replication 須要配置成 1 ,在集羣模式下至少配置3個節點; 此外還配置了datanode 和 namenode 的節點位置。

4.1.3 mapred-site.xml

在以前版本的 Hadoop 中是沒有此文件的,須要將 mapred-site.xml.template 重命名:配置 MapReduce 做業是提交到 YARN 集羣仍是使用本地做業執行器在本地執行,其中須要配置Hadoop的環境配置: HADOOP_HOME。

  • mapred-site.xml 配置文件以下:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <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>
4.1.4 yarn-site.xml

配置 ResourceManager 所在節點的主機名;配置輔助服務列表,這些服務由 NodeManager 執行。

  • yarn-site.xml 配置文件以下:

    <?xml version="1.0"?>
    <configuration>
    <!-- Site specific YARN configuration properties -->
    <property>
      <name>yarn.resourcemanager.hostname</name>
      <value>hadoop1</value>
    </property>
    <property>
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
    </property>
    </configuration>

4.2 格式化NameNode和啓動Hadoop

4.2.1 賦予腳本root帳戶運行權限

腳本目錄: /usr/local/hadoop-3.3.0/sbin,須要賦予腳本root帳戶運行權限的有:start-dfs.sh、start-yarn.sh、stop-dfs.sh 和 stop-yarn.sh。

  • (1)start-dfs.sh 和 stop-dfs.sh 分別爲啓動和中止 HDFS 進程節點, 腳本頂部須要添加root運行權限以下:

    HDFS_DATANODE_USER=root
    HADOOP_SECURE_DN_USER=hdfs
    HDFS_NAMENODE_USER=root
    HDFS_SECONDARYNAMENODE_USER=root
  • (2)start-yarn.ss 和 stop-yarn.sh 分別爲啓動和中止 yarn 進程節點, 腳本頂部須要添加root運行權限以下:

    YARN_RESOURCEMANAGER_USER=root
    HADOOP_SECURE_DN_USER=yarn
    YARN_NODEMANAGER_USER=root
4.2.2 格式化NameNode
  • 格式化 NameNode 執行命令:

    $ hdfs namenode -format

當輸出結果中有以下信息是,說明格式化 NameNode 成功:

INFO common.Storage: Storage directory /usr/local/hadoop-3.3.0/tmp/dfs/name has been successfully formatted.
4.2.3 啓動Hadoop
  • (1)啓動HDFS

在命令行執行腳本啓動HDFS:

$ sh start-dfs.sh

jps 查看進程

$ jps 
13800 Jps
9489 NameNode
9961 SecondaryNameNode
9707 DataNode
  • (2)啓動YARN

在命令行執行腳本啓動YARN:

$ sh start-yarn.sh

jps 查看進程

$ jps 
5152 ResourceManager
5525 NodeManager
13821 Jps
4.2.4 查看Hadoop節點信息

驗證 Hadoop 僞集羣模式啓動成功的兩種方式: 一種在瀏覽器經過Hadoop暴露的接口查看NameNode的狀態是否爲"活動狀態", 另外一種是執行 MapReduce 程序來驗證是否安裝並啓動成功。

在瀏覽器中輸入地址進行訪問:

http://192.168.254.130:9870/

登陸界面如圖所示,節點爲"活躍狀態":

Hadoop節點狀態

4.3 運行MapReduce程序驗證環境搭建

運行MapReduce程序驗證環境搭建步驟分爲如下四步:

  • 在HDFS上建立輸入文件目錄
  • 上傳數據文件到HDFS中
  • 執行MapReduce程序
4.3.1 在HDFS上建立輸入文件目錄

在 HDFS 上新建 /data/input目錄,具體操做以下:

$ hadoop fs -mkdir /data
$ hadoop fs -mkdir /data/input
$ hadoop fs -ls /data/

Found 1 items
drwxr-xr-x   - root supergroup          0 2021-06-05 11:11 /data/input
4.3.2 上傳數據文件到HDFS中

上傳本地模式下的數據文件 "data.input" 到HDFS中目錄: /data/input

$ hadoop fs -put /home/hadoop/input/data.input /data/input
$ hadoop fs -ls /data/input

Found 1 items
-rw-r--r--   1 root supergroup        101 2021-06-05 11:11 /data/input/data.input

# 查看文件中的數據
$ hadoop fs -cat /data/input/data.input

hadoop  mapreduce hive flume
hbase spark storm flume
sqoop  hadoop  hive  kafka
spark  hadoop  storm
4.3.3 執行MapReduce程序
  • 運行Hadoop自帶的 wordcount 計數程序,具體命令以下:

    $ hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount /data/input/data.input /data/output
  • 查看執行結果
    在 wordcount 計數程序執行過程當中,會自動建立 /data/output目錄,先查看 HDFS 上建立的 /data/output目錄,命令以下:

    $ hadoop fs -ls /data/output
    
    Found 2 items
    -rw-r--r--   1 root supergroup          0 2021-06-05 11:19 /data/output/_SUCCESS
    -rw-r--r--   1 root supergroup         76 2021-06-05 11:19 /data/output/part-r-00000
    
    $ hadoop fs -cat /data/output/part-r-00000
    
    flume    2
    hadoop    3
    hbase    1
    hive    2
    kafka    1
    mapreduce    1
    spark    2
    sqoop    1
    storm    2

    能夠從 part-r-00000 文件中正確的輸出了每一個單詞以及該單詞在測試數據文件中的數量,說明 Hadoop 的僞集羣模式正確的將 MapReduce 的結果輸出到了 HDFS 中。

END

本文主要是爲了後續部署 hadoop 等大數據組件的網絡策略處理,其中最主要的設置網絡靜態ip、主機名修改、設置免密登陸等操做,下一篇將介紹 Hadoop的集羣模式安裝,歡迎關注微信公衆號: 進擊的夢清 ; 我是一名在互聯網浪潮下的打工人,但願和你共同窗習進步,秉承信念: 你知道的越多,不知道的就越多。

參考文檔: