一步步分析為什麼Hadoop能成為騰訊大數據處理的「一把手」

2020-08-27 陝西文都智鏈

一、 hadoop的發展史

說到Hadoop的起源,不得不說到一個傳奇的IT公司—全球IT技術的引領者Google。Google(自稱)為雲計算概念的提出者,在自身多年的搜尋引擎業務中構建了突破性的GFS(Google File System),從此文件系統進入分布式時代。除此之外,Google在GFS上如何快速分析和處理數據方面開創了MapReduce並行計算框架,讓以往的高端伺服器計算變為廉價的x86集群計算,也讓許多網際網路公司能夠從IOE(IBM小型機、Oracle資料庫以及EMC存儲)中解脫出來,例如:淘寶早就開始了去IOE化的道路。然而,Google之所以偉大就在於獨享技術不如共享技術,在2002-2004年間以三大論文的發布向世界推送了其雲計算的核心組成部分GFS、MapReduce以及BigTable。Google雖然沒有將其核心技術開源,但是這三篇論文已經向開源社區的大牛們指明了方向,一位大牛:Doug Cutting使用Java語言對Google的雲計算核心技術(主要是GFS和MapReduce)做了開源的實現。後來,Apache基金會整合Doug Cutting以及其他IT公司(如Facebook等)的貢獻成果,開發並推出了Hadoop生態系統。Hadoop是一個搭建在廉價PC上的分布式集群系統架構,它具有高可用性、高容錯性和高可擴展性等優點。由於它提供了一個開放式的平臺,用戶可以在完全不了解底層實現細節的情形下,開發適合自身應用的分布式程序

二、 Hadoop的整體框架

Hadoop由HDFS、MapReduce、HBase、Hive和ZooKeeper等成員組成,其中最基礎最重要的兩種組成元素為底層用於存儲集群中所有存儲節點文件的文件系統HDFS(Hadoop Distributed File System)和上層用來執行MapReduce程序的MapReduce引擎。


Pig是一個基於Hadoop的大規模數據分析平臺,Pig為複雜的海量數據並行計算提供了一個簡易的操作和編程接口

Chukwa是基於Hadoop的集群監控系統,由yahoo貢獻

hive是基於Hadoop的一個工具,提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行

ZooKeeper:高效的,可擴展的協調系統,存儲和協調關鍵共享狀態

HBase是一個開源的,基於列存儲模型的分布式資料庫

HDFS是一個分布式文件系統。有著高容錯性的特點,並且設計用來部署在低廉的硬體上,適合那些有著超大數據集的應用程式

MapReduce是一種編程模型,用於大規模數據集(大於1TB)的並行運算

下圖是一個典型的Hadoop試驗集群的部署結構。


Hadoop各組件之間是如何依賴共存的呢?下圖為你展示:


三、Hadoop的核心設計


3.1 HDFS

HDFS是一個高度容錯性的分布式文件系統,可以被廣泛的部署於廉價的PC之上。它以流式訪問模式訪問應用程式的數據,這大大提高了整個系統的數據吞吐量,因而非常適合用於具有超大數據集的應用程式中。

HDFS的架構如下圖所示。HDFS架構採用主從架構(master/slave)。一個典型的HDFS集群包含一個NameNode節點和多個DataNode節點。NameNode節點負責整個HDFS文件系統中的文件的元數據保管和管理,集群中通常只有一臺機器上運行NameNode實例,DataNode節點保存文件中的數據,集群中的機器分別運行一個DataNode實例。在HDFS中,NameNode節點被稱為名稱節點,DataNode節點被稱為數據節點。DataNode節點通過心跳機制與NameNode節點進行定時的通信。


NameNode

可以看作是分布式文件系統中的管理者,存儲文件系統的meta-data,主要負責管理文件系統的命名空間,集群配置信息,存儲塊的複製。

DataNode

是文件存儲的基本單元。它存儲文件塊在本地文件系統中,保存了文件塊的meta-data,同時周期性的發送所有存在的文件塊的報告給NameNode。

Client

就是需要獲取分布式文件系統文件的應用程式。

下面來看看在HDFS上如何進行文件的讀/寫操作:


文件寫入:

1. Client向NameNode發起文件寫入的請求

2. NameNode根據文件大小和文件塊配置情況,返回給Client它所管理部分DataNode的信息。

3. Client將文件劃分為多個文件塊,根據DataNode的地址信息,按順序寫入到每一個DataNode塊中。


文件讀取:

1. Client向NameNode發起文件讀取的請求

2. NameNode返回文件存儲的DataNode的信息。

3. Client讀取文件信息。

3.2 MapReduce

MapReduce是一種編程模型,用於大規模數據集的並行運算。Map(映射)和Reduce(化簡),採用分而治之思想,先把任務分發到集群多個節點上,並行計算,然後再把計算結果合併,從而得到最終計算結果。多節點計算,所涉及的任務調度、負載均衡、容錯處理等,都由MapReduce框架完成,不需要編程人員關心這些內容。

下圖是一個MapReduce的處理過程:


用戶提交任務給JobTracer,JobTracer把對應的用戶程序中的Map操作和Reduce操作映射至TaskTracer節點中;輸入模塊負責把輸入數據分成小數據塊,然後把它們傳給Map節點;Map節點得到每一個key/value對,處理後產生一個或多個key/value對,然後寫入文件;Reduce節點獲取臨時文件中的數據,對帶有相同key的數據進行迭代計算,然後把終結果寫入文件。

如果這樣解釋還是太抽象,可以通過下面一個具體的處理過程來理解:(WordCount實例)


Hadoop的核心是MapReduce,而MapReduce的核心又在於map和reduce函數。它們是交給用戶實現的,這兩個函數定義了任務本身。

map函數:接受一個鍵值對(key-value pair)(例如上圖中的Splitting結果),產生一組中間鍵值對(例如上圖中Mapping後的結果)。Map/Reduce框架會將map函數產生的中間鍵值對裡鍵相同的值傳遞給一個reduce函數。

reduce函數:接受一個鍵,以及相關的一組值(例如上圖中Shuffling後的結果),將這組值進行合併產生一組規模更小的值(通常只有一個或零個值)(例如上圖中Reduce後的結果)

但是,Map/Reduce並不是萬能的,適用於Map/Reduce計算有先提條件

注意:

待處理的數據集可以分解成許多小的數據集;

而且每一個小數據集都可以完全並行地進行處理;

若不滿足以上兩條中的任意一條,則不適合使用Map/Reduce模式;

四、 Hadoop的安裝配置

Hadoop共有三種部署方式:本地模式,偽分布模式及集群模式;本次安裝配置以偽分布模式為主,即在一臺伺服器上運行Hadoop(如果是分布式模式,則首先要配置Master主節點,其次配置Slave從節點)。以下說明如無特殊說明,默認使用root用戶登錄主節點,進行以下的一系列配置。

  安裝配置前請先準備好以下軟體:

·   vmware workstation 8.0或以上版本

·   redhat server 6.x版本或centos 6.x版本

·   jdk-6u24-linux-xxx.bin

·   hadoop-1.1.2.tar.gz

4.1 設置靜態IP位址

  命令模式下可以執行setup命令進入設置界面配置靜態IP位址;x-window界面下可以右擊網絡圖標配置;

  配置完成後執行service network restart重新啟動網絡服務;  

  驗證:執行命令ifconfig

4.2 修改主機名

  <1>修改當前會話中的主機名(這裡我的主機名設為hadoop-master),執行命令hostname hadoop-master

  <2>修改配置文件中的主機名,執行命令vi /etc/sysconfig/network

  驗證:重啟系統reboot

4.3 DNS綁定

  執行命令vi /etc/hosts,增加一行內容,如下(這裡我的Master節點IP設置的為192.168.80.100):

  192.168.80.100 hadoop-master

  保存後退出

  驗證:ping hadoop-master

4.4 關閉防火牆及其自動運行

  <1>執行關閉防火牆命令:service iptables stop

驗證:service iptables stauts

  <2>執行關閉防火牆自動運行命令:chkconfig iptables off

  驗證:chkconfig --list | grep iptables

4.5 SSH(Secure Shell)的免密碼登錄

  <1>執行產生密鑰命令:ssh-keygen –t rsa,位於用戶目錄下的.ssh文件中(.ssh為隱藏文件,可以通過ls –a查看)

  <2>執行產生命令:cp id_rsa.pub authorized_keys

  驗證:ssh localhost

4.6 複製JDK和Hadoop-1.1.2.tar.gz至Linux中

  <1>使用WinScp或CuteFTP等工具將jdk和hadoop.tar.gz複製到Linux中(假設複製到了Downloads文件夾中);

  <2>執行命令:rm –rf /usr/local/* 刪除該文件夾下所有文件

  <3>執行命令:cp /root/Downloads/* /usr/local/ 將其複製到/usr/local/文件夾中

4.7 安裝JDK

  <1>在/usr/local下解壓jdk安裝文件:./jdk-6u24-linux-i586.bin(如果報權限不足的提示,請先為當前用戶對此jdk增加執行權限:chmod u+x jdk-6u24-linux-i586.bin)

  <2>重命名解壓後的jdk文件夾:mv jdk1.6.0_24 jdk(此步驟非必要,只是建議)

  <3>配置Linux環境變量:vi /etc/profile,在其中增加幾行:

  export JAVA_HOME=/usr/local/jdk

  export PATH=.:$JAVA_HOME/bin:$PATH

  <4>生效環境變量配置:source /etc/profile

  驗證:java –version

4.8 安裝Hadoop

<1>在/usr/local下解壓hadoop安裝文件:tar –zvxf hadoop-1.1.2.tar.gz

<2>解壓後重命名hadoop-1.1.2文件夾:mv hadoop-1.1.2 hadoop(此步驟非必要,只是建議)

<3>配置Hadoop相關環境變量:vi /etc/profile,在其中增加一行:

  export HADOOP_HOME=/usr/local/hadoop

然後修改一行:

  export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME:$PATH

<4>生效環境變量:source /etc/profile

<5>修改Hadoop的配置文件,它們位於$HADOOP_HOME/conf目錄下。

分別修改四個配置文件:hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml;

具體下修改內容如下:(由於修改內容較多,建議使用WinScp進入相關目錄下進行編輯和保存,可以節省較多時間和精力)

5.1【hadoop-env.sh】 修改第九行:

    export JAVA_HOME=/usr/local/jdk/

    如果虛擬機內存低於1G,還需要修改HADOOP_HEAPSIZE(默認為1000)的值:

    export HADOOP_HEAPSIZE=100

5.2【core-site.xml】 在configuration中增加以下內容(其中的hadoop-master為你配置的主機名):

    <property>

  <name>fs.default.name</name>

  <value>hdfs://hadoop-master:9000</value>

  <description>change your own hostname</description>

  </property>

  <property>

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

  <value>/usr/local/hadoop/tmp</value>

  </property>

5.3 【hdfs-site.xml】 在configuration中增加以下內容:

    <property>

  <name>dfs.replication</name>

  <value>1</value>

   </property>

   <property>

  <name>dfs.permissions</name>

  <value>false</value>

   </property>

5.4 【mapred-site.xml】 在configuration中增加以下內容(其中的hadoop-master為你配置的主機名):

    <property>

  <name>mapred.job.tracker</name>

  <value>hadoop-master:9001</value>

  <description>change your own hostname</description>

  </property>

<6>執行命令對Hadoop進行初始格式化:hadoop namenode –format

<7>執行命令啟動Hadoop:start-all.sh(一次性啟動所有進程)

第二種方式:通過執行如下方式命令單獨啟動HDFS和MapReduce:start-dfs.sh和start-mapred.sh啟動,stop-dfs.sh和stop-mapred.sh關閉;

  第三種方式:通過執行如下方式命令分別啟動各個進程:

  hadoop-daemon.sh start namenode

  hadoop-daemon.sh start datanode

  hadoop-daemon.sh start secondarynamenode

  hadoop-daemon.sh start jobtracker

  hadoop-daemon.sh start tasktracker

  這種方式的執行命令是hadoop-daemon.sh start [進程名稱],這種啟動方式適合於單獨增加、刪除節點的情況,在安裝集群環境的時候會看到。

  驗證:

  ① 執行jps命令查看java進程信息,如果是start-all.sh則一共顯示5個java進程。

  ②在瀏覽器中瀏覽Hadoop,輸入URL:hadoop-master:50070和hadoop-master:50030。如果想在宿主機Windows中瀏覽,可以直接通過ip地址加埠號訪問,也可以配置C盤中System32/drivers/etc/中的hosts文件,增加DNS主機名映射,例如:192.168.80.100 hadoop-master。

  訪問效果如下圖:


<8>NameNode進程沒有啟動成功?可以從以下幾個方面檢查:

  沒有對NameNode進行格式化操作:hadoop namenode –format(PS:多次格式化也會出錯,保險操作是先刪除/usr/local/hadoop/tmp文件夾再重新格式化)

  Hadoop配置文件只複製沒修改: 修改四個配置文件需要改的參數

  DNS沒有設置IP和hostname的綁定:vi /etc/hosts

  SSH的免密碼登錄沒有配置成功:重新生成rsa密鑰

<9>Hadoop啟動過程中出現以下警告?

可以通過以下步驟去除該警告信息:

首先執行命令查看shell腳本:vi start-all.sh(在bin目錄下執行),可以看到如下圖所示的腳本


雖然我們看不懂shell腳本的語法,但是可以猜到可能和文件hadoop-config.sh有關,我們再看一下這個文件的源碼。執行命令:vi hadoop-config.sh(在bin目錄下執行),由於該文件特大,我們只截取最後一部分。

從圖中的紅色框框中可以看到,腳本判斷環境變量HADOOP_HOME和HADOOP_HOME_WARN_SUPPRESS的值,如果前者為空,後者不為空,則顯示警告信息「Warning„„」。

我們在前面的安裝過程中已經配置了HADOOP_HOME這個環境變量,因此,只需要給HADOOP_HOME_WARN_SUPPRESS配置一個值就可以了。所以,執行命令:vi /etc/profile,增加一行內容(只隨便設置一個即可,這裡設為0):

export HADOOP_HOME_WARN_SUPPRESS=0

保存退出後執行重新生效命令:source /etc/profile,生效後重新啟動hadoop進程則不會提示警告信息了。

至此,一個Hadoop的Master節點的安裝配置結束。

相關焦點

  • 大數據掃盲——什麼是Hadoop
    Hadoop是一個開源大數據處理框架。當前大部分公司的大數據平臺都是基於Hadoop開發的,包括,華為、阿里、騰訊等國內科技巨頭。hadoop起源hadoop之父Doug Cuttinghadoop出現之前,隨著網絡數據量的不斷增長,大部分搜索公司都都面臨一個問題:傳統搜尋引擎框架(如lucence等)在處理海量數據上越來越吃力
  • 騰訊主導Apache Hadoop新版本發布
    成為PMC的成員可是非常不容易的事,必須要一步步「打怪升級」。要實現從一個普通的Developer到PMC Member的跨越,除了碼代碼以外,開源社區的組織能力也要強,是不是帥呆了?堵 俊 平騰訊T4 大數據技術專家,曾任EMC,VMware資深研發工程師,Hortonworks美國YARN團隊負責人。
  • 大規模數據處理的時候,hadoop無法滿足業務的需求
    其實我研究得並不是特別深,所以我只能回答一些關於大數據相關的問題,包括hadoop相關的。(在我看來,大數據主要是兩方面:高性能計算/數據挖掘)關於機器學習方面的一些建議,我想你搜一下知乎比來提問要容易得多。
  • 好程式設計師大數據培訓簡述Hadoop常見問題
    目前百度,騰訊,阿里為主的網際網路公司都是以hadoop。  a.X為基準版本的,當然每個公司都會進行自定義的二次開發以滿足不同的集群需求。  b.X在百度內部還沒有正式使用,還是以1.X為主,不過百度針對1.X的問題開發了HCE系統(HadoopC++Expand系統)。  補充:Hadoop2.x在其他公司應用的很多,比如京東等。
  • 大數據基礎入門——Hadoop強大的、快速、良好發展的生態圈!
    獲取更多精彩文章請關注云主宰蒼穹引言:隨著大數據的不斷發展,以及雲計算等新興技術的不斷融合,Hadoop現在已經發展成為了一個生態圈,而不再僅僅是一個大數據的框架了。在Apache基金下,Hadoop社區已經發展成為一個大數據與雲計算結合的生態圈,對於大數據的計算不滿足於離線的批量處理了,同時也支持在線的基於內存和實時的流式計算。了解完大數據的基礎部分,Hadoop基礎之後,接下來學習Hadoop生態圈的技術,這才是大數據的實用部分,商用部分以及更有價值的部分。
  • hadoop是什麼_華為大數據平臺hadoop你了解多少
    打開APP hadoop是什麼_華為大數據平臺hadoop你了解多少 發表於 2017-12-25 16:46:13   Hadoop
  • Hadoop實踐先行 曙光金融大數據方案
    【IT168 方案】金融行業信息化已經逐漸普及,但是隨著網際網路技術和應用的飛速發展,尤其是發卡量和網上交易量激增,如何對這些個性化的交易進行監管和交易行為進行分析,欺詐偵測,發現和驅動新的業務,相關業務數據量急劇上升,是當前金融業在面臨大數據的難題,同時由於關係型資料庫的架構在面臨大數據處理的先天性不足的原因,金融業亟待新的方法和技術來解決這些問題
  • Hadoop大數據面試題全版本
    合理設置blocksize(2.)避免出現數據傾斜(3.combine函數(4.對數據進行壓縮(5.小文件處理優化:事先合併成大文件,combineTextInputformat,在hdfs上用mapreduce將小文件合併成SequenceFile大文件(key:文件名,value:文件內容)(6.參數優化36.請列舉出曾經修改過的
  • 基於Hadoop大數據分析應用場景與實戰
    一、Hadoop的應用業務分析大數據是不能用傳統的計算技術處理的大型數據集的集合。它不是一個單一的技術或工具,而是涉及的業務和技術的許多領域。目前主流的三大分布式計算系統分別為:Hadoop、Spark和Strom:Hadoop當前大數據管理標準之一,運用在當前很多商業應用系統。
  • 大數據分析與數據分析的根本區別在哪裡?
    如今大數據分析和數據分析火爆,要說時機,可謂處處都是時機,關鍵要明了的一點是,大數據分析和數據分析兩者的根本區別在哪裡,只有真正了解了,才會知曉更加適合自己的領域是大數據分析師還是數據分析師。畢竟職場如戰場,時間就是生活,不容兒戲,更不容怠慢。下面我來好好告訴大家兩者的本質區別到底是什麼!大數據分析:指無法在可承受的時間範圍內用常規軟體工具進行捕捉、管理和處理的數據集合。
  • Hadoop
    HDFS能提供高吞吐量的數據訪問,適合那些有著超大數據集(large data set)的應用程式。MapReduce的基本原理就是:將大的數據分析分成小塊逐個分析,最後再將提取出來的數據匯總分析,最終獲得我們想要的內容。
  • 騰訊TDW項目:開源的分布式數據倉庫
    TDW,騰訊分布式數據倉庫項目,在hadoop的基礎上開發的騰訊內部最大的離線數據處理平臺。TDW支持Oracle功能兼容的SQL語法,支持PB及的存儲和TB及的計算等。  以下是採訪記錄。  CSDN:請簡單的介紹一下TDW項目的應用場景。
  • 以Hadoop入門大數據
    到現在hadoop已經形成了完善的生態圈,3.Hadoop生態相關BDAS(Berkeley Data Analytics Stack),這個伯克利大學提出的關於數據分析的軟體棧。從它的視角來看,目前的大數據處理可以分為如以下三個類型。複雜的批量數據處理(batch data processing),通常的時間跨度在數十分鐘到數小時之間。
  • 大數據系列之再識Hadoop文件系統HDFS
    CDA數據分析 出品在搭建偽分布集群或者搭建分布式集群過程中經常提到HDFS,HDFS到底是什麼東東呢?今天我們就給小夥伴們詳細介紹一下。1、 HDFS簡介HDFS(Hadoop Distributed File System)是hadoop項目的核心子項目,是分布式計算中數據存儲管理的基礎。
  • hadoop基礎知識介紹_hadoop是什麼語言開發的_hadoop能做什麼
    一、hadoop是什麼? (1)Hadoop是一個開發和運行處理大規模數據的軟體平臺,可編寫和運行分布式應用處理大規模數據,是Appach的一個用java語言實現開源軟體框架,實現在大量計算機組成的集群中對海量數據進行分布式計算(或專為離線和大規模數據分析而設計的)並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。
  • 淺談Hadoop系統架構與海量數據分析
    IBM宣布在Hadoop上建立新的存儲架構,作為群集運行DB2或Oracle資料庫,目的是讓應用程式,支持高性能分析,數據倉庫應用程式和雲計算的目的。EMC也推出了世界上第一個定製的、高性能的Hadoop專用數據協同處理設備——Greenplum HD數據計算設備,為客戶提供了最強大、最高效率的方法,充分挖掘大數據的價值。網際網路搜索巨頭百度也在考慮使用Hadoop。
  • Hadoop大數據面試真題匯總(2)
    的 namenode 宕機,怎麼解決先分析宕機後的損失,宕機後直接導致 client 無法訪問,內存中的元數據丟失,但是硬碟中的元數據應該還存在。如果是機器掛了,重啟機器後,看節點是否能重啟,不能重啟就要另找原因修復了。最終的解決方案應該是在設計集群的初期就考慮到這個問題,做 namenode 的 HA。
  • 大數據分析中Spark,Hadoop,Hive框架該用哪種開源分布式系統
    打開APP 大數據分析中Spark,Hadoop,Hive框架該用哪種開源分布式系統 算法與數據結構 發表於 2020-09-17 13:17:00
  • 專訪騰訊蔣傑:深度揭秘騰訊大數據平臺
    大數據,這個詞越來越熱,很多人都在談大數據,其實很多張口閉口大數據的人,或許都不知道數據是如何產生、傳遞、存儲、運算到應用的。其實我一直感覺大數據這個東西有時候真的不是一般企業可以玩的溜的,特別是隨著傳統業務增長放緩,以及移動網際網路時代的精細化運營,對於大數據分析和挖掘的重視程度高於以往任何時候,如何從大數據中獲取高價值,已經成為大家關心的焦點問題。
  • Hadoop工具生態系統指南 | 網際網路數據資訊網-199IT | 中文網際網路...
    網址:hadoop.apache.org/hdfs/ MapReduce在計算機集群上進行大數據分布式處理的軟體框架。網址:archive.cloudera.com/cdh/3/flume/ HiveHive是基於Hadoop的數據倉庫基礎架構,提供的工具能進行簡便的數據匯總、ad-hoc查詢,以及對存儲在Hadoop文件中的大數據集的分析。