大数据入门介绍和学习路线
文章目錄
- 一、大數據崗位方向分類
- (1)基礎平臺開發:
- (2)數據產品開發:
- (3)數據倉庫:
- (4)數據分析:
- (5)算法:
- 二、大數據工具之間的關系
- (1)怎么存下大數據
- (2)怎么處理數據
- (3)什么是Map,什么是Reduce?
- (4)更高層描述算法和數據處理
- (5)流計算
- (6)KV Store
- (7)調度系統Yarn
- 三、大數據學習路線
- (1)基礎部分
- (2)javase
- (3)zookeeper
- (4)hadoop
- (5)hive
- (6)hbase
- (7)redis
- (8)kafka
- (9)spark
- (10)elasticsearch
- 四、databricks使用教程
- Reference
一、大數據崗位方向分類
(1)基礎平臺開發:
Java 為主。主要做統一數據開發平臺、大數據源碼級別擴展優化、提供提升開發效率的工具、元數據管理、數據質量管理等。技能要求:Java,Zookeeper,Hadoop,Hive,Spark,Kafka等。
(2)數據產品開發:
服務端 Java 為主,全部容器化管理服務。主要是數據報表平臺、數據分析平臺等。
(3)數據倉庫:
如果數據開發平臺比較完善,一般以 sql 為主,不管是離線計算,還是實時計算,都只需要在數據開發平臺上提交 sql 任務即可。更專注數據模型的建設,能夠快速實現用戶的數據分析需求。如果平臺不夠完善,實時計算可能還是需要寫代碼,scala 為主。
技能要求:數據建模、報表開發、理解業務
(4)數據分析:
sql為主。分析數據趨勢,挖掘潛在價值。要求:數據分析技能+Hadoop+Hive+部分Java
(5)算法:
Scala,Python,R 。特征提取、算法模型的優化。要求:算法
二、大數據工具之間的關系
如業界最流行的分布式計算平臺Spark,學習三部曲:
(1)可以通過這篇文章(如何用形象的比喻描述大數據的技術生態?Hadoop、Hive、Spark 之間是什么關系?)來了解一下大數據的生態。
(2)可以通過 Spark 的官方教程嘗試寫一個 Spark Hello World 程序(在之前的 SparrowRecSys 里面新建一個 Scala 文件就可以)。
(3)使用了 Spark 的機器學習庫 Spark MLlib,所可以通過這個官方教程來做一些初步的了解。
Hadoop生態圈(或者泛生態圈)即為大數據服務。
之前在sparrow項目中也用到過大數據的工具,如pyspark等,在58同城的推薦系統中,策略層的計算工具也是用到了Hive、MapReduce等:
(1)怎么存下大數據
傳統的文件系統是單機的,不能橫跨不同的機器。HDFS(Hadoop Distributed FileSystem)的設計本質上是為了大量的數據能橫跨成百上千臺機器,但是你看到的是一個文件系統而不是很多文件系統。比如你說我要獲取/hdfs/tmp/file1的數據,你引用的是一個文件路徑,但是實際的數據存放在很多不同的機器上。
你作為用戶,不需要知道這些,就好比在單機上你不關心文件分散在什么磁道什么扇區一樣。HDFS為你管理這些數據。
(2)怎么處理數據
雖然HDFS可以為你整體管理不同機器上的數據,但是這些數據太大了。一臺機器讀取成T上P的數據,一臺機器慢慢跑也許需要好幾天甚至好幾周。對于很多公司來說,單機處理是不可忍受的,比如微博要更新24小時熱博,它必須在24小時之內跑完這些處理。
如果要用很多臺機器處理,就面臨了如何分配工作,如果一臺機器掛了如何重新啟動相應的任務,機器之間如何互相通信交換數據以完成復雜的計算等等。這就是MapReduce / Tez / Spark的功能:
- MapReduce是第一代計算引擎。MapReduce的設計,采用了很簡化的計算模型,只有Map和Reduce兩個計算過程(中間用Shuffle串聯),用這個模型,已經可以處理大數據領域很大一部分問題了。
- Tez和Spark是第二代計算引擎。
(3)什么是Map,什么是Reduce?
- 場景需求:要統計一個巨大的文本文件存儲在類似HDFS上,你想要知道這個文本里各個詞的出現頻率。
- 步驟:
- 啟動了一個MapReduce程序。Map階段,幾百臺機器同時讀取這個文件的各個部分,分別把各自讀到的部分分別統計出詞頻,產生類似(hello, 12100次),(world,15214次)等等這樣的Pair(我這里把Map和Combine放在一起說以便簡化);
- 這幾百臺機器各自都產生了如上的集合,然后又有幾百臺機器啟動Reduce處理。Reducer機器A將從Mapper機器收到所有以A開頭的統計結果,機器B將收到B開頭的詞匯統計結果(當然實際上不會真的以字母開頭做依據,而是用函數產生Hash值以避免數據串化。因為類似X開頭的詞肯定比其他要少得多,而你不希望數據處理各個機器的工作量相差懸殊)。然后這些Reducer將再次匯總,(hello,12100)+(hello,12311)+(hello,345881)= (hello,370292)。每個Reducer都如上處理,你就得到了整個文件的詞頻結果。
Map+Reduce的簡單模型很黃很暴力,雖然好用,但是很笨重。第二代的Tez和Spark除了內存Cache之類的新feature,本質上來說,是讓Map/Reduce模型更通用,讓Map和Reduce之間的界限更模糊,數據交換更靈活,更少的磁盤讀寫,以便更方便地描述復雜算法,取得更高的吞吐量。
(4)更高層描述算法和數據處理
有了MapReduce,Tez和Spark之后,程序員發現,MapReduce的程序寫起來真麻煩。他們希望簡化這個過程。這就好比你有了匯編語言,雖然你幾乎什么都能干了,但是你還是覺得繁瑣。你希望有個更高層更抽象的語言層來描述算法和數據處理流程。于是就有了Pig和Hive。
- Pig是接近腳本方式去描述MapReduce,
- Hive則用的是SQL。
它們把腳本和SQL語言翻譯成MapReduce程序,丟給計算引擎去計算,而你就從繁瑣的MapReduce程序中解脫出來,用更簡單更直觀的語言去寫程序了。有了Hive之后,人們發現SQL對比Java有巨大的優勢:
- 一個是它太容易寫了。剛才詞頻的東西,用SQL描述就只有一兩行,MapReduce寫起來大約要幾十上百行。
- 數據分析師不再乞求工程師幫忙,工程師也不用寫奇怪的處理程序。Hive逐漸成為大數據倉庫的核心組件,很多公司的流水線作業集完全是用SQL描述,易寫易改易維護。
自從數據分析人員開始用Hive分析數據之后,發現Hive在MapReduce上跑,非常慢。流水線作業集也許沒啥關系,比如24小時更新的推薦,反正24小時內跑完就算了。但是數據分析師總希望跑更快點,如查多少人在過去一小時內看了A商品和B商品。于是Impala,Presto,Drill誕生了(當然還有無數非著名的交互SQL引擎,就不一一列舉了)。三個系統的核心理念是,MapReduce引擎太慢,因為它太通用,太強壯,太保守,我們SQL需要更輕量,更激進地獲取資源,更專門地對SQL做優化,而且不需要那么多容錯性保證(因為系統出錯了大不了重新啟動任務,如果整個處理時間更短的話,比如幾分鐘之內)。這些系統讓用戶更快速地處理SQL任務,犧牲了通用性穩定性等特性。如果說MapReduce是大砍刀,砍啥都不怕,那上面三個就是剔骨刀,靈巧鋒利,但是不能搞太大太硬的東西。
這些這些系統,說實話,一直沒有達到人們期望的流行度。因為這時候又兩個異類被造出來了。他們是Hive on Tez / Spark和SparkSQL。它們的設計理念是,MapReduce慢,但是如果我用新一代通用計算引擎Tez或者Spark來跑SQL,那我就能跑的更快。而且用戶不需要維護兩套系統。這就好比如果你廚房小,人又懶,對吃的精細程度要求有限,那你可以買個電飯煲,能蒸能煲能燒,省了好多廚具。
上面的介紹,基本就是一個數據倉庫的構架了。底層HDFS,上面跑MapReduce/Tez/Spark,在上面跑Hive,Pig。或者HDFS上直接跑Impala,Drill,Presto。這解決了中低速數據處理的要求。
(5)流計算
那如果我要更高速的處理呢?如果我是一個類似微博的公司,我希望顯示不是24小時熱博,我想看一個不斷變化的熱播榜,更新延遲在一分鐘之內,上面的手段都將無法勝任。于是又一種計算模型被開發出來,這就是Streaming(流)計算。
Storm是最流行的流計算平臺。
流計算的思路是,如果要達到更實時的更新,我何不在數據流進來的時候就處理了?比如還是詞頻統計的例子,我的數據流是一個一個的詞,我就讓他們一邊流過我就一邊開始統計了。流計算很牛逼,基本無延遲,但是它的短處是,不靈活,你想要統計的東西必須預先知道,畢竟數據流過就沒了,你沒算的東西就無法補算了。因此它是個很好的東西,但是無法替代上面數據倉庫和批處理系統。
(6)KV Store
還有一個有些獨立的模塊是KV Store,比如Cassandra,HBase,MongoDB以及很多很多很多很多其他的(多到無法想象)。所以KV Store就是說,我有一堆鍵值,我能很快速滴獲取與這個Key綁定的數據。比如我用身份證號,能取到你的身份數據。這個動作用MapReduce也能完成,但是很可能要掃描整個數據集。
而KV Store專用來處理這個操作,所有存和取都專門為此優化了。從幾個P的數據中查找一個身份證號,也許只要零點幾秒。這讓大數據公司的一些專門操作被大大優化了。比如我網頁上有個根據訂單號查找訂單內容的頁面,而整個網站的訂單數量無法單機數據庫存儲,我就會考慮用KV Store來存。KV Store的理念是,基本無法處理復雜的計算,大多沒法JOIN,也許沒法聚合,沒有強一致性保證(不同數據分布在不同機器上,你每次讀取也許會讀到不同的結果,也無法處理類似銀行轉賬那樣的強一致性要求的操作)。但是就是極快。
每個不同的KV Store設計都有不同取舍,有些更快,有些容量更高,有些可以支持更復雜的操作。必有一款適合你。
除此之外,還有一些更特制的系統/組件,比如Mahout是分布式機器學習庫,Protobuf是數據交換的編碼和庫,ZooKeeper是高一致性的分布存取協同系統,等等。
(7)調度系統Yarn
有了這么多亂七八糟的工具,都在同一個集群上運轉,大家需要互相尊重有序工作。所以另外一個重要組件是,調度系統。現在最流行的是Yarn。你可以把他看作中央管理,好比你媽在廚房監工,哎,你妹妹切菜切完了,你可以把刀拿去殺雞了。只要大家都服從你媽分配,那大家都能愉快滴燒菜。
三、大數據學習路線
(1)基礎部分
linux基礎和javase基礎【包含mysql】 這些是基本功,剛開始也不可能學的很精通,最起碼要對linux中的一些基本的命令混個臉熟,后面學習各種框架的時候都會用到,用多了就熟悉了。
(2)javase
javase的話建議主要看面向對象,集合,io,多線程,以及jdbc操作即可。
(3)zookeeper
zookeeper是很多大數據框架的基礎,中文名稱是動物園的意思,因為目前的大數據框架的圖標很多都是動物的形狀,所以zookeeper其 實就是可以管理很多大數據框架的。針對這個框架,主要掌握如何搭建單節點和集群,以及掌握如何在zkcli客戶端下對zookeeper的節點進行增刪改 查操作即可。
(4)hadoop
目前企業中一般都是用hadoop2.x的版本了,所以就沒有必要再去學hadoop1.x版本了,hadoop2.x主要包含三大塊 hdfs 前期,主要學習hdfs的一些命令即可,上傳,下載,刪除,移動,查看等命令… mapreduce 這個需要重點學習下,要理解mr的原理以及代碼實現,雖然現在工作中真正寫mr的代碼次數很少了,但是原理還是要理解的。 yarn 前期了解即可,只需要知道yarn是一個資源調度平臺,主要負責給任務分配資源即可,yarn不僅可以給mapreduce任務調度資源,還可以為 spark任務調度資源…yarn是一個公共的資源調度平臺,所有滿足條件的框架都可以使用yarn來進行資源調度。
(5)hive
hive是一個數據倉庫,所有的數據都是存儲在hdfs上的,具體【數據倉庫和數據庫】的區別大家可以去網上搜索一下,有很多介紹。其實如果對 mysql的使用比較熟悉的話,使用hive也就簡單很多了,使用hive主要是寫hql,hql是hive的sql語言,非常類似于mysql數據庫的 sql,后續學習hive的時候主要理解一些hive的語法特性即可。
其實hive在執行hql,底層在執行的時候還是執行的mapredce程序。 注意:其實hive本身是很強大的,數據倉庫的設計在工作中也是很重要的,但是前期學習的時候,主要先學會如何使用就好了。后期可以好好研究一下hive。
(6)hbase
hbase是一個nosql 數據庫,是一個key-value類型的數據庫,底層的數據存儲在hdfs上。在學習hbase的時候主要掌握 row-key的設計,以及列簇的設計。要注意一個特點就是,hbase基于rowkey查詢效率很快,可以達到秒級查詢,但是基于列簇中的列進行查詢, 特別是組合查詢的時候,如果數據量很大的話,查詢性能會很差。
(7)redis
redis也是一個nosql 數據庫和key-value類型的數據庫,但是這個數據庫是純基于內存的,也就是redis數據庫中的數據都是存儲在內存中的,所以它的一個特點就是適用 于快速讀寫的應用場景,讀寫可以達到10W次/秒,但是不適合存儲海量數據,畢竟機器的內存是有限的,當然,redis也支持集群,也可以存儲大量數據。 在學習redis的時候主要掌握string,list,set,sortedset,hashmap這幾種數據類型的區別以及使用,還有 pipeline管道,這個在批量入庫數據的時候是非常有用的,以及transaction事務功能。 flume flume是一個日志采集工具,這個還是比較常用的,最常見的就是采集應用產生的日志文件中的數據。一般有兩個流程,一個是flume采集數據存 儲到kafka中,為了后面使用storm或者sparkstreaming進行實時處理。另一個流程是flume采集的數據落盤到hdfs上,為了后期 使用hadoop或者spark進行離線處理。在學習flume的時候其實主要就是學會看flume官網的文檔,學習各種組建的配置參數,因為使用 flume就是寫各種的配置。
(8)kafka
kafka 是一個消息隊列,在工作中常用于實時處理的場景中,作為一個中間緩沖層,例如,flume->kafka->storm/sparkstreaming。學習kafka主要掌握topic,partition,replicate等的概念和原理。 storm storm是一個實時計算框架,和hadoop的區別就是,hadoop是對離線的海量數據進行處理,而storm是對實時新增的每一條數據進行 處理,是一條一條的處理,可以保證數據處理的時效性。學習storm主要學習topology的編寫,storm并行度的調整,以及storm如何整合 kafka實時消費數據。
(9)spark
spark 現在也發展成了一個生態圈,spark里面包含很多技術,spark core,spark steaming,spark mlib,spark graphx。 spark生態圈里面包含的有離線處理spark core,和實時處理spark streaming,在這里需要注意一下,storm和spark streaming ,兩個都是實時處理框架,但是主要區別是:storm是真正的一條一條的處理,而spark streaming 是一批一批的處理。
spark中包含很多框架,在剛開始學習的時候主要學習spark core和spark streaming即可。這個一般搞大數據的都會用到。spark mlib和spark graphx 可以等后期工作需要或者有時間了在研究即可。
(10)elasticsearch
elasticsearch是一個適合海量數據實時查詢的全文搜索引擎,支持分布式集群,其實底層是基于lucene的。在查詢的時候支持快速模 糊查詢,求count,distinct,sum,avg等操作,但是不支持join操作。elasticsearch目前也有一個生態 圈,elk(elasticsearch logstash kibana)是一個典型的日志收集,存儲,快速查詢出圖表的一整套解決方案。在學習elasticsearch的時候,前期主要學習如何使用es進行增 刪改查,es中的index,type,document的概念,以及es中的mapping的設計。
四、databricks使用教程
databricks是基于spark的云服務,能夠提供數據處理的單獨空間(不受托管環境和hadoop集群管理的影響)
(1)創建賬號后(注意最好在谷歌瀏覽器上),創建一個新集群cluster,選擇“ Databricks Runtime”版本(Databricks Runtime是一組在Databricks管理的群集上運行的核心組件。 它包括Apache Spark等)。
創建好集群后就是這樣樣子:
(2)創建一個新的筆記本,可以發現和jupyter notebook是類似的,可以選定我們的默認語言和集群cluster:
此處常用的快捷鍵(win環境):
Shift + Enter鍵運行單元格
Ctrl + Enter保持運行相同的單元格,而無需移動到下一個單元格
(3)將數據上傳到Databricks,如果木有數據集,可以用iris數據集測試一波,上傳好數據集后:
(4)現在可以使用UI創建表,以便可以可視化表并在集群上預覽。 可以觀察表的屬性。 Spark將嘗試檢測出每列的數據類型,使得我們能對其進行編輯。
在集群上可視化表:
這里我們可以為各列添加標題,以便可以通過其標題而不是_c0 , _c1等等來標識每一列。
這里可以將標題設置為“分隔長度”,“分隔寬度”,“花瓣長度”,“花瓣寬度”和“類”(Sepal Length, Sepal Width, Petal Length, Petal Width and Class)。 在這里,Spark錯誤地將前四列的數據類型檢測為String,因此我們可以手動將其更改為所需的數據類型Float。
(5)筆記本電腦訪問數據:Spark是一個框架,可用于使用SQL,機器學習,圖形處理或實時流分析來分析大數據。 這里使用SparkSQL和Dataframes。注意上次數據集后還要create table(左下角藍色的,否則讀不到表):
在notebook中可以執行語句讀表:
(6)根據數據表畫圖也非常方便:
(7)將Spark數據框轉換為Pandas數據框:
(8)查看Spark UI :在左側欄的compute中,點擊cluster會進入如下界面,找到spark UI,UI視圖提供了有關在集群上執行的每個作業,階段,環境和執行SQL查詢的大量信息。 該UI有助于用戶調試其應用程序。 此外,此UI還提供了關于Spark的良好可視化效果。具體介紹可以參考鏈接。
(9)導出notebook文件,有多種文件類型可選(如HTML形式導出):
Reference
[1] https://www.zhihu.com/question/27974418
[2] 黑馬【Python+大數據】學習路線圖
[3] 2022黑馬hadoop入門視頻 hive部分
[4] 架構師hive視頻教程
[5] 易百教程-hive教程
[6] 廈門大學大數據實驗室
[7] Hive學習路線圖 Hive安裝和使用攻略
[8] hive有道筆記(尚硅谷)
[9] 尚硅谷hive視頻教程
[10] 阿里云搭建Hadoop集群
[11] 從阿里云輕量服務器安裝Hadoop及環境配置
[12] 阿里云ECS服務器部署HADOOP集群(一):Hadoop完全分布式集群環境搭建
[13] How to get started with Databricks
總結
以上是生活随笔為你收集整理的大数据入门介绍和学习路线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网优前途何在
- 下一篇: urlencode编码基本概念_URLe