摘要:大數(shù)據(jù)除了體積和速度外,數(shù)據(jù)的多樣性和準(zhǔn)確性也是大數(shù)據(jù)的一大特點(diǎn)。這些也被稱(chēng)為大數(shù)據(jù)的特征。介紹是一個(gè)解決大數(shù)據(jù)問(wèn)題的分布式可伸縮的框架。介紹計(jì)算的模型最早出現(xiàn)在谷歌的一篇研究論文中。相關(guān)鏈接介紹是一個(gè)通用的分布式編程框架。
本文作者:foochane?1 大數(shù)據(jù)簡(jiǎn)介
本文鏈接:https://foochane.cn/article/2019060601.html
大數(shù)據(jù)是這個(gè)時(shí)代最熱門(mén)的話題之一。但是什么是大數(shù)據(jù)呢?它描述了一個(gè)龐大的數(shù)據(jù)集,并且正在以驚人的速度增長(zhǎng)。大數(shù)據(jù)除了體積(Volume)和速度(velocity)外,數(shù)據(jù)的多樣性(variety)和準(zhǔn)確性(veracity)也是大數(shù)據(jù)的一大特點(diǎn)。讓我們?cè)敿?xì)討論體積、速度、多樣性和準(zhǔn)確性。這些也被稱(chēng)為大數(shù)據(jù)的4V特征。
1.1 Volume數(shù)據(jù)體積(Volume)指定要處理的數(shù)據(jù)量。對(duì)于大量數(shù)據(jù),我們需要大型機(jī)器或分布式系統(tǒng)。計(jì)算時(shí)間隨數(shù)據(jù)量的增加而增加。所以如果我們能并行化計(jì)算,最好使用分布式系統(tǒng)。數(shù)據(jù)可以是結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù)或介于兩者之間的數(shù)據(jù)。如果我們有非結(jié)構(gòu)化數(shù)據(jù),那么情況就會(huì)變得更加復(fù)雜和計(jì)算密集型。你可能會(huì)想,大數(shù)據(jù)到底有多大?這是一個(gè)有爭(zhēng)議的問(wèn)題。但一般來(lái)說(shuō),我們可以說(shuō),我們無(wú)法使用傳統(tǒng)系統(tǒng)處理的數(shù)據(jù)量被定義為大數(shù)據(jù)?,F(xiàn)在讓我們討論一下數(shù)據(jù)的速度。
1.2 Velocity越來(lái)越多的組織機(jī)構(gòu)開(kāi)始重視數(shù)據(jù)。每時(shí)每刻都在收集大量的數(shù)據(jù)。這意味著數(shù)據(jù)的速度在增加。一個(gè)系統(tǒng)如何處理這個(gè)速度?當(dāng)必須實(shí)時(shí)分析大量流入的數(shù)據(jù)時(shí),問(wèn)題就變得復(fù)雜了。許多系統(tǒng)正在開(kāi)發(fā),以處理這種巨大的數(shù)據(jù)流入。將傳統(tǒng)數(shù)據(jù)與大數(shù)據(jù)區(qū)別開(kāi)來(lái)的另一個(gè)因素是數(shù)據(jù)的多樣性。
1.3 Variety數(shù)據(jù)的多樣性使得它非常復(fù)雜,傳統(tǒng)的數(shù)據(jù)分析系統(tǒng)無(wú)法正確地分析它。我們說(shuō)的是哪一種?數(shù)據(jù)不就是數(shù)據(jù)嗎?圖像數(shù)據(jù)不同于表格數(shù)據(jù),因?yàn)樗慕M織和保存方式不同??梢允褂脽o(wú)限數(shù)量的文件系統(tǒng)。每個(gè)文件系統(tǒng)都需要一種不同的方法來(lái)處理它。讀取和寫(xiě)入JSON文件與處理CSV文件的方式不同?,F(xiàn)在,數(shù)據(jù)科學(xué)家必須處理數(shù)據(jù)類(lèi)型的組合。您將要處理的數(shù)據(jù)可能是圖片、視頻、文本等的組合。大數(shù)據(jù)的多樣性使得分析變得更加復(fù)雜。
1.4 Veracity你能想象一個(gè)邏輯錯(cuò)誤的計(jì)算機(jī)程序產(chǎn)生正確的輸出嗎?同樣,不準(zhǔn)確的數(shù)據(jù)將提供誤導(dǎo)的結(jié)果。準(zhǔn)確性,或數(shù)據(jù)正確性,是一個(gè)重要的問(wèn)題。對(duì)于大數(shù)據(jù),我們必須考慮數(shù)據(jù)的異常。
2 Hadoop 介紹Hadoop是一個(gè)解決大數(shù)據(jù)問(wèn)題的分布式、可伸縮的框架。Hadoop是由Doug Cutting和Mark Cafarella開(kāi)發(fā)的。Hadoop是用Java編寫(xiě)的。它可以安裝在一組商用硬件上,并且可以在分布式系統(tǒng)上水平擴(kuò)展。
在商品硬件上工作使它非常高效。如果我們的工作是在商品硬件,故障是一個(gè)不可避免的問(wèn)題。但是Hadoop為數(shù)據(jù)存儲(chǔ)和計(jì)算提供了一個(gè)容錯(cuò)系統(tǒng)。這種容錯(cuò)能力使得Hadoop非常流行。
Hadoop有兩個(gè)組件:第一個(gè)組件是HDFS(Hadoop Distributed File System),它是一個(gè)分布式文件系統(tǒng)。第二個(gè)組件是MapReduce。HDFS用于分布式數(shù)據(jù)存儲(chǔ),MapReduce用于對(duì)存儲(chǔ)在HDFS中的數(shù)據(jù)執(zhí)行計(jì)算。
2.1 HDFS介紹HDFS用于以分布式和容錯(cuò)的方式存儲(chǔ)大量數(shù)據(jù)。HDFS是用Java編寫(xiě)的,在普通硬件上運(yùn)行。它的靈感來(lái)自于谷歌文件系統(tǒng)(GFS)的谷歌研究論文。它是一個(gè)寫(xiě)一次讀多次的系統(tǒng),對(duì)大量的數(shù)據(jù)是有效的。HDFS有兩個(gè)組件NameNode和DataNode。
這兩個(gè)組件是Java守護(hù)進(jìn)程。NameNode負(fù)責(zé)維護(hù)分布在集群上的文件的元數(shù)據(jù),它是許多datanode的主節(jié)點(diǎn)。HDFS將大文件分成小塊,并將這些塊保存在不同的datanode上。實(shí)際的文件數(shù)據(jù)塊駐留在datanode上。HDFS提供了一組類(lèi)unix-shell的命令。但是,我們可以使用HDFS提供的Java filesystem API在更細(xì)的級(jí)別上處理大型文件。容錯(cuò)是通過(guò)復(fù)制數(shù)據(jù)塊來(lái)實(shí)現(xiàn)的。
我們可以使用并行的單線程進(jìn)程訪問(wèn)HDFS文件。HDFS提供了一個(gè)非常有用的實(shí)用程序,稱(chēng)為distcp,它通常用于以并行方式將數(shù)據(jù)從一個(gè)HDFS系統(tǒng)傳輸?shù)搅硪粋€(gè)HDFS系統(tǒng)。它使用并行映射任務(wù)復(fù)制數(shù)據(jù)。
2.2 MapReduce介紹計(jì)算的MapReduce模型最早出現(xiàn)在谷歌的一篇研究論文中。Hadoop的MapReduce是Hadoop框架的計(jì)算引擎,它在HDFS中對(duì)分布式數(shù)據(jù)進(jìn)行計(jì)算。MapReduce已被發(fā)現(xiàn)可以在商品硬件的分布式系統(tǒng)上進(jìn)行水平伸縮。它也適用于大問(wèn)題。在MapReduce中,問(wèn)題的解決分為Map階段和Reduce階段。在Map階段,處理數(shù)據(jù)塊,在Reduce階段,對(duì)Map階段的結(jié)果運(yùn)行聚合或縮減操作。Hadoop的MapReduce框架也是用Java編寫(xiě)的。
MapReduce是一個(gè)主從模型。在Hadoop 1中,這個(gè)MapReduce計(jì)算由兩個(gè)守護(hù)進(jìn)程Jobtracker和Tasktracker管理。Jobtracker是處理許多任務(wù)跟蹤器的主進(jìn)程。Tasktracker是Jobtracker的從節(jié)點(diǎn)。但在Hadoop 2中,Jobtracker和Tasktracker被YARN取代。
我們可以使用框架提供的API和Java編寫(xiě)MapReduce代碼。Hadoop streaming體模塊使具有Python和Ruby知識(shí)的程序員能夠編寫(xiě)MapReduce程序。
MapReduce算法有很多用途。如許多機(jī)器學(xué)習(xí)算法都被Apache Mahout實(shí)現(xiàn),它可以在Hadoop上通過(guò)Pig和Hive運(yùn)行。
但是MapReduce并不適合迭代算法。在每個(gè)Hadoop作業(yè)結(jié)束時(shí),MapReduce將數(shù)據(jù)保存到HDFS并為下一個(gè)作業(yè)再次讀取數(shù)據(jù)。我們知道,將數(shù)據(jù)讀入和寫(xiě)入文件是代價(jià)高昂的活動(dòng)。Apache Spark通過(guò)提供內(nèi)存中的數(shù)據(jù)持久性和計(jì)算,減輕了MapReduce的缺點(diǎn)。
3 Apache Hive 介紹更多關(guān)于Mapreduce 和 Mahout 可以查看如下網(wǎng)頁(yè):
https://www.usenix.org/legacy/publications/library/proceedings/osdi04/tech/full_papers/dean/dean_html/index.html
https://mahout.apache.org/users/basics/quickstart.html
計(jì)算機(jī)科學(xué)是一個(gè)抽象的世界。每個(gè)人都知道數(shù)據(jù)是以位的形式出現(xiàn)的信息。像C這樣的編程語(yǔ)言提供了對(duì)機(jī)器和匯編語(yǔ)言的抽象。其他高級(jí)語(yǔ)言提供了更多的抽象。結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language, SQL)就是這些抽象之一。世界各地的許多數(shù)據(jù)建模專(zhuān)家都在使用SQL。Hadoop非常適合大數(shù)據(jù)分析。那么,了解SQL的廣大用戶如何利用Hadoop在大數(shù)據(jù)上的計(jì)算能力呢?為了編寫(xiě)Hadoop的MapReduce程序,用戶必須知道可以用來(lái)編寫(xiě)Hadoop的MapReduce程序的編程語(yǔ)言。
現(xiàn)實(shí)世界中的日常問(wèn)題遵循一定的模式。一些問(wèn)題在日常生活中很常見(jiàn),比如數(shù)據(jù)操作、處理缺失值、數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)匯總。為這些日常問(wèn)題編寫(xiě)MapReduce代碼對(duì)于非程序員來(lái)說(shuō)是一項(xiàng)令人頭暈?zāi)垦5墓ぷ?。編?xiě)代碼來(lái)解決問(wèn)題不是一件很聰明的事情。但是編寫(xiě)具有性能可伸縮性和可擴(kuò)展性的高效代碼是有價(jià)值的。考慮到這個(gè)問(wèn)題,Apache Hive就在Facebook開(kāi)發(fā)出來(lái),它可以解決日常問(wèn)題,而不需要為一般問(wèn)題編寫(xiě)MapReduce代碼。
根據(jù)Hive wiki的語(yǔ)言,Hive是一個(gè)基于Apache Hadoop的數(shù)據(jù)倉(cāng)庫(kù)基礎(chǔ)設(shè)施。Hive有自己的SQL方言,稱(chēng)為Hive查詢語(yǔ)言。它被稱(chēng)為HiveQL,有時(shí)也稱(chēng)為HQL。使用HiveQL, Hive查詢HDFS中的數(shù)據(jù)。Hive不僅運(yùn)行在HDFS上,還運(yùn)行在Spark和其他大數(shù)據(jù)框架上,比如Apache Tez。
Hive為HDFS中的結(jié)構(gòu)化數(shù)據(jù)向用戶提供了類(lèi)似關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的抽象。您可以創(chuàng)建表并在其上運(yùn)行類(lèi)似sql的查詢。Hive將表模式保存在一些RDBMS中。Apache Derby是Apache Hive發(fā)行版附帶的默認(rèn)RDBMS。Apache Derby完全是用Java編寫(xiě)的,是Apache License Version 2.0附帶的開(kāi)源RDBMS。
HiveQL命令被轉(zhuǎn)換成Hadoop的MapReduce代碼,然后在Hadoop集群上運(yùn)行。
了解SQL的人可以輕松學(xué)習(xí)Apache Hive和HiveQL,并且可以在日常的大數(shù)據(jù)數(shù)據(jù)分析工作中使用Hadoop的存儲(chǔ)和計(jì)算能力。PySpark SQL也支持HiveQL。您可以在PySpark SQL中運(yùn)行HiveQL命令。除了執(zhí)行HiveQL查詢,您還可以直接從Hive讀取數(shù)據(jù)到PySpark SQL并將結(jié)果寫(xiě)入Hive
4 Apache Pig介紹相關(guān)鏈接:
https://cwiki.apache.org/confluence/display/Hive/Tutorial
https://db.apache.org/derby/
Apache Pig是一個(gè)數(shù)據(jù)流框架,用于對(duì)大量數(shù)據(jù)執(zhí)行數(shù)據(jù)分析。它是由雅虎開(kāi)發(fā)的,并向Apache軟件基金會(huì)開(kāi)放源代碼。它現(xiàn)在可以在Apache許可2.0版本下使用。Pig編程語(yǔ)言是一種Pig拉丁腳本語(yǔ)言。Pig松散地連接到Hadoop,這意味著我們可以將它連接到Hadoop并執(zhí)行許多分析。但是Pig可以與Apache Tez和Apache Spark等其他工具一起使用。
Apache Hive用作報(bào)告工具,其中Apache Pig用于提取、轉(zhuǎn)換和加載(ETL)。我們可以使用用戶定義函數(shù)(UDF)擴(kuò)展Pig的功能。用戶定義函數(shù)可以用多種語(yǔ)言編寫(xiě),包括Java、Python、Ruby、JavaScript、Groovy和Jython。
Apache Pig使用HDFS讀取和存儲(chǔ)數(shù)據(jù),Hadoop的MapReduce執(zhí)行算法。Apache Pig在使用Hadoop集群方面類(lèi)似于Apache Hive。在Hadoop上,Pig命令首先轉(zhuǎn)換為Hadoop的MapReduce代碼。然后將它們轉(zhuǎn)換為MapReduce代碼,該代碼運(yùn)行在Hadoop集群上。
Pig最好的部分是對(duì)代碼進(jìn)行優(yōu)化和測(cè)試,以處理日常問(wèn)題。所以用戶可以直接安裝Pig并開(kāi)始使用它。Pig提供了Grunt shell來(lái)運(yùn)行交互式的Pig命令。因此,任何了解Pig Latin的人都可以享受HDFS和MapReduce的好處,而不需要了解Java或Python等高級(jí)編程語(yǔ)言。
5 Apache Kafka 介紹相關(guān)鏈接
http://pig.apache.org/docs/
https://en.wikipedia.org/wiki/Pig_(programming_tool))
https://cwiki.apache.org/confluence/display/PIG/Index
Apache Kafka是一個(gè)發(fā)布-訂閱的分布式消息傳遞平臺(tái)。它由LinkedIn開(kāi)發(fā),并進(jìn)一步開(kāi)源給Apache基金會(huì)。它是容錯(cuò)的、可伸縮的和快速的。Kafka術(shù)語(yǔ)中的消息(數(shù)據(jù)的最小單位)通過(guò)Kafka服務(wù)器從生產(chǎn)者流向消費(fèi)者,并且可以在稍后的時(shí)間被持久化和使用。
Kafka提供了一個(gè)內(nèi)置的API,開(kāi)發(fā)人員可以使用它來(lái)構(gòu)建他們的應(yīng)用程序。接下來(lái)我們討論Apache Kafka的三個(gè)主要組件。
5.1 ProducerKafka Producer 將消息生成到Kafka主題,它可以將數(shù)據(jù)發(fā)布到多個(gè)主題。
5.2 Broker這是運(yùn)行在專(zhuān)用機(jī)器上的Kafka服務(wù)器,消息由Producer推送到Broker。Broker將主題保存在不同的分區(qū)中,這些分區(qū)被復(fù)制到不同的Broker以處理錯(cuò)誤。它本質(zhì)上是無(wú)狀態(tài)的,因此使用者必須跟蹤它所消費(fèi)的消息。
5.3 ConsumerConsumer從Kafka代理獲取消息。記住,它獲取消息。Kafka Broker不會(huì)將消息推送給Consumer;相反,Consumer從Kafka Broker中提取數(shù)據(jù)。Consumer訂閱Kafka Broker上的一個(gè)或多個(gè)主題,并讀取消息。Broker還跟蹤它所使用的所有消息。數(shù)據(jù)將在Broker中保存指定的時(shí)間。如果使用者失敗,它可以在重新啟動(dòng)后獲取數(shù)據(jù)。
6 Apache Spark介紹相關(guān)鏈接:
https://kafka.apache.org/docu...
https://kafka.apache.org/quic...
Apache Spark是一個(gè)通用的分布式編程框架。它被認(rèn)為非常適合迭代和批處理數(shù)據(jù)。它是在AMP實(shí)驗(yàn)室開(kāi)發(fā)的,它提供了一個(gè)內(nèi)存計(jì)算框架。它是開(kāi)源軟件。一方面,它最適合批量處理,另一方面,它對(duì)實(shí)時(shí)或接近實(shí)時(shí)的數(shù)據(jù)非常有效。機(jī)器學(xué)習(xí)和圖形算法本質(zhì)上是迭代的,這就是Spark的神奇之處。根據(jù)它的研究論文,它比它的同行Hadoop快得多。數(shù)據(jù)可以緩存在內(nèi)存中。在迭代算法中緩存中間數(shù)據(jù)提供了驚人的快速處理。Spark可以使用Java、Scala、Python和R進(jìn)行編程。
如果您認(rèn)為Spark是經(jīng)過(guò)改進(jìn)的Hadoop,在某種程度上,確實(shí)是可以這么認(rèn)為的。因?yàn)槲覀兛梢栽赟park中實(shí)現(xiàn)MapReduce算法,所以Spark使用了HDFS的優(yōu)點(diǎn)。這意味著它可以從HDFS讀取數(shù)據(jù)并將數(shù)據(jù)存儲(chǔ)到HDFS,而且它可以有效地處理迭代計(jì)算,因?yàn)閿?shù)據(jù)可以保存在內(nèi)存中。除了內(nèi)存計(jì)算外,它還適用于交互式數(shù)據(jù)分析。
還有許多其他庫(kù)也位于PySpark之上,以便更容易地使用PySpark。下面我們將討論一些:
MLlib: MLlib是PySpark核心的一個(gè)包裝器,它處理機(jī)器學(xué)習(xí)算法。MLlib庫(kù)提供的機(jī)器學(xué)習(xí)api非常容易使用。MLlib支持多種機(jī)器學(xué)習(xí)算法,包括分類(lèi)、聚類(lèi)、文本分析等等。
ML: ML也是一個(gè)位于PySpark核心的機(jī)器學(xué)習(xí)庫(kù)。ML的機(jī)器學(xué)習(xí)api可以用于數(shù)據(jù)流。
GraphFrames: GraphFrames庫(kù)提供了一組api,可以使用PySpark core和PySpark SQL高效地進(jìn)行圖形分析。
7 PySpark SQL介紹數(shù)據(jù)科學(xué)家處理的大多數(shù)數(shù)據(jù)在本質(zhì)上要么是結(jié)構(gòu)化的,要么是半結(jié)構(gòu)化的。為了處理結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù)集,PySpark SQL模塊是該P(yáng)ySpark核心之上的更高級(jí)別抽象。我們將在整本書(shū)中學(xué)習(xí)PySpark SQL。它內(nèi)置在PySpark中,這意味著它不需要任何額外的安裝。
使用PySpark SQL,您可以從許多源讀取數(shù)據(jù)。PySpark SQL支持從許多文件格式系統(tǒng)讀取,包括文本文件、CSV、ORC、Parquet、JSON等。您可以從關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)讀取數(shù)據(jù),如MySQL和PostgreSQL。您還可以將分析報(bào)告保存到許多系統(tǒng)和文件格式。
7.1 DataFramesDataFrames是一種抽象,類(lèi)似于關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中的表。它們由指定的列組成。DataFrames是行對(duì)象的集合,這些對(duì)象在PySpark SQL中定義。DataFrames也由指定的列對(duì)象組成。用戶知道表格形式的模式,因此很容易對(duì)數(shù)據(jù)流進(jìn)行操作。
DataFrame?列中的元素將具有相同的數(shù)據(jù)類(lèi)型。DataFrame?中的行可能由不同數(shù)據(jù)類(lèi)型的元素組成?;緮?shù)據(jù)結(jié)構(gòu)稱(chēng)為彈性分布式數(shù)據(jù)集(RDD)。數(shù)據(jù)流是RDD上的包裝器。它們是RDD或row對(duì)象。
7.2 SparkSession相關(guān)鏈接:
https://spark.apache.org/docs/latest/sql-programming-guide.html
SparkSession對(duì)象是替換SQLContext和HiveContext的入口點(diǎn)。為了使PySpark SQL代碼與以前的版本兼容,SQLContext和HiveContext將繼續(xù)在PySpark中運(yùn)行。在PySpark控制臺(tái)中,我們獲得了SparkSession對(duì)象。我們可以使用以下代碼創(chuàng)建SparkSession對(duì)象。
為了創(chuàng)建SparkSession對(duì)象,我們必須導(dǎo)入SparkSession,如下所示。
from pyspark.sql import SparkSession
導(dǎo)入SparkSession后,我們可以使用SparkSession.builder進(jìn)行操作:
spark = SparkSession.builder.appName("PythonSQLAPP") .getOrCreate()
appName函數(shù)將設(shè)置應(yīng)用程序的名稱(chēng)。函數(shù)的作用是:返回一個(gè)現(xiàn)有的SparkSession對(duì)象。如果不存在SparkSession對(duì)象,getOrCreate()函數(shù)將創(chuàng)建一個(gè)新對(duì)象并返回它。
7.3 Structured Streaming我們可以使用結(jié)構(gòu)化流框架(PySpark SQL的包裝器)進(jìn)行流數(shù)據(jù)分析。我們可以使用結(jié)構(gòu)化流以類(lèi)似的方式對(duì)流數(shù)據(jù)執(zhí)行分析,就像我們使用PySpark SQL對(duì)靜態(tài)數(shù)據(jù)執(zhí)行批處理分析一樣。正如Spark流模塊對(duì)小批執(zhí)行流操作一樣,結(jié)構(gòu)化流引擎也對(duì)小批執(zhí)行流操作。結(jié)構(gòu)化流最好的部分是它使用了類(lèi)似于PySpark SQL的API。因此,學(xué)習(xí)曲線很高。對(duì)數(shù)據(jù)流的操作進(jìn)行優(yōu)化,并以類(lèi)似的方式在性能上下文中優(yōu)化結(jié)構(gòu)化流API。
7.4 Catalyst OptimizerSQL是一種聲明性語(yǔ)言。使用SQL,我們告訴SQL引擎要做什么。我們不告訴它如何執(zhí)行任務(wù)。類(lèi)似地,PySpark SQL命令不會(huì)告訴它如何執(zhí)行任務(wù)。這些命令只告訴它要執(zhí)行什么。因此,PySpark SQL查詢?cè)趫?zhí)行任務(wù)時(shí)需要優(yōu)化。catalyst優(yōu)化器在PySpark SQL中執(zhí)行查詢優(yōu)化。PySpark SQL查詢被轉(zhuǎn)換為低級(jí)的彈性分布式數(shù)據(jù)集(RDD)操作。catalyst優(yōu)化器首先將PySpark SQL查詢轉(zhuǎn)換為邏輯計(jì)劃,然后將此邏輯計(jì)劃轉(zhuǎn)換為優(yōu)化的邏輯計(jì)劃。從這個(gè)優(yōu)化的邏輯計(jì)劃創(chuàng)建一個(gè)物理計(jì)劃。創(chuàng)建多個(gè)物理計(jì)劃。使用成本分析儀,選擇最優(yōu)的物理方案。最后,創(chuàng)建低層RDD操作代碼。
8 集群管理器(Cluster Managers)在分布式系統(tǒng)中,作業(yè)或應(yīng)用程序被分成不同的任務(wù),這些任務(wù)可以在集群中的不同機(jī)器上并行運(yùn)行。如果機(jī)器發(fā)生故障,您必須在另一臺(tái)機(jī)器上重新安排任務(wù)。
由于資源管理不善,分布式系統(tǒng)通常面臨可伸縮性問(wèn)題。考慮一個(gè)已經(jīng)在集群上運(yùn)行的作業(yè)。另一個(gè)人想做另一份工作。第二項(xiàng)工作必須等到第一項(xiàng)工作完成。但是這樣我們并沒(méi)有最優(yōu)地利用資源。資源管理很容易解釋?zhuān)呛茈y在分布式系統(tǒng)上實(shí)現(xiàn)。開(kāi)發(fā)集群管理器是為了優(yōu)化集群資源的管理。有三個(gè)集群管理器可用于Spark單機(jī)、Apache Mesos和YARN。這些集群管理器最好的部分是,它們?cè)谟脩艉图褐g提供了一個(gè)抽象層。由于集群管理器提供的抽象,用戶體驗(yàn)就像在一臺(tái)機(jī)器上工作,盡管他們?cè)诩荷瞎ぷ?。集群管理器將集群資源調(diào)度到正在運(yùn)行的應(yīng)用程序。
8.1 單機(jī)集群管理器(Standalone Cluster Manager)Apache Spark附帶一個(gè)單機(jī)集群管理器。它提供了一個(gè)主從架構(gòu)來(lái)激發(fā)集群。它是一個(gè)只使用spark的集群管理器。您只能使用這個(gè)獨(dú)立的集群管理器運(yùn)行Spark應(yīng)用程序。它的組件是主組件和工作組件。工人是主過(guò)程的奴隸,它是最簡(jiǎn)單的集群管理器。可以使用Spark的sbin目錄中的腳本配置Spark獨(dú)立集群管理器。
8.2 Apache Mesos集群管理器(Apache Mesos Cluster Manager)Apache Mesos是一個(gè)通用的集群管理器。它是在加州大學(xué)伯克利分校的AMP實(shí)驗(yàn)室開(kāi)發(fā)的。Apache Mesos幫助分布式解決方案有效地?cái)U(kuò)展。您可以使用Mesos在同一個(gè)集群上使用不同的框架運(yùn)行不同的應(yīng)用程序。來(lái)自不同框架的不同應(yīng)用程序的含義是什么?這意味著您可以在Mesos上同時(shí)運(yùn)行Hadoop應(yīng)用程序和Spark應(yīng)用程序。當(dāng)多個(gè)應(yīng)用程序在Mesos上運(yùn)行時(shí),它們共享集群的資源。Apache Mesos有兩個(gè)重要組件:主組件和從組件。這種主從架構(gòu)類(lèi)似于Spark獨(dú)立集群管理器。運(yùn)行在Mesos上的應(yīng)用程序稱(chēng)為框架。奴隸告訴主人作為資源提供的可用資源。從機(jī)定期提供資源。主服務(wù)器的分配模塊決定哪個(gè)框架獲取資源。
8.3 YARN 集群管理器(YARN Cluster Manager)YARN代表著另一個(gè)資源談判者(Resource Negotiator)。在Hadoop 2中引入了YARN來(lái)擴(kuò)展Hadoop。資源管理與作業(yè)管理分離。分離這兩個(gè)組件使Hadoop的伸縮性更好。YARN的主要成分是資源管理器(Resource Manager)、應(yīng)用程序管理器(Application Master)和節(jié)點(diǎn)管理器(Node Manager)。有一個(gè)全局資源管理器,每個(gè)集群將運(yùn)行許多節(jié)點(diǎn)管理器。節(jié)點(diǎn)管理器是資源管理器的奴隸。調(diào)度程序是ResourceManager的組件,它為集群上的不同應(yīng)用程序分配資源。最棒的部分是,您可以在YARN管理的集群上同時(shí)運(yùn)行Spark應(yīng)用程序和任何其他應(yīng)用程序,如Hadoop或MPI。每個(gè)應(yīng)用程序有一個(gè)application master,它處理在分布式系統(tǒng)上并行運(yùn)行的任務(wù)。另外,Hadoop和Spark有它們自己的ApplicationMaster。
9 PostgreSQL介紹相關(guān)鏈接:
https://spark.apache.org/docs/2.0.0/spark-standalone.html
https://spark.apache.org/docs/2.0.0/running-on-mesos.html
https://spark.apache.org/docs/2.0.0/running-on-yarn.html
關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)在許多組織中仍然非常常見(jiàn)。這里的關(guān)系是什么意思?關(guān)系表。PostgreSQL是一個(gè)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。它可以運(yùn)行在所有主要的操作系統(tǒng)上,比如Microsoft Windows、基于unix的操作系統(tǒng)、MacOS X等等。它是一個(gè)開(kāi)源程序,代碼在PostgreSQL許可下可用。因此,您可以自由地使用它,并根據(jù)您的需求進(jìn)行修改。
PostgreSQL數(shù)據(jù)庫(kù)可以通過(guò)其他編程語(yǔ)言(如Java、Perl、Python、C和c++)和許多其他語(yǔ)言(通過(guò)不同的編程接口)連接。還可以使用與PL/SQL類(lèi)似的過(guò)程編程語(yǔ)言PL/pgSQL(過(guò)程語(yǔ)言/PostgreSQL)對(duì)其進(jìn)行編程。您可以向該數(shù)據(jù)庫(kù)添加自定義函數(shù)。您可以用C/ c++和其他編程語(yǔ)言編寫(xiě)自定義函數(shù)。您還可以使用JDBC連接器從PySpark SQL中讀取PostgreSQL中的數(shù)據(jù)。
PostgreSQL遵循ACID(Atomicity, Consistency, Isolation and
Durability/原子性、一致性、隔離性和持久性)原則。它具有許多特性,其中一些是PostgreSQL獨(dú)有的。它支持可更新視圖、事務(wù)完整性、復(fù)雜查詢、觸發(fā)器等。PostgreSQL使用多版本并發(fā)控制模型進(jìn)行并發(fā)管理。
PostgreSQL得到了廣泛的社區(qū)支持。PostgreSQL被設(shè)計(jì)和開(kāi)發(fā)為可擴(kuò)展的。
10 MongoDB介紹相關(guān)鏈接:
https://wiki.postgresql.org/wiki/Main_Page
https://en.wikipedia.org/wiki/PostgreSQL
https://en.wikipedia.org/wiki/Multiversion_concurrency_control
http://postgresguide.com/
MongoDB是一個(gè)基于文檔的NoSQL數(shù)據(jù)庫(kù)。它是一個(gè)開(kāi)放源碼的分布式數(shù)據(jù)庫(kù),由MongoDB公司開(kāi)發(fā)。MongoDB是用c++編寫(xiě)的,它是水平伸縮的。許多組織將其用于后端數(shù)據(jù)庫(kù)和許多其他用途。
MongoDB附帶一個(gè)mongo shell,這是一個(gè)到MongoDB服務(wù)器的JavaScript接口。mongo shell可以用來(lái)運(yùn)行查詢以及執(zhí)行管理任務(wù)。在mongo shell上,我們也可以運(yùn)行JavaScript代碼。
使用PySpark SQL,我們可以從MongoDB讀取數(shù)據(jù)并執(zhí)行分析。我們也可以寫(xiě)出結(jié)果。
11 Cassandra介紹相關(guān)鏈接:
https://docs.mongodb.com/
Cassandra是開(kāi)放源碼的分布式數(shù)據(jù)庫(kù),附帶Apache許可證。這是一個(gè)由Facebook開(kāi)發(fā)的NoSQL數(shù)據(jù)庫(kù)。它是水平可伸縮的,最適合處理結(jié)構(gòu)化數(shù)據(jù)。它提供了高水平的一致性,并且具有可調(diào)的一致性。它沒(méi)有一個(gè)單一的故障點(diǎn)。它使用對(duì)等的分布式體系結(jié)構(gòu)在不同的節(jié)點(diǎn)上復(fù)制數(shù)據(jù)。節(jié)點(diǎn)使用閑話協(xié)議交換信息。
相關(guān)鏈接:
https://www.datastax.com/resources/tutorials
http://cassandra.apache.org/doc/latest/
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/36032.html
摘要:全棧數(shù)據(jù)之門(mén)前言自強(qiáng)不息,厚德載物,自由之光,你是我的眼基礎(chǔ),從零開(kāi)始之門(mén)文件操作權(quán)限管理軟件安裝實(shí)戰(zhàn)經(jīng)驗(yàn)與,文本處理文本工具的使用家族的使用綜合案例數(shù)據(jù)工程,必備分析文件探索內(nèi)容探索交差并補(bǔ)其他常用的命令批量操作結(jié)語(yǔ)快捷鍵,之門(mén)提高效率光 showImg(https://segmentfault.com/img/bVK0aK?w=350&h=350); 全棧數(shù)據(jù)之門(mén) 前言 自強(qiáng)不息,...
摘要:經(jīng)過(guò)一段時(shí)間的說(shuō)句搜集,當(dāng)具備一定的數(shù)據(jù)量時(shí),你就可以用通過(guò)機(jī)器學(xué)習(xí)算法來(lái)執(zhí)行一些有用的分析并產(chǎn)生一些有價(jià)值的推薦了。 翻譯自?Google Cloud Platform 原文標(biāo)題:Using Machine Learning on Compute Engine to Make Product Recommendations 原文地址:https://cloud.google.com/...
摘要:如何改變智能城市物聯(lián)網(wǎng)來(lái)源愿碼內(nèi)容編輯愿碼連接每個(gè)程序員的故事網(wǎng)站愿碼愿景打造全學(xué)科系統(tǒng)免費(fèi)課程,助力小白用戶初級(jí)工程師成本免費(fèi)系統(tǒng)學(xué)習(xí)低成本進(jìn)階,幫助一線資深工程師成長(zhǎng)并利用自身優(yōu)勢(shì)創(chuàng)造睡后收入。 AI如何改變智能城市物聯(lián)網(wǎng)? showImg(https://segmentfault.com/img/remote/1460000018768732); 來(lái)源 | 愿碼(ChainDe...
閱讀 1244·2021-10-18 13:32
閱讀 2261·2021-09-24 09:47
閱讀 1307·2021-09-23 11:22
閱讀 2449·2019-08-30 14:06
閱讀 557·2019-08-30 12:48
閱讀 1985·2019-08-30 11:03
閱讀 508·2019-08-29 17:09
閱讀 2433·2019-08-29 14:10