大數據介紹(一)

整理的一些關於大數據的知識,總分為三個方面,第一方面主要在於理論和理解,後面的方面在於操作和補充;希

望對想學大數據的你有點幫助

第一方面:

大數據離線分析

一般處理T+1數據

Hadoop 2.X:(common、HDFS、MapReduce、YARN)

Hadoop並不是什麼數據庫,也不是程序庫,甚至不是一個獨立產品。實際上,Hadoop是一些獨立模塊的組合,包括一個分佈式文件系統HDFS、一個分佈式數據庫HBase、

一個大型分佈式數據處理庫MapReduce,等等等等。做一個類比的話,就好像是Microsoft Office,其實我們並沒有一個叫做Office的應用,Office實際上指的是Word、Excel等一系列桌面應用的組合。

環境搭建,處理數據的思想

Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構。

Hadoop實現了一個分佈式文件系統(Hadoop Distributed File System),簡稱HDFS。

HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來訪問應用程序的數據,

適合那些有著超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)文件系統中的數據。

Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的數據提供了存儲,則MapReduce為海量的數據提供了計算。

優點:Hadoop是一個能夠對大量數據進行分佈式處理的軟件框架。它以一種可靠、高效、可伸縮(能夠處理PB級數據)的方式進行數據處理。

同時Hadoop是一個能夠讓用戶輕鬆架構合適用的分佈式計算機平臺,用戶還可以輕鬆地在Hadoop上開發和運行處理海量級的數據的應用程序。主要有以下優點:

高可靠性、高擴展性、高效性、高容錯性、低成本

核心架構:底層是Hadoop Distributed File System(HDFS),它存儲Hadoop集群中所有存儲節點上的文件。

HDFS(對於本文)的上一層

大數據介紹(一)

是MapReduce 引擎,該引擎由 JobTrackers 和 TaskTrackers 組成。通過對Hadoop分佈式計算平臺最核心的分佈式文件系統HDFS、

MapReduce處理過程,以及數據倉庫工具Hive和分佈式數據庫Hbase

Hadoop的框架最核心的設計就是HDFS,MapReduce和YARN為海量的數據提供了存儲和計算

common支持其他Hadoop模塊的通用工具;

HDFS主要是Hadoop的存儲,用於海量的數據的存儲;

MapReduce主要用於分佈式計算;

YARN是Hadoop中的資源管理系統

HDFS(心跳機制)是一個分佈式文件系統,具有高容錯的特點,它可以部署在廉價的通用硬件上,提供高吞吐率的數據訪問,適合那些需要處理海量數據集的應用程序。

主要特性

支持超大文件

一般是幾百MB,GB甚至是TB的文件

監測和快讀應對硬件故障

HDFS的檢測和冗餘機制很好地克服了大量硬件平臺上硬件故障的問題

流式數據訪問,

HDFS處理的數據規模都很大,應用一次需要訪問大量數據,同時,這些應用一般是批量處理,而不是用戶交互式處理,HDFS使用戶能夠以流的形式訪問數據集,注重的是數據的吞吐;

簡化一致性模型

大部分的HDFS程序操作文件時,需要一次寫入,多次讀取,在HDFS中,一個文件一旦經過創建寫入,關閉後一般不需要修改,這樣簡單的一致性模型有利於提高吞吐量。

HDFS不支持的場景:

低延遲數據訪問

大量的小文件

多用戶寫入文件,修改文件

Hadoop MapReduce是一個軟件框架,它可以輕鬆地編寫應用程序,在一個可靠的、容錯的方式中,以可靠的、容錯的方式處理大量的數據(數千個節點)

MapReduce是由Google公司研究提出的一種面向大規模數據處理的並行計算模型和方法,是Hadoop面向大數據並行處理的計算模型、框架和平臺

大數據介紹(一)

MapReduce(MR)是一個用來編寫處理並行分佈式數據程序的框架或庫。同 HDFS 一樣,它的架構也是基於主/從模式。“主機”是一個特殊的節點,負責協調多個工作節點之間的活動

MapReduce是處理大量半結構化數據集合的編程模型。編程模型是一種處理並結構化特定問題的方式。例如,在一個關係數據庫中,使用一種集合語言執行查詢,如SQL。告訴語言想要的結果,並將它提交給系統來計算出如何產生計算。還可以用更傳統的語言(C++,Java),一步步地來解決問題。這是兩種不同的編程模型,MapReduce就是另外一種。

MapReduce和Hadoop是相互獨立的,實際上又能相互配合工作得很好。

最簡單的 MapReduce應用程序至少包含 3 個部分:一個 Map 函數、一個 Reduce 函數和一個 main 函數。main 函數將作業控制和文件輸入/輸出結合起來。在這點上,Hadoop 提供了大量的接口和抽象類,從而為 Hadoop應用程序開發人員提供許多工具,可用於調試和性能度量等。

MapReduce 本身就是用於並行處理大數據集的軟件框架。MapReduce 的根源是函數性編程中的 map 和 reduce 函數。它由兩個可能包含有許多實例(許多 Map 和 Reduce)的操作組成。Map 函數接受一組數據並將其轉換為一個鍵/值對列表,輸入域中的每個元素對應一個鍵/值對。Reduce 函數接受 Map 函數生成的列表,

然後根據它們的鍵(為每個鍵生成一個鍵/值對)縮小鍵/值對列表。

YARN

YARN的基本思想是將資源管理和作業調度/監視的功能劃分為單獨的守護進程,其思想是擁有一個全局組員管理器(RM)和每個應用程序主(AM)。

資源者和NodeManager構成數據計算框架。資源管理器是在系統中的所有應用程序之間仲裁資源的最終權威。NodeManager是負責容器、監視它們的資源使用(cpu、內存、磁盤、網絡)並將其報告給ResourceManager/調度器的每個機器框架代理。

實際上,每個應用程序的ApplicationMaster是一個特定於框架的庫,它的任務是與來自ResourceManager的資源進行協商,並與NodeManager(s)一起工作,以執行和監視任務。

ResourceManager有兩個主要組件:調度器和ApplicationsManager。

調度器負責根據熟悉的容量、隊列等約束將資源分配給正在運行的應用程序。調度器是純粹的調度器,因為它不為應用程序執行監視或跟蹤狀態。此外,它也不能保證由於應用程序失敗或硬件故障而重新啟動失敗的任務。調度程序根據應用程序的資源需求執行調度功能;它是基於資源容器的抽象概念實現的,資源容器包含內存、cpu、磁盤、網絡等元素。

大數據介紹(一)

調度器有一個可插拔的策略,它負責將群集資源分配到各種隊列、應用程序等中。

ApplicationsManager負責接受作業提交,協商第一個容器來執行特定於應用程序的ApplicationMaster,並在失敗時提供重新啟動ApplicationMaster容器的服務。每個應用程序的應用程序管理員有責任從調度程序中協商適當的資源容器,跟蹤它們的狀態並監視進度

YARN支持通過儲備系統進行資源保留的概念,該組件允許用戶指定資源超時和時間限制的概要(例如,截止日期),並保留資源以確保重要任務的可預測執行。預訂系統跟蹤資源超時,執行預訂控制,並動態地指示底層調度程序以確保預訂已滿

為了使YARN的規模超過幾千個節點,YARN通過YARN聯合會的特性來支持聯合會的概念。聯邦允許透明地將多個YARN(子)簇連接在一起,並使它們作為單個的大型簇出現。這可以用於實現更大的規模,並/或允許多個獨立集群一起用於非常大的工作,或用於跨所有工作能力的租戶。

ARN是Hadoop 2.0的資源管理器。它是一個通用的資源管理系統,可為上層應用提供統一的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共享等方面帶來了巨大好處

Hive:

大數據數據倉庫

通過寫SQL對數據進行操作,類似於mysql數據庫中的sql

補充;

Hive是Hadoop的一個組價,作為數據庫,Hive的數據是儲存在Hadoop的文件系統中,Hive為Hadoop提供sql語句,是Hadoop可以通過sql語句操作文件系統中的數據。Hive是依賴於Hadoop而存在的

hive是建立在hadoop之上的一個工具,用於簡化一些BI統計。Hive能夠幫助用戶屏蔽掉複雜的mapreduce邏輯,而只需用戶使用簡單sql即可完成一定的查詢功能

Hive可以幫助開發者從現有的數據基礎架構轉移到Hadoop上,而這個基礎架構是基於傳統關係型數據庫和SQL的。Hive提供了Hive查詢語言,即HQL,它可以使用SQL方言查詢存儲在hadoop中的數據。

執行原理:

Hive本身不會生成java的mapreduce程序,而是通過XML文件 驅動執行內置的、原生的Mapper和Reducer。

使用場景:

Hive適合做:數據倉庫、應用程序、可以維護海量數據、對數據進行挖掘、形成意見和報表

Hive數據倉庫軟件便於使用sql在分佈式儲存中讀寫和管理大型數據。結構可以投影到存儲中的數據上,提供命令工具和驅動程序JDBC將用戶連接到Hive

缺點:

不支持記錄級別的更新、插入或者刪除;

查詢延遲比較嚴重

不支持事務

如果想要基於SQL還想具有上面的特性,可以直接使用hadoop提供的nosql數據庫——HBase

HBase

基於HDFS的NOSQL數據庫

面向列的存儲

補充:Hbase是一個分佈式的、面向列的開源數據庫

HBase – Hadoop Database,是一個高可靠性(多備份,分佈式)、高性能(比MapReduce的性能高出許多)、面向列(存儲模式是列族和列的存儲模型)、可伸縮(集群可伸縮性)的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

大數據為什麼選擇Hbase而不選擇傳統的數據庫?

Hbase性能非常高。HBase中存儲了一套HDFS的索引,通過表名->行健->列族->列限定符->時間版本這一套索引來定位數據的位置。正是因為HBase為每一列數據維護了一套索引規則,對於具體某一具體條數據的查詢可以非常快速的通過B+樹定位數據存儲位置並將其取出。

HBase通常以集群部署,數據被分散到多個節點存儲,當客戶端發起查詢請求的時候,集群裡面多個節點並行執行查詢操作,最後將不同節點的查詢結果進行合併返回給客戶端。

HBase運行在高可用環境中。HBase集群中任意一個節點宕機都不會導致集群癱瘓。這取決於兩方面原因,第一方面,ZooKeeper解決了HBase中心化問題。第二方面,HBase將數據存放在HDFS上面,HDFS的數據冗餘存放在不同節點,一個節點癱瘓可從其他節點取得數據,保證了HBase的高可用。

Hbase適合存儲大數據HBase默認一個列族可以存放64M或更大的數據。HBase可以通過配置文件對存儲的列族大小進行設置

Hbase是一個無模式的數據庫。HBase不同於傳統的關係型數據庫,使用HBase不需要預先定義表中有多少列,也不需要定義每一列存儲的數據類型,HBase在需要的時候可以動態增加列和指定存儲數據類型。對於從不同數據源爬取的數據不一致,可以動態的新增列而不需要預先就設計好存儲的表結構,以應對數據結構多種多樣的情況

協作框架:

sqoop(橋樑:HDFS 《==》RDBMS)

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

特徵:

Sqoop是一個用來將Hadoop和關係型數據庫中的數據相互轉移的工具,可以將一個關係型數據庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型數據庫中。

對於某些NoSQL數據庫它也提供了連接器。Sqoop,類似於其他ETL工具,使用元數據模型來判斷數據類型並在數據從數據源轉移到Hadoop時確保類型安全的數據處理。Sqoop專為大數據批量傳輸設計,能夠分割數據集並創建Hadoop任務來處理每個區塊。

Sqoop允許從結構化數據存儲(如關係數據庫、企業數據倉庫和NoSQL系統)輕鬆導入和導出數據。使用Sqoop,您可以在HDFS上從外部系統提供數據,並在Hive和HBase中填充表。Sqoop集成了Oozie,允許您調度和自動化導入和導出任務。Sqoop使用基於連接器的體系結構,該體系結構支持向新的外部系統提供連接的插件。

當您運行Sqoop時,在幕後發生的事情是非常簡單的。被傳輸的數據集被分割成不同的分區,一個只支持地圖的作業由負責傳輸數據集的每個映射器啟動。數據的每個記錄都以類型安全的方式處理,因為Sqoop使用數據庫元數據推斷數據類型

Sqoop還支持不同的數據格式來導入數據。例如,您可以通過簡單地指定一個選項——使用import命令的-avrodatafile來輕鬆導入Avro數據格式的數據

flume:收集日誌文件中信息

Flume是Cloudera提供的日誌收集系統,具有分佈式、高可靠、高可用性等特點,對海量日誌採集、聚合和傳輸,Flume支持在日誌系統中制定各類數據發送,同時,Flume提供對數據進行簡單處理,並寫到各種數接受方的能力。其設計的原理也是基於將數據流,如日誌數據從各種網站服務器上彙集起來存儲到HDFS,HBase等集中存儲器中。

特徵:

可靠性、可擴展性、可管理性

Flume的核心是把數據從數據源收集過來,在送到目的地,為了保證輸送一定成功,在送到目的地之前,會先緩存數據,待數據真正到達目的地後,刪除自己緩存的數據

Flume傳輸的數據基本單位是Event,如果是文本文件,通常是一行記錄,這也是事務的基本單位。Event從Source,流向Channel,再到Sink,本身為一個byte數組,並可攜帶headers信息。Event代表著一個數據流的最小完整單元,從外部數據源來,向外部的目的地去

Flume運行的核心是Agent。它是一個完整的數據收集工具,含有三個核心組件,分別是source、channel、sink。通過這些組件,Event可以從一個地方流向另外一個地方。

Flume NG架構的優勢:

NG在核心組件上進行了大規模的調整

大大降低了對用戶的要求,如用戶無需搭建ZooKeeper集群

有利於 Flume 和其他技術、hadoop 周邊組件的整合

在功能上更加強大、可擴展性更高

Flume架構核心組件:

source:source負責接收event或通過特殊機制產生event,並將events批量的放到一個或多個channel,source必須至少和一個channel關聯

不同類型的source:與系統集成的source: Syslog, Netcat;直接讀取文件的 source: ExecSource、SpoolSource;用於Agent和Agent之間通信的IPC Source: Avro、Thrift

channel:channel位於source和sink之間,用於緩存進來的event。當Sink成功的將event發送到下一跳的channel或最終目的時候,event從Channel移除。

幾種channel類型:MemoryChannel 可以實現高速的吞吐,但是無法保證數據的完整性;FileChannel(磁盤channel)保證數據的完整性與一致性。在具體配置FileChannel時,建議FileChannel設置的目錄和程序日誌文件保存的目錄設成不同的磁盤,以便提高效率

sink:Sink負責將event傳輸到下一跳或最終目的;sink在設置存儲數據時,可以向文件系統、數據庫、Hadoop存數據,在日誌數據較少時,可以將數據存儲在文件系統中,並且設定一定的時間間隔保存數據。在日誌數據較多時,可以將相應的日誌數據存儲到hadoop中,便於日後進行相應的數據分析。必須作用於一個確切的channel

調度框架anzkaban,瞭解:crontab(Linux自帶)、zeus(Alibaba)、Oozie(cloudera)

anzkaban:

Azkaban是一套簡單的任務調度服務,整體包括三部分webserver、dbserver、executorserver。

是linkin的開源項目,開發語言為Java。

Azkaban是由Linkedin開源的一個批量工作流任務調度器。用於在一個工作流內以一個特定的順序運行一組工作和流程。

Azkaban定義了一種KV文件格式來建立任務之間的依賴關係,並提供一個易於使用的web用戶界面維護和跟蹤你的工作流。

crontab(linux系統自帶):

root用戶和crontab文件的所有者

語法:

crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ]

zeus(Alibaba):

Zeus是Alibaba開源的一個完整的Hadoop的作業平臺,用於從Hadoop任務的調試運行到生產任務的週期調度。

宙斯支持任務的整個生命週期。從功能上來說,支持:

* Hadoop MapReduce任務的調試運行

* Hive任務的調試運行

* Shell任務的運行

* Hive元數據的可視化查詢與數據預覽

* Hadoop任務的自動調度

* 完整的文檔管理

Zeus是針對Hadoop集群任務定製的,通用性不強。

基於Python的工作流引擎

基於Python的工作流引擎優點是:

The DAG definition is code

因此可維護性,版本管理,可測性和協作性更好。

Oozie(cloudera):

Oozie是一個管理hadoop任務的工作流/協調系統。Oozie工作流中擁有多個Action,如Hadoop Map/Reuce job,Hadoop Pig job等,所有的Action以有向無環圖(DAG Direct Acyclic Graph)的模式部署運行。詳見:Hadoop工作流調度系統Oozie

Oozie的優點是與Hadoop生態圈結合緊密,比如:

有MapReduce的Action,定義一個mapreduce任務很方便,而且可以直接通過job id關聯到hadoop history頁面

Oozie任務的資源文件都必須存放在HDFS上

Action也方便擴展,比如添加自定義的任務類型或者報警方式

缺點是通過XML文件來定義DAG依賴,雖然支持的功能很多,比如分支,ok,failed節點,但是總感覺定義過於複雜,維護成本高。

擴展前沿框架:

kylin、impala、ElasticSearch(ES)

kylin:

特性:

可擴展超快OLAP引擎: Kylin是為減少在Hadoop/Spark上百億規模數據查詢延遲而Hadoop ANSI SQL 接口: Kylin為Hadoop提供標準SQL支持大部分查詢功能

交互式查詢能力: 通過Kylin,用戶可以與Hadoop數據進行亞秒級交互,在同樣的數據集上提供比Hive更好的性能

多維立方體(MOLAP Cube): 用戶能夠在Kylin裡為百億以上數據集定義數據模型並構建立方體

與BI工具無縫整合:Kylin提供與BI工具的整合能力,如Tableau,PowerBI/Excel,MSTR,QlikSense,Hue和SuperSet

其他特性:

Job管理與監控

壓縮與編碼

增量更新

利用HBase Coprocessor

基於HyperLogLog的Dinstinc Count近似算法

友好的web界面以管理,監控和使用立方體

項目及表級別的訪問控制安全

支持LDAP、SSO

kylin生態圈:

Kylin 核心:

Kylin OLAP引擎基礎框架,包括元數據(Metadata)引擎,查詢引擎,Job引擎及存儲引擎等,同時包括REST服務器以響應客戶端請求

擴展:支持額外功能和特性的插件

整合:

用戶界面:在Kylin核心之上擴展的第三方用戶界面

驅動:ODBC 和 JDBC 驅動以支持不同的工具和產品,比如Tableau

impala:

Impala是開源、原生分析數據庫。

Impala在Hadoop上提供了低延遲和高併發性的BI/解析查詢(不是由像Apache Hive這樣的批處理框架交付的)。Impala也線性擴展,即使在多租戶環境中也是如此。

使用與Hadoop部署相同的文件和數據格式、元數據、安全性和資源管理框架——沒有冗餘的基礎設施或數據轉換/複製。

對於Apache Hive用戶,Impala使用相同的元數據和ODBC驅動程序。與Hive一樣,Impala支持SQL,所以不必擔心重新發明實現輪。

使用Impala,更多的用戶,無論是使用SQL查詢還是BI應用程序,都可以通過單一的存儲庫與更多的數據進行交互,並通過分析從源存儲元數據。

ElasticSearch(ES)

ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,

並作為Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。

​後記:對於大部分轉行的人來說,找機會把自己的基礎知識補齊,邊工作邊補基礎知識,真心很重要。"我們相信人人都可以成為一個IT大神,現在開始,選擇一條陽光大道,助你入門,學習的路上不再迷茫。這裡是北京尚學堂,初學者轉行到IT行業的聚集地。


分享到:


相關文章: