Hadoop大數(shù)據(jù)平臺架構(gòu)與實踐 | hadoop概述與安裝

e> Hadoop大數(shù)據(jù)平臺架構(gòu)與實踐--基礎(chǔ)篇


目錄

內(nèi)容概要
Hadoop前生
Hadoop的功能與優(yōu)勢
Hadoop的生態(tài)系統(tǒng)和版本
Hadoop安裝

內(nèi)容概要

1、大數(shù)據(jù)技術(shù)的相關(guān)概念
2、Hadoop的架構(gòu)和運行機(jī)制
3、Hadoop的安裝和配置
4、Hadoop開發(fā)

Hadoop前生

大數(shù)據(jù)的存儲和分析,出現(xiàn)系統(tǒng)瓶頸:存儲容量、讀寫速度、計算效率...

Google提出了大數(shù)據(jù)技術(shù):MapReduce、BigTable、GFS(Google File System)
(1)成本降低,不一定非得用大型機(jī)和高端存儲,也可使用PC機(jī)
(2)由軟件 容錯 硬件故障,通過軟件保證可靠性
(3)簡化并行分布式計算,無需控制節(jié)點同步和數(shù)據(jù)交換,MapReduce:簡化分布式計算

Google只發(fā)表了相關(guān)論文,沒有公開源碼;Hadoop是模仿Google大數(shù)據(jù)技術(shù)的開源實現(xiàn)。

Hadoop的功能與優(yōu)勢

開源的分布式存儲、分布式計算平臺

用來支撐Hadoop的兩個核心:

HDFS:分布式文件系統(tǒng),存儲海量數(shù)據(jù)
MapReduce:并行處理框架,實現(xiàn)任務(wù)分解和調(diào)度;分布式數(shù)據(jù)處理模型和執(zhí)行環(huán)境

Hadoop的功能:

(1)搭建大型數(shù)據(jù)倉庫,PB級數(shù)據(jù)的存儲、處理、分析、統(tǒng)計等業(yè)務(wù):搜索引擎、商業(yè)智能、日志分析、風(fēng)險評估等

Hadoop的優(yōu)勢:

(1)高擴(kuò)展:增加硬件提升容量和性能
(2)低成本:不依賴于高端硬件、通過軟件容錯保證系統(tǒng)可靠性
(3)成熟的生態(tài)圈:工具集

  1. 運行方便:Hadoop是運行在由一般商用機(jī)器構(gòu)成的大型集群上。Hadoop在云計算服務(wù)層次中屬于PaaS(Platform-as-a- Service):平臺即服務(wù)。
  2. 健壯性:Hadoop致力于在一般的商用硬件上運行,能夠從容的處理類似硬件失效這類的故障。
  3. 可擴(kuò)展性:Hadoop通過增加集群節(jié)點,可以線性地擴(kuò)展以處理更大的數(shù)據(jù)集。
  4. 簡單:Hadoop允許用戶快速編寫高效的并行代碼。

Hadoop的生態(tài)系統(tǒng)和版本

Hadoop生態(tài)系統(tǒng)
HDFS(分布式文件系統(tǒng))
MapReduce(分布式計算框架)
Hive(基于MapReduce的數(shù)據(jù)倉庫)
Pig(數(shù)據(jù)倉庫)
HBase(分布式數(shù)據(jù)庫)
Mahout(數(shù)據(jù)挖掘庫)
Zookeeper(分布式協(xié)作服務(wù))
Sqoop(數(shù)據(jù)同步工具)
Flume(日志收集工具)
Oozie(作業(yè)流調(diào)度系統(tǒng))

Hadoop的生態(tài)系統(tǒng)

其中:

2)Nutch:互聯(lián)網(wǎng)數(shù)據(jù)及Nutch搜索引擎應(yīng)用
3)HDFS:Hadoop的分布式文件系統(tǒng)
5)MapReduce:分布式計算框架
6)Flume、Scribe,Chukwa:數(shù)據(jù)收集,收集非結(jié)構(gòu)化數(shù)據(jù)的工具
7) Hiho、Sqoop:將關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入HDFS的工具
8) Hive:數(shù)據(jù)倉庫,pig分析數(shù)據(jù)的工具
10)Oozie:作業(yè)流調(diào)度引擎
11)Hue:Hadoop自己的監(jiān)控管理工具
12)Avro:數(shù)據(jù)序列化工具
13)mahout:數(shù)據(jù)挖掘工具
14)Hbase:分布式的面向列的開源數(shù)據(jù)庫

Hadoop2.0時代的生態(tài)系統(tǒng)
Hadoop2.0時代的生態(tài)系統(tǒng)
Hadoop的核心
Hadoop的核心

Hadoop1.0與Hadoop2.0的區(qū)別:
Hadoop1.0的核心由HDFS(Hadoop Distributed File System)和MapReduce(分布式計算框架)構(gòu)成,而在Hadoop2.0中增加了Yarn(Yet Another Resource Negotiator),來負(fù)責(zé)集群資源的統(tǒng)一管理和調(diào)度。

HDFS(Hadoop Distributed File System,分布式文件系統(tǒng))

HDFS簡單入門

為什么需要HDFS呢?HDFS是一個file system,對文件進(jìn)行管理。文件系統(tǒng)由三部分組成:與文件管理有關(guān)軟件、被管理文件以及實施文件管理所需數(shù)據(jù)結(jié)構(gòu)。

文件的讀取和寫入都需要時間,而且寫文件需要更多的時間,大概是讀文件的3倍;當(dāng)數(shù)據(jù)集(文件)的大小超過一臺獨立物理計算機(jī)的存儲能力時,就有必要對它進(jìn)行分區(qū)并存儲到若干臺單獨的計算機(jī)上——分布式文件存儲。

經(jīng)典的分布式文件存儲概念

** HDFS的基本原理**

  • 將文件切分成等大的數(shù)據(jù)塊,存儲在多臺機(jī)器上;
  • 將數(shù)據(jù)切分、容錯、負(fù)載均衡等功能透明化;
  • 可將HDFS看成容量巨大、具有高容錯性的磁盤

** HDFS的特點 **

  • 良好的擴(kuò)展性
  • 高容錯性
  • 適合PB級以上海量數(shù)據(jù)的存儲

HDFS的應(yīng)用場景

  • 海量數(shù)據(jù)的可靠性存儲
  • 數(shù)據(jù)歸檔
MapReduce(分布式計算框架)

Mapreduce是一個計算框架,既然是做計算的框架,那么表現(xiàn)形式就是有個輸入(input),mapreduce操作這個輸入(input),通過本身定義好的計算模型,得到一個輸出(output),這個輸出就是我們所需要的結(jié)果。

我們要學(xué)習(xí)的就是這個計算模型的運行規(guī)則。在運行一個mapreduce計算任務(wù)時候,任務(wù)過程被分為兩個階段:map階段和reduce階段,每個階段都是用鍵值對(key/value)作為輸入(input)和輸出(output)。而程序員要做的就是定義好這兩個階段的函數(shù):map函數(shù)和reduce函數(shù)。

Hive(基于MapReduce的數(shù)據(jù)倉庫)

Hive由facebook開源,最初用于解決海量結(jié)構(gòu)化的日志數(shù)據(jù)統(tǒng)計問題;是一種ETL(Extraction-Transformation-Loading)工具。它也是構(gòu)建在Hadoop之上的數(shù)據(jù)倉庫;數(shù)據(jù)計算使用MR,數(shù)據(jù)存儲使用HDFS。

Hive定義了一種類似SQL查詢語言的HiveQL查詢語言,除了不支持更新、索引和事務(wù),幾乎SQL的其他特征都能支持。它通常用于離線數(shù)據(jù)處理(采用MapReduce);我們可以認(rèn)為Hive的HiveQL語言是MapReduce語言的翻譯器,把MapReduce程序簡化為HiveQL語言。但有些復(fù)雜的MapReduce程序是無法用HiveQL來描述的。

Hive提供shell、JDBC/ODBC、Thrift、Web等接口。

Hive應(yīng)用場景

  • 日志分析:統(tǒng)計一個網(wǎng)站一個時間段內(nèi)的pv、uv ;比如百度、淘寶等互聯(lián)網(wǎng)公司使用hive進(jìn)行日志分析
  • 多維度數(shù)據(jù)分析
  • 海量結(jié)構(gòu)化數(shù)據(jù)離線分析
  • 低成本進(jìn)行數(shù)據(jù)分析(不直接編寫MR)
Pig(數(shù)據(jù)倉庫)

Pig由yahoo!開源,設(shè)計動機(jī)是提供一種基于MapReduce的ad-hoc數(shù)據(jù)分析工具。它通常用于進(jìn)行離線分析。

Pig是構(gòu)建在Hadoop之上的數(shù)據(jù)倉庫,定義了一種類似于SQL的數(shù)據(jù)流語言–Pig Latin,Pig Latin可以完成排序、過濾、求和、關(guān)聯(lián)等操作,可以支持自定義函數(shù)。Pig自動把Pig Latin映射為MapReduce作業(yè),上傳到集群運行,減少用戶編寫Java程序的苦惱。

Pig有三種運行方式:Grunt shell、腳本方式、嵌入式。

Pig與Hive的比較
HBase(分布式數(shù)據(jù)庫)

Hbase原理、基本概念、基本架構(gòu)

HBase是一個構(gòu)建在HDFS上的分布式列存儲系統(tǒng),基于Google的Big Table模型開發(fā),是典型的key/value系統(tǒng),主要用于海量結(jié)構(gòu)化數(shù)據(jù)存儲,它是NoSQL的典型代表產(chǎn)品。

從邏輯上講,HBase將數(shù)據(jù)按照表、行和列進(jìn)行存儲。與hadoop一樣,Hbase目標(biāo)主要依靠橫向擴(kuò)展,通過不斷增加廉價的商用服務(wù)器,來增加計算和存儲能力。

Hbase表的特點

  • 大:一個表可以有數(shù)十億行,上百萬列;
  • 無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據(jù)需要動態(tài)的增加,同一張表中- 不同的行可以有截然不同的列;
  • 面向列:面向列(族)的存儲和權(quán)限控制,列(族)獨立檢索;
  • 稀疏:空(null)列并不占用存儲空間,表可以設(shè)計的非常稀疏;
  • 數(shù)據(jù)多版本:每個單元中的數(shù)據(jù)可以有多個版本,默認(rèn)情況下版本號自動分配,是單元格插入時的時間戳;
  • 數(shù)據(jù)類型單一:Hbase中的數(shù)據(jù)都是字符串,沒有類型。
HBase數(shù)據(jù)模型

Hbase使用場景

  • 大數(shù)據(jù)量存儲、高并發(fā)操作
  • 需要對數(shù)據(jù)隨機(jī)讀寫操作
  • 讀寫訪問都是非常簡單的操作
Mahout(數(shù)據(jù)挖掘庫)

Mahout是基于MapReduce的數(shù)據(jù)挖掘 / 機(jī)器學(xué)習(xí)庫,充分利用了MapReduce和HDFS的擴(kuò)展性和容錯性,實現(xiàn)了聚類算法、分類算法和推薦算法

Mahout提供的算法
Zookeeper(分布式協(xié)作服務(wù))

ZooKeeper 是一個分布式的,開源的協(xié)作服務(wù),可應(yīng)用于分布式應(yīng)用程序。它發(fā)布了一組簡單的原子操作,分布式應(yīng)用程序在此基礎(chǔ)之上可以實現(xiàn)更高層次的服務(wù),如同步、配置維護(hù)、群組和命名管理 等。它為易于編程而設(shè)計,并且使用了一個類似于文件系統(tǒng)的目錄結(jié)構(gòu)風(fēng)格的數(shù)據(jù)模型。ZooKeeper service運行于Java環(huán)境中,也可綁定于Java和C.

ZooKeeper 是一個用于對分布式系統(tǒng)進(jìn)行協(xié)作管理的服務(wù)程序,它本身也是分布式的,所以不要弄混了。對于我們自己的分布式系統(tǒng)來說,ZooKeeper就是一個用來管理的應(yīng)用程序(或者說服務(wù))。ZooKeeper提供了一個簡單易用的框架,由Service和Client兩大部分組成。

ZooKeeper的兩大組成部分
  • Service:由若干運行的Server組成(1個或多個),這些Server完全相同(除了可以部署在不同的機(jī)器上),每個Server都維護(hù)著相同的數(shù)據(jù)結(jié)構(gòu)(類似于文件目錄結(jié)構(gòu)),這個樹形結(jié)構(gòu)中的節(jié)點叫znode,Server之間會自動同步數(shù)據(jù)。

  • Client:可以連接到Service,每個Client對象可以連接到一個指定(或自動分配)的Server,用戶通過client可以在Server中創(chuàng)建并維護(hù)數(shù)據(jù)。因為不同的Server維護(hù)的是同一份數(shù)據(jù)的復(fù)制,所以,不同的client使用者之間,通過ZooKeeper Service,就可以達(dá)到共享數(shù)據(jù)(信息)的目的。

  • ZooKeeper還提供了Watch的功能,當(dāng)一個client改變了znode中的數(shù)據(jù),所有的client都可以得到通知。ZooKeeper提供了Java和C語言的客戶端。

  • 對于ZooKeeper的使用者來說,只需要運行Service,并且知道client的操作方法就可以了。在我們自己的分布式系統(tǒng)中,每個節(jié)點通過創(chuàng)建ZooKeeper client,就可以利用ZooKeeper service來同步,共享數(shù)據(jù),或者實現(xiàn)更復(fù)雜的功能了。

Zookeeper解決分布式環(huán)境下數(shù)據(jù)管理問題:

  • 統(tǒng)一命名
  • 狀態(tài)同步
  • 集群管理
  • 配置同步
Sqoop(數(shù)據(jù)同步工具)

Sqoop是連接Hadoop與傳統(tǒng)數(shù)據(jù)庫之間的橋梁,它支持多種數(shù)據(jù)庫,包括MySQL、DB2等;插拔式,用戶可以根據(jù)需要支持新的數(shù)據(jù)庫。

Sqoop實質(zhì)上是一個MapReduce程序,充分利用MR并行的特點,充分利用MR的容錯性。

Sqoop工作示意
Flume(日志收集工具)

Flume是一個分布式、可靠、和高可用的海量日志聚合的系統(tǒng),支持在系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時,F(xiàn)lume提供對數(shù)據(jù)進(jìn)行簡單處理,并寫到各種數(shù)據(jù)接受方(可定制)的能力。

**Fulme 的特點: **

  • 1、可靠性
      當(dāng)節(jié)點出現(xiàn)故障時,日志能夠被傳送到其他節(jié)點上而不會丟失。Flume提供了三種級別的可靠性保障,從強(qiáng)到弱依次分別為:end-to-end(收到數(shù)據(jù)agent首先將event寫到磁盤上,當(dāng)數(shù)據(jù)傳送成功后,再刪除;如果數(shù)據(jù)發(fā)送失敗,可以重新發(fā)送。),Store on failure(這也是scribe采用的策略,當(dāng)數(shù)據(jù)接收方crash時,將數(shù)據(jù)寫到本地,待恢復(fù)后,繼續(xù)發(fā)送),Best effort(數(shù)據(jù)發(fā)送到接收方后,不會進(jìn)行確認(rèn))。

  • 2、可擴(kuò)展性
      Flume采用了三層架構(gòu),分別為agent,collector和storage,每一層均可以水平擴(kuò)展。其中,所有agent和collector由master統(tǒng)一管理,這使得系統(tǒng)容易監(jiān)控和維護(hù),且master允許有多個(使用ZooKeeper進(jìn)行管理和負(fù)載均衡),這就避免了單點故障問題。

  • 3、可管理性
      所有agent和colletor由master統(tǒng)一管理,這使得系統(tǒng)便于維護(hù)。多master情況,F(xiàn)lume利用ZooKeeper和gossip,保證動態(tài)配置數(shù)據(jù)的一致性。用戶可以在master上查看各個數(shù)據(jù)源或者數(shù)據(jù)流執(zhí)行情況,且可以對各個數(shù)據(jù)源配置和動態(tài)加載。Flume提供了web 和shell script command兩種形式對數(shù)據(jù)流進(jìn)行管理。

  • 4、功能可擴(kuò)展性
      用戶可以根據(jù)需要添加自己的agent,collector或者storage。此外,F(xiàn)lume自帶了很多組件,包括各種agent(file, syslog等),collector和storage(file,HDFS等)。

Oozie(作業(yè)流調(diào)度系統(tǒng))

目前計算框架和作業(yè)類型種類繁多:如MapReduce、Stream、HQL、Pig等。這些作業(yè)之間存在依賴關(guān)系,周期性作業(yè),定時執(zhí)行的作業(yè),作業(yè)執(zhí)行狀態(tài)監(jiān)控與報警等。如何對這些框架和作業(yè)進(jìn)行統(tǒng)一管理和調(diào)度?

解決方案有多種:

  • Linux Crontab
  • 自己設(shè)計調(diào)度系統(tǒng)(淘寶等公司)
  • 直接使用開源系統(tǒng)(Oozie)

Oozie

  • Oozie是一個管理Hdoop作業(yè)(job)的工作流程調(diào)度管理系統(tǒng)。
  • Oozie的工作流是一系列動作的直接周期圖。
  • Oozie協(xié)調(diào)作業(yè)就是通過時間(頻率)和有效數(shù)據(jù)觸發(fā)當(dāng)前的Oozie工作流程
  • Oozie是Yahoo針對Apache Hadoop開發(fā)的一個開源工作流引擎。
  • 用于管理和協(xié)調(diào)運行在Hadoop平臺上(包括:HDFS、Pig和MapReduce)的Jobs。Oozie是專為雅虎的全球大規(guī)模復(fù)雜工作流程和數(shù)據(jù)管道而設(shè)計。
  • Oozie圍繞著兩個核心進(jìn)行:工作流(Workflow)和協(xié)調(diào)器(Coordinator),前者定義任務(wù)拓?fù)浜蛨?zhí)行邏輯,后者負(fù)責(zé)工作流的依賴和觸發(fā)。
Oozie工作流周期圖
Hadoop發(fā)行版(開源版)介紹

推薦使用2.x.x版本
下載地址:http://hadoop.apache.org/releases.html

Hadoop安裝

參考:
安裝并運行hadoop
SSH免密碼登錄以及失敗解決方案

配置(偽分布式的配置)

Hadoop-2.5.1集群安裝配置筆記

修改1個環(huán)境變量文件
  • hadoop-env.sh
    記錄腳本要用的環(huán)境變量,以運行hadoop
    export JAVA_HOME=/usr/Java/jdk1.7.0_51(設(shè)置java環(huán)境變量),即jdk的安裝目錄
修改3個配置文件
  • core-site.xml
    hadoop core的配置項,例如hdfs和mapreduce常用的i/o設(shè)置等

  • hdfs-site.xml
    hadoop守護(hù)進(jìn)程的配置項,包括namenode、輔助namenode和datanode等

  • mapred-site.xml
    MapReduce守護(hù)進(jìn)程的配置項,包括jobtracker和tasktracker

遇到的坑

在ubuntu中配置SSH(解決connect to host localhost port 22: Connection refused問題)
為什么要安裝SSH?因為在Hadoop啟動以后,namenode是通過SSH(Secure Shell)來啟動和停止各個節(jié)點上的各種守護(hù)進(jìn)程的。

Ubuntu默認(rèn)并沒有安裝ssh服務(wù),如果通過ssh鏈接Ubuntu,需要自己手動安裝openssh-server。判斷是否安裝ssh服務(wù),可以通過如下命令進(jìn)行:

ssh localhost

在這之前要開啟 ssh-agent:

$ eval ssh-agent

添加私鑰:

$ ssh-add ~/.ssh/id_rsa

告訴ssh允許 ssh-agent 轉(zhuǎn)發(fā):
# 修改全局:
$ echo "ForwardAgent yes" >> /etc/ssh/ssh_config

啟動ssh service:

/etc/init.d/ssh start
啟動
[root@HostName sbin]# ./start-dfs.sh
[root@HostName sbin]# ./start-yarn.sh  
停止
[root@HostName sbin]# ./stop-dfs.sh  
[root@HostName sbin]# ./stop-yarn.sh
驗證hadoop是否安裝成功

http://localhost:50030/ (MapReduce的web頁面)
http://localhost:50070/ (HDFS的web頁面)

跑個wordcount程序驗證一下:
# 建一個input目錄,作為輸入
$mkdir input
$cd input

# 新建兩個文本文件
$echo "hello world">test1.txt
$echo "hello hadoop">test2.txt
$cd ..

# 將input文件上傳到HDFS,并重命名為in
$bin/hadoop dfs -put input in

# 調(diào)用yarn jar啟動YARN applications(Use yarn jar to launch YARN applications instead.)
$bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /in/input out

# 查看分析結(jié)果
$bin/hdfs dfs -cat /user/root/out/*

輸出:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容