大數據學習之路(跟著大神學習一波)

来源:https://www.cnblogs.com/Aa123456780/archive/2018/09/16/9655760.html
-Advertisement-
Play Games

前言: 一、背景介紹 二、大數據介紹 正文: 一、大數據相關的工作介紹 二、大數據工程師的技能要求 三、大數據學習規劃 四、持續學習資源推薦(書籍,博客,網站) 五、項目案例分析(批處理+實時處理) 大數據學習群:119599574 前言 一、背景介紹 本人目前是一名大數據工程師,項目數據50T,日 ...


前言:

一、背景介紹

二、大數據介紹

正文:

一、大數據相關的工作介紹

二、大數據工程師的技能要求

三、大數據學習規劃

四、持續學習資源推薦(書籍,博客,網站)

五、項目案例分析(批處理+實時處理)

 

大數據學習群:119599574

前言

一、背景介紹

本人目前是一名大數據工程師,項目數據50T,日均數據增長20G左右,個人是從Java後端開發,經過3個月的業餘自學成功轉型大數據工程師。

二、大數據介紹

大數據本質也是數據,但是又有了新的特征,包括數據來源廣、數據格式多樣化(結構化數據、非結構化數據、Excel文件、文本文件等)、數據量大(最少也是TB級別的、甚至可能是PB級別)、數據增長速度快等。

針對以上主要的4個特征我們需要考慮以下問題:

數據來源廣,該如何採集彙總?,對應出現了Sqoop,Cammel,Datax等工具。

數據採集之後,該如何存儲?,對應出現了GFS,HDFS,TFS等分散式文件存儲系統。

由於數據增長速度快,數據存儲就必須可以水平擴展。

數據存儲之後,該如何通過運算快速轉化成一致的格式,該如何快速運算出自己想要的結果?

對應的MapReduce這樣的分散式運算框架解決了這個問題;但是寫MapReduce需要Java代碼量很大,所以出現了Hive,Pig等將SQL轉化成MapReduce的解析引擎;

普通的MapReduce處理數據只能一批一批地處理,時間延遲太長,為了實現每輸入一條數據就能得到結果,於是出現了Storm/JStorm這樣的低時延的流式計算框架;

但是如果同時需要批處理和流處理,按照如上就得搭兩個集群,Hadoop集群(包括HDFS+MapReduce+Yarn)和Storm集群,不易於管理,所以出現了Spark這樣的一站式的計算框架,既可以進行批處理,又可以進行流處理(實質上是微批處理)。

而後Lambda架構,Kappa架構的出現,又提供了一種業務處理的通用架構。

為了提高工作效率,加快運速度,出現了一些輔助工具:

Ozzie,azkaban:定時任務調度的工具。

Hue,Zepplin:圖形化任務執行管理,結果查看工具。

Scala語言:編寫Spark程式的最佳語言,當然也可以選擇用Python。

Python語言:編寫一些腳本時會用到。

Allluxio,Kylin等:通過對存儲的數據進行預處理,加快運算速度的工具。

以上大致就把整個大數據生態裡面用到的工具所解決的問題列舉了一遍,知道了他們為什麼而出現或者說出現是為瞭解決什麼問題,進行學習的時候就有的放矢了。

正文

一、大數據相關工作介紹

大數據方向的工作目前主要分為三個主要方向:

大數據工程師

數據分析師

大數據科學家

其他(數據挖掘等)

二、大數據工程師的技能要求

附上大數據工程師技能圖:

必須掌握的技能11條

Java高級(虛擬機、併發)

Linux 基本操作

Hadoop(HDFS+MapReduce+Yarn )

HBase(JavaAPI操作+Phoenix )

Hive(Hql基本操作和原理理解)

Kafka

Storm/JStorm

Scala

Python

Spark (Core+sparksql+Spark streaming )

輔助小工具(Sqoop/Flume/Oozie/Hue等)

高階技能6條

機器學習演算法以及mahout庫加MLlib

R語言

Lambda 架構

Kappa架構

Kylin

Alluxio

三、學習路徑

假設每天可以抽出3個小時的有效學習時間,加上周末每天保證10個小時的有效學習時間;

3個月會有(21*3+4*2*10)*3=423小時的學習時間。

第一階段(基礎階段)

1)Linux學習—–20小時

Linux操作系統介紹與安裝。

Linux常用命令。

Linux常用軟體安裝。

Linux網路。

防火牆。

Shell編程等。

 

學習之前沒搞清楚的知識

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

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

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

雲計算和大數據

 

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

Hadoop結構(更新)

 

下麵的內容是在看視頻之前寫的,作為一些參考吧。

學習歷程

瞭解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,Hive,Sqoop等

 

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的數據導進到關係型資料庫中。
大數據學習QQ群119599574


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 虛擬機Linux與本地虛擬網卡配置 NAT鏈接方式 **********這是我親自嘗試多次實踐出來的結果,不是複製粘貼************************* 首先進行初始化,這樣避免有些設置會有影響 第二步,如圖中1,取消本地DHCP服務,2、這裡的子網ip要與虛擬機內部的網段相同,最後 ...
  • VPN英文全稱是“Virtual Private Network”,就是“虛擬專用網路”。可以遠程幫助用戶、分公司、商業伙伴及供應商同公司的內部網建立可信的安全連接,用於經濟有效地連接到商業伙伴和用戶的安全外聯網虛擬專用網。 搭建環境: 伺服器系統:Windows server 2008 R2 客戶 ...
  • 一.概述 在linux中,很多程式和腳本都通過環境變數來獲取系統信息,存儲臨時數據,配置信息。環境變數是指用來存儲有關shell會話和工作環境信息,允許你在記憶體中存儲數據,以便程式或shell中運行的腳本能夠輕鬆訪問到它們。也是存儲持久數據的一種簡便方法。在bash shell中,環境變數分為:全局 ...
  • 載入和動態鏈接 從編譯/鏈接和運行的角度看,應用程式和庫程式的連接有兩種方式。 一種是固定的、靜態的連接,就是把需要用到的庫函數的目標代碼(二進位)代碼從程式庫中抽取出來,鏈接進應用軟體的目標映像中; 另一種是動態鏈接,是指庫函數的代碼並不進入應用軟體的目標映像,應用軟體在編譯/鏈接階段並不完成跟庫 ...
  • 一 需求 隨著公司業務的發展,資料庫實例也逐漸增多,資料庫也會越來越多,有時候我們會發現正式生產資料庫也測試資料庫數據不一致,也有可能是預發佈環境下的資料庫與其他資料庫架構不一致,或者,分散式資料庫上線,發現某些不可預知的原因,也會導致資料庫之間架構不一致等等。因此,在複雜的資料庫對象中,迅速全部找 ...
  • SQL 先說點廢話,很久沒發文了,整理了下自己當時入門 SQL 的筆記,無論用於入門,回顧,參考查詢,應該都是有一定價值的,可以按照目錄各取所需。SQL資料庫有很多,MySQL是一種,本文基本都是SQL通用標準,有些標準很不統一的地方就用MySQL的寫法了。希望本文幫你快速瞭解SQL的基本操作和概念 ...
  • 由於最近要開始深入的學習一下hbase,所以,先大概瞭解了hbase的基本架構,在此簡單的記錄一下。 Hbase的邏輯視圖 Hbase的物理存儲 HRegion Table中所有行都按照row key的字典序排列。 Table在行的方向上分割為多個HRegion。 HRegion按大小分割的,每個表 ...
  • 買了一個阿裡的伺服器,安裝的系統是CentOS7,在上面搭建一個資料庫系統,盡然花了一個早上的時間,記錄下最終的解決方案。 MYSQL5.7的安裝: 1.首先檢查伺服器上是否已經安裝了MYSQL的數據了。 如果已經安裝過mysql數據的話,需要卸載以前舊版的數據,否則容易引起衝突,導致後安裝失敗或者 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...