Hadoop入門

 

1 大數據概論

1.1 大數據概念

大數據概念如圖2-1 所示。html

 

 

 

 

1.2 大數據特色4V

大數據特色如圖2-22-32-42-5所示java

 

 

 

 

 

 

 

 

 

 

 

 

 

1.3 大數據應用場景

大數據應用場景如圖2-62-72-82-92-102-11所示node

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.4 大數據發展前景

大數據發展前景如圖2-122-132-142-152-16所示linux

 

            2-12 大數據發展前景之國家政策c++

 

 

 

 

             2-13 大數據發展前景之國際方面web

 

 

 

             2-14 大數據發展前景之高校方面面試

 

 

 

             2-15 大數據發展前景之平均薪資數據庫

 

 

 

             2-16 大數據發展前景之總體薪資apache

1.5 數據部業務流程分析

大數據部門業務流程分析如圖2-17所示。vim

 

 

 

               2-17 大數據部門業務流程分析

1.6 數據部組織結構(重點)

數據部組織結構,適用於大中型企業,如圖2-18所示

 

 

 

               2-18 大數據部組織結構

2 Hadoop框架討論大數據生態

2.1 Hadoop是什麼

 

2.2 Hadoop發展歷史

 

 

 

 

2.3 Hadoop三大發行版本

Hadoop三大發行版本:ApacheClouderaHortonworks

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

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

  Hortonworks文檔較好。

  1. Apache Hadoop

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

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

  1. Cloudera Hadoop

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

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

12008年成立的Cloudera是最先將Hadoop商用的公司,爲合做夥伴提供Hadoop的商用解決方案,主要是包括支持、諮詢服務、培訓。

22009Hadoop的創始人Doug Cutting也加盟Cloudera公司Cloudera產品主要爲CDHCloudera ManagerCloudera Support

3CDHClouderaHadoop發行版,徹底開源,比Apache Hadoop在兼容性,安全性,穩定性上有所加強。

4Cloudera Manager是集羣的軟件分發及管理監控平臺,能夠在幾個小時內部署好一個Hadoop集羣,並對集羣的節點及服務進行實時監控。Cloudera Support便是對Hadoop的技術支持。

5Cloudera的標價爲每一年每一個節點4000美圓。Cloudera開發並貢獻了可實時處理大數據的Impala項目。

3. Hortonworks Hadoop

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

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

12011年成立的Hortonworks是雅虎與硅谷風投公司Benchmark Capital合資組建。

2)公司成立之初就吸納了大約25名至30名專門研究Hadoop的雅虎工程師,上述工程師均在2005年開始協助雅虎開發Hadoop,貢獻,,,Hadoop80%的代碼。

3)雅虎工程副總裁、雅虎Hadoop開發團隊負責人Eric Baldeschwieler出任Hortonworks的首席執行官。

4Hortonworks的主打產品是Hortonworks Data PlatformHDP),也一樣是100%開源的產品,HDP除常見的項目外還包括了Ambari,一款開源的安裝和管理系統。

5HCatalog,一個元數據管理系統,HCatalog現已集成到Facebook開源的Hive中。HortonworksStinger開創性的極大的優化了Hive項目。Hortonworks爲入門提供了一個很是好的,易於使用的沙盒。

6Hortonworks開發了不少加強特性並提交至核心主幹,這使得Apache Hadoop可以在包括Window ServerWindows Azure在內的Microsoft Windows平臺上本地運行。訂價以集羣爲基礎,每10個節點每一年爲12500美圓。

2.4 Hadoop的優點4高)

 

2.5 Hadoop組成(面試重點)

 

 

 

           2-21 Hadoop1.xHadoop2.x的區別

2.5.1 HDFS架構概述

HDFSHadoop Distributed File System)的架構概述,如圖2-23所示。

 

 

           2-23 HDFS架構概述

2.5.2 YARN架構概述

YARN架構概述,如圖2-24所示。

 

 

               2-24  YARN架構概述

2.5.3 MapReduce架構概述

MapReduce將計算過程分爲兩個階段:MapReduce,如圖2-25所示

1Map階段並行處理輸入數據

2Reduce階段對Map結果進行彙總

 

 

               2-25 MapReduce架構概述

2.6 大數據技術生態體系

大數據技術生態體系如圖2-26所示。

 

 

               2-26  大數據技術生態體系

圖中涉及的技術名詞解釋以下:

1SqoopSqoop是一款開源的工具,主要用於在Hadoop、Hive與傳統的數據庫(MySql)間進行數據的傳遞,能夠將一個關係型數據庫(例如 :MySQL,Oracle 等)中的數據導進到HadoopHDFS中,也能夠將HDFS的數據導進到關係型數據庫中。

2FlumeFlumeCloudera提供的一個高可用的,高可靠的,分佈式的海量日誌採集、聚合和傳輸的系統,Flume支持在日誌系統中定製各種數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各類數據接受方(可定製)的能力。

3KafkaKafka是一種高吞吐量的分佈式發佈訂閱消息系統,有以下特性:

1)經過O(1)的磁盤數據結構提供消息的持久化,這種結構對於即便數以TB的消息存儲也可以保持長時間的穩定性能。

2)高吞吐量:即便是很是普通的硬件Kafka也能夠支持每秒數百萬的消息

3)支持經過Kafka服務器和消費機集羣來分區消息。

4)支持Hadoop並行數據加載。

4StormStorm用於連續計算,對數據流作連續查詢,在計算時就將結果以流的形式輸出給用戶。

5SparkSpark是當前最流行的開源大數據內存計算框架。能夠基於Hadoop上存儲的大數據進行計算。

6OozieOozie是一個管理Hdoop做業(job)的工做流程調度管理系統。

7HbaseHBase是一個分佈式的、面向列的開源數據庫。HBase不一樣於通常的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。

8HiveHive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供簡單的SQL查詢功能,能夠將SQL語句轉換爲MapReduce任務進行運行。 其優勢是學習成本低,能夠經過類SQL語句快速實現簡單的MapReduce統計,沒必要開發專門的MapReduce應用,十分適合數據倉庫的統計分析。

10R語言:R是用於統計分析、繪圖的語言和操做環境。R是屬於GNU系統的一個自由、免費、源代碼開放的軟件,它是一個用於統計計算和統計製圖的優秀工具。

11Mahout:Apache Mahout是個可擴展的機器學習和數據挖掘庫。

12ZooKeeperZookeeperGoogleChubby一個開源的實現。它是一個針對大型分佈式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、 分佈式同步、組服務等。ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。

2.7 推薦系統框架圖

推薦系統項目架構如圖2-27所示。

 

 

                 2-27 推薦系統項目架構

3 Hadoop運行環境搭建(開發重點

3.1 虛擬機環境準備

  1. 克隆虛擬機

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

  3. 修改主機名

  4. 關閉防火牆

  5. 建立atguigu用戶

  6. 配置atguigu用戶具備root權限(詳見《尚硅谷大數據技術之Linux》)

  7/opt目錄下建立文件夾

1)在/opt目錄下建立modulesoftware文件夾

[atguigu@hadoop101 opt]$ sudo mkdir module

[atguigu@hadoop101 opt]$ sudo mkdir software

2)修改modulesoftware文件夾的全部者cd

[atguigu@hadoop101 opt]$ sudo chown atguigu:atguigu module/ software/

[atguigu@hadoop101 opt]$ ll

總用量 8

drwxr-xr-x. 2 atguigu atguigu 4096 1月  17 14:37 module

drwxr-xr-x. 2 atguigu atguigu 4096 1月  17 14:38 software

3.2 安裝JDK

1. 卸載現有JDK

1)查詢是否安裝Java軟件:

[atguigu@hadoop101 opt]$ rpm -qa | grep java

2)若是安裝的版本低於1.7,卸載該JDK

[atguigu@hadoop101 opt]$ sudo rpm -e 軟件包

3查看JDK安裝路徑:

[atguigu@hadoop101 ~]$ which java

2. SecureCRT工具將JDK導入到opt目錄下面的software文件夾下面,如圖2-28所示

 

 

                   2-28  導入JDK

「alt+p」進入sftp模式,如圖2-29所示

 

 

                   2-29 進入sftp模式

選擇jdk1.8拖入,如圖2-302-31所示

 

 

                   2-30 拖入jdk1.8

 

 

                   2-31 拖入jdk1.8完成

3.在Linux系統下的opt目錄中查看軟件包是否導入成功

[atguigu@hadoop101 opt]$ cd software/
[atguigu@hadoop101 software]$ ls
hadoop-2.7.2.tar.gz  jdk-8u144-linux-x64.tar.gz

4.解壓JDK/opt/module目錄下

[atguigu@hadoop101 software]$ tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/

5. 配置JDK環境變量

1)先獲取JDK路徑

[atguigu@hadoop101 jdk1.8.0_144]$ pwd
/opt/module/jdk1.8.0_144

2)打開/etc/profile文件

[atguigu@hadoop101 software]$ sudo vi /etc/profile

profile文件末尾添加JDK路徑

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin

3)保存後退出

:wq

4)讓修改後的文件生效

[atguigu@hadoop101 jdk1.8.0_144]$ source /etc/profile

6. 測試JDK是否安裝成功

[atguigu@hadoop101 jdk1.8.0_144]# java -version
java version "1.8.0_144"

  注意:重啓(若是java -version能夠用就不用重啓)

[atguigu@hadoop101 jdk1.8.0_144]$ sync
[atguigu@hadoop101 jdk1.8.0_144]$ sudo reboot

3.3 安裝Hadoop

0.  Hadoop下載地址

https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/

  1. SecureCRT工具將hadoop-2.7.2.tar.gz導入到opt目錄下面的software文件夾下面

切換到sftp鏈接頁面,選擇Linux下編譯的hadoop jar包拖入,如圖2-32所示

 

 

                   2-32 拖入hadooptar

 

 

                   2-33 拖入Hadooptar包成功

  2.進入到Hadoop安裝包路徑下

[atguigu@hadoop101 ~]$ cd /opt/software/

  3.解壓安裝文件到/opt/module下面

[atguigu@hadoop101 software]$ tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/

  4.查看是否解壓成功

[atguigu@hadoop101 software]$ ls /opt/module/

hadoop-2.7.2

  5. Hadoop添加到環境變量

1)獲取Hadoop安裝路徑

[atguigu@hadoop101 hadoop-2.7.2]$ pwd

/opt/module/hadoop-2.7.2

2)打開/etc/profile文件

[atguigu@hadoop101 hadoop-2.7.2]$ sudo vi /etc/profile

profile文件末尾添加JDK路徑:(shitf+g

##HADOOP_HOME

export HADOOP_HOME=/opt/module/hadoop-2.7.2

export PATH=$PATH:$HADOOP_HOME/bin

export PATH=$PATH:$HADOOP_HOME/sbin

3)保存後退出

:wq

4)讓修改後的文件生效

[atguigu@ hadoop101 hadoop-2.7.2]$ source /etc/profile

6. 測試是否安裝成功

[atguigu@hadoop101 hadoop-2.7.2]$ hadoop version

Hadoop 2.7.2

7. 重啓(若是Hadoop命令不能用再重啓)

[atguigu@ hadoop101 hadoop-2.7.2]$ sync

[atguigu@ hadoop101 hadoop-2.7.2]$ sudo reboot

3.4 Hadoop目錄結構

1查看Hadoop目錄結構

[atguigu@hadoop101 hadoop-2.7.2]$ ll

總用量 52

drwxr-xr-x. 2 atguigu atguigu  4096 5月  22 2017 bin

drwxr-xr-x. 3 atguigu atguigu  4096 5月  22 2017 etc

drwxr-xr-x. 2 atguigu atguigu  4096 5月  22 2017 include

drwxr-xr-x. 3 atguigu atguigu  4096 5月  22 2017 lib

drwxr-xr-x. 2 atguigu atguigu  4096 5月  22 2017 libexec

-rw-r--r--. 1 atguigu atguigu 15429 5月  22 2017 LICENSE.txt

-rw-r--r--. 1 atguigu atguigu   101 5月  22 2017 NOTICE.txt

-rw-r--r--. 1 atguigu atguigu  1366 5月  22 2017 README.txt

drwxr-xr-x. 2 atguigu atguigu  4096 5月  22 2017 sbin

drwxr-xr-x. 4 atguigu atguigu  4096 5月  22 2017 share

二、重要目錄

1bin目錄:存放對Hadoop相關服務(HDFS,YARN)進行操做的腳本

2etc目錄:Hadoop的配置文件目錄,存放Hadoop的配置文件

3lib目錄:存放Hadoop的本地庫(對數據進行壓縮解壓縮功能)

4sbin目錄:存放啓動或中止Hadoop相關服務的腳本

5share目錄:存放Hadoop的依賴jar文檔和官方案例

4 Hadoop運行模式

Hadoop運行模式包括:本地模式、僞分佈式模式以及徹底分佈式模式。

Hadoop官方網站:http://hadoop.apache.org/

4.1 本地運行模式

4.1.1 官方Grep案例

1. 建立在hadoop-2.7.2文件下面建立一個input文件夾

[atguigu@hadoop101 hadoop-2.7.2]$ mkdir input

2. Hadoopxml配置文件複製到input

[atguigu@hadoop101 hadoop-2.7.2]$ cp etc/hadoop/*.xml input

3. 執行share目錄下的MapReduce程序

[atguigu@hadoop101 hadoop-2.7.2]$ bin/hadoop jar

share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'

4. 查看輸出結果

[atguigu@hadoop101 hadoop-2.7.2]$ cat output/*

4.1.2 官方WordCount案例

1. 建立在hadoop-2.7.2文件下面建立一個wcinput文件夾

[atguigu@hadoop101 hadoop-2.7.2]$ mkdir wcinput

2. wcinput文件下建立一個wc.input文件

[atguigu@hadoop101 hadoop-2.7.2]$ cd wcinput

[atguigu@hadoop101 wcinput]$ touch wc.input

3. 編輯wc.input文件

[atguigu@hadoop101 wcinput]$ vi wc.input

在文件中輸入以下內容

hadoop yarn

hadoop mapreduce

atguigu

atguigu

保存退出::wq

4. 回到Hadoop目錄/opt/module/hadoop-2.7.2

5. 執行程序

[atguigu@hadoop101 hadoop-2.7.2]$ hadoop jar

 share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput

6. 查看結果

[atguigu@hadoop101 hadoop-2.7.2]$ cat wcoutput/part-r-00000

atguigu 2

hadoop  2

mapreduce       1

yarn    1

4.2 僞分佈式運行模式

4.2.1 啓動HDFS並運行MapReduce程序

1. 分析

1)配置集羣

2)啓動、測試集羣增、刪、查

3)執行WordCount案例

2. 執行步驟

1)配置集羣

a)配置:hadoop-env.sh

Linux系統中獲取JDK的安裝路徑:

[atguigu@ hadoop101 ~]# echo $JAVA_HOME

/opt/module/jdk1.8.0_144

修改JAVA_HOME 路徑:

export JAVA_HOME=/opt/module/jdk1.8.0_144

b)配置:core-site.xml

<!-- 指定HDFSNameNode的地址 -->

<property>

<name>fs.defaultFS</name>

    <value>hdfs://hadoop101:9000</value>

</property>

 

<!-- 指定Hadoop運行時產生文件的存儲目錄 -->

<property>

<name>hadoop.tmp.dir</name>

<value>/opt/module/hadoop-2.7.2/data/tmp</value>

</property>

c)配置:hdfs-site.xml

<!-- 指定HDFS副本的數量 -->

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

2)啓動集羣

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

[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs namenode -format

b)啓動NameNode

[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode

c)啓動DataNode

[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode

3)查看集羣

a)查看是否啓動成功

[atguigu@hadoop101 hadoop-2.7.2]$ jps

13586 NameNode

13668 DataNode

13786 Jps

注意jpsJDK中的命令,不是Linux命令。安裝JDK不能使用jps

bweb端查看HDFS文件系統

http://hadoop101:50070/dfshealth.html#tab-overview

注意:若是不能查看,看以下帖子處理

http://www.cnblogs.com/zlslch/p/6604189.html

c)查看產生的Log日誌

  說明企業中遇到Bug時常常根據日誌提示信息去分析問題、解決Bug。

當前目錄:/opt/module/hadoop-2.7.2/logs

[atguigu@hadoop101 logs]$ ls

hadoop-atguigu-datanode-hadoop.atguigu.com.log

hadoop-atguigu-datanode-hadoop.atguigu.com.out

hadoop-atguigu-namenode-hadoop.atguigu.com.log

hadoop-atguigu-namenode-hadoop.atguigu.com.out

SecurityAuth-root.audit

[atguigu@hadoop101 logs]# cat hadoop-atguigu-datanode-hadoop101.log

d)思考:爲何不能一直格式化NameNode,格式化NameNode,要注意什麼?

[atguigu@hadoop101 hadoop-2.7.2]$ cd data/tmp/dfs/name/current/

[atguigu@hadoop101 current]$ cat VERSION

clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837

 

[atguigu@hadoop101 hadoop-2.7.2]$ cd data/tmp/dfs/data/current/

clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837

 

注意格式化NameNode,會產生新的集羣id,致使NameNodeDataNode的集羣id不一致,集羣不到已數據。因此,格式NameNode時,必定要先刪除data數據和log日誌,而後再格式化NameNode

4)操做集羣

a)在HDFS文件系統上建立一個input文件夾

[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -mkdir -p /user/atguigu/input

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

[atguigu@hadoop101 hadoop-2.7.2]$bin/hdfs dfs -put wcinput/wc.input

  /user/atguigu/input/

c查看上傳的文件是否正確

[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -ls  /user/atguigu/input/

[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -cat  /user/atguigu/ input/wc.input

d)運行MapReduce程序

[atguigu@hadoop101 hadoop-2.7.2]$ bin/hadoop jar

share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input/ /user/atguigu/output

e)查看輸出結果

命令行查看:

[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/output/*

瀏覽器查看,如圖2-34所示

 

2-34 查看output文件

f)將測試文件內容下載到本地

[atguigu@hadoop101 hadoop-2.7.2]$ hdfs dfs -get /user/atguigu/output/part-r-00000 ./wcoutput/

g刪除輸出結果

[atguigu@hadoop101 hadoop-2.7.2]$ hdfs dfs -rm -r /user/atguigu/output

4.2.2 啓動YARN運行MapReduce程序

1. 分析

1)配置集羣在YARN上運行MR

2)啓動、測試集羣增、刪、查

3)在YARN上執行WordCount案例

2. 執行步驟

1)配置集羣

a)配置yarn-env.sh

配置一下JAVA_HOME

export JAVA_HOME=/opt/module/jdk1.8.0_144

b)配置yarn-site.xml

<!-- Reducer獲取數據的方式 -->

<property>

  <name>yarn.nodemanager.aux-services</name>

  <value>mapreduce_shuffle</value>

</property>

 

<!-- 指定YARNResourceManager的地址 -->

<property>

<name>yarn.resourcemanager.hostname</name>

<value>hadoop101</value>

</property>

c)配置:mapred-env.sh

配置一下JAVA_HOME

export JAVA_HOME=/opt/module/jdk1.8.0_144

d)配置: (mapred-site.xml.template從新命名爲) mapred-site.xml

[atguigu@hadoop101 hadoop]$ mv mapred-site.xml.template mapred-site.xml

[atguigu@hadoop101 hadoop]$ vi mapred-site.xml

 

<!-- 指定MR運行在YARN -->

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

2)啓動集羣

a)啓動前必須保證NameNodeDataNode已經啓動

b)啓動ResourceManager

[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager

c)啓動NodeManager

[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager

3)集羣操做

aYARN的瀏覽器頁面查看,如圖2-35所示

http://hadoop101:8088/cluster

 

2-35 YARN的瀏覽器頁面

b)刪除文件系統上的output文件

[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/atguigu/output

c)執行MapReduce程序

[atguigu@hadoop101 hadoop-2.7.2]$ bin/hadoop jar

 share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input  /user/atguigu/output

d)查看運行結果,如圖2-36所示

[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/output/*

 

2-36 查看運行結果

4.2.3 配置歷史服務器

爲了查看程序歷史運行狀況,須要配置一下歷史服務器。具體配置步驟以下:

1. 配置mapred-site.xml

[atguigu@hadoop101 hadoop]$ vi mapred-site.xml

在該文件裏面增長以下配置。

<!-- 歷史服務器端地址 -->

<property>

<name>mapreduce.jobhistory.address</name>

<value>hadoop101:10020</value>

</property>

<!-- 歷史服務器web端地址 -->

<property>

    <name>mapreduce.jobhistory.webapp.address</name>

    <value>hadoop101:19888</value>

</property>

2. 啓動歷史服務器

[atguigu@hadoop101 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver

3. 查看歷史服務器是否啓動

[atguigu@hadoop101 hadoop-2.7.2]$ jps

4. 查看JobHistory

http://hadoop101:19888/jobhistory

4.2.4 配置日誌的彙集

日誌彙集概念:應用運行完成之後,將程序運行日誌信息上傳到HDFS系統上。

日誌彙集功能好處:能夠方便的查看到程序運行詳情,方便開發調試

注意:開啓日誌彙集功能,須要從新啓動NodeManager ResourceManagerHistoryManager

開啓日誌彙集功能具體步驟以下

  1. 配置yarn-site.xml

[atguigu@hadoop101 hadoop]$ vi 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 ResourceManagerHistoryManager

[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop resourcemanager

[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop nodemanager

[atguigu@hadoop101 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh stop historyserver

  1. 啓動NodeManager ResourceManagerHistoryManager

[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager

[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager

[atguigu@hadoop101 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver

  1. 刪除HDFS上已經存在的輸出文件

[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/atguigu/output

  1. 執行WordCount程序

[atguigu@hadoop101 hadoop-2.7.2]$ hadoop jar

 share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output

  1. 查看日誌,如圖2-372-382-39所示

http://hadoop101:19888/jobhistory

 

2-37  Job History

 

2-38 job運行狀況

 

2-39 查看日誌

4.2.5 配置文件說明

Hadoop配置文件分兩類:默認配置文件和自定義配置文件,只有用戶想修改某一默認配置值時,才須要修改自定義配置文件,更改相應屬性值。

1)默認配置文件:

2-1

要獲取的默認文件

文件存放在Hadoopjar包中的位置

[core-default.xml]

hadoop-common-2.7.2.jar/ core-default.xml

[hdfs-default.xml]

hadoop-hdfs-2.7.2.jar/ hdfs-default.xml

[yarn-default.xml]

hadoop-yarn-common-2.7.2.jar/ yarn-default.xml

[mapred-default.xml]

hadoop-mapreduce-client-core-2.7.2.jar/ mapred-default.xml

2)自定義配置文件:

core-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xml四個配置文件存放在$HADOOP_HOME/etc/hadoop這個路徑上用戶能夠根據項目需求從新進行修改配置。

4.3 徹底分佈式運行模式(開發重點

分析:

1)準備3臺客戶機(關閉防火牆、靜態ip、主機名稱

2)安裝JDK

3)配置環境變量

4)安裝Hadoop

5)配置環境變量

6)配置集羣

7)單點啓動

8配置ssh

9羣起並測試集羣

4.3.1 虛擬機準備

詳見3.1章。

4.3.2 編寫集羣分發腳本xsync

1. scpsecure copy)安全拷貝

1scp定義:

scp能夠實現服務器與服務器之間的數據拷貝。from server1 to server2)

2)基本語法

scp    -r          $pdir/$fname              $user@hadoop$host:$pdir/$fname

命令   遞歸       要拷貝的文件路徑/名稱    目的用戶@主機:目的路徑/名稱

(3)案例實操

a在hadoop101上,hadoop101/opt/module目錄下的軟件拷貝到hadoop102上。

[atguigu@hadoop101 /]$ scp -r /opt/module  root@hadoop102:/opt/module

b)在hadoop103上hadoop101服務器上的/opt/module目錄下的軟件拷貝到hadoop103上。

[atguigu@hadoop103 opt]$sudo scp -r atguigu@hadoop101:/opt/module root@hadoop103:/opt/module

c)在hadoop103上操做將hadoop101/opt/module目錄下的軟件拷貝到hadoop104上。

[atguigu@hadoop103 opt]$ scp -r atguigu@hadoop101:/opt/module root@hadoop104:/opt/module

注意:拷貝過來的/opt/module目錄別忘了在hadoop10二、hadoop10三、hadoop104上修改全部文件的,全部者和全部者組。sudo chown atguigu:atguigu -R /opt/module

d)將hadoop101/etc/profile文件拷貝到hadoop102/etc/profile

[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop102:/etc/profile

e)將hadoop101/etc/profile文件拷貝到hadoop103/etc/profile

[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop103:/etc/profile

f)將hadoop101/etc/profile文件拷貝到hadoop104/etc/profile

[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop104:/etc/profile

注意:拷貝過來的配置文件別忘了source一下/etc/profile

2.  rsync 遠程同步工具

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

rsyncscp區別:rsync作文件的複製要比scp的速度快,rsync只對差別文件作更新。scp是把全部文件都複製過去。

1)基本語法

rsync    -rvl       $pdir/$fname              $user@hadoop$host:$pdir/$fname

命令   選項參數   要拷貝的文件路徑/名稱    目的用戶@主機:目的路徑/名稱

  選項參數說明

2-2

選項

功能

-r

遞歸

-v

顯示覆制過程

-l

拷貝符號鏈接

2)案例實操

ahadoop101機器上的/opt/software目錄同步到hadoop102服務器的root用戶下的/opt/目錄

[atguigu@hadoop101 opt]$ rsync -rvl /opt/software/ root@hadoop102:/opt/software

3. xsync集羣分發腳本

1)需求:循環複製文件到全部節點的相同目錄下

2需求分析:

arsync命令原始拷貝:

rsync  -rvl     /opt/module    root@hadoop103:/opt/

b)指望腳本:

xsync要同步的文件名稱

c)說明:在/home/atguigu/bin這個目錄下存放的腳本,atguigu用戶能夠在系統任何地方直接執行。

(3)腳本實現

a)在/home/atguigu目錄下建立bin目錄,並在bin目錄下xsync建立文件,文件內容以下:

[atguigu@hadoop102 ~]$ mkdir bin

[atguigu@hadoop102 ~]$ cd bin/

[atguigu@hadoop102 bin]$ touch xsync

[atguigu@hadoop102 bin]$ vi 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((host=103; host<105; host++)); do

        echo ------------------- hadoop$host --------------

        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir

done

b)修改腳本 xsync 具備執行權限

[atguigu@hadoop102 bin]$ chmod 777 xsync

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

[atguigu@hadoop102 bin]$ xsync /home/atguigu/bin

注意:若是將xsync放到/home/atguigu/bin目錄下仍然不能實現全局使用,能夠將xsync移動/usr/local/bin目錄下。

4.3.3 集羣配置

1. 集羣部署規劃

2-3

 

hadoop102

hadoop103

hadoop104

HDFS

 

NameNode

DataNode

 

DataNode

SecondaryNameNode

DataNode

YARN

 

NodeManager

ResourceManager

NodeManager

 

NodeManager

2. 配置集羣

1核心配置文件

配置core-site.xml

[atguigu@hadoop102 hadoop]$ vi core-site.xml

在該文件中編寫以下配置

<!-- 指定HDFSNameNode的地址 -->

<property>

<name>fs.defaultFS</name>

      <value>hdfs://hadoop102:9000</value>

</property>

 

<!-- 指定Hadoop運行時產生文件的存儲目錄 -->

<property>

<name>hadoop.tmp.dir</name>

<value>/opt/module/hadoop-2.7.2/data/tmp</value>

</property>

2HDFS配置文件

配置hadoop-env.sh

[atguigu@hadoop102 hadoop]$ vi hadoop-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

配置hdfs-site.xml

[atguigu@hadoop102 hadoop]$ vi hdfs-site.xml

在該文件中編寫以下配置

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

 

<!-- 指定Hadoop輔助名稱節點主機配置 -->

<property>

      <name>dfs.namenode.secondary.http-address</name>

      <value>hadoop104:50090</value>

</property>

3YARN配置文件

配置yarn-env.sh

[atguigu@hadoop102 hadoop]$ vi yarn-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

配置yarn-site.xml

[atguigu@hadoop102 hadoop]$ vi yarn-site.xml

在該文件中增長以下配置

<!-- Reducer獲取數據的方式 -->

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

 

<!-- 指定YARNResourceManager的地址 -->

<property>

<name>yarn.resourcemanager.hostname</name>

<value>hadoop103</value>

</property>

4MapReduce配置文件

配置mapred-env.sh

[atguigu@hadoop102 hadoop]$ vi mapred-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

配置mapred-site.xml

[atguigu@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml

 

[atguigu@hadoop102 hadoop]$ vi mapred-site.xml

在該文件中增長以下配置

<!-- 指定MR運行在Yarn-->

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

3.在集羣上分發配置好的Hadoop配置文件

[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/

4.查看文件分發狀況

[atguigu@hadoop103 hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml

4.3.4 集羣單點啓動

1)若是集羣是第一次啓動,須要格式化NameNode

[atguigu@hadoop102 hadoop-2.7.2]$ hadoop namenode -format

2hadoop102上啓動NameNode

[atguigu@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start namenode

[atguigu@hadoop102 hadoop-2.7.2]$ jps

3461 NameNode

3hadoop102hadoop103以及hadoop104上分別啓動DataNode

[atguigu@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start datanode

[atguigu@hadoop102 hadoop-2.7.2]$ jps

3461 NameNode

3608 Jps

3561 DataNode

[atguigu@hadoop103 hadoop-2.7.2]$ hadoop-daemon.sh start datanode

[atguigu@hadoop103 hadoop-2.7.2]$ jps

3190 DataNode

3279 Jps

[atguigu@hadoop104 hadoop-2.7.2]$ hadoop-daemon.sh start datanode

[atguigu@hadoop104 hadoop-2.7.2]$ jps

3237 Jps

3163 DataNode

4思考:每次都一個一個節點啓動,若是節點數增長到1000個怎麼辦?

早上來了開始一個一個節點啓動,到晚上下班恰好完成,下班

4.3.5 SSH無密登陸配置

1. 配置ssh

1)基本語法

ssh另外一臺電腦的ip地址

2ssh鏈接時出現Host key verification failed的解決方法

[atguigu@hadoop102 opt] $ ssh 192.168.1.103

The authenticity of host '192.168.1.103 (192.168.1.103)' can't be established.

RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.

Are you sure you want to continue connecting (yes/no)?

Host key verification failed.

3)解決方案以下:直接輸入yes

2. 無密鑰配置

1免密登陸原理,如圖2-40所示

2-40  免密登錄原理

2)生成公鑰和私鑰:

[atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa

而後敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)

3)將公鑰拷貝到要免密登陸的目標機器上

[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102

[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103

[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104

注意

還須要在hadoop102上採用root帳號,配置一下無密登陸到hadoop102、hadoop10三、hadoop104;

還須要在hadoop103上採用atguigu帳號配置一下無密登陸到hadoop102、hadoop103hadoop104服務器上。

3. .ssh文件夾下~/.ssh的文件功能解釋

2-4

known_hosts

記錄ssh訪問過計算機的公鑰(public key)

id_rsa

生成的私鑰

id_rsa.pub

生成的公鑰

authorized_keys

存放受權過得無密登陸服務器公鑰

4.3.6 羣起集羣

1. 配置slaves

/opt/module/hadoop-2.7.2/etc/hadoop/slaves

[atguigu@hadoop102 hadoop]$ vi slaves

該文件中增長以下內容:

hadoop102

hadoop103

hadoop104

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

同步全部節點配置文件

[atguigu@hadoop102 hadoop]$ xsync slaves

2. 啓動集羣

1)若是集羣是第一次啓動,須要格式化NameNode(注意格式化以前,必定要中止上次啓動的全部namenodedatanode進程,而後再刪除data和log數據

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -format

2)啓動HDFS

[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh

[atguigu@hadoop102 hadoop-2.7.2]$ jps

4166 NameNode

4482 Jps

4263 DataNode

[atguigu@hadoop103 hadoop-2.7.2]$ jps

3218 DataNode

3288 Jps

 

[atguigu@hadoop104 hadoop-2.7.2]$ jps

3221 DataNode

3283 SecondaryNameNode

3364 Jps

(3)啓動YARN

[atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh

注意:NameNodeResourceManger若是不是同一臺機器,不能在NameNode上啓動 YARN,應該在ResouceManager所在的機器上啓動YARN

4Web端查看SecondaryNameNode

a)瀏覽器中輸入http://hadoop104:50090/status.html

b)查看SecondaryNameNode信息,如圖2-41所示。

 

2-41 SecondaryNameNode的Web

3. 集羣基本測試

(1)上傳文件到集羣

  上傳小文件

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfs -mkdir -p /user/atguigu/input

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfs -put wcinput/wc.input /user/atguigu/input

  上傳大文件

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -put

 /opt/software/hadoop-2.7.2.tar.gz  /user/atguigu/input

(2)上傳文件後查看文件存放在什麼位置

a)查看HDFS文件存儲路徑

[atguigu@hadoop102 subdir0]$ pwd

/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0

b)查看HDFS在磁盤存儲文件內容

[atguigu@hadoop102 subdir0]$ cat blk_1073741825

hadoop yarn

hadoop mapreduce

atguigu

atguigu

(3)拼接

-rw-rw-r--. 1 atguigu atguigu 134217728 5月  23 16:01 blk_1073741836

-rw-rw-r--. 1 atguigu atguigu   1048583 5月  23 16:01 blk_1073741836_1012.meta

-rw-rw-r--. 1 atguigu atguigu  63439959 5月  23 16:01 blk_1073741837

-rw-rw-r--. 1 atguigu atguigu    495635 5月  23 16:01 blk_1073741837_1013.meta

[atguigu@hadoop102 subdir0]$ cat blk_1073741836>>tmp.file

[atguigu@hadoop102 subdir0]$ cat blk_1073741837>>tmp.file

[atguigu@hadoop102 subdir0]$ tar -zxvf tmp.file

(4)下載

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -get

 /user/atguigu/input/hadoop-2.7.2.tar.gz ./

4.3.7 集羣啓動/中止方式總結

1. 各個服務組件逐一啓動/中止

1)分別啓動/中止HDFS組件

hadoop-daemon.sh  start / stop  namenode / datanode / secondarynamenode

2)啓動/中止YARN

yarn-daemon.sh  start / stop  resourcemanager / nodemanager

2. 各個模塊分開啓動/中止(配置ssh是前提)經常使用

1)總體啓動/中止HDFS

start-dfs.sh   /  stop-dfs.sh

2)總體啓動/中止YARN

start-yarn.sh  /  stop-yarn.sh

4.3.8 集羣時間同步

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

 

配置時間同步具體實操:

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

1)檢查ntp是否安裝

[root@hadoop102 桌面]# rpm -qa|grep ntp

ntp-4.2.6p5-10.el6.centos.x86_64

fontpackages-filesystem-1.41-1.1.el6.noarch

ntpdate-4.2.6p5-10.el6.centos.x86_64

2)修改ntp配置文件

[root@hadoop102 桌面]# vi /etc/ntp.conf

修改內容以下

a)修改1受權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

b)修改2集羣在局域網中,不使用其餘互聯網上時間

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

c)添加3當該節點丟失網絡鏈接,依然能夠採用本地時間做爲時間服務器爲集羣中的其餘節點提供時間同步

server 127.127.1.0

fudge 127.127.1.0 stratum 10

3)修改/etc/sysconfig/ntpd 文件

[root@hadoop102 桌面]# vim /etc/sysconfig/ntpd

增長內容以下(讓硬件時間與系統時間一塊兒同步)

SYNC_HWCLOCK=yes

4)從新啓動ntpd服務

[root@hadoop102 桌面]# service ntpd status

ntpd 已停

[root@hadoop102 桌面]# service ntpd start

正在啓動 ntpd                                           [肯定]

5)設置ntpd服務開機啓動

[root@hadoop102 桌面]# chkconfig ntpd on

2. 其餘機器配置(必須root用戶)

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

[root@hadoop103桌面]# crontab -e

編寫定時任務以下:

*/10 * * * * /usr/sbin/ntpdate hadoop102

2)修改任意機器時間

[root@hadoop103桌面]# date -s "2017-9-11 11:11:11"

3)十分鐘後查看機器是否與時間服務器同步

[root@hadoop103桌面]# date

說明:測試的時候能夠將10分鐘調整爲1分鐘,節省時間。

5 Hadoop編譯源碼(面試重點)

5.1 前期準備工做

1. CentOS聯網

配置CentOS能鏈接外網。Linux虛擬機ping www.baidu.com 是暢通的

注意:採用root角色編譯,減小文件夾權限出現問題

2. jar包準備(hadoop源碼、JDK8mavenant protobuf)

1hadoop-2.7.2-src.tar.gz

2jdk-8u144-linux-x64.tar.gz

3apache-ant-1.9.9-bin.tar.gzbuild工具,打包用的)

4apache-maven-3.0.5-bin.tar.gz

5protobuf-2.5.0.tar.gz(序列化的框架)

5.2 jar包安裝

注意:全部操做必須在root用戶下完成

  1. JDK解壓、配置環境變量 JAVA_HOMEPATH,驗證java-version(以下都須要驗證是否配置成功)

[root@hadoop101 software] # tar -zxf jdk-8u144-linux-x64.tar.gz -C /opt/module/

 

[root@hadoop101 software]# vi /etc/profile

#JAVA_HOME

export JAVA_HOME=/opt/module/jdk1.8.0_144

export PATH=$PATH:$JAVA_HOME/bin

 

[root@hadoop101 software]#source /etc/profile

驗證命令:java -version

  1. Maven解壓、配置  MAVEN_HOMEPATH

[root@hadoop101 software]# tar -zxvf apache-maven-3.0.5-bin.tar.gz -C /opt/module/

 

[root@hadoop101 apache-maven-3.0.5]# vi conf/settings.xml

 

<mirrors>

    <!-- mirror

     | Specifies a repository mirror site to use instead of a given repository. The repository that

     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used

     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.

     |

<mirror>

       <id>mirrorId</id>

       <mirrorOf>repositoryId</mirrorOf>

       <name>Human Readable Name for this Mirror.</name>

       <url>http://my.repository.com/repo/path</url>

      </mirror>

     -->

        <mirror>

                <id>nexus-aliyun</id>

                <mirrorOf>central</mirrorOf>

                <name>Nexus aliyun</name>

                <url>http://maven.aliyun.com/nexus/content/groups/public</url>

        </mirror>

</mirrors>

 

[root@hadoop101 apache-maven-3.0.5]# vi /etc/profile

#MAVEN_HOME

export MAVEN_HOME=/opt/module/apache-maven-3.0.5

export PATH=$PATH:$MAVEN_HOME/bin

 

[root@hadoop101 software]#source /etc/profile

驗證命令:mvn -version

  1. ant解壓、配置  ANT _HOMEPATH

[root@hadoop101 software]# tar -zxvf apache-ant-1.9.9-bin.tar.gz -C /opt/module/

 

[root@hadoop101 apache-ant-1.9.9]# vi /etc/profile

#ANT_HOME

export ANT_HOME=/opt/module/apache-ant-1.9.9

export PATH=$PATH:$ANT_HOME/bin

 

[root@hadoop101 software]#source /etc/profile

驗證命令:ant -version

  1. 安裝  glibc-headers   g++  命令以下

[root@hadoop101 apache-ant-1.9.9]# yum install glibc-headers

[root@hadoop101 apache-ant-1.9.9]# yum install gcc-c++

  1. 安裝makecmake

[root@hadoop101 apache-ant-1.9.9]# yum install make

[root@hadoop101 apache-ant-1.9.9]# yum install cmake

  1. 解壓protobuf 進入到解壓後protobuf主目錄/opt/module/protobuf-2.5.0,而後相繼執行命令

[root@hadoop101 software]# tar -zxvf protobuf-2.5.0.tar.gz -C /opt/module/

[root@hadoop101 opt]# cd /opt/module/protobuf-2.5.0/

 

[root@hadoop101 protobuf-2.5.0]#./configure 

[root@hadoop101 protobuf-2.5.0]# make 

[root@hadoop101 protobuf-2.5.0]# make check 

[root@hadoop101 protobuf-2.5.0]# make install 

[root@hadoop101 protobuf-2.5.0]# ldconfig 

 

[root@hadoop101 hadoop-dist]# vi /etc/profile

#LD_LIBRARY_PATH

export LD_LIBRARY_PATH=/opt/module/protobuf-2.5.0

export PATH=$PATH:$LD_LIBRARY_PATH

 

[root@hadoop101 software]#source /etc/profile

驗證命令:protoc --version

  1. 安裝openssl

[root@hadoop101 software]#yum install openssl-devel

  1. 安裝 ncurses-devel

[root@hadoop101 software]#yum install ncurses-devel

到此,編譯工具安裝基本完成。

5.3 編譯源碼

1. 解壓源碼到/opt/目錄

[root@hadoop101 software]# tar -zxvf hadoop-2.7.2-src.tar.gz -C /opt/

2. 進入到hadoop源碼主目錄

[root@hadoop101 hadoop-2.7.2-src]# pwd

/opt/hadoop-2.7.2-src

3. 經過maven執行編譯命令

[root@hadoop101 hadoop-2.7.2-src]#mvn package -Pdist,native -DskipTests -Dtar

等待時間30分鐘左右,最終成功是所有SUCCESS,如圖2-42所示

 

2-42 編譯源碼

4. 成功的64hadoop包在/opt/hadoop-2.7.2-src/hadoop-dist/target

[root@hadoop101 target]# pwd

/opt/hadoop-2.7.2-src/hadoop-dist/target

5. 編譯源碼過程當中常見的問題及解決方案

1MAVEN install時候JVM內存溢出

處理方式:在環境配置文件和maven的執行文件都可調整MAVEN_OPTheap大小。(詳情查閱MAVEN 編譯 JVM調優問題,如:http://outofmemory.cn/code-snippet/12652/maven-outofmemoryerror-method

2編譯期間maven報錯。可能網絡阻塞問題致使依賴庫下載不完整致使,屢次執行命令(一次經過比較難):

[root@hadoop101 hadoop-2.7.2-src]#mvn package -Pdist,nativeN -DskipTests -Dtar

3antprotobuf等錯誤,插件下載未完整或者插件版本問題,最開始連接有較多特殊狀況,同時推薦

2.7.0版本的問題彙總帖子 http://www.tuicool.com/articles/IBn63qf

6 常見錯誤及解決方案

1)防火牆沒關閉、或者沒有啓動YARN

INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032

2)主機名稱配置錯誤

3IP地址配置錯誤

4ssh沒有配置好

5root用戶和atguigu兩個用戶啓動集羣不統一

6)配置文件修改不細心

7)未編譯源碼

Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

17/05/22 15:38:58 INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032

8)不識別主機名稱

java.net.UnknownHostException: hadoop102: hadoop102

        at java.net.InetAddress.getLocalHost(InetAddress.java:1475)

        at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:146)

        at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)

        at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)

        at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.Subject.doAs(Subject.java:415)

解決辦法:

1)在/etc/hosts文件中添加192.168.1.102 hadoop102

2)主機名稱不要起hadoop  hadoop000等特殊名稱

9DataNodeNameNode進程同時只能工做一個。

 

10)執行命令不生效,粘貼word中命令時,遇到-和長沒區分開。致使命令失效

解決辦法:儘可能不要粘貼word中代碼。

11jps發現進程已經沒有,可是從新啓動集羣,提示進程已經開啓。緣由是在linux的根目錄下/tmp目錄中存在啓動的進程臨時文件,將集羣相關進程刪除掉,再從新啓動集羣。

12jps不生效。

緣由:全局變量hadoop java沒有生效解決辦法:須要source /etc/profile文件。

138088端口鏈接不上

[atguigu@hadoop102 桌面]$ cat /etc/hosts

註釋掉以下代碼

#127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

#::1         hadoop102

相關文章
相關標籤/搜索