以Hadoop入門大數據

一、Hadoop簡介

1.什麼是Hadoop-

  • Apache™ Hadoop® project 生產出的用於高可靠、可擴展、分佈式計算的開源軟件,它允許通過集羣的方式使用簡單的編程模型分佈式處理大數據,它可以從單一的服務器擴展到成千上萬的機器,每一臺機器都能提供本地計算和存儲。Hadoop認爲集羣中節點故障爲常態,它可以自動檢測和處理故障節點,所以它不依賴硬件來提供高可用性。
  • 簡單的說,我們可以用Hadoop分佈式存儲大量數據,然後根據自己的業務對海量數據進行分佈式計算。例如:
    • 淘寶網昨天24小時的用戶訪問量折線圖,不同地區、不同時段、不同終端
    • 中國
  • Apache™ Hadoop® project 包含的模塊
    • Hadoop Common :The common utilities that support the other Hadoop modules.
    • Hadoop Distributed File System (HDFS™): 高吞吐分佈式文件系統
    • Hadoop YARN: 作業(Job)安排和資源調度平臺/框架
    • Hadoop MapReduce: 運行在yarn上的大數據並行計算模型

大數據學習羣:716581014

  • 其他相關project

2.Hadoop產生背景

  • Doug Cutting是Lucene、Nutch 、Hadoop等項目的發起人
  • Hadoop最早起源於Nutch。Nutch的設計目的是構建一個大型的全網搜索引擎,包括網頁抓取、索引、查詢等功能,但隨着抓取網頁數量的增加,遇到了嚴重的可擴展性問題:如何解決數十億網頁的存儲和索引問題。
  • 2003、2004年穀歌發表的兩篇論文爲該問題提供了可行的解決方案。
    • 分佈式文件系統(GFS),可用於處理海量網頁存儲
    • 分佈式計算框架(MapReduce),可用於海量網頁的索引計算問題
  • 谷歌在03到06年間連續發表了三篇很有影響力的文章,分別是03年SOSP的GFS,04年OSDI的MapReduce,和06年OSDI的BigTable。SOSP和OSDI都是操作系統領域的頂級會議,在計算機學會推薦會議裏屬於A類。SOSP在單數年舉辦,而OSDI在雙數年舉辦。
  • Nutch開發人員完成了相應的開源實現HDFS和MapReduce,並從Nutch中剝離成爲獨立項目Hadoop,直到2008年,Hadoop成爲Apache頂級項目,之後快速發展。
  • 到現在hadoop已經形成了完善的生態圈,

3.Hadoop架構

  • 1.分佈式架構簡介

    • 單機的問題

      • 存儲能力有限
      • 計算能力有限
      • 有單點故障
      • ...
    • 分佈式架構解決了單機問題

    • 經典分佈式主從架構

      • Master(老大)負責管理,可以有多個,防止單節點故障發生
      • Slave(小弟)負責幹活,有多個,可以動態添加刪除
    1. Hadoop架構
    • Hadoop2.0
      • HDFS:NameNode(老大),DateNode(小弟)
      • YARN:ResourceManager(老大),NodeManager(小弟)

4.Hadoop生態

  • Hadoop生態圈:
      • Sqoop(發音:skup)是一款開源的工具,主要用於在Hadoop(Hive)與傳統的數據庫(mysql、postgresql...)間進行數據的傳遞,可以將一個關係型數據庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型數據庫中。
      • Apache Ambari是一種基於Web的工具,支持Apache Hadoop集羣的供應、管理和監控。Ambari目前已支持大多數Hadoop組件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeper、Sqoop和Hcatalog等。
      • ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。
      • hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射爲一張數據庫表,並提供簡單的sql查詢功能,可以將sql語句轉換爲MapReduce任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。
      • Pig是一個基於Hadoop的大規模數據分析平臺,它提供的SQL-LIKE語言叫Pig Latin,該語言的編譯器會把類SQL的數據分析請求轉換爲一系列經過優化處理的MapReduce運算。Pig爲複雜的海量數據並行計算提供了一個簡單的操作和編程接口。
      • Mahout 是 Apache Software Foundation(ASF) 旗下的一個開源項目,提供一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地創建智能應用程序。Mahout包含許多實現,包括聚類、分類、推薦過濾、頻繁子項挖掘。此外,通過使用 Apache Hadoop 庫,Mahout 可以有效地擴展到雲中。
      • HBase是Apache的Hadoop項目的子項目。HBase不同於一般的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。另一個不同的是HBase基於列的而不是基於行的模式。
    • 大數據本身是個很寬泛的概念,Hadoop生態圈(或者泛生態圈)基本上都是爲了處理超過單機尺度的數據處理而誕生的。你可以把它比作一個廚房所以需要的各種工具。鍋碗瓢盆,各有各的用處,互相之間又有重合。你可以用湯鍋直接當碗吃飯喝湯,你可以用小刀或者刨子去皮。但是每個工具有自己的特性,雖然奇怪的組合也能工作,但是未必是最佳選擇。
    • 大數據,首先你要能存的下大數據。傳統的文件系統是單機的,不能橫跨不同的機器。HDFS(Hadoop Distributed FileSystem)的設計本質上是爲了大量的數據能橫跨成百上千臺機器,但是你看到的是一個文件系統而不是很多文件系統。比如你說我要獲取/hdfs/tmp/file1的數據,你引用的是一個文件路徑,但是實際的數據存放在很多不同的機器上。你作爲用戶,不需要知道這些,就好比在單機上你不關心文件分散在什麼磁道什麼扇區一樣。HDFS爲你管理這些數據。
    • 存的下數據之後,你就開始考慮怎麼處理數據。雖然HDFS可以爲你整體管理不同機器上的數據,但是這些數據太大了。一臺機器讀取成T上P的數據(很大的數據哦,比如整個東京熱有史以來所有高清電影的大小甚至更大),一臺機器慢慢跑也許需要好幾天甚至好幾周。對於很多公司來說,單機處理是不可忍受的,比如微博要更新24小時熱博,它必須在24小時之內跑完這些處理。那麼我如果要用很多臺機器處理,我就面臨瞭如何分配工作,如果一臺機器掛了如何重新啓動相應的任務,機器之間如何互相通信交換數據以完成複雜的計算等等。這就是MapReduce / Tez / Spark的功能。MapReduce是第一代計算引擎,Tez和Spark是第二代。MapReduce的設計,採用了很簡化的計算模型,只有Map和Reduce兩個計算過程(中間用Shuffle串聯),用這個模型,已經可以處理大數據領域很大一部分問題了。
    • 那什麼是Map什麼是Reduce?考慮如果你要統計一個巨大的文本文件存儲在類似HDFS上,你想要知道這個文本里各個詞的出現頻率。你啓動了一個MapReduce程序。Map階段,幾百臺機器同時讀取這個文件的各個部分,分別把各自讀到的部分分別統計出詞頻,產生類似(hello, 12100次),(world,15214次)等等這樣的Pair(我這裏把Map和Combine放在一起說以便簡化);這幾百臺機器各自都產生了如上的集合,然後又有幾百臺機器啓動Reduce處理。Reducer機器A將從Mapper機器收到所有以A開頭的統計結果,機器B將收到B開頭的詞彙統計結果(當然實際上不會真的以字母開頭做依據,而是用函數產生Hash值以避免數據串化。因爲類似X開頭的詞肯定比其他要少得多,而你不希望數據處理各個機器的工作量相差懸殊)。然後這些Reducer將再次彙總,(hello,12100)+(hello,12311)+(hello,345881)= (hello,370292)。每個Reducer都如上處理,你就得到了整個文件的詞頻結果。這看似是個很簡單的模型,但很多算法都可以用這個模型描述了。Map+Reduce的簡單模型很黃很暴力,雖然好用,但是很笨重。第二代的Tez和Spark除了內存Cache之類的新feature,本質上來說,是讓Map/Reduce模型更通用,讓Map和Reduce之間的界限更模糊,數據交換更靈活,更少的磁盤讀寫,以便更方便地描述複雜算法,取得更高的吞吐量。
    • 有了MapReduce,Tez和Spark之後,程序員發現,MapReduce的程序寫起來真麻煩。他們希望簡化這個過程。這就好比你有了彙編語言,雖然你幾乎什麼都能幹了,但是你還是覺得繁瑣。你希望有個更高層更抽象的語言層來描述算法和數據處理流程。於是就有了Pig和Hive。Pig是接近腳本方式去描述MapReduce,Hive則用的是SQL。它們把腳本和SQL語言翻譯成MapReduce程序,丟給計算引擎去計算,而你就從繁瑣的MapReduce程序中解脫出來,用更簡單更直觀的語言去寫程序了。
    • 有了Hive之後,人們發現SQL對比Java有巨大的優勢。一個是它太容易寫了。剛纔詞頻的東西,用SQL描述就只有一兩行,MapReduce寫起來大約要幾十上百行。而更重要的是,非計算機背景的用戶終於感受到了愛:我也會寫SQL!於是數據分析人員終於從乞求工程師幫忙的窘境解脫出來,工程師也從寫奇怪的一次性的處理程序中解脫出來。大家都開心了。Hive逐漸成長成了大數據倉庫的核心組件。甚至很多公司的流水線作業集完全是用SQL描述,因爲易寫易改,一看就懂,容易維護。
    • 自從數據分析人員開始用Hive分析數據之後,它們發現,Hive在MapReduce上跑,真幾把慢!流水線作業集也許沒啥關係,比如24小時更新的推薦,反正24小時內跑完就算了。但是數據分析,人們總是希望能跑更快一些。比如我希望看過去一個小時內多少人在充氣娃娃頁面駐足,分別停留了多久,對於一個巨型網站海量數據下,這個處理過程也許要花幾十分鐘甚至很多小時。而這個分析也許只是你萬里長征的第一步,你還要看多少人瀏覽了跳蛋多少人看了拉赫曼尼諾夫的CD,以便跟老闆彙報,我們的用戶是猥瑣男悶騷女更多還是文藝青年/少女更多。你無法忍受等待的折磨,只能跟帥帥的工程師蟈蟈說,快,快,再快一點!
    • 於是Impala,Presto,Drill(交互式查詢引擎)誕生了(當然還有無數非著名的交互SQL引擎,就不一一列舉了)。三個系統的核心理念是,MapReduce引擎太慢,因爲它太通用,太強壯,太保守,我們SQL需要更輕量,更激進地獲取資源,更專門地對SQL做優化,而且不需要那麼多容錯性保證(因爲系統出錯了大不了重新啓動任務,如果整個處理時間更短的話,比如幾分鐘之內)。這些系統讓用戶更快速地處理SQL任務,犧牲了通用性穩定性等特性。如果說MapReduce是大砍刀,砍啥都不怕,那上面三個就是剔骨刀,靈巧鋒利,但是不能搞太大太硬的東西。
    • 這些系統,說實話,一直沒有達到人們期望的流行度。因爲這時候又兩個異類被造出來了。他們是Hive on Tez / Spark和SparkSQL。它們的設計理念是,MapReduce慢,但是如果我用新一代通用計算引擎Tez或者Spark來跑SQL,那我就能跑的更快。而且用戶不需要維護兩套系統。這就好比如果你廚房小,人又懶,對吃的精細程度要求有限,那你可以買個電飯煲,能蒸能煲能燒,省了好多廚具。
    • 上面的介紹,基本就是一個數據倉庫的構架了。底層HDFS,上面跑MapReduce/Tez/Spark,在上面跑Hive,Pig。或者HDFS上直接跑Impala,Drill,Presto。這解決了中低速數據處理的要求
    • 那如果我要更高速的處理呢?
    • 如果我是一個類似微博的公司,我希望顯示不是24小時熱博,我想看一個不斷變化的熱播榜,更新延遲在一分鐘之內,上面的手段都將無法勝任。於是又一種計算模型被開發出來,這就是Streaming(流)計算。Storm是最流行的流計算平臺。流計算的思路是,如果要達到更實時的更新,我何不在數據流進來的時候就處理了?比如還是詞頻統計的例子,我的數據流是一個一個的詞,我就讓他們一邊流過我就一邊開始統計了。流計算很牛逼,基本無延遲,但是它的短處是,不靈活,你想要統計的東西必須預先知道,畢竟數據流過就沒了,你沒算的東西就無法補算了。因此它是個很好的東西,但是無法替代上面數據倉庫和批處理系統。
    • 還有一個有些獨立的模塊是KV Store,比如Cassandra,HBase,MongoDB以及很多很多很多很多其他的(多到無法想象)。所以KV Store就是說,我有一堆鍵值,我能很快速滴獲取與這個Key綁定的數據。比如我用身份證號,能取到你的身份數據。這個動作用MapReduce也能完成,但是很可能要掃描整個數據集。而KV Store專用來處理這個操作,所有存和取都專門爲此優化了。從幾個P的數據中查找一個身份證號,也許只要零點幾秒。這讓大數據公司的一些專門操作被大大優化了。比如我網頁上有個根據訂單號查找訂單內容的頁面,而整個網站的訂單數量無法單機數據庫存儲,我就會考慮用KV Store來存。KV Store的理念是,基本無法處理複雜的計算,大多沒法JOIN,也許沒法聚合,沒有強一致性保證(不同數據分佈在不同機器上,你每次讀取也許會讀到不同的結果,也無法處理類似銀行轉賬那樣的強一致性要求的操作)。但是丫就是快。極快。
    • 每個不同的KV Store設計都有不同取捨,有些更快,有些容量更高,有些可以支持更復雜的操作。必有一款適合你。
    • 除此之外,還有一些更特製的系統/組件,比如Mahout是分佈式機器學習庫,Protobuf是數據交換的編碼和庫,ZooKeeper是高一致性的分佈存取協同系統,等等。
    • 有了這麼多亂七八糟的工具,都在同一個集羣上運轉,大家需要互相尊重有序工作。所以另外一個重要組件是,調度系統。現在最流行的是Yarn。你可以把他看作中央管理,好比你媽在廚房監工,哎,你妹妹切菜切完了,你可以把刀拿去殺雞了。只要大家都服從你媽分配,那大家都能愉快滴燒菜。
    • 你可以認爲,大數據生態圈就是一個廚房工具生態圈。爲了做不同的菜,中國菜,日本菜,法國菜,你需要各種不同的工具。而且客人的需求正在複雜化,你的廚具不斷被髮明,也沒有一個萬用的廚具可以處理所有情況,因此它會變的越來越複雜。
  • Hadoop Spark Storm 區別?
    • 從計算模型上:Hadoop是批處理型,Spark和Storm是流處理型
    • 從處理時延上:Hadoop數分鐘-數小時,Spark秒級,Sotrm毫秒級
    • 從吞吐量上:Hadoop>Spark>Storm
    • 從容錯性上:Hadoop>Storm>Spark
    • 對於Hadoop來說
      • Spark Storm能做的它都能做,但就是處理時延大
      • 如果處理較大文件且不需要實時性必然選擇Hadoop。
      • 如果處理的都是一些小文件且需要需要一定實時性選擇Spark(準實時,對一個時間段內的數據收集起來,作爲一個RDD,再處理)
      • 如果需要非常強的實時性選擇Storm(純實時,來一條數據,處理一條數據,常見消息來源MQ)
    • 對於Storm來說:
      • 1、建議在那種需要純實時,不能忍受1秒以上延遲的場景下使用,比如實時金融系統,要求純實時進行金融交易和分析
      • 2、此外,如果對於實時計算的功能中,要求可靠的事務機制和可靠性機制,即數據的處理完全精準,一條也不能多,一條也不能少,也可以考慮使用Storm
      • 3、如果還需要針對高峯低峯時間段,動態調整實時計算程序的並行度,以最大限度利用集羣資源(通常是在小型公司,集羣資源緊張的情況),也可以考慮用Storm
      • 4、如果一個大數據應用系統,它就是純粹的實時計算,不需要在中間執行SQL交互式查詢、複雜的transformation算子等,那麼用Storm是比較好的選擇
    • 對於Spark Streaming來說:
      • 1、如果對上述適用於Storm的三點,一條都不滿足的實時場景,即,不要求純實時,不要求強大可靠的事務機制,不要求動態調整並行度,那麼可以考慮使用Spark Streaming
      • 2、考慮使用Spark Streaming最主要的一個因素,應該是針對整個項目進行宏觀的考慮,即,如果一個項目除了實時計算之外,還包括了離線批處理、交互式查詢等業務功能,而且實時計算中,可能還會牽扯到高延遲批處理、交互式查詢等功能,那麼就應該首選Spark生態,用Spark Core開發離線批處理,用Spark SQL開發交互式查詢,用Spark Streaming開發實時計算,三者可以無縫整合,給系統提供非常高的可擴展性
    • Spark Streaming與Storm的優劣分析
      • 事實上,Spark Streaming絕對談不上比Storm優秀。這兩個框架在實時計算領域中,都很優秀,只是擅長的細分場景並不相同。
      • Spark Streaming僅僅在吞吐量上比Storm要優秀,而吞吐量這一點,也是歷來挺Spark Streaming,貶Storm的人着重強調的。但是問題是,是不是在所有的實時計算場景下,都那麼注重吞吐量?不盡然。因此,通過吞吐量說Spark Streaming強於Storm,不靠譜。
      • 事實上,Storm在實時延遲度上,比Spark Streaming就好多了,前者是純實時,後者是準實時。而且,Storm的事務機制、健壯性 / 容錯性、動態調整並行度等特性,都要比Spark Streaming更加優秀。
      • Spark Streaming,有一點是Storm絕對比不上的,就是:它位於Spark生態技術棧中,因此Spark Streaming可以和Spark Core、Spark SQL無縫整合,也就意味着,我們可以對實時處理出來的中間數據,立即在程序中無縫進行延遲批處理、交互式查詢等操作。這個特點大大增強了Spark Streaming的優勢和功能。

Hadoop環境搭建

準備環境

  • 準備軟件
    1. CentOS-7-x86_64-Minimal-1611.iso
    2. jdk-8u121-linux-x64.tar
    3. hadoop-2.7.3.tar
    4. VirtualBox
  • 技能準備

    1. Virtual新建虛擬機,網絡配置:橋接、host only ...
    2. Linux常用命令:cd mv cp scp vi cat ...
    3. Linux網絡卡配置,以centos7爲例:編輯網卡配置 vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 ...

       
      TYPE=Ethernet
      BOOTPROTO=static
      IPADDR=192.168.254.222
      NETMASK=255.255.255.0
      GATEWAY=192.168.254.1
      DEFROUTE=yes
      PEERDNS=yes
      PEERROUTES=yes
      IPV4_FAILURE_FATAL=no
      IPV6INIT=no
      IPV6_AUTOCONF=no
      IPV6_DEFROUTE=no
      IPV6_PEERDNS=no
      IPV6_PEERROUTES=no
      IPV6_FAILURE_FATAL=no
      NAME=enp0s3
      UUID=76a635c2-9600-437b-8cfb-57e9569f68da
      DEVICE=enp0s3
      ONBOOT=yes
      DNS1=114.114.114.114
      
    4. Linux服務管理,以centos7爲例:

      • 重啓網絡服務 systemctl restart network
      • 關閉防火牆 systemctl stop firewalld
      • 禁用開啓自啓防火牆 systemctl disable firewalld
    5. ssh、及ssh免密登錄

      • ssh-keygen 回車... : 在主機名爲hadoop01機器上生成公鑰、私鑰(~/.ssh/idrsa、idrsa.pub)
      • cat ~/.ssh/idrsa.pub >> ~/.ssh/authorizedkeys : 設置hadoop01免密登錄自己
      • 將idrsa.pub追加到Hadoop02上~/.ssh/authorizedkeys文件中就可以免密登錄hadoop02了:快捷命令 ssh-copy-id hadoop02
  • 本例中的虛擬機環境

    1. 三臺centos7 mini版虛擬機 hadoop01、hadoop02、hadoop03
    2. /etc/hosts 文件三臺機器均已配好,完全相同
    3. 宿主機器hosts中也已配置了三臺虛擬機的主機名映射 ###單節點安裝配置
  • Standalone單機

    • 什麼是單機模式?沒有任何daemons(後臺程序),不能使用HDFS,在用hadoop jar命令運行MapReduce任務時才啓動進程模擬MapReduce運算,一般用與程序測試調試
    • 實例:
    $ cp etc/http://7xq0aq.com1.z0.glb.clouddn.com/*.xml input
    $ bin/hadoop jar share/http://7xq0aq.com1.z0.glb.clouddn.com/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'
    $ cat output/* 
    
  • Pseudo-Distributed僞分佈

    • 什麼是僞分佈模式?Hadoop daemons運行在不同的進程中。NamoNode、DataNode、ResourceManageer、NodeManager、SecondaryNameNode等進程分佈式情況下是運行在集羣中不同機器上的,現在都運行在一臺機器上,只是用不同Java進程來分隔開,故稱僞分佈。
    • 修改配置文件

      1. hadoop-env.sh 25行 設置JAVA_HOME
      1 # Licensed to the Apache Software Foundation (ASF) under one
      2 # or more contributor license agreements.  See the NOTICE file
      3 # distributed with this work for additional information
      4 # regarding copyright ownership.  The ASF licenses this file
      5 # to you under the Apache License, Version 2.0 (the
      6 # "License"); you may not use this file except in compliance
      7 # with the License.  You may obtain a copy of the License at
      8 #
      9 #     http://www.apache.org/licenses/LICENSE-2.0
      10 #
      11 # Unless required by applicable law or agreed to in writing, software
      12 # distributed under the License is distributed on an "AS IS" BASIS,
      13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      14 # See the License for the specific language governing permissions and
      15 # limitations under the License.
      16
      17 # Set Hadoop-specific environment variables here.
      18
      19 # The only required environment variable is JAVA_HOME.  All others are
      20 # optional.  When running a distributed configuration it is best to
      21 # set JAVA_HOME in this file, so that it is correctly defined on
      22 # remote nodes.
      23
      24 # The java implementation to use.
      25 export JAVA_HOME=/root/jdk1.8
      26
      27 # The jsvc implementation to use. Jsvc is required to run secure datanodes
      28 # that bind to privileged ports to provide authentication of data transfer
      
      1. core-site.xml 20-23行 指定NamdeNode運行在集羣中哪臺機器上
      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
      3 <!--
      4   Licensed under the Apache License, Version 2.0 (the "License");
      5   you may not use this file except in compliance with the License.
      6   You may obtain a copy of the License at
      7
      8     http://www.apache.org/licenses/LICENSE-2.0
      9
      10   Unless required by applicable law or agreed to in writing, software
      11   distributed under the License is distributed on an "AS IS" BASIS,
      12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      13   See the License for the specific language governing permissions and
      14   limitations under the License. See accompanying LICENSE file.
      15 -->
      16
      17 <!-- Put site-specific property overrides in this file. -->
      18
      19 <configuration>
      20          <property>
      21                 <name>fs.defaultFS</name>
      22                 <value>hdfs://hadoop01:9000</value>
      23         </property>
      24 </configuration>
      
      1. hdfs-site.xml 設置副本數、NameNodo和DataNode存儲目錄
      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
      3 <!--
      4   Licensed under the Apache License, Version 2.0 (the "License");
      5   you may not use this file except in compliance with the License.
      6   You may obtain a copy of the License at
      7
      8     http://www.apache.org/licenses/LICENSE-2.0
      9
      10   Unless required by applicable law or agreed to in writing, software
      11   distributed under the License is distributed on an "AS IS" BASIS,
      12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      13   See the License for the specific language governing permissions and
      14   limitations under the License. See accompanying LICENSE file.
      15 -->
      16
      17 <!-- Put site-specific property overrides in this file. -->
      18
      19 <configuration>
      20         <property>
      21                 <name>dfs.replication</name>
      22                 <value>1</value>
      23         </property>
      24         <property>
      25                 <name>dfs.name.dir</name>
      26                 <value>/usr/local/http://7xq0aq.com1.z0.glb.clouddn.com/hdfs/name</value>
      27         </property>
      28
      29 <property>
      30                 <name>dfs.data.dir</name>
      31                 <value>/usr/local/http://7xq0aq.com1.z0.glb.clouddn.com/hdfs/data</value>
      32         </property>
      33 <property>
      34   <name>dfs.namenode.secondary.http-address</name>
      35   <value>hadoop02:9001</value>
      36 </property>
      37 </configuration>
      
      1. mapred-site.xml 設置MapReduce的資源調度框架爲Yarn
      1 <?xml version="1.0"?>
      2 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
      3 <!--
      4   Licensed under the Apache License, Version 2.0 (the "License");
      5   you may not use this file except in compliance with the License.
      6   You may obtain a copy of the License at
      7
      8     http://www.apache.org/licenses/LICENSE-2.0
      9
      10   Unless required by applicable law or agreed to in writing, software
      11   distributed under the License is distributed on an "AS IS" BASIS,
      12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      13   See the License for the specific language governing permissions and
      14   limitations under the License. See accompanying LICENSE file.
      15 -->
      16
      17 <!-- Put site-specific property overrides in this file. -->
      18
      19 <configuration>
      20 <property>
      21         <name>mapreduce.framework.name</name>
      22         <value>yarn</value>
      23     </property>
      24 </configuration>
      ~
      
      1. yarn-site.xml
       1 <?xml version="1.0"?>
      2 <!--
      3   Licensed under the Apache License, Version 2.0 (the "License");
      4   you may not use this file except in compliance with the License.
      5   You may obtain a copy of the License at
      6
      7     http://www.apache.org/licenses/LICENSE-2.0
      8
      9   Unless required by applicable law or agreed to in writing, software
      10   distributed under the License is distributed on an "AS IS" BASIS,
      11   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      12   See the License for the specific language governing permissions and
      13   limitations under the License. See accompanying LICENSE file.
      14 -->
      15 <configuration>
      16
      17 <!-- Site specific YARN configuration properties -->
      18  <property>
      19         <name>yarn.nodemanager.aux-services</name>
      20         <value>mapreduce_shuffle</value>
      21     </property>
      22 </configuration>
      

集羣安裝配置

  • 完全分佈式安裝配置

    1. hadoop-env.sh 同僞分佈
    2. core-site.xml 同僞分佈
    3. hdfs-site.xml 同僞分佈
    4. mapred-site.xml 同僞分佈
    5. yarn-site.xml 需要修改
      1 <?xml version="1.0"?>
      2 <!--
      3   Licensed under the Apache License, Version 2.0 (the "License");
      4   you may not use this file except in compliance with the License.
      5   You may obtain a copy of the License at
      6
      7     http://www.apache.org/licenses/LICENSE-2.0
      8
      9   Unless required by applicable law or agreed to in writing, software
     10   distributed under the License is distributed on an "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12   See the License for the specific language governing permissions and
     13   limitations under the License. See accompanying LICENSE file.
     14 -->
     15 <configuration>
     16
     17 <!-- Site specific YARN configuration properties -->
     18    <property>
     19                 <name>yarn.resourcemanager.hostname</name>
     20                 <value>hadoop01</value>
     21         </property>
     22         <property>
     23                 <name>yarn.nodemanager.aux-services</name>
     24                 <value>mapreduce_shuffle</value>
     25         </property>
     26         <property>
     27                 <name>yarn.log-aggregation-enable</name>
     28                 <value>true</value>
     29         </property>
     30         <property>
     31                 <name>yarn.log-aggregation.retain-seconds</name>
     32                 <value>604800</value>
     33         </property>
     34 </configuration>
    
    1. slaves 配置集羣的slave節點
    hadoop02
    hadoop03
    
  • 啓動測試

    • 格式化HDFS文件系統

       
      $ bin/hdfs namenode -format 
      
    • 啓動HDFS

       
      $ sbin/start-dfs.sh
      
    • HDFS操作

      • 創建目錄

         
        $ bin/hdfs dfs -mkdir /user
        $ bin/hdfs dfs -mkdir /user/root
        
      • 上傳文件

         
        $ bin/hdfs dfs -put etc/http://7xq0aq.com1.z0.glb.clouddn.com/* input
        
      • 下載文件

         
        $ bin/hdfs dfs -get input ~/input_from_hdfs
        
      • 刪除文件

         
        $ bin/hdfs dfs -rm -r input
        
    • 啓動Yarn

       
      $ sbin/start-yarn.sh
      
    • 在Yarn上運行MapReduce

       
      [root@hadoop01 hadoop-2.7.3]# bin/hdfs dfs -mkdir input
      [root@hadoop01 hadoop-2.7.3]# bin/hdfs dfs -put etc/http://7xq0aq.com1.z0.glb.clouddn.com/* input
      [root@hadoop01 hadoop-2.7.3]# bin/hadoop jar share/http://7xq0aq.com1.z0.glb.clouddn.com/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount input output1
      17/03/14 16:56:31 INFO client.RMProxy: Connecting to ResourceManager at hadoop01/192.168.254.222:8032
      17/03/14 16:56:32 INFO input.FileInputFormat: Total input paths to process : 30
      17/03/14 16:56:32 INFO mapreduce.JobSubmitter: number of splits:30
      17/03/14 16:56:32 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1489480515993_0004
      17/03/14 16:56:32 INFO impl.YarnClientImpl: Submitted application application_1489480515993_0004
      17/03/14 16:56:32 INFO mapreduce.Job: The url to track the job: http://hadoop01:8088/proxy/application_1489480515993_0004/
      17/03/14 16:56:32 INFO mapreduce.Job: Running job: job_1489480515993_0004
      17/03/14 16:56:40 INFO mapreduce.Job: Job job_1489480515993_0004 running in uber mode : false
      17/03/14 16:56:40 INFO mapreduce.Job:  map 0% reduce 0%
      17/03/14 16:57:04 INFO mapreduce.Job:  map 17% reduce 0%
      17/03/14 16:57:05 INFO mapreduce.Job:  map 20% reduce 0%
      17/03/14 16:57:11 INFO mapreduce.Job:  map 23% reduce 0%
      17/03/14 16:57:12 INFO mapreduce.Job:  map 37% reduce 0%
      17/03/14 16:57:13 INFO mapreduce.Job:  map 40% reduce 0%
      17/03/14 16:57:14 INFO mapreduce.Job:  map 47% reduce 0%
      17/03/14 16:57:29 INFO mapreduce.Job:  map 67% reduce 0%
      17/03/14 16:57:41 INFO mapreduce.Job:  map 77% reduce 0%
      17/03/14 16:57:44 INFO mapreduce.Job:  map 80% reduce 0%
      17/03/14 16:57:45 INFO mapreduce.Job:  map 97% reduce 0%
      17/03/14 16:57:46 INFO mapreduce.Job:  map 100% reduce 100%
      17/03/14 16:57:47 INFO mapreduce.Job: Job job_1489480515993_0004 completed successfully
      17/03/14 16:57:47 INFO mapreduce.Job: Counters: 50
          File System Counters
              FILE: Number of bytes read=75846
              FILE: Number of bytes written=3829330
              FILE: Number of read operations=0
              FILE: Number of large read operations=0
              FILE: Number of write operations=0
              HDFS: Number of bytes read=82217
              HDFS: Number of bytes written=36886
              HDFS: Number of read operations=93
              HDFS: Number of large read operations=0
              HDFS: Number of write operations=2
          Job Counters
              Killed map tasks=1
              Launched map tasks=31
              Launched reduce tasks=1
              Data-local map tasks=31
              Total time spent by all maps in occupied slots (ms)=762524
              Total time spent by all reduces in occupied slots (ms)=32420
              Total time spent by all map tasks (ms)=762524
              Total time spent by all reduce tasks (ms)=32420
              Total vcore-milliseconds taken by all map tasks=762524
              Total vcore-milliseconds taken by all reduce tasks=32420
              Total megabyte-milliseconds taken by all map tasks=780824576
              Total megabyte-milliseconds taken by all reduce tasks=33198080
          Map-Reduce Framework
              Map input records=2124
              Map output records=8032
              Map output bytes=107076
              Map output materialized bytes=76020
              Input split bytes=3548
              Combine input records=8032
              Combine output records=4044
              Reduce input groups=1586
              Reduce shuffle bytes=76020
              Reduce input records=4044
              Reduce output records=1586
              Spilled Records=8088
              Shuffled Maps =30
              Failed Shuffles=0
              Merged Map outputs=30
              GC time elapsed (ms)=10690
              CPU time spent (ms)=14790
              Physical memory (bytes) snapshot=6156226560
              Virtual memory (bytes) snapshot=64364421120
              Total committed heap usage (bytes)=4090552320
          Shuffle Errors
              BAD_ID=0
              CONNECTION=0
              IO_ERROR=0
              WRONG_LENGTH=0
              WRONG_MAP=0
              WRONG_REDUCE=0
          File Input Format Counters
              Bytes Read=78669
          File Output Format Counters
              Bytes Written=36886
      [root@hadoop01 hadoop-2.7.3]#
      [root@hadoop01 hadoop-2.7.3]#
      [root@hadoop01 hadoop-2.7.3]# bin/hdfs dfs -cat output1/*
      ...
      users   27
      users,wheel".   18
      uses    2
      using   14
      value   45
      value="20"/>    1
      value="30"/>    1
      values  4
      variable    4
      variables   4
      version 1
      version="1.0"   6
      version="1.0">  1
      version="1.0"?> 7
      via 3
      view,   1
      viewing 1
      w/  1
      want    1
      warnings.   1
      when    9
      where   4
      which   7
      while   1
      who 6
      ...
      

未完待續...

MapReduce&Yarn生命週期及工作原理MapReduce Java編程作業Hive安裝配置使用入門flume安裝使用入門sqoop安裝配置使用入門Hbase安裝配置使用入門Spark安裝配置使用入門Storm安裝配置使用入門

 

大數據學習羣:點擊鏈接加入羣聊【大數據學習交流】:https://jq.qq.com/?_wv=1027&k=5u9vYOe

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章