hadoop以及相關組件介紹以及個人理解


前言

  本人是由java后端轉型大數據方向,目前也有近一年半時間了,不過我平時的開發平台是阿里雲的Maxcompute,通過這么長時間的開發,對數據倉庫也有了一定的理解,ETL這些經驗還算比較豐富。但是由於Maxcompute是一個更簡單的大數據開發平台,導致個人在分布式計算的底層一些知識比較薄弱,所以這次決定花幾個月時間好好學習一下hadoop,后續當然也會開始spark的學習。個人感覺這塊學習的東西還是比較多,同時也要不斷的實踐的,所以這趟學習之旅,希望能夠記錄自己的一些心得體會,供自己參考,同時也希望能夠和跟我一樣剛入門的同學一起分享探討。

注:我目前學習主要是參考官網文檔,《Hadoop實戰》,《Hadoop權威指南》

注2:本人主要是學習Hadoop的相關生態系統,去了解分布式計算大數據計算平台的底層的一些東西,所以期間我會拋棄一些運維相關的學習包括詳細的部署,hadoop集群的安全策略等。

 

初始Hadoop

  google的三篇論文(GFS,MapReduce,BigTable)很快促進了hadoop的面世,hadoop實際上起源於Nutch項目,於2006年2月正式啟動,2008年開始hadoop正式火起來了。

Apache Hadoop和Hadoop 生態系統

  • Common:一系列組件和接口,用於分布式文件系統和通用I/O
  •  Avro : 一種序列化系統,用於支持高效,跨語言的RPC和持久化數據存儲
  •  MapReduce : 分布式數據處理模型和習性環境,也就是計算框架
  • HDFS : 分布式文件系統
  • Pig :數據流語言和運行環境,用以探究非常龐大的數據集。pig運行在MapReduce和HDFS之上
  • Hive : 一種分布式呢的 、按列存儲的數據倉庫。HIVE管理HDFS中存儲的數據,並提供基於SQL的查詢語言
  • HBase:一種分布式的、按列存儲的數據庫。HBase使用HDFS作為底層存儲,同時支持MapReduce的批量式計算和點查詢,類似BigTable
  • ZooKeeper:一種分布式的、可用性高的協調服務。ZooKeeper提供分布式鎖之類的基本服務用戶構建分布式應用,對於java后端的 ,rpc相關的都是使用到ZooKeeper
  • Sqoop:該工具用於在結構化數據存儲和HDFS之間高效批量傳輸數據,也就是數據同步的工具
  • Oozie:該服務用於運行和調度Hadoop作業,可以理解為一個工作流調度系統

HDFS和MapReduct體系結構

  HDFS和MapReduce時Hadoop的兩大核心,整個Hadoop的體系結構主要是通過HDFS倆實現分布式存儲的底層支持的,並且會通過MapReduce來實現分布式並行任務處理的程序支持。

首先我們先來看一下HDFS的體系結構,HDFS采用了主從結構模型,HDFS集群是由一個NameNode(主)和若干個DataNode組成的,NameNode管理文件系統的命名空間和客戶端對文件的訪問操作;DataNode管理存儲的數據;如下圖:

接下來介紹一下MapReduce的體系結構,MapReduce框架是由一個單獨運行在主節點的JobTracker和運行在每個集群從節點的TaskTracker共同組成的。JobTracker負責調度構成一個作業的所有任務,從節點僅負責由主節點指派的任務。當一個job被提交時,JobTracker接收到提交作業和其配置信息之后,就會將配置信息等分發給從節點,同時調度任務並監控TaskTracker的執行。

 

淺談一下HDFS,HBase和Hive

  剛開始接觸這些概念的時候,感覺稀里糊塗,不清楚這幾個之間到底是什么區別,之所以會產生混淆,因為這幾個都是跟Hadoop的數據管理有關,下面我們就簡單分析一下。

HDFS的數據管理

  我們知道操作系統都有自己的文件管理系統,而HDFS就是hadoop的分布式文件管理系統,舉個例子,我們有個100GB的文件,用HDFS可能是放到100台機器上存儲的,而我們不需要關心它是怎么存儲以及怎么讀取的。我們從NameNode,client,DataNode來簡單介紹一下HDFS對數據的管理。

文件寫入:

   client向NameNode發起文件寫入的請求   -----> NameNode根據文件大小和文件塊配置,返回給client相關的DataNode的信息----->client將文件划分多個block,寫入DataNode

文件讀取:

    client向NameNode發起文件讀取請求--->NameNode返回DataNode信息----->client讀取文件

文件塊block復制

    NameNode發現部分文件的block有問題或者DataNode失效--->通知DataNode相互復制block------>DataNode開始直接相互復制

HBase的數據管理

  HBase時一個類似Bigtable的分布式數據庫,它的大部分特性和Bigtable一樣,是一個稀疏的、長期存儲的、多維度的排序映射表,這張表的索引時行關鍵字,列關鍵字和時間戳。

HBase的一些特性可以參考這篇文章http://blog.csdn.net/macyang/article/details/6066622,說實話,我現在對HBase的理解還是很模糊的,因為也沒有場景遇到過。暫且先在此記一下相關概念。

Hbase體系結構三大重要組成部分:HRegion   HBaseMaster   HBase Client

Hive的數據管理

毫無疑問,Hive將是我們使用最多的工具,包括我在Maxcompute上開發,其實主要工作也是類似Hive QL,Hive的定義很簡單,它是建立在Hadoop上的數據倉庫基礎框架,它提供了一系列的工具,來進行數據的ETL。Hive定義了簡單的類SQL的查詢語言,簡稱Hive QL。因為Hive是一個數據倉庫框架,所以按照使用層次我們可以從元數據存儲、數據存儲和數據交換三個方面來介紹。

1.元數據存儲

  元數據其實就是數據倉庫中表名稱,表的列,表的分區,表分區的屬性等,Hive將元數據存儲在RDMS中。

2.數據存儲

  Hive咩有專門的數據存儲格式,也沒有未數據建立索引,用戶在創建表的時候只需要告訴Hive數據中的列分隔符和行分隔符,它就能解析數據了。

其次,Hive中所有的數據都存儲在HDFS中(因為Hive其實只是一個數倉的框架,它是不包括存儲的,我們可以簡單的理解為通過列和行的分隔符,將文件中的每行數據映射成表的一條記錄)

3.數據交換

  我們通常使用Hive客戶端鏈接HiveServer,當然也可以通過web界面去寫sql,Hive的大部分查詢實際上都是利用MapReduce進行計算的

另外,下圖是Hive的數據交換圖,我們可以簡單的看一下

 


免責聲明!

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



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