大數據技術之Hadoop入門

 

第1章 大數據概論

1.1 大數據概念

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


2-1 大數據概念 java

1.2 大數據特色(4V

大數據特色如圖2-2,2-3,2-4,2-5所示 node

2-2 大數據特色之大量 linux

2-3 大數據特色之高速 c++

2-4 大數據特色之多樣 web

2-5 大數據特色之低價值密度 面試

1.3 大數據應用場景

大數據應用場景如圖2-6,2-7,2-8,2-9,2-10,2-11所示 數據庫

2-6 大數據應用場景之物流倉儲 apache

2-7 大數據應用場景之零售 vim

2-8 大數據應用場景之旅遊

2-9 大數據應用場景之商品廣告推薦

2-10 大數據應用場景之保險、金融及房產

2-11 大數據應用場景人工智能

1.4 大數據發展前景

大數據發展前景如圖2-12,2-13,2-14,2-15,2-16所示

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

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

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

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

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

1.5 大數據部門業務流程分析

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

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

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

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

2-18 大數據部門組織結構

第2章 從Hadoop框架討論大數據生態

2.1 Hadoop是什麼

2.2 Hadoop發展歷史

2.3 Hadoop三大發行版本

Hadoop三大發行版本:Apache、Cloudera、Hortonworks。

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/

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

(2)2009年Hadoop的創始人Doug Cutting也加盟Cloudera公司。Cloudera產品主要爲CDH,Cloudera Manager,Cloudera Support

(3)CDH是Cloudera的Hadoop發行版,徹底開源,比Apache Hadoop在兼容性,安全性,穩定性上有所加強。

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

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

3.    Hortonworks Hadoop

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

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

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

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

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

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

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

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

2.4 Hadoop的優點(4高)

2.5 Hadoop組成(面試重點)

圖2-21 Hadoop1.x與Hadoop2.x的區別

2.5.1 HDFS架構概述

HDFS(Hadoop 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是一款開源的工具,主要用於在HadoopHive與傳統的數據庫(MySql)間進行數據的傳遞,能夠將一個關係型數據庫(例如 MySQLOracle 等)中的數據導進到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系統的一個自由、免費、源代碼開放的軟件,它是一個用於統計計算和統計製圖的優秀工具。

11MahoutApache 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目錄下建立module、software文件夾

[atguigu@hadoop101 opt]$ sudo mkdir module

[atguigu@hadoop101 opt]$ sudo mkdir software

    (2)修改module、software文件夾的全部者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-30,2-31所示

圖2-30 拖入jdk1.8

圖2-31 拖入jdk1.8完成

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

[atguigu@hadoop101 opt]$ cd software/

[atguigu@hadoop101 software]$ ls

hadoop-2.7.2.tar.gz jdk-8u144-linux-x64.tar.gz

  1. 解壓 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 拖入hadoop的tar包

圖2-33 拖入Hadoop的tar包成功

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

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

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

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

  1. 查看是否解壓成功

[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

2、重要目錄

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

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

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

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

(5)share目錄:存放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

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

        (b)web端查看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,致使NameNode和DataNode的集羣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)啓動前必須保證NameNode和DataNode已經啓動

(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)集羣操做

(a)YARN的瀏覽器頁面查看,如圖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 、ResourceManager和HistoryManager。

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

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

[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 ResourceManager HistoryManager

[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-37 2-38 2-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.xml、hdfs-site.xml、yarn-site.xml、mapred-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)安全拷貝

(1)scp定義:

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主要用於備份和鏡像。具備速度快、避免複製相同內容和支持符號連接的優勢。

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

    (1)基本語法

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

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

     選項參數說明

2-2

選項

功能

-r

遞歸

-v

顯示覆制過程

-l

拷貝符號鏈接

(2)案例實操

        (a)把hadoop101機器上的/opt/software目錄同步到hadoop102服務器的root用戶下的/opt/目錄

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

3.    xsync集羣分發腳本

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

    (2)需求分析:

(a)rsync命令原始拷貝:

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>

    (2)HDFS配置文件

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

(3)YARN配置文件

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

(4)MapReduce配置文件

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

(2)在hadoop102上啓動NameNode

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

[atguigu@hadoop102 hadoop-2.7.2]$ jps

3461 NameNode

(3)在hadoop10二、hadoop103以及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地址

(2)ssh鏈接時出現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帳號,配置一下無密登陸到hadoop10二、hadoop10三、hadoop104;

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

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(注意格式化以前,必定要先中止上次啓動的全部namenode和datanode進程(jps),而後再刪除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

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

(4)Web端查看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_HOME PATH ,驗證 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_HOME PATH

[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 _HOME PATH

[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. 安裝 make cmake

[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

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

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)主機名稱配置錯誤

3)IP地址配置錯誤

4)ssh沒有配置好

5)root用戶和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等特殊名稱

9)DataNode和NameNode進程同時只能工做一個。

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

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

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

12)jps不生效。

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

13)8088端口鏈接不上

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

註釋掉以下代碼

#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

#::1 hadoop102

相關文章
相關標籤/搜索