Hadoop(一)Hadoop的簡介與源碼編譯


一 Hadoop簡介

1.1Hadoop產生的背景

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

2. 2003年開始谷歌陸續發表的三篇論文為該問題提供了可行的解決方案

  • 分布式文件系統(GFS),可用於處理海量網頁的存儲
  • 分布式計算框架MAPREDUCE,可用於處理海量網頁的索引計算問題。
  • BigTable 數據庫:OLTP 聯機事務處理 Online Transaction Processing 增刪改,OLAP 聯機分析處理 Online Analysis Processing 查詢,真正的作用:提供了一種可以在超大數據集中進行實時CRUD操作的功能

3.Nutch的開發人員完成了相應的開源實現HDFS和MAPREDUCE,並從Nutch中剝離成為獨立項目HADOOP,到2008年1月,HADOOP成為Apache頂級項目,迎來了它的快速發展期。

1.2 Hadoop的優勢

1)高可靠性:因為Hadoop假設計算元素和存儲會出現故障,因為它維護多個工作數據副本,在出現故障時可以對失敗的節點重新分布處理

2)高擴展性:在集群間分配任務數據,可方便的擴展數以千計的節點。

3)高效性:在MapReduce的思想下,Hadoop是並行工作的,以加快任務處理速度。

4)高容錯性:自動保存多份副本數據,並且能夠自動將失敗的任務重新分配。

1.3 Hadoop組成

1)Hadoop HDFS:一個高可靠、高吞吐量的分布式文件系統。

2)Hadoop MapReduce:一個分布式的離線並行計算框架。

3)Hadoop YARN:作業調度與集群資源管理的框架。

4)Hadoop Common:支持其他模塊的工具模塊。

1.4.1 YARN架構概述

1)ResourceManager(rm):  處理客戶端請求、啟動/監控ApplicationMaster、監控NodeManager、資源分配與調度;

2)NodeManager(nm):單個節點上的資源管理、處理來自ResourceManager的命令、處理來自ApplicationMaster的命令;

3)ApplicationMaster:數據切分、為應用程序申請資源,並分配給內部任務、任務監控與容錯。

4)Container:對任務運行環境的抽象,封裝了CPU、內存等多維資源以及環境變量、啟動命令等任務運行相關的信息。

1.4.2 MapReduce架構概述  MapReduce將計算過程分為兩個階段:Map和Reduce

1)Map階段並行處理輸入數據
2)Reduce階段對Map結果進行匯總

1.4 大數據技術生態體系圖

Hadoop生態圈重點組件:

HDFS:Hadoop的分布式文件存儲系統。

MapReduce:Hadoop的分布式程序運算框架,也可以叫做一種編程模型。

Hive:基於Hadoop的類SQL數據倉庫工具

Hbase:基於Hadoop的列式分布式NoSQL數據庫

ZooKeeper:分布式協調服務組件

Mahout:基於MapReduce/Flink/Spark等分布式運算框架的機器學習算法庫

Oozie/Azkaban:工作流調度引擎

Sqoop:數據遷入遷出工具

Flume:日志采集工具

獲取數據的三種方式

1、自己公司收集的數據--日志     或者     數據庫中的數據

2、有一些數據可以通過爬蟲從網絡中進行爬取

3、從第三方機構購買

二 Hadoop編譯源碼

2.1 前期准備工作

1)CentOS聯網

配置CentOS能連接外網。最好是用新克隆的虛擬機 注意:采用root角色編譯,減少文件夾權限出現問題,yum源最好用org官方的,虛擬機內存設置大一點(我這里設置的2G)。

2)編譯環境說明

打開下載的hadoop2.7.6源碼並解壓,打開解壓目錄下的BUILDING.txt,編譯過程和需要的軟件其實就是根據這個文檔里的描述來的。

[root@node100 software]# tar -zxvf hadoop-2.7.6-src.tar.gz -C /opt/
[root@node100 hadoop-2.7.6-src]# cat BUILDING.txt 

3)jar包准備 (hadoop源碼、JDK7 、 maven、 ant 、protobuf)

(1)hadoop-2.7.6-src.tar.gz

(2)jdk-7u80-linux-x64.tar.gz

(3)apache-ant-1.9.9-bin.tar.gz

(4)apache-maven-3.1.1-bin.tar.gz

(5)protobuf-2.5.0.tar.gz

2.2 jar包安裝

0)注意:所有操作必須在root用戶下完成

1)安裝jdk,maven,ant,配置環境變量,驗證

[root@node100 software]# tar -zxf jdk-7u80-linux-x64.tar.gz -C /opt/module/
[root@node100 software]# tar -zxvf apache-maven-3.1.1-bin.tar.gz -C /opt/module/
[root@node100 software]# tar -zxvf apache-ant-1.9.9-bin.tar.gz -C /opt/module/
[root@node100 software]# vi /etc/profile
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.7.0_80
export PATH=$PATH:$JAVA_HOME/bin
#MAVEN_HOM
export MAVEN_HOME=/opt/module/apache-maven-3.1.1
export PATH=$PATH:$MAVEN_HOME/bin
#ANT_HOME
export ANT_HOME=/opt/module/apache-ant-1.9.11
export PATH=$PATH:$ANT_HOME/bin
[root@node100 software]#source /etc/profile
java -version
mvn -version
ant -version

修改maven的配置文件,添加maven的下載源

[root@node100 software]# cd /opt/module/apache-maven-3.1.1/conf/
[root@node100 conf]# vi settings.xml

在mirrors中添加alimaven的下載源

<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>alimaven</id>
        <mirrorOf>central</mirrorOf>
         <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </mirror>
        <mirror>
        <id>mirrorId</id>
        <mirrorOf>repositoryId</mirrorOf>
        <name>Human Readable Name for this Mirror.</name>
        <url>http://my.repository.com/repo/path</url>
        </mirror>
     -->
</mirrors>

2)安裝protobuf,配置環境變量,驗證

[root@node100 software]# tar -zxvf protobuf-2.5.0.tar.gz -C /opt/module/
[root@node100 software]# cd /opt/module/protobuf-2.5.0/
[root@node100 protobuf-2.5.0]#./configure 
[root@node100 protobuf-2.5.0]# make & make install 
[root@node100 protobuf-2.5.0]# vi /etc/profile
#LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/module/protobuf-2.5.0
export PATH=$PATH:$LD_LIBRARY_PATH
[root@node100 software]#source /etc/profile
驗證命令:protoc --version

3)安裝 各種庫  命令如下: 

[root@node100 ~]# yum -y install svn ncurses-devel gcc*
[root@node100 ~]# yum -y install lzo-devel zlib-devel autoconf automake libtool cmake openssl-devel

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

2.3 編譯源碼

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

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

2)進入到hadoop源碼主目錄,通過maven執行編譯命令

[root@node100 ~]# cd /opt/hadoop-2.7.6-src/
[root@node100 hadoop-2.7.6-src]#  mvn  package -Pdist,native -DskipTests -Dtar

等待時間30分鍾左右,最終成功是全部SUCCESS,首次編譯時間可能會有兩三個小時

3)成功的64位hadoop包在/opt/hadoop-2.7.6-src/hadoop-dist/target下。

[root@node100 ~]# cd /opt/hadoop-2.7.6-src/hadoop-dist/target/

2.4 常見的問題解決方案

1)MAVEN install時候JVM內存溢出

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

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

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM