1. 程式人生 > >【大資料學習】大資料學習的基礎知識

【大資料學習】大資料學習的基礎知識

學習之前沒搞清楚的知識

傳統的web應用(LAMP、JavaEE、NODE系等)與大資料什麼關係?

之前一直以為大資料的東西就是來取代傳統的Web應用的,其實並不是這樣;即使是大資料的架構,應用層依然會是傳統的web應用,但是會根據資料特點對資料儲存(結構化資料依然會儲存在傳統的關係型資料庫——如MySql,日誌等非結構資料會儲存在分散式檔案系統——如Hadoop的HDFS)。

大資料的東西不是取代傳統的web應用,而是對web應用的增強。

基於分散式儲存和分散式計算,以前單機或者小規模叢集無法解決的問題,使用了大資料技術之後就可以解決了,比如日誌等資料當資料量非常大的時候(TB甚至PB),對這些資料的分析在傳統架構上是不可能或者是非常慢的,使用了大資料技術之後就是可能的了——主要是將資料處理通過MapReduce等拆分到不同的節點(電腦)上執行,然後將節點上的結果合併,最後生成分析結果。

聯網科技發展蓬勃興起,人工智慧時代來臨,抓住下一個風口。為幫助那些往想網際網路方向轉行想學習,卻因為時間不夠,資源不足而放棄的人。我自己整理的一份最新的大資料進階資料和高階開發教程,大資料學習群:868847735   歡迎進階中和進想深入大資料的小夥伴加入。

雲端計算和大資料

這裡概括總結為:“雲端計算為大資料提供了技術基礎,大資料為雲端計算提供了用物之地”。

現在幾乎所有的公司都把自己的產品吹成“雲”...但是真的都是“雲”麼?其實很多都是傳統的web應用部署到阿里雲這些第三方雲平臺吧;還有一部分有自己伺服器(一般配置),然後搞個公網ip,部署上去也說自己是“雲”。

學習歷程

瞭解Hadoop生態系統,瞭解一下生態系統中各模組的作用,文章後面對各模組有一些簡單的總結

HDFS

YARN

HBase

MapReduce

Hive

Pig

Mahout

Zookeeper

Sqoop

Flume

Kafka等

瞭解Spark,瞭解Spark比MapReduce的優勢,學習RDD程式設計

Spark SQL

Spark Streaming

Spark Mlib

...

找兩臺電腦搭個Hadoop、Spark叢集,配置Spark開發環境(SBT),執行一些demo例程,典型如WordCount

研究一下MapReduce的WordCount和Spark的WorkCount的程式碼,通過對比加深理解

HBase

HBase是一個高可靠、高效能、面向列、可伸縮的分散式資料庫,是谷歌BigTable的開源實現,主要用來儲存非結構化和半結構化的鬆散資料。

HBase的目標是處理非常龐大的表,可以通過水平擴充套件的方式,利用廉價計算機叢集處理由超過10億行資料和數百萬列元素組成的資料表

HBase可以直接使用本地檔案系統或者Hadoop作為資料儲存方式,不過為了提高資料可靠性和系統的健壯性,發揮HBase處理大資料量等功能,需要使用Hadoop作為檔案系統。

與Hadoop一樣,HBase目標主要依靠橫向擴充套件,通過不斷增加廉價的商用伺服器來增加計算和儲存能力。

HIVE

Hive是一個構建於Hadoop頂層的資料倉庫工具,由Facebook公司開發,並在2008年8月開源。

Hive在某種程度上可以看作是使用者程式設計介面,其本身並不儲存和處理資料,而是依賴HDFS來儲存資料,依賴MapReduce來處理資料。

Hive定義了簡單的類似SQL的查詢語言——HiveQL,它與大部分SQL語法相容,但是,並不完全支援SQL標準,比如,HiveSQL不支援更新操作,也不支援索引和事務,它的子查詢和連線操作也存在很多侷限。

HiveQL語句可以快速實現簡單的MapReduce任務,這樣使用者通過編寫的HiveQL語句就可以執行MapReduce任務,不必編寫複雜的MapReduce應用程式。

對於Java開發工程師而言,就不必花費大量精力在記憶常見的資料運算與底層的MapReduce Java API的對應關係上;

對於DBA來說,可以很容易把原來構建在關係資料庫上的資料倉庫應用程式移植到Hadoop平臺上。

所以說,Hive是一個可以有效、合理、直觀地組織和使用資料的分析工具。

Impala

Hive 作為現有比較流行的資料倉庫分析工具之一,得到了廣泛的應用,但是由於Hive採用MapReduce 來完成批量資料處理,因此,實時性不好,查詢延遲較高。

Impala 作為新一×××源大資料分析引擎,支援實時計算,它提供了與Hive 類似的功能,並在效能上比Hive高出3~30 倍。

Impala 發展勢頭迅猛,甚至有可能會超過Hive 的使用率而成為Hadoop 上最流行的實時計算平臺。

Hive 與Impala 的不同點總結如下:

第一,Hive 比較適合進行長時間的批處理查詢分析,而Impala 適合進行實時互動式SQL 查詢。

第二,Hive 依賴於MapReduce 計算框架,執行計劃組合成管道型的MapReduce 任務模式進行執行,而Impala 則把執行計劃表現為一棵完整的執行計劃樹,可以更自然地分發執行計劃到各個Impalad執行查詢。

第三,Hive在執行過程中,如果記憶體放不下所有資料,則會使用外存,以保證查詢能順序執行完成,而Impala在遇到記憶體放不下資料時,不會利用外存,所以,Impala目前處理查詢時會受到一定的限制。

Hive與Impala的相同點總結如下:

第一,Hive與Impala使用相同的儲存資料池,都支援把資料儲存於HDFS和HBase中,其中,HDFS支援儲存TEXT、RCFILE、PARQUET、AVRO、ETC等格式的資料,HBase儲存表中記錄。

第二,Hive與Impala使用相同的元資料。

第三,Hive與Impala中對SQL的解釋處理比較相似,都是通過詞法分析生成執行計劃。

總的來說,Impala的目的不在於替換現有的MapReduce工具,把Hive與Impala配合使用效果最佳,可以先使用Hive進行資料轉換處理,之後再使用Impala在Hive處理後的結果資料集上進行快速的資料分析。

PIG

Pig 是Hadoop 生態系統的一個元件,提供了類似SQL 的Pig Latin 語言(包含Filter、GroupBy、Join、OrderBy 等操作,同時也支援使用者自定義函式),允許使用者通過編寫簡單的指令碼來實現複雜的資料分析,而不需要編寫複雜的MapReduce 應用程式,Pig 會自動把使用者編寫的指令碼轉換成MapReduce 作業在Hadoop 叢集上執行,而且具備對生成的MapReduce程式進行自動優化的功能,所以,使用者在編寫Pig 程式的時候,不需要關心程式的執行效率,這就大大減少了使用者程式設計時間。

因此,通過配合使用Pig 和Hadoop,在處理海量資料時就可以實現事半功倍的效果,比使用Java、C++等語言編寫MapReduce 程式的難度要小很多,並且用更少的程式碼量實現了相同的資料處理分析功能。

Pig 可以載入資料、表達轉換資料以及儲存最終結果,因此,在企業實際應用中,Pig通常用於ETL(Extraction、Transformation、Loading)過程,即來自各個不同資料來源的資料被收集過來以後,採用Pig 進行統一加工處理,然後載入到資料倉庫Hive 中,由Hive 實現對海量資料的分析。

需要特別指出的是,每種資料分析工具都有一定的侷限性,Pig 的設計和MapReduce 一樣,都是面向批處理的,因此,Pig 並不適合所有的資料處理任務,特別是當需要查詢大資料集中的一小部分資料時,Pig 仍然需要對整個或絕大部分資料集進行掃描,因此,實現效能不會很好。

Tez

Tez 是Apache 開源的支援DAG 作業的計算框架,通過DAG 作業的方式執行MapReduce 作業,提供了程式執行的整體處理邏輯,就可以去除工作流當中多餘的Map 階段,減少不必要的操作,提升資料處理的效能。

Hortonworks把Tez 應用到資料倉庫Hive 的優化中,使得效能提升了約100 倍。

如圖15-13 所示,可以讓Tez 框架執行在YARN 框架之上,然後讓MapReduce、Pig 和Hive 等計算框架執行在Tez框架之上,從而藉助於Tez 框架實現對MapReduce、Pig 和Hive 等的效能優化,更好地解決現有MapReduce 框架在迭代計算(如PageRank 計算)和互動式計算方面存在的問題。

Tez在解決Hive、Pig延遲大、效能低等問題的思路,是和那些支援實時互動式查詢分析的產品(如Impala、Dremel和Drill等)是不同的。

Impala、Dremel和Drill的解決問題思路是拋棄MapReduce計算框架,不再將類似SQL語句的HiveQL或者Pig語句翻譯成MapReduce程式,而是採用與商用並行關係資料庫類似的分散式查詢引擎,可以直接從HDFS或者HBase中用SQL語句查詢資料,而不需要把SQL語句轉化成MapReduce任務來執行,從而大大降低了延遲,很好地滿足了實時查詢的要求。

但是,Tez則不同,比如,針對Hive資料倉庫進行優化的“Tez+Hive”解決方案,仍採用MapReduce計算框架,但是對DAG的作業依賴關係進行了裁剪,並將多個小作業合併成一個大作業,這樣,不僅計算量減少了,而且寫HDFS次數也會大大減少。

Kafka

Kafka是由LinkedIn公司開發的一種高吞吐量的分散式釋出訂閱訊息系統,使用者通過Kafka系統可以釋出大量的訊息,同時也能實時訂閱消費訊息。

在大資料時代湧現的新的日誌收集處理系統(Flume、Scribe等)往往更擅長批量離線處理,而不能較好地支援實時線上處理。

相對而言,Kafka可以同時滿足線上實時處理和批量離線處理。

Kafka設計的初衷是構建一個可以處理海量日誌、使用者行為和網站運營統計等的資料處理框架

最近幾年,Kafka在大資料生態系統中開始扮演越來越重要的作用,在Uber、Twitter、Netflix、LinkedIn、Yahoo、Cisco、Goldman Sachs等公司得到了大量的應用。目前,在很多公司的大資料平臺中,Kafka通常扮演資料交換樞紐的角色。

在公司的大資料生態系統中,可以把Kafka作為資料交換樞紐,不同型別的分散式系統(關係資料庫、NoSQL資料庫、流處理系統、批處理系統等),可以統一接入到Kafka,實現和Hadoop各個元件之間的不同型別資料的實時高效交換,較好地滿足各種企業應用需求。

Sqoop

Sqoop是一款開源的工具,主要用於在Hadoop(Hive)與傳統的資料庫(mysql、postgresql...)間進行資料的傳遞,可以將一個關係型資料庫(例如 : MySQL ,Oracle ,Postgres等)中的資料導進到Hadoop的HDFS中,也可以將HDFS的資料導進到關係型資料庫中。