1. 程式人生 > >Hadoop學習筆記—1.基本介紹與環境配置

Hadoop學習筆記—1.基本介紹與環境配置

一、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的整體框架

    HadoopHDFSMapReduceHBaseHiveZooKeeper等成員組成,其中最基礎最重要的兩種組成元素為底層用於儲存叢集中所有儲存節點檔案的檔案系統HDFSHadoop 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 SSHSecure Shell)的免密碼登入

  <1>執行產生金鑰命令:ssh-keygen –t rsa,位於使用者目錄下的.ssh檔案中(.ssh為隱藏檔案,可以通過ls –a檢視)

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

  驗證:ssh localhost

4.6 複製JDKHadoop-1.1.2.tar.gzLinux

  <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>執行命令啟動Hadoopstart-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。

  訪問效果如下圖:

  namenode

jobtracker

  <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學習筆記1.基本介紹環境配置

一、Hadoop的發展歷史   說到Hadoop的起源,不得不說到一個傳奇的IT公司—全球IT技術的引領者Google。Google(自稱)為雲端計算概念的提出者,在自身多年的搜尋引擎業務中構建了突破性的GFS(Google File System),從此檔案系統進入分散式時代。除此之外,Google在

Mysql學習筆記1-基本介紹基本增刪改查操作

Mysql介紹 MySQL 是一種資料庫,資料庫定義了儲存資訊的結構。以表的方式儲存資訊。 MySQL資料庫具有以下主要特點: 同時訪問資料庫的使用者數量不受限制; 支援大量資料查詢和儲存,M

redis學習筆記01 — 基本介紹、安裝配置及常用命令

redis——NoSQL的一種 為了解決高併發、高可用、高擴充套件、大資料儲存等一系列問題而產生的資料庫解決方案,就是NoSQL NoSQL,非關係型資料庫,全名:Not Only Sql,它不能代替關係型資料庫,只能作為關係型資料庫的一個良好補充。 redis 簡介 是使用

hadoop學習筆記1---Hadoop體系介紹

hadoop1、NamenodeHDFS的守護進程記錄文件時如何分割成數據塊的,以及這些數據塊被存儲到哪些節點上對內存和I/O進行集中管理是個單點,發生故障將使集群崩潰2、Secondary Namenode監控HDFS狀態的輔助後臺程序每個集群都有一個與NameNode進行通訊定期保存HDFS元數據快照當N

c學習筆記--1基本輸入輸出操作符

好久之前的了,學習c語言的筆記。 依舊是老套路,從基礎的變數型別,到函式定義一步步學起 #include <string.h> #include <stdio.h> //printf函式是一個標準庫函式,它的函式原型在標頭檔案“stdio

Nginx學習筆記01Nginx簡要介紹目錄說明

server 簡單 adt 服務器 網站目錄 interface simple 內核 優化 1.1. Nginx簡要介紹 (1)Nginx是Web服務器。 Apache、IIS:經典的通用Web服務器。 Lighttpd、Nginx:輕量級Web服務器。 Tomcat、

AngularJs學習筆記1——總體介紹

一個 web 依賴 領域 升級 title del 元素 image 這周末在家呆了兩天,正好中午閑暇時間繼續分享Angularjs相關,今天主要分享Angularjs總體介紹及數據綁定部分內容,下面直接進入主題。 1、基本概念:   AngularJS是為了克

hadoop學習筆記(1)

ppi datanode ati fonts 管理系 ive 監控 system 分配 1.HDFS架構: NameNode保存元數據信息,包含文件的owner,permission。block存儲信息等。存儲在內存。 2.HDFS設計思想

TCP/IP詳解學習筆記(1)-基本概念【轉】

網絡號 最大的 net 容易 學習 ip地址 其他 title 編寫 轉自:http://blog.csdn.net/goodboy1881/article/details/665041 為什麽會有TCP/IP協議 在世界上各地,各種各樣的電腦運行著各自不同的操作系統為大家

hibernate框架學習筆記1:搭建測試

for this ble action 1.7 turn yiq targe cts hibernate框架屬於dao層,類似dbutils的作用,是一款ORM(對象關系映射)操作 使用hibernate框架好處是:操作數據庫不需要寫SQL語句,使用面向對象的方式完成

tensorflow學習筆記(1)-基本語法和前向傳播

pla oba -a 訓練 style lac 好的 ini 神經元                  tensorflow學習筆記(1)   (1)tf中的圖      圖中就是一個計算圖,一個計算過程。

無線通信學習筆記1---基本概念篇

設備 cap 比特流 獨立 擴大 多條 嵌入 解調 不同的 該篇將開始學習無線通信時遇到的一些基本概念羅列出來,避免混淆和忘記,算是為後續進階學習打基礎吧! 1、信道:信道可分為有線信道和無線信道兩大類。前者包括明線、對稱電纜、同軸電纜和光纜,後者包括地波傳播、短波電離層發

Python3.5開發1 - 基本型別環境搭建

1 Python基本型別與環境搭建 知識點: Python3.5環境搭建 基本型別 型別轉換 演示: Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:3

linux基本介紹環境搭建

1.1 Linux版本 linux kernel 2.2、2.4、2.6、3.0、4.0...發行商:Red hat、CentOS、Ubuntu選擇適合的Linux系統學習桌面系統:Ubuntu穩定伺服器系統:CentOS土豪(有售後):Red Hat對安全性有更高要求:Debian、FreeBSD新技術,

Object C學習筆記1-基本資料型別說明

Objective-C資料型別可以分為:基本資料型別、物件型別和id型別。基本資料型別有:int、float、double和char型別。物件型別就是類或協議所宣告的指標型別,例如:NSAutoreleasePool * pool,其中NSAutoreleasePool是一個類,NSAutoreleasePo

Day3.Hadoop學習筆記1

零、概述 一、概述 Hadoop衍生自Nutch(搜尋引擎和web爬蟲),面臨的問題:海量資料儲存和計算 Big Data大資料,談的不僅僅是資料量,其實包含了資料量(Volume)、時效性(Velocity)、多樣性(Variety)、可疑性(Veracity)

Pthon基礎學習日記1—Python介紹使用場景

一、Python直譯器可至少通過5中方式執行程式        1、互動式        2、作為Python模組檔案        3、作為Unix檔案型指令碼        4、在其它系統中

機器學習筆記1-基本概念

機器學習筆記1-基本概念 機器學習主要包括監督學習、非監督學習、半監督學習和強化學習等。實現方法包括模型、策略、演算法三個要素。 模型。在監督學習中,模型就是所要學習的條件概率分佈或決策函式。 策略。策略考慮的是按照什麼樣的準則學習或選擇最優的模型,即選擇損失函式。為了

Node.js學習筆記 (一) Node介紹以及環境安裝

Node介紹以及環境安裝 文章目錄 Node介紹以及環境安裝 1.什麼是Node 1.1 Node簡介 2.Node能做什麼 3. Node的安裝與環境搭建 3.1 怎麼安裝Node 3.2 No

NLP學習筆記(1)-詞向量語言模型

閱讀的第一篇詞向量相關的文獻是Tomas Mikolov 2013年的論文,其中提到了Bengio在2003的經典文章。經過一番努力,粗略的學習了這兩篇文獻,並查閱了相關的資料,現簡單整理如下: 1、詞向量 作為NLP的初學者,遇到的第一個難以理解的概念就是