Hadoop知識點總結

一:大數據概述

    一、大數據簡介

       1. 概念:指無法在一定時間範圍內使用常規軟件工具進項捕捉、管理和處理數據集合,需要新處理模式才能具有更強的決策力、洞察力和流程優化能力的海量、高增長率和多樣化的信息資產。

       2. 作用:解決海量數據的存儲和海量數據的分析計算問題。

       3. 大數據與雲計算的關係:大數據必須依託雲計算的分佈式處理、分佈式數據庫和雲存儲、虛擬化技術,有效地處理大量的容忍經過時間內的數據。

           

 

    二、大數據特徵

       1. Volume(容量大):數據的大小決定所考慮的數據的價值和潛在的信息。

       2. Velocity(速度快):獲得並處理數據的效率。是區分傳統數據挖掘最顯著特徵。

       3. Variety(多樣性):數據類型的多樣性。以數據庫/文本的結構化數據和以網絡日誌,圖片,音頻、視頻等為主的非結構化數據。

       4. Value(價值):合理運用大數據,以低成本創造高價值。

       5. Variability(可變性):妨礙了處理和有效地管理數據的過程。

       6. Veracity(真實性):數據的質量。

       7. Complexity複雜性):數據量巨大,來源多渠道。

 

    三、大數據應用場景

       1. 物流倉儲:大數據分析系統助力商家精細化運營,提升銷量,節約成本。

       2. 零售及商品推薦:分析用戶消費習慣,給用戶推薦可能喜歡的商品,為用戶購買商品提供方便。

       3. 旅遊:深度結合大數據能力和旅遊行業需求,共建旅遊產業智慧管理、智慧服務和智慧營銷的未來。

       4. 保險:海量數據挖掘及風險預測,助力保險行業精準直銷,提升精細化定價能力。

       5. 金融:多維度體現用戶特徵,助力金融機構推薦優質用戶,防範欺詐風險。

       6. 房地產:大數據全面助力房地產行業,打造精準投資與營銷,選出更合適的地,建更合適的樓,賣更合適的用戶。

       7. 人工智能:深度結合大數據能力及人工智能,提供數據資源。

 

    四、大數據部門組織結構

       

 

二:Hadoop 概述

    一、Hadoop 簡介

       1. 概念:Hadoop 是由 Apache 基金會所開發的分佈式系統基礎架構。用戶可以在不了解分佈式底層細節的情況下,開發分佈式程序,充分利用集群的威力進行高速運算和存儲。

       2. 作用:解決海量數據的存儲和海量數據的分析計算問題。

       3. 優點

           1. 高可靠性:Hadoop 能自動維護數據的多份複製,並且在任務失敗後能自動地重新部署(redeploy)計算任務。

           2. 高擴展性:Hadoop 在可用的計算機集群間分配數據並完成計算任務的,這些集群可用方便的擴展到數以千計個節點中。

           3. 高效性:Hadoop 可以在節點之間動態並行的移動數據,使得速度非常快。

           4. 成本低:Hadoop 通過普通廉價的機器組成服務器集群來分發以及處理數據,以至於成本很低。

 

       3. 發展歷程

           1. Hadoop 起源於 Apache Nutch 項目,始於2002年,是 Apache Lucene的子項目之一。Nutch 的設計目標是構建一個大型的全網搜索引擎,包括網頁抓取、索引、查詢等功能,但隨着抓取網頁數量的增加,遇到了嚴重的可擴展性問題——如何解決數十億網頁的存儲和索引問題。

           2. 2003年、2004年,Google 發表的”分佈式文件系統(GFS):可用於處理海量網頁的存儲 ” 和 「分佈式計算框架(MapReduce):可用於處理海量網頁的索引計算問題」 兩篇論文為該問題提供了可行的解決方案。

           3. 由於 NDFS 和 MapReduce 在 Nutch 引擎中有着良好的應用,所以它們於2006年2月被分離出來,成為一套完整而獨立的軟件,並被命名為Hadoop(大數據生態圈,包含很多軟件)。

           4. 到了2008年年初,Hadoop 已成為 Apache的頂級項目,包含眾多子項目,被應用到包括Yahoo在內的很多互聯網公司

 

       4. 三大發行版本

           1. Apache Hadoop:免費開源,擁有全世界的開源貢獻者,代碼更新迭代版本比較快,但難以維護,適合學習使用。

               1. 官網地址://hadoop.apache.org/releases.html

               2. 下載地址://archive.apache.org/dist/hadoop/common/

 

           2. Cloudera Hadoop:版本兼容性更好,適用於互聯網企業。

               1. 官網地址://www.cloudera.com/downloads/cdh/5-10-0.html

               2. 下載地址://archive-primary.cloudera.com/cdh5/cdh/5/

 

           3. Hortonworks Hadoop:核心免費開源產品軟件HDP(ambari),提供一整套的web管理界面來管理集群。

               1. 官網地址://hortonworks.com/products/data-center/hdp/

               2. 下載地址://hortonworks.com/downloads/#data-platform

 

    二、Hadoop 核心架構

       1. 歷史版本及組成

           

 

       2. HDFS(Hadoop Distributed File System  分佈式文件系統) 架構概述

          

           1. NameNode:管理集群當中的各種元數據,如文件名,文件屬性(生成時間,副本數等)以及每個文件的塊列表和塊所在的DataNode等。

           2. DataNode:存儲集群中的各種塊數據到本地文件系統並校驗塊數據。

           3. Secondary NameNode:監控HDFS狀態的輔助後台後台程序,每個一段時間獲取HDFS元數據快照。

 

       3. Yarn(Yet Another Resource Negotiator   資源管理調度系統) 架構概述

           

 

       4. MapReduce(分佈式運算框架) 架構概述

          

 

    三、Hadoop 生態圈

       

       

       1. HDFS:Hadoop 分佈式文件系統(Hadoop Distributed File System),建立在集群之上,適合PB級大量數據的存儲,擴展性強,容錯性高。

       2. MapReduce:Hadoop 的計算框架,由 Map 和 Reduce 兩部分組成,由Map生成計算的任務,分配到各個節點上,Reduce執行計算。

       3. HBase:源自谷歌的 BigTable,是一個分佈式的、面向列存儲的開源數據庫,性能高,可靠性高,擴展性強

       4. Hive:Hadoop 的數據倉庫工具,將個結構化的數據文件映射為一張數據庫表,通過類 SQL 語句快速實現簡單的 MapReduce 統計,十分適合數據倉庫統計。

       5. Sqoop:Hadoop 的數據同步工具,將關係型數據庫(MySQL、Oracle等)中的數據表和 HDFS 中的文件進性相互導入導出。

       6. Flume:Hadoop 的日誌收集工具,一個分佈式、可靠的、高可用的海量日誌聚合系統,用於日誌數據收集、處理和傳輸。

       7. Zookeeper:Hadoop 的分佈式協作服務,主要作用於統一命名、狀態同步、集群管理、配置同步,簡化分佈式應用協調及其管理難度,提供高性能的分佈式服務。

       8. Mahout:Hadoop 的機器學習和數據挖掘算法庫,實現了大量數據挖掘算法,解決了並行挖掘的問題。

       9. Spark:Hadoop 的內存計算框架,為大規模數據處理而設計的快速通用的計算引擎。

      10. Pig:Hadoop的大規模數據分析工具,類似於Hive,它提供了 Plight 語言將類 SQL 的數據分析請求轉化為一系列經過優化的 MapReduce 運算。

      11. Ambari:一種基於Web的工具,支持Hadoop集群的供應、管理和監控等統一部署

 

    四、Hadoop 實際應用

       1. Hadoop+HBase建立NoSQL分佈式數據庫應用

       2. Flume+Hadoop+Hive建立離線日誌分析系統

       3. Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

       4. 在線旅遊、移動數據、電子商務、IT安全、醫療保健、圖像處理等

          

 

三:Hadoop 安裝部署(3.1.3版本)

    一、偽分佈式模式(單節點)

       1. 安裝並配置 JDK 及 Hadoop

 1 # 安裝並配置 JDK
 2 [root@master ~]# tar -zxvf jdk-8u251-linux-x64.tar.gz -C /usr/local/
 3 ......
 4 [root@master ~]# vi /etc/profile 
 5 # JAVA_HOME
 6 export JAVA_HOME=/usr/local/jdk1.8.0_251
 7 export PATH=$PATH:$JAVA_HOME/bin
 8 
 9 # 安裝並配置 Hadoop
10 [root@master ~]# tar -zxvf hadoop-3.1.3.tar.gz -C /usr/local/
11 ......
12 [root@master ~]# vi /etc/profile 
13 # HADOOP_HOME
14 export HADOOP_HOME=/usr/local/hadoop-3.1.3/
15 export PATH=$PATH:$HADOOP_HOME/bin
16 export PATH=$PATH:$HADOOP_HOME/sbin
17 
18 # 生效配置文件並校驗
19 [root@master ~]# source /etc/profile
20 [root@master ~]# java -version
21 java version "1.8.0_251"
22 Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
23 Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)
24 
25 [root@master ~]# hadoop version
26 Hadoop 3.1.3
27 Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r ba631c436b806728f8ec2f54ab1e289526c90579
28 Compiled by ztang on 2019-09-12T02:47Z
29 Compiled with protoc 2.5.0
30 From source with checksum ec785077c385118ac91aadde5ec9799
31 This command was run using /usr/local/hadoop-3.1.3/share/hadoop/common/hadoop-common-3.1.3.jar

 

       2. 部署HDFS(端口:9870)

 1 # 配置集群
 2 ### 配置:hadoop-env.sh
 3 [root@master ~]# vi /usr/local/hadoop-3.1.3/etc/hadoop/hadoop-env.sh
 4 export JAVA_HOME=/usr/local/jdk1.8.0_251
 5 
 6 ### 配置:core-site.xml
 7 [root@master ~]# vi +20 /usr/local/hadoop-3.1.3/etc/hadoop/core-site.xml
 8 <configuration>
 9    <!-- 指定HDFS中NameNode的地址 -->
10    <property>
11        <name>fs.defaultFS</name>
12        <value>hdfs://master:9000</value>
13     </property>
14 
15     <!-- 指定Hadoop運行時產生文件的存儲目錄 -->
16     <property>
17         <name>hadoop.tmp.dir</name>
18         <value>file:/usr/local/hadoop-3.1.3/data/tmp/</value>
19     </property>
20 </configuration>
21 
22 ### 配置:hdfs-site.xml
23 [root@master ~]# vi +20 /usr/local/hadoop-3.1.3/etc/hadoop/hdfs-site.xml
24 <configuration>
25     <!-- 指定HDFS副本的數量 -->
26     <property>
27          <name>dfs.replication</name>
28          <value>1</value>
29     </property>
30 
31     <!-- 指定 NameNode 存儲地址 -->
32     <property>
33          <name>dfs.namenode.name.dir</name>
34          <value>file:/usr/local/hadoop-3.1.3/tmp/dfs/name</value>
35     </property>
36 
37     <!-- 指定 DataNode 存儲地址 -->
38     <property>
39          <name>dfs.datanode.data.dir</name>
40          <value>file:/usr/local/hadoop-3.1.3/tmp/dfs/data</value>
41     </property>
42 </configuration>
43 
44 # 啟動集群
45 [root@master ~]# hdfs --daemon start namenode
46 [root@master ~]# hdfs --daemon start datanode
47 [root@master ~]# jps
48 11202 NameNode
49 11322 DataNode
50 11646 Jps
51 
52 # 訪問集群web界面(3.1.3版本新端口)
53 [root@master ~]# curl http://master:9870
54 <!--
55    Licensed to the Apache Software Foundation (ASF) under one or more
56    contributor license agreements.  See the NOTICE file distributed with
57    this work for additional information regarding copyright ownership.
58    The ASF licenses this file to You under the Apache License, Version 2.0
59    (the "License"); you may not use this file except in compliance with
60    the License.  You may obtain a copy of the License at
61 
62        http://www.apache.org/licenses/LICENSE-2.0
63 
64    Unless required by applicable law or agreed to in writing, software
65    distributed under the License is distributed on an "AS IS" BASIS,
66    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
67    See the License for the specific language governing permissions and
68    limitations under the License.
69 -->
70 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
71     "//www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
72 <html xmlns="//www.w3.org/1999/xhtml">
73 <head>
74 <meta http-equiv="REFRESH" content="0;url=dfshealth.html" />
75 <title>Hadoop Administration</title>
76 </head>
77 </html>

             

 

       3. 部署YARN(端口:8088)

 1 # 配置
 2 ### 配置:mapred-site.xml(MR)
 3 [root@master ~]# vi +20  /usr/local/hadoop-3.1.3/etc/hadoop/mapred-site.xml
 4 <configuration>
 5     <!-- 指定 MR 在 YARN上運行 -->
 6     <property>
 7         <name>mapreduce.framework.name</name>
 8         <value>yarn</value>
 9     </property>
10 
11     <!-- 指定 MR 應用程序路徑 -->
12     <property>
13         <name>mapreduce.application.classpath</name>
14         <value>$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*</value>
15     </property>
16 </configuration>
17 
18 
19 ### 配置:yarn-site.xml 
20 [root@master ~]# vi +16  /usr/local/hadoop-3.1.3/etc/hadoop/yarn-site.xml   
21 <configuration>
22     <!-- 指定 Reducer 獲取數據的方式 -->
23     <property>
24         <name>yarn.nodemanager.aux-services</name>
25         <value>mapreduce_shuffle</value>
26     </property>
27 
28     <!-- 指定 YARN 的 ResourceManager 的地址 -->
29     <property>
30         <name>yarn.resourcemanager.hostname</name>
31         <value>master</value>
32     </property>
33 
34     <!-- 指定 NodeManagers 繼承的環境屬性  -->
35     <property>
36         <name>yarn.nodemanager.env-whitelist</name>
37         <value>JAVA_HOME,HADOOP_HOME</value>
38     </property>
39 </configuration>
40 
41 # 啟動集群
42 [root@master ~]# yarn --daemon start resourcemanager 
43 [root@master ~]# yarn --daemon start nodemanager 
44 [root@master ~]# jps
45 12691 DataNode
46 20278 Jps
47 20136 NodeManager
48 12585 NameNode
49 19837 ResourceManager
50 
51 # 查看
52 [root@master ~]# curl //master:8088/cluster
53 ......

            

 

       4. 配置歷史服務器和日誌聚集(端口:19888)

 1 # 配置歷史服務器
 2 [root@master ~]# vi /usr/local/hadoop-3.1.3/etc/hadoop/mapred-site.xml
 3 <configuration>
 4     <!-- 歷史服務器端地址 -->
 5     <property>
 6        <name>mapreduce.jobhistory.address</name>
 7        <value>master:10020</value>
 8     </property>
 9 
10     <!-- 歷史服務器web端地址 -->
11     <property>
12         <name>mapreduce.jobhistory.webapp.address</name>
13         <value>master:19888</value>
14     </property>
15 </configuration>
16 
17 # 配置日誌聚集
18 [root@master ~]# vi /usr/local/hadoop-3.1.3/etc/hadoop/yarn-site.xml
19 <configuration>
20     <!-- 日誌聚集功能使能 -->
21     <property>
22         <name>yarn.log-aggregation-enable</name>
23         <value>true</value>
24     </property>
25 
26     <!-- 日誌保留時間設置7天 -->
27     <property>
28         <name>yarn.log-aggregation.retain-seconds</name>
29         <value>604800</value>
30     </property> 
31 </configuration>
32 
33 # 啟動
34 [root@master ~]# yarn --daemon stop resourcemanager
35 [root@master ~]# yarn --daemon stop nodemanager
36 [root@master ~]# yarn --daemon start resourcemanager
37 [root@master ~]# yarn --daemon start nodemanager
38 [root@master ~]# mapred --daemon start historyserver
39 [root@master ~]# jps
40 12691 DataNode
41 20136 NodeManager
42 20824 Jps
43 12585 NameNode
44 20780 JobHistoryServer
45 19837 ResourceManager

 

    二、完全分佈式模式(集群)

       1. 配置 xsync 集群分髮腳本(關閉防火牆)

 1 # 配置主機地址映射
 2 [root@master ~]# cat /etc/hosts
 3 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
 4 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
 5 10.0.0.18 master
 6 10.0.0.15 slaver1
 7 10.0.0.16 slaver2
 8 
 9 # 配置 xsync 腳本
10 [root@master ~]# vi /usr/local/bin/xsync
11   #! /bin/bash
12 
13   # 1、獲取輸入參數個數,如果沒有參數,直接退出
14   pcount=$#
15   if((pcount==0)); then
16   echo no args;
17   exit;
18   fi
19 
20   #2、獲取文件名稱
21   p1=$1
22   fname=`basename $p1`
23   echo fname=$fname
24 
25   # 3、獲取上級目錄到絕對路徑
26   pdir=`cd -P $(dirname $p1); pwd`
27   echo pdir=$pdir
28 
29   # 4、獲取當前用戶名稱
30   user=`whoami`
31 
32   # 5、循環
33   for((host=1; host<5; host++)); do
34     echo ------------------- slaver$host --------------
35     rsync -rvl $pdir/$fname $user@slaver$host:$pdir
36   done
37 
38 # 修改執行權限
39 [root@master ~]# chmod 777 /usr/local/bin/xsync
40 
41 # 使用
42 [root@master ~]# xsync /usr/local/jdk1.8.0_251/
43 [root@master ~]# xsync /usr/local/hadoop-3.1.3/
44 [root@master ~]# xsync /etc/profile

 

       2. 配置無密登錄及時鐘同步

 1 # 生成公鑰和私鑰
 2 [root@master ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
 3 Generating public/private dsa key pair.
 4 Your identification has been saved in /root/.ssh/id_dsa.
 5 Your public key has been saved in /root/.ssh/id_dsa.pub.
 6 The key fingerprint is:
 7 0c:7d:46:22:0e:d3:b0:1f:31:32:b6:5d:2a:a7:ff:85 root@master
 8 The key's randomart image is:
 9 +--[ DSA 1024]----+
10 |    Bo+ o .      |
11 |   . X.B o       |
12 |    + B . o      |
13 |     = + o       |
14 |    . . S        |
15 |     .   .       |
16 |      . E .      |
17 |       . .       |
18 |        .        |
19 +-----------------+
20 [root@master ~]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
21 [root@master ~]# chmod 0600 ~/.ssh/authorized_keys
22 
23 # 將公鑰拷貝到要免密登錄的目標機器
24 [root@master ~]# ssh-copy-id slaver1
25 The authenticity of host 'slaver1 (192.168.200.55)' can't be established.
26 ECDSA key fingerprint is 37:48:34:56:ad:65:08:c1:0b:53:35:ce:fc:4f:c0:3e.
27 Are you sure you want to continue connecting (yes/no)? yes
28 /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
29 /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
30 root@slaver1's password:
31 
32 Number of key(s) added: 1
33 
34 Now try logging into the machine, with:   "ssh 'slaver1'"
35 and check to make sure that only the key(s) you wanted were added.
36 
37 # 測試無密登錄
38 [root@master ~]# ssh slaver1
39 Last login: Thu Dec 15 14:34:49 2016
40 
41  #########################
42  #  Welcome to XianDian  #
43  #########################
44 
45 [root@slaver1~]#  
46 
47 # 配置 ntp 時鐘同步服務器
48 ## 主節點(master)
49 ### 安裝 ntp 服務
50 [root@master ~]# yum install -y ntp
51 ...
52 
53 ### 修改ntp 配置文件(刪除server和restrict 開頭的)
54 [root@master ~]# vi /etc/ntp.conf 
55 server 127.127.1.0
56 fudge 127.127.1.0 stratum 10
57 
58 ## 其他節點進行同步
59 ### 安裝同步客戶端
60 [root@master ~]# yum install -y ntpdate
61 ### 同步 (-0.xxx以內)
62 [root@slaver1 ~]# ntpdate master
63  3 Jun 11:51:59 ntpdate[1121]: adjust time server 172.16.21.212 offset -0.000439 sec

 

       3. 配置集群

  1 # 配置集群群起:workers(添加從節點)
  2 [root@master ~]# vi /usr/local/hadoop-3.1.3/etc/hadoop/workers
  3 slaver1
  4 slaver2
  5 
  6 # 配置環境變量:hadoop-env.sh
  7 [root@master ~]# vi /usr/local/hadoop-3.1.3/etc/hadoop/hadoop-env.sh
  8 export JAVA_HOME=/usr/local/jdk1.8.0_251
  9 export HADOOP_HOME=/usr/local/hadoop-3.1.3
 10 export HDFS_NAMENODE_USER=root
 11 export HDFS_DATANODE_USER=root
 12 export HDFS_SECONDARYNAMENODE_USER=root
 13 export YARN_RESOURCEMANAGER_USER=root
 14 export YARN_NODEMANAGER_USER=root
 15 
 16 # 核心配置文件:core-site.xml (運行環境)
 17 [root@master ~]# vi /usr/local/hadoop-3.1.3/etc/hadoop/core-site.xml
 18 <configuration>
 19    <!-- 指定HDFS中NameNode的地址 -->
 20    <property>
 21        <name>fs.defaultFS</name>
 22        <value>hdfs://master:9000</value>
 23     </property>
 24 
 25     <!-- 指定Hadoop運行時產生文件的存儲目錄 -->
 26     <property>
 27         <name>hadoop.tmp.dir</name>
 28         <value>/usr/local/hadoop-3.1.3/data/tmp/</value>
 29     </property>
 30 </configuration>
 31 
 32 # HDFS配置文件:hdfs-site.xml
 33 [root@master ~]# vi /usr/local/hadoop-3.1.3/etc/hadoop/hdfs-site.xml
 34 <configuration>
 35     <!-- 指定 NameNode 存儲地址 -->
 36     <property>
 37          <name>dfs.name.dir</name>
 38          <value>/usr/local/hadoop-3.1.3/data/tmp/dfs/name</value>
 39     </property>
 40 
 41     <!-- 指定 DataNode 存儲地址 -->
 42     <property>
 43          <name>dfs.data.dir</name>
 44          <value>/usr/local/hadoop-3.1.3/data/tmp/dfs/data</value>
 45     </property>
 46 
 47     <!-- 指定 Hadoop 主節點主機配置 -->
 48     <property>
 49         <name>dfs.namenode.http-address</name>
 50         <value>master:50070</value>
 51     </property>
 52 
 53     <!-- 指定 Hadoop 輔助名稱節點主機配置 -->
 54     <property>
 55         <name>dfs.namenode.secondary.http-address</name>
 56         <value>slaver2:50090</value>
 57     </property>
 58 
 59     <!-- 指定HDFS副本的數量 -->
 60     <property>
 61         <name>dfs.replication</name>
 62         <value>3</value>
 63     </property>
 64 
 65     <!-- 關閉用戶操作權限驗證 -->
 66     <property>
 67         <name>dfs.permissions</name>
 68         <value>false</value>
 69         <description>need not permissions</description>
 70     </property>
 71 </configuration>
 72 
 73 # YARN配置文件:yarn-site.xml
 74 [root@master ~]# vi /usr/local/hadoop-3.1.3/etc/hadoop/yarn-site.xml
 75 <configuration>
 76     <!-- 指定 Reducer 獲取數據的方式 -->
 77     <property>
 78         <name>yarn.nodemanager.aux-services</name>
 79         <value>mapreduce_shuffle</value>
 80     </property>
 81 
 82     <!-- 指定 ResourceManager 的地址 -->
 83     <property>
 84         <name>yarn.resourcemanager.hostname</name>
 85         <value>master</value>
 86     </property>
 87 
 88     <!-- 指定 NodeManagers 繼承的環境屬性  -->
 89     <property>
 90         <name>yarn.nodemanager.env-whitelist</name>
 91         <value>JAVA_HOME,HADOOP_HOME</value>
 92     </property>
 93 
 94     <!-- 配置 YARN 的資源調度(執行hadoop classpath) -->
 95     <property>
 96         <name>yarn.application.classpath</name>
 97         <value>/usr/local/hadoop-3.1.3/etc/hadoop:/usr/local/hadoop-3.1.3/share/hadoop/common/lib/*:此處省略很之值</value>
 98     </property>
 99 </configuration>
100 
101 # MapReduce配置文件:mapred-site.xml
102 [root@master ~]# vi /usr/local/hadoop-3.1.3/etc/hadoop/mapred-site.xml
103 <configuration>
104     <!-- 指定 MR 在 YARN上運行 -->
105     <property>
106         <name>mapreduce.framework.name</name>
107         <value>yarn</value>
108     </property>
109 
110     <!-- 指定 MR 應用程序路徑 -->
111     <property>
112         <name>mapreduce.application.classpath</name>
113         <value>$HADOOP_HOME/share/hadoop/mapreduce/*,$HADOOP_HOME/share/hadoop/mapreduce/lib/*</value>
114     </property>
115 </configuration>
116 
117 # 分發集群配置文件
118 [root@master ~]# xsync /usr/local/hadoop-3.1.3/etc/
119 ......
120 
121 # 啟動
122 [root@master ~]# start-all.sh # 一次性啟動
123 # [root@master ~]# start-dfs.sh
124 # [root@master ~]# start-yarn.sh # resourcemanager部署節點啟動
125 [root@master ~]# jps 
126 6675 ResourceManager
127 7004 NodeManager
128 6127 NameNode
129 6303 DataNode
130 7471 Jps
131 [root@slaver1 ~]# jps
132 20178 Jps
133 19383 DataNode
134 19563 NodeManager
135 [root@slaver2 ~]# jps
136 17541 SecondaryNameNode
137 16952 DataNode
138 17128 NodeManager
139 17982 Jps

 

       4. 運行 wordcount 案例     

 1 # 將本地文件上傳
 2 [root@master ~]# hadoop fs -put test.txt /user/input/
 3 ......
 4 
 5 # 運行 wordcount 程序
 6 [root@master ~]# hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/input/ /user/output/ 
 7 2020-06-04 01:44:45,440 INFO client.RMProxy: Connecting to ResourceManager at master/10.0.0.18:8032
 8 2020-06-04 01:44:45,873 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for path: /tmp/hadoop-yarn/staging/root/.staging/job_1591233544175_0002
 9 2020-06-04 01:44:45,935 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
10 2020-06-04 01:44:46,063 INFO input.FileInputFormat: Total input files to process : 1
11 2020-06-04 01:44:46,085 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
12 2020-06-04 01:44:46,118 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
13 2020-06-04 01:44:46,148 INFO mapreduce.JobSubmitter: number of splits:1
14 2020-06-04 01:44:46,266 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
15 2020-06-04 01:44:46,307 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1591233544175_0002
16 2020-06-04 01:44:46,307 INFO mapreduce.JobSubmitter: Executing with tokens: []
17 2020-06-04 01:44:46,489 INFO conf.Configuration: resource-types.xml not found
18 2020-06-04 01:44:46,489 INFO resource.ResourceUtils: Unable to find 'resource-types.xml'.
19 2020-06-04 01:44:46,549 INFO impl.YarnClientImpl: Submitted application application_1591233544175_0002
20 2020-06-04 01:44:46,577 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/application_1591233544175_0002/
21 2020-06-04 01:44:46,577 INFO mapreduce.Job: Running job: job_1591233544175_0002
22 2020-06-04 01:44:51,703 INFO mapreduce.Job: Job job_1591233544175_0002 running in uber mode : false
23 2020-06-04 01:44:51,705 INFO mapreduce.Job:  map 0% reduce 0%
24 2020-06-04 01:44:55,790 INFO mapreduce.Job:  map 100% reduce 0%
25 2020-06-04 01:45:00,934 INFO mapreduce.Job:  map 100% reduce 100%
26 2020-06-04 01:45:00,956 INFO mapreduce.Job: Job job_1591233544175_0002 completed successfully
27 2020-06-04 01:45:01,079 INFO mapreduce.Job: Counters: 53
28         File System Counters
29                 FILE: Number of bytes read=33
30                 FILE: Number of bytes written=436328
31                 FILE: Number of read operations=0
32                 FILE: Number of large read operations=0
33                 FILE: Number of write operations=0
34                 HDFS: Number of bytes read=118
35                 HDFS: Number of bytes written=19
36                 HDFS: Number of read operations=8
37                 HDFS: Number of large read operations=0
38                 HDFS: Number of write operations=2
39         Job Counters 
40                 Launched map tasks=1
41                 Launched reduce tasks=1
42                 Data-local map tasks=1
43                 Total time spent by all maps in occupied slots (ms)=1369
44                 Total time spent by all reduces in occupied slots (ms)=2565
45                 Total time spent by all map tasks (ms)=1369
46                 Total time spent by all reduce tasks (ms)=2565
47                 Total vcore-milliseconds taken by all map tasks=1369
48                 Total vcore-milliseconds taken by all reduce tasks=2565
49                 Total megabyte-milliseconds taken by all map tasks=1401856
50                 Total megabyte-milliseconds taken by all reduce tasks=2626560
51         Map-Reduce Framework
52                 Map input records=1
53                 Map output records=2
54                 Map output bytes=23
55                 Map output materialized bytes=33
56                 Input split bytes=103
57                 Combine input records=2
58                 Combine output records=2
59                 Reduce input groups=2
60                 Reduce shuffle bytes=33
61                 Reduce input records=2
62                 Reduce output records=2
63                 Spilled Records=4
64                 Shuffled Maps =1
65                 Failed Shuffles=0
66                 Merged Map outputs=1
67                 GC time elapsed (ms)=87
68                 CPU time spent (ms)=830
69                 Physical memory (bytes) snapshot=518791168
70                 Virtual memory (bytes) snapshot=5129560064
71                 Total committed heap usage (bytes)=383254528
72                 Peak Map Physical memory (bytes)=294596608
73                 Peak Map Virtual memory (bytes)=2557661184
74                 Peak Reduce Physical memory (bytes)=224194560
75                 Peak Reduce Virtual memory (bytes)=2571898880
76         Shuffle Errors
77                 BAD_ID=0
78                 CONNECTION=0
79                 IO_ERROR=0
80                 WRONG_LENGTH=0
81                 WRONG_MAP=0
82                 WRONG_REDUCE=0
83         File Input Format Counters 
84                 Bytes Read=15
85         File Output Format Counters 
86                 Bytes Written=19
87 
88 # 查看結果
89 [root@master ~]# hadoop fs -cat /user/output/part-r-00000
90 2020-06-04 01:48:42,894 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
91 Hello   1
92 world!!!        1

 

四:Hadoop 源碼編譯

    一、環境準備

       1. Hadoop :hadoop-3.1.3-src.tar.gz

       2. JDK:jdk-8u231-linux-x64.tar.gz  (1.8及以上版本)

       3. Maven:apache-maven-3.6.2-bin.tar.gz (3.5及以上版本)

       4. Protobuf:protobuf-2.5.0.tar.gz (網頁最下面,必須是2.5.0版本)

       5. Cmake:cmake-3.13.5.tar.gz(3.13.0及以上版本)

       6. Ant:apache-ant-1.10.7-bin.tar.gz(可不安裝,版本1.10.8)

       7. Findbugs:findbugs-3.0.1.tar.gz (可不安裝,3.0.1版本)

 

    二、安裝

 1 # 安裝下載軟件
 2 [root@master ~]# tar -zxvf jdk-8u251-linux-x64.tar.gz -C /usr/local/
 3 [root@master ~]# tar -zxvf hadoop-3.1.3-src.tar.gz -C /usr/local/
 4 [root@master ~]# tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local
 5 [root@master ~]# tar -zxvf cmake-3.13.5.tar.gz -C /usr/local
 6 [root@master ~]# tar -zxvf apache-ant-1.10.8-bin.tar.gz -C /usr/local/
 7 
 8 # 安裝依賴軟件(順序不能亂)
 9 [root@master ~]# yum install -y gcc gcc-c++   
10 [root@master ~]# yum install -y autoconf automake libtool curl 
11 [root@master ~]# yum install -y lzo-devel zlib-devel openssl openssl-devel ncurses-devel
12 [root@master ~]# yum install -y lzo-devel zlib-devel openssl openssl-devel ncurses-devel
13 
14 # 安裝Protobuf
15 [root@master ~]# tar -zxvf protobuf-2.5.0.tar.gz
16 [root@master ~]# ./protobuf-2.5.0/configure --prefix=/usr/local/18 [root@master ~]# make && make install #時間很長,耐心等待 20 
21 # 配置環境變量
[root@master ~]# source /etc/profile
22 # JAVA_HOME 23 export JAVA_HOME=/usr/local/jdk1.8.0_251 24 export PATH=$PATH:$JAVA_HOME/bin 25 26 # HADOOP_HOME 27 export HADOOP_HOME=/usr/local/hadoop-3.1.3 28 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 29 30 # MAVEN_HOME 31 export MAVEN_HOME=/usr/local/apache-maven-3.6.3 32 export PATH=$PATH:$MAVEN_HOME/bin 33 34 # PROTOC_HOME 35 export PROTOC_HOME= 36 37 # ANT_HOME 38 export ANT_HOME=/usr/local/apache-ant-1.10.8 39 export PATH=$PATH:$ANT_HOME/bin 40 41 # 生效配置文件並測試 42 [root@master ~]# source /etc/profile 43 [root@master ~]# java -version 44 java version "1.8.0_251" 45 Java(TM) SE Runtime Environment (build 1.8.0_251-b08) 46 Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode) 47 [root@master ~]# mvn -v 48 Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) 49 Maven home: /usr/local/apache-maven-3.6.3 50 Java version: 1.8.0_251, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8.0_251/jre 51 Default locale: en_US, platform encoding: UTF-8 52 OS name: "linux", version: "3.10.0-229.el7.x86_64", arch: "amd64", family: "unix" 53 [root@master ~]# protoc --version 54 libprotoc 2.5.0 55 [root@master ~]# ant -version 56 Apache Ant(TM) version 1.10.8 compiled on May 10 2020
57
58 # 進入 hadoop 源碼包執行 Maven 命令(第一次編譯需要很長時間,一般在一到二個小時)
59 [root@master hadoop-3.1.3-src]# mvn clean package -DskipTests -Pdist,native -Dtar
60 ......
61 # 編譯好的源碼包在hadoop-3.1.3-src/hadoop-dist/target裏面
62