https://blog.csdn.net/HadoopInChina/article/details/80239878
學習和使用hadoop有2年了,這裏主要分享一下對hadoop整體上的理解,分門別類的介紹一下相關組件,最後提供了建議的學習路線,希望對hadoop的初學者有參考作用。
前面的是拷貝過來的,後面有自己的工作內容分享給大家。
1. Hadoop核心件組有哪些? 廣義hadoop指什麼?
l 核心組件有:Hdfs、Yarn、MapReduce;
l 廣義上指一個生態圈,泛指大數據技術相關的開源組件或產品,如hdfs、yarn、hbase、hive、spark、pig、zookeeper、kafka、flume、phoenix、sqoop。
2. Spark與hadoop之間有什麼聯繫
l Spark也是一個生態圈,發展非很快,在計算方面比mapreduce要快很多倍,供了一個簡單而豐富的編程模型,支持多種應用,包括ETL、機器學習、數據流處理、圖形計算;
l Hadoop和Spark在某些方面有重疊,但組件之間都可以很好的協同作戰。
3. 分門別類介紹其中詳細組件
爲了方便理解以下按照功能進行了分類,並且把較爲流行的排在了前面介紹,列表如下:
分類 | 相關產品 |
文件系統 | • HDFS,目前大量採用的分佈式文件系統,是整個大數據應用場景的基礎通用文件存儲組件 • S3, Simple Storage Service簡單存儲服務,更好的可擴展性,內置的持久性,以及較低的價格 |
資源調度 | • YARN,分佈式資源調度,可以接收計算的任務把它分配到集羣各節點處理,相當於大數據操作系統,通用性好,生態支持好; • Mesos,同YARN類似,偏向於資源的抽象和管理 |
計算框架 | • Spark序列,有流計算、圖計算、機器學習; • Flink,支持計算數據不斷變化,即增量計算; • Storm,專注於流式計算,功能強大; • Mapreduce, 分佈式計算基本計算框架,編程難度高,執行效率低 |
數據庫 | • Hbase,一種NoSQL列簇數據庫,支持數十億行數百萬列大型數據儲存和訪問,尤其是寫數據的性能非常好,數據讀取實時性較好,提供一套API,不支持SQL操作,數據存儲採用HDFS; • Cassandra,對大型表格和 Dynamo支持得最好; • Redis,運行異常快,還可應用於分佈式緩存場景 |
SQL支持 | • Spark SQL,由Shark、Hive發展而來的,以SQL方式訪問數據源(如hdfs、hbase、S3、redis甚至關係統數據庫等,下同); • Phoenix,一套專注於SQL方式訪問hbase的JDBC驅動,支持絕大部分SQL語法,支持二級索引,支持事務,低延時; • Hive,通過HQL(類似SQL)來統計分析生成查詢結果,通過解析HQL生成可以Mapreduce上執行的任務,典型的應用場景是與hbase集成; • 其它:impala、pig等,都實現了類似的功能,解決了直接寫map/reduce分析數據的複雜性,降低了數據分析工作者或開發人員使用大數據的門檻 |
其它工具 | • 分佈式協作zookeeper,可以理解爲一個小型高性能的數據庫,爲生態圈中與很多組件提供發佈訂閱的功能,還可以監測節點是否失效(心跳檢測),如HBase、Kafka中利用zookeeper存放了主從節點信息; • Kafka, 是一種分佈式的,基於發佈/訂閱的消息系統,類似於消息對列的功能,可以接收生產者(如webservice、文件、hdfs、hbase等)的數據,本身可以緩存起來,然後可以發送給消費者(同上),起到緩衝和適配的作; • Flume,分佈式的海量日誌採集、聚合和傳輸的系統,主要作用是數據的收集和傳輸,也支持非常多的輸入輸出數據源; • Sqoop,主要用於在Hadoop(Hive)與傳統的數據庫(mysql、postgresql...)間進行數據的傳遞,可以將一個關係型數據庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型數據庫中 |
4. 典型的組合使用場景
Hadoop、Spark生態圈的組件是相互配合使用的,每個組件都有自己“用武之地”,組合起來完成即可以滿足各種系統業務需求,下面列舉兩個例子:
(1)數據採集、存儲、分析場景
該場景下完成了整個數據的採集、存儲、分析,並輸出結果,組件搭配如下:
Flume + kafka(zookeeper)+ Hdfs + Spark/Storm/Hive + Hbase (Zookeeper、Hdfs) /Redis
說明如下:
l Flume用來從種渠道(如http、exec、文件、kafka , …)收集數據,併發送到kaffka(當然也可以存放到hdfs、hbase、file、…)
l Kafka可以緩存數據,與flume一樣也支持各種協議的輸入和輸出,由於kafka需要zookeeper來完成負載均衡和HA,所以需要zookeeper來支持
l 開始計算,這裏有三種選擇,Spark/Storm/Hive,各有優勢,相對Hive目前仍使用廣泛,該技術出現的較早;Storm專注於流式處理,延遲非常低; Spark最有前景的計算工具;不管用什麼,最終都是對數據的清理、統計,把得到的結果輸出
l 展示結果數據存儲,可以使用Hbase kafka(zookeeper) /Redis或mysql等,看使用場景(數據量大小等因素),由於處理之後的結果數據一般比較少可以直接放到Redis,然後就可以採用常規的技術展示出報表或其它消費方式使用這些計算後的結果數據
(2)數據存儲和實時訪問
這種場景非常類似常規應用開發場景,即通過java的JDBC來訪問大數據集羣,組件搭配:
Jdbc + Solr + Phoenix/Spark sql + Hbase kafka(zookeeper) + Hdfs
說明如下:
l Jdbc是通用的java操作數據庫的方式,使用的是sql語句
l Solr爲全文檢索,完成站點分詞搜索功能
l Phoenix/Spark sql方便以jdbc方式訪問Hbase數據庫
l Hdfs最終完成數據的物理存儲
5 工作總結
個人在^^^公司待了兩年,公司整體對數據的處理還是比較完善的,包括數據接入-數據預處理-數據存儲-數據分析-數據展示。我所做的模塊主要是數據存儲和數據分析這裏。
數據接入:採用的c++實現的協議還原出來各種不同協議的數據。
數據預處理:採用storm進行數據extract translate,生成的數據可以直接入hdfs,也可以直接入kafka.
數據存儲採用的是hdfs hbase兩種;入庫方式這裏分爲實時入庫和批量入庫。實時入庫就是構建消費sink去消費kafka中的數據,分爲hbasesink和hdfssink,hbasesink是構造put,生成hfile文件,hdfssink是直接生成普通文件;批量入庫主要處理的是hbase入庫,通過mr分析生成hfile文件。
數據分析:普通的mr作業,不過有一個任務調度進程在管理這些mr作業。屬於mr on yarn 或者 spark on yarn
數據展示就不說了.
暫時列這些。