hadoop常见组件及其功能
一、介紹1:
1.Hadoop本質上是:分布式文件系統(HDFS) + 分布式計算框架(Mapreduce) + 調度系統Yarn搭建起來的分布式大數據處理框架。
2.Hive:是一個基于Hadoop的數據倉庫,適用于一些高延遲性的應用(離線開發),可以將結構化的數據文件映射為一張數據庫表,并提供簡單的sql查詢功能。Hive可以認為是MapReduce的一個包裝,把好寫的HQL轉換為的MapReduce程序,本身不存儲和計算數據,它完全依賴于HDFS和MapReduce,Hive中的表是純邏輯表。hive需要用到hdfs存儲文件,需要用到MapReduce計算框架。
3.HBase:是一個Hadoop的數據庫,一個分布式、可擴展、大數據的存儲。hbase是物理表,不是邏輯表,提供一個超大的內存hash表,搜索引擎通過它來存儲索引,方便查詢操作。HBase可以認為是HDFS的一個包裝。他的本質是數據存儲,是個NoSql數據庫;HBase部署于HDFS之上,并且克服了hdfs在隨機讀寫方面的缺點,提高查詢效率。
對HBASE數據結構的簡單說明:
假設HBASE表內容如上,一般將personal data 和 professional data稱為column family,而name、city、designation和salary則稱為各個column family下面的qualifier。每一個column family都可以認為是一個字典結構,其里面的qualifier則為key,如下:
{"row1": {"personal_data": {"name": "raju","city": "hyderabad"},"professional_data": {"designation": "manager","salary": 5000}},"row2": {...} }其中,對于每一行,每個qualifier其實并不是必須存在的,可以缺失。除了上面的column family,qualifier之外,還有timestamp信息,即每個字段數據保留多久(TTL)。
4. Apache Hadoop 項目有兩個核心組件,被稱為 Hadoop 分布式文件系統 (Hadoop Distributed File System, HDFS) 的文件存儲,以及被稱為 MapReduce 的編程框架。有一些支持項目充分利用了 HDFS 和 MapReduce。
- HDFS: 如果您希望有 4000 多臺電腦處理您的數據,那么最好將您的數據分發給 4000 多臺電腦。HDFS 可以幫助您做到這一點。HDFS 有幾個可以移動的部件。Datanodes 存儲數據,Namenode 跟蹤存儲的位置。還有其他部件,但這些已經足以使您開始了。
- MapReduce: 這是一個面向 Hadoop 的編程模型。有兩個階段,毫不意外,它們分別被稱為 Map 和 Reduce。如果希望給您的朋友留下深刻的印象,那么告訴他們,Map 和 Reduce 階段之間有一個隨機排序。JobTracker 管理您的 MapReduce 作業的 4000 多個組件。TaskTracker 從 JobTracker 接受訂單。如果您喜歡 Java,那么用 Java 編寫代碼。如果您喜歡 SQL 或 Java 以外的其他語言,您的運氣仍然不錯,您可以使用一個名為 Hadoop Streaming 的實用程序。
- Hadoop Streaming:一個實用程序,在任何語言(C、Perl 和 Python、C++、Bash 等)中支持 MapReduce 代碼。示例包括一個 Python 映射程序和一個 AWK 縮減程序。
- Hive 和 Hue: 如果您喜歡 SQL,您會很高興聽到您可以編寫 SQL,并使用 Hive 將其轉換為一個 MapReduce 作業。不,您不會得到一個完整的 ANSI-SQL 環境,但您的確得到了 4000 個注釋和多 PB 級的可擴展性。Hue 為您提供了一個基于瀏覽器的圖形界面,可以完成您的 Hive 工作。hive是基于Hadoop的一個數據倉庫工具,用來進行數據提取、轉化、加載,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模數據的機制。hive數據倉庫工具能將結構化的數據文件映射為一張數據庫表,并提供SQL查詢功能,能將SQL語句轉變成MapReduce任務來執行。Hive的優點是學習成本低,可以通過類似SQL語句實現快速MapReduce統計,使MapReduce變得更加簡單,而不必開發專門的MapReduce應用程序。hive十分適合對數據倉庫進行統計分析
- Pig: 一個執行 MapReduce 編碼的更高層次的編程環境。Pig 語言被稱為 Pig Latin。您可能會發現其命名約定有點不合常規,但是您會得到令人難以置信的性價比和高可用性。
- Sqoop:在 Hadoop 和您最喜愛的關系數據庫之間提供雙向數據傳輸,將數據從數據庫導入Hive,將Hive導入數據庫等操作。。
- Oozie:管理 Hadoop 工作流。這并不能取代您的調度程序或 BPM 工具,但它在您的 Hadoop 作業中提供 if-then-else 分支和控制。
- HBase:一個超級可擴展的鍵值存儲。它的工作原理非常像持久的散列映射(對于 Python 愛好者,可以認為是詞典)。盡管其名稱是 HBase,但它并不是一個關系數據庫。
- FlumeNG:一個實時的加載程序,用來將數據流式傳輸到 Hadoop 中。它將數據存儲在 HDFS 和 HBase 中。您會希望從 FlumeNG 開始,因為它對原始的水槽有所改進。
- Whirr:面向 Hadoop 的云配置。您可以在短短幾分鐘內使用一個很短的配置文件啟動一個集群。
- Mahout:面向 Hadoop 的機器學習。用于預測分析和其他高級分析。
- Fuse:讓 HDFS 系統看起來就像一個普通的文件系統,所以您可以對 HDFS 數據使用 ls、rm、cd 和其他命令。
- Zookeeper:用于管理集群的同步性。您不需要為 Zookeeper 做很多事情,但它在為您努力工作。如果您認為自己需要編寫一個使用 Zookeeper 的程序,您要么非常非常聰明,并且可能是 Apache 項目的一個委員會,要么終將會有過得非常糟糕的一天。
- Azkaban對操作進行管理,比如定時腳本執行,有圖形化界面,上傳job簡單,只需要將腳本打成包,可直接上傳。
二、準則
1、確認儲存規模
有很多的大數據項目其實數據量跟本沒這么大,跟本不需要到使用Hadoop這類的大數據軟件,所以,第一步應該是先確認數據量有多大,真的MySQL跑的太久再去使用Hadoop就好。
2、確認數據類型
除了結構化數據以外,現在有些大數據項目需要處理的是一些非結構化數據,例如文本、音頻、圖像、視頻之類的,針對這些非結構化的數據,需要事先做處理,再用相對應的軟件進行儲存。
3、確認數據源
數據源非常重要,首先要先確認數據是否可獲取、可用,例如微信聊天記錄這種的根本就獲取不了,而且會觸犯到隱私。有些數據需要先做持久化再導入到數據庫內儲存,如何獲取想要的數據有時候不是直接從數據庫里抓這么簡單,在獲取數據源的時候,也需要考慮數據的質量,否則會提高未來使用的難度。
三、介紹2
Hadoop的核心為HDFS(分布式文件系統)和MapReduce(離線計算框架)。簡單來說,HDFS就是將要儲存的文件分散在不同的硬盤上,并記錄他們的位置,而MapReduce就是將計算任務分配給多個計算單元,下面針對這兩個核心再做進一步的說明。
1. HDFS
HDFS已經成為現在大數據的儲存標準,他適合儲存一次寫入,多次讀取的數據,并且他有自動檢錯、快速回復數據的功能,能夠避免數據因為硬盤損壞而丟失的危險。
HDFS是由DataNode和NameNode組成的,DataNode負責儲存數據,而NameNode負責管理數據,一個NameNode對應多個DataNode,NameNode記錄著每個DataNode儲存的數據內容,并曝露給上層系統調用,也會根據上層的指令對DataNode進行增、刪、復制。
2.?MapReduce
MapReduce是將計算任務分配給數據就近的處理節點,進行完運算后再合并導入結果,能很好的去進行大量數據的調取,但是延時較高,不適合處理實時流數據。
MapReduce可以分為Map和Reduce兩個處理步驟。首先Map將用戶輸入的指令解析出一個個的Key/Value,然后再將轉化成一組新的KV值,將原本的任務拆解成小的而且是臨近數據的,并且確保這些運算任務彼此不會影響。而Reduce則是將這些運算的結果匯總起來,將結果寫入。
另外YARN和Zookeepr都是用來管理的,YARN是面對計算資源的管理,而Zookeeper是面對服務器集群的管理。
3. YARN:資源管理框架,用來管理和調度CPU、內存的資源,避免所有的計算資源被某些任務大量占用,有點像是云管理平臺可以創造不同的容器和虛擬機,并將這些硬件資源按用戶的意愿分配給計算任務。
4. Zookeeper:集用來做群管理,跟微服務里的功能相似,可以在集群里面選出一個leader,并保證集群里面服務器的一致性、可靠性和實時性。
四、組件
1、Hive
Hive是將Hadoop包裝成使用簡單的軟件,用戶可以用比較熟悉的SQL語言來調取數據,也就是說,Hive其實就是將Hadoop包裝成MySQL。Hive適合使用在對實時性要求不高的結構化數據處理。像是每天、每周用戶的登錄次數、登錄時間統計;每周用戶增長比例之類的BI應用。
2、HBase
HBase是用來儲存和查詢非結構化和半結構化數據的工具,利用row key的方式來訪問數據。HBase適合處理大量的非結構化數據,例如圖片、音頻、視頻等,在訓練機器學習時,可以快速的透過標簽將相對應的數據全部調出。
3、Storm
前面兩個都是用來處理非實時的數據,對于某些講求高實時性(毫秒級)的應用,就需要使用Storm。Storm也是具有容錯和分布式計算的特性,架構為master-slave,可橫向擴充多節點進行處理,每個節點每秒可以處理上百萬條記錄。可用在金融領域的風控上。
4、Impala
Impala和Hive的相似度很高,最大的不同是Impala使用了基于MPP的SQL查詢,實時性比MapReduce好很多,但是無法像Hive一樣可以處理大量的數據。Impala提供了快速輕量查詢的功能,方便開發人員快速的查詢新產生的數據。
總結
以上是生活随笔為你收集整理的hadoop常见组件及其功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习_JS散度详解
- 下一篇: Hadoop大数据组件简介