1. 程式人生 > >大資料大綱&大資料生態圈所涉及的技術

大資料大綱&大資料生態圈所涉及的技術

 今天博主是做一個大概的概述,缺少的章節會在後面慢慢補充,感興趣的同學可以在下面評論留言。


資料視覺化展示中心:KIbana官網:點選開啟連結Grafana官網:點選開啟連結Grafana幫助文件:點選開啟連結大資料特徵:1)大量化(Volume):儲存量大,增量大 TB->PB2)多樣化(Variety):來源多:搜尋引擎,社交網路,通話記錄,感測器格式多:(非)結構化資料,文字、日誌、視訊、圖片、地理位置等3)快速化(Velocity):海量資料的處理需求不再侷限在離線計算當中4)價值密度低(Value):但是這種價值需要在海量資料之上,通過資料分析與機器學習更快速的挖掘出來大資料帶來的革命性變革:
1)成本降低2)軟體容錯,硬體故障視為常態3)簡化分散式平行計算資料分析師的必備技能:資料採集:所謂資料採集並不是我們理解的資料爬蟲,尤其是我們在工作中遇到的資料很多都是來自系統內的資料,來自資料庫的資料來自日誌的資料。但是這些資料維度是非常多並且複雜的,所以在分析前我們就需要把這些資料採集來。資料採集常用的手段有:SQL/Python,其中SQL是資料分析的必備技能,Python是加分項。資料清洗:採集來的資料一般是不規整的,欄位缺失或者有錯誤是常有的事情,如果我們不對這些資料進行清洗,分析出的結果就會出現各種異常。在資料清洗這一塊就需要用到一些簡單的統計學基礎。資料分析資料分析最重要的是行業知識和邏輯思維能力
。行業知識往往是通過在行業中的工作經歷來獲取的,當然作為學生也可以通過一些行業相關的資料報告和雜誌來獲得。而邏輯思維能力,需要後天的不斷的鍛鍊,常見的鍛鍊方法是多看資料分析實戰相關的書籍,學習作者的思維方式;經常和小夥伴一起做頭腦風暴;對於一些工作生活中有趣的經驗主義的事情嘗試通過資料角度去解答。資料視覺化:讓結論更加的容易理解。目前國內外的資料視覺化的產品也非常多,常用的有:Echarts/Tableau/Excel/Python為了應對大資料的這幾個特點,開源的大資料框架越來越多,先列舉一些常見的:檔案儲存:Hadoop HDFS、Tachyon、KFS離線計算:Hadoop MapReduce、Spark
流式、實時計算:Storm、Spark Streaming、S4、HeronK-V、NOSQL資料庫:HBase、Redis、MongoDB資源管理:YARN、Mesos日誌收集:Flume、Scribe、Logstash、Kibana訊息系統:Kafka、StormMQ、ZeroMQ、RabbitMQ查詢分析:Hive、Impala、Pig、Presto、Phoenix、SparkSQL、Drill、Flink、Kylin、Druid分散式協調服務:Zookeeper叢集管理與監控:Ambari、Ganglia、Nagios、Cloudera Manager資料探勘、機器學習:Mahout、Spark MLLib資料同步:Sqoop任務排程:Oozie第一章:初識Hadoop1.1 學會百度與Google1.2 參考資料首選官方文件1.3 先讓Hadoop跑起來Hadoop可以算是大資料儲存和計算的開山鼻祖,現在大多開源的大資料框架都依賴Hadoop或者與它能很好的相容。關於Hadoop,你至少需要搞清楚以下是什麼:Hadoop 1.0、Hadoop 2.0MapReduce、HDFSNameNode、DataNodeJobTracker、TaskTrackerYarn、ResourceManager、NodeManager1.4 試試使用HadoopHDFS目錄操作命令;上傳、下載檔案命令;提交執行MapReduce示例程式;開啟Hadoop WEB介面,檢視Job執行狀態,檢視Job執行日誌知道Hadoop的系統日誌在哪裡1.5 你該瞭解它們的原理了MapReduce:如何分而治之;HDFS:資料到底在哪裡,什麼是副本;Yarn到底是什麼,它能幹什麼;NameNode到底在幹些什麼;Resource Manager到底在幹些什麼;1.6 自己寫一個MapReduce程式Java、Shell、Python都可以第二章:更高效的WordCount2.1 學點SQL2.2 SQL版WordCountSELECT word,COUNT(1) FROM wordcount GROUP BY word;使用SQL處理分析Hadoop上的資料,方便、高效、易上手、更是趨勢。不論是離線計算還是實時計算,越來越多的大資料處理框架都在積極提供SQL介面2.3 SQL On Hadoop之Hive為什麼說Hive是資料倉庫工具,而不是資料庫工具呢?有的朋友可能不知道資料倉庫,資料倉庫是邏輯上的概念,底層使用的是資料庫,資料倉庫中的資料有這兩個特點:最全的歷史資料(海量)、相對穩定的;所謂相對穩定,指的是資料倉庫不同於業務系統資料庫,資料經常會被更新,資料一旦進入資料倉庫,很少會被更新和刪除,只會被大量查詢。而Hive,也是具備這兩個特點,因此,Hive適合做海量資料的資料倉庫工具,而不是資料庫工具2.4 安裝配置Hive2.5 試試使用Hive請參考1.1 和 1.2 ,在Hive中建立wordcount表,並執行2.2中的SQL語句在Hadoop WEB介面中找到剛才執行的SQL任務。看SQL查詢結果是否和1.4中MapReduce中的結果一致2.6 Hive是怎麼工作的明明寫的是SQL,為什麼Hadoop WEB介面中看到的是MapReduce任務?2.7 學會Hive的基本命令建立、刪除表;載入資料到表;下載Hive表的資料;截至到這裡你應該已經具備以下技能和知識點:MapReduce的原理(還是那個經典的題目,一個10G大小的檔案,給定1G大小的記憶體,如何使用Java程式統計出現次數最多的10個單詞及次數);HDFS讀寫資料的流程;向HDFS中PUT資料;從HDFS中下載資料;自己會寫簡單的MapReduce程式,執行出現問題,知道在哪裡檢視日誌;會寫簡單的SELECT、WHERE、GROUP BY等SQL語句;Hive SQL轉換成MapReduce的大致流程;Hive中常見的語句:建立表、刪除表、往表中載入資料、分割槽、將表中資料下載到本地;從上面的學習,你已經瞭解到,HDFS是Hadoop提供的分散式儲存框架,它可以用來儲存海量資料,MapReduce是Hadoop提供的分散式計算框架,它可以用來統計和分析HDFS上的海量資料,而Hive則是SQL On Hadoop,Hive提供了SQL介面,開發人員只需要編寫簡單易上手的SQL語句,Hive負責把SQL翻譯成MapReduce,提交執行第三章:把別處的資料搞到Hadoop上(資料採集)3.1 HDFS PUT命令這個在前面你應該已經使用過了。put命令在實際環境中也比較常用,通常配合shell、python等指令碼語言來使用。建議熟練掌握3.2 HDFS APIHDFS提供了寫資料的API,自己用程式語言將資料寫入HDFS,put命令本身也是使用API實際環境中一般自己較少編寫程式使用API來寫資料到HDFS,通常都是使用其他框架封裝好的方法。比如:Hive中的INSERT語句,Spark中的saveAsTextfile等。建議瞭解原理,會寫DemoSqoop是一個主要用於Hadoop/Hive與傳統關係型資料庫,Oracle、MySQL、SQLServer等之間進行資料交換的開源框架。就像Hive把SQL翻譯成MapReduce一樣,Sqoop把你指定的引數翻譯成MapReduce,提交到Hadoop執行,完成Hadoop與其他資料庫之間的資料交換自己下載和配置Sqoop(建議先使用Sqoop1,Sqoop2比較複雜)。瞭解Sqoop常用的配置引數和方法使用Sqoop完成從MySQL同步資料到HDFS;使用Sqoop完成從MySQL同步資料到Hive表;如果後續選型確定使用Sqoop作為資料交換工具,那麼建議熟練掌握,否則,瞭解和會用Demo即可Flume是一個分散式的海量日誌採集和傳輸框架,因為“採集和傳輸框架”,所以它並不適合關係型資料庫的資料採集和傳輸。Flume可以實時的從網路協議、訊息系統、檔案系統採集日誌,並傳輸到HDFS上因此,如果你的業務有這些資料來源的資料,並且需要實時的採集,那麼就應該考慮使用Flume。下載和配置Flume。使用Flume監控一個不斷追加資料的檔案,並將資料傳輸到HDFS;Flume的配置和使用較為複雜,如果你沒有足夠的興趣和耐心,可以先跳過Flume。3.5 阿里開源的DataX與關係型資料庫資料交換的工具,非常好用。第四章:把Hadoop上的資料搞到別處去Hive和MapReduce進行分析了。那麼接下來的問題是,分析完的結果如何從Hadoop上同步到其他系統和應用中去呢?其實,此處的方法和第三章基本一致的其實大家都已經發現Hive後臺使用MapReduce作為執行引擎,實在是有點慢。因此SQL On Hadoop的框架越來越多,按我的瞭解,最常用的按照流行度依次為SparkSQL、Impala和Presto.這三種框架基於半記憶體或者全記憶體,提供了SQL介面來快速查詢分析Hadoop上的資料,對比一下效能測試:impala與presto效能相當,SparkSql遜色不少。目前看presto相比impala1、與hive實時共享元資料,impala需要用另外定時任務廣播元資料,新生成的資料,用impala不能立即查詢。2、沒有出現操作大資料集有時掛掉的情況3、presto與hive都由fackbook開源,相容性應該會更好點測試結果對比如下:我們目前使用的是SparkSQL,至於為什麼用SparkSQL,原因大概有以下吧:使用Spark還做了其他事情,不想引入過多的框架;Impala對記憶體的需求太大,沒有過多資源部署。5.1 關於Spark和SparkSQL什麼是Spark,什麼是SparkSQLSpark有的核心概念及名詞解釋SparkSQL和Spark是什麼關係,SparkSQL和Hive是什麼關係SparkSQL為什麼比Hive跑的快5.2 如何部署和執行SparkSQLSpark有哪些部署模式?如何在Yarn上執行SparkSQL?使用SparkSQL查詢Hive中的表。Spark不是一門短時間內就能掌握的技術,因此建議在瞭解了Spark之後,可以先從SparkSQL入手,循序漸進在實際業務場景下,特別是對於一些監控日誌,想即時的從日誌中瞭解一些指標(關於實時計算,後面章節會有介紹),這時候,從HDFS上分析就太慢了,儘管是通過Flume採集的,但Flume也不能間隔很短就往HDFS上滾動檔案,這樣會導致小檔案特別多。為了滿足資料的一次採集、多次消費的需求,這裡要說的便是Kafka6.1 關於Kafka什麼是Kafka?Kafka的核心概念及名詞解釋。6.2 如何部署和使用Kafka使用單機部署Kafka,併成功執行自帶的生產者和消費者例子。使用Java程式自己編寫並執行生產者和消費者程式。Flume和Kafka的整合,使用Flume監控日誌,並將日誌資料實時傳送至Kafka。這時,使用Flume採集的資料,不是直接到HDFS上,而是先到Kafka,Kafka中的資料可以由多個消費者同時消費,其中一個消費者,就是將資料同步到HDFS截止到這裡你應該已經具備以下技能和知識點:為什麼Spark比MapReduce快使用SparkSQL代替Hive,更快的執行SQL使用Kafka完成資料的一次收集,多次消費架構自己可以寫程式完成Kafka的生產者和消費者從前面的學習,你已經掌握了大資料平臺中的資料採集、資料儲存和計算、資料交換等大部分技能,而這其中的每一步,都需要一個任務(程式)來完成,各個任務之間又存在一定的依賴性,比如,必須等資料採集任務成功完成後,資料計算任務才能開始執行。如果一個任務執行失敗,需要給開發運維人員傳送告警,同時需要提供完整的日誌來方便查錯。不僅僅是分析任務,資料採集、資料交換同樣是一個個的任務。這些任務中,有的是定時觸發,有點則需要依賴其他任務來觸發。當平臺中有幾百上千個任務需要維護和執行時候,僅僅靠crontab遠遠不夠了,這時便需要一個排程監控系統來完成這件事。排程監控系統是整個資料平臺的中樞系統,類似於AppMaster,負責分配和監控任務。7.1 Apache OozieOozie是什麼?有哪些功能?Oozie可以排程哪些型別的任務(程式)?Oozie可以支援哪些任務觸發方式?安裝配置Oozie。7.2 其他開源的任務排程系統Azkaban,light-task-scheduler,Zeus,等等。另外,我這邊是之前單獨開發的任務排程與監控系統在第六章介紹Kafka的時候提到了一些需要實時指標的業務場景,實時基本可以分為絕對實時和準實時,絕對實時的延遲要求一般在毫秒級,準實時的延遲要求一般在秒、分鐘級。對於需要絕對實時的業務場景,用的比較多的是Storm,對於其他準實時的業務場景,可以是Storm,也可以是Spark Streaming。當然,如果可以的話,也可以自己寫程式來做。8.1 Storm什麼是Storm?有哪些可能的應用場景?Storm由哪些核心元件構成,各自擔任什麼角色?Storm的簡單安裝和部署。自己編寫Demo程式,使用Storm完成實時資料流計算。8.2 Spark Streaming什麼是Spark Streaming,它和Spark是什麼關係?Spark Streaming和Storm比較,各有什麼優缺點?使用Kafka + Spark Streaming,完成實時計算的Demo程式。至此,你的大資料平臺底層架構已經成型了,其中包括了資料採集、資料儲存與計算(離線和實時)、資料同步、任務排程與監控這幾大模組。接下來是時候考慮如何更好的對外提供資料了。第九章:資料要對外通常對外(業務)提供資料訪問,大體上包含以下方面。離線:比如,每天將前一天的資料提供到指定的資料來源(DB、FILE、FTP)等;離線資料的提供可以採用Sqoop、DataX等離線資料交換工具。實時:比如,線上網站的推薦系統,需要實時從資料平臺中獲取給使用者的推薦資料,這種要求延時非常低(50毫秒以內)。根據延時要求和實時資料的查詢需要,可能的方案有:HBase、Redis、MongoDB、ElasticSearch等。OLAP分析:OLAP除了要求底層的資料模型比較規範,另外,對查詢的響應速度要求也越來越高,可能的方案有:Impala、Presto、SparkSQL、Kylin。如果你的資料模型比較規模,那麼Kylin是最好的選擇。即席查詢:即席查詢的資料比較隨意,一般很難建立通用的資料模型,因此可能的方案有:Impala、Presto、SparkSQL。這麼多比較成熟的框架和方案,需要結合自己的業務需求及資料平臺技術架構,選擇合適的。原則只有一個:越簡單越穩定的,就是最好的