總結(jié) | 最全的Spark基礎(chǔ)知識(shí)解答

總結(jié) | 最全的Spark基礎(chǔ)知識(shí)解答

2016-09-19中國(guó)統(tǒng)計(jì)網(wǎng)

1Spark基礎(chǔ)知識(shí)

1.Spark是什么?

UCBerkeley AMPlab所開源的類HadoopMapReduce的通用的并行計(jì)算框架校坑。

dfsSpark基于mapreduce算法實(shí)現(xiàn)的分布式計(jì)算埃撵,擁有HadoopMapReduce所具有的優(yōu)點(diǎn);但不同于MapReduce的是Job中間輸出和結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫HDFS抵屿,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的map reduce的算法。

2.Spark與Hadoop的對(duì)比(Spark的優(yōu)勢(shì))

1、Spark的中間數(shù)據(jù)放到內(nèi)存中,對(duì)于迭代運(yùn)算效率更高

2携御、Spark比Hadoop更通用

3柑营、Spark提供了統(tǒng)一的編程接口

4崔步、容錯(cuò)性– 在分布式數(shù)據(jù)集計(jì)算時(shí)通過(guò)checkpoint來(lái)實(shí)現(xiàn)容錯(cuò)

5铺呵、可用性– Spark通過(guò)提供豐富的Scala, Java,Python API及交互式Shell來(lái)提高可用性

3.Spark有那些組件

1、Spark Streaming:支持高吞吐量生均、支持容錯(cuò)的實(shí)時(shí)流數(shù)據(jù)處理

2、Spark SQL腥刹, Data frames: 結(jié)構(gòu)化數(shù)據(jù)查詢

3马胧、MLLib:Spark 生態(tài)系統(tǒng)里用來(lái)解決大數(shù)據(jù)機(jī)器學(xué)習(xí)問(wèn)題的模塊

4、GraphX是構(gòu)建于Spark上的圖計(jì)算模型

5衔峰、SparkR是一個(gè)R語(yǔ)言包佩脊,它提供了輕量級(jí)的方式使得可以在R語(yǔ)言中使用 Spark

2DataFrame相關(guān)知識(shí)點(diǎn)

1.DataFrame是什么?

DataFrame是一種以RDD為基礎(chǔ)的分布式數(shù)據(jù)集,類似于傳統(tǒng)數(shù)據(jù)庫(kù)中的二維表格垫卤。

2.DataFrame與RDD的主要區(qū)別在于?

DataFrame帶有schema元信息威彰,即DataFrame所表示的二維表數(shù)據(jù)集的每一列都帶有名稱和類型。這使得SparkSQL得以洞察更多的結(jié)構(gòu)信息穴肘,從而對(duì)藏于DataFrame背后的數(shù)據(jù)源以及作用于DataFrame之上的變換進(jìn)行了針對(duì)性的優(yōu)化歇盼,最終達(dá)到大幅提升運(yùn)行時(shí)效率的目標(biāo)。

反觀RDD评抚,由于無(wú)從得知所存數(shù)據(jù)元素的具體內(nèi)部結(jié)構(gòu)豹缀,Spark Core只能在stage層面進(jìn)行簡(jiǎn)單、通用的流水線優(yōu)化慨代。

3.DataFrame 特性

1邢笙、支持從KB到PB級(jí)的數(shù)據(jù)量

2、支持多種數(shù)據(jù)格式和多種存儲(chǔ)系統(tǒng)

3侍匙、通過(guò)Catalyst優(yōu)化器進(jìn)行先進(jìn)的優(yōu)化生成代碼

4氮惯、通過(guò)Spark無(wú)縫集成主流大數(shù)據(jù)工具與基礎(chǔ)設(shè)施

5、API支持Python想暗、Java妇汗、Scala和R語(yǔ)言

3RDD相關(guān)知識(shí)點(diǎn)

1.RDD,全稱為?

Resilient Distributed Datasets说莫,意為容錯(cuò)的铛纬、并行的數(shù)據(jù)結(jié)構(gòu),可以讓用戶顯式地將數(shù)據(jù)存儲(chǔ)到磁盤和內(nèi)存中唬滑,并能控制數(shù)據(jù)的分區(qū)告唆。同時(shí),RDD還提供了一組豐富的操作來(lái)操作這些數(shù)據(jù)晶密。

2.RDD的特點(diǎn)?

它是在集群節(jié)點(diǎn)上的不可變的擒悬、已分區(qū)的集合對(duì)象。

通過(guò)并行轉(zhuǎn)換的方式來(lái)創(chuàng)建如(map, filter, join, etc)稻艰。

失敗自動(dòng)重建懂牧。

可以控制存儲(chǔ)級(jí)別(內(nèi)存、磁盤等)來(lái)進(jìn)行重用。

必須是可序列化的僧凤。

是靜態(tài)類型的畜侦。

3.RDD核心概念

Client:客戶端進(jìn)程,負(fù)責(zé)提交作業(yè)到Master躯保。

Master:Standalone模式中主控節(jié)點(diǎn)旋膳,負(fù)責(zé)接收Client提交的作業(yè),管理Worker途事,并命令Worker啟動(dòng)分配Driver的資源和啟動(dòng)Executor的資源验懊。

Worker:Standalone模式中slave節(jié)點(diǎn)上的守護(hù)進(jìn)程,負(fù)責(zé)管理本節(jié)點(diǎn)的資源尸变,定期向Master匯報(bào)心跳义图,接收Master的命令,啟動(dòng)Driver和Executor召烂。

Driver: 一個(gè)Spark作業(yè)運(yùn)行時(shí)包括一個(gè)Driver進(jìn)程碱工,也是作業(yè)的主進(jìn)程,負(fù)責(zé)作業(yè)的解析奏夫、生成Stage并調(diào)度Task到Executor上痛垛。包括DAGScheduler,TaskScheduler桶蛔。

Executor:即真正執(zhí)行作業(yè)的地方匙头,一個(gè)集群一般包含多個(gè)Executor,每個(gè)Executor接收Driver的命令Launch Task仔雷,一個(gè)Executor可以執(zhí)行一到多個(gè)Task蹂析。

4.RDD常見術(shù)語(yǔ)

DAGScheduler: 實(shí)現(xiàn)將Spark作業(yè)分解成一到多個(gè)Stage,每個(gè)Stage根據(jù)RDD的Partition個(gè)數(shù)決定Task的個(gè)數(shù)碟婆,然后生成相應(yīng)的Task set放到TaskScheduler中电抚。

TaskScheduler:實(shí)現(xiàn)Task分配到Executor上執(zhí)行。

Task:運(yùn)行在Executor上的工作單元

Job:SparkContext提交的具體Action操作竖共,常和Action對(duì)應(yīng)

Stage:每個(gè)Job會(huì)被拆分很多組任務(wù)(task)蝙叛,每組任務(wù)被稱為Stage,也稱TaskSet

RDD:Resilient Distributed Datasets的簡(jiǎn)稱公给,彈性分布式數(shù)據(jù)集借帘,是Spark最核心的模塊和類

Transformation/Action:SparkAPI的兩種類型;Transformation返回值還是一個(gè)RDD,Action返回值不少一個(gè)RDD淌铐,而是一個(gè)Scala的集合;所有的Transformation都是采用的懶策略肺然,如果只是將Transformation提交是不會(huì)執(zhí)行計(jì)算的,計(jì)算只有在Action被提交時(shí)才會(huì)被觸發(fā)腿准。

DataFrame: 帶有Schema信息的RDD际起,主要是對(duì)結(jié)構(gòu)化數(shù)據(jù)的高度抽象。

DataSet:結(jié)合了DataFrame和RDD兩者的優(yōu)勢(shì),既允許用戶很方便的操作領(lǐng)域?qū)ο蠼滞志哂蠸QL執(zhí)行引擎的高效表現(xiàn)校翔。

5.RDD提供了兩種類型的操作:

transformation和action

1,transformation是得到一個(gè)新的RDD灾前,方式很多防症,比如從數(shù)據(jù)源生成一個(gè)新的RDD,從RDD生成一個(gè)新的RDD

2豫柬,action是得到一個(gè)值,或者一個(gè)結(jié)果(直接將RDD cache到內(nèi)存中)

3扑浸,所有的transformation都是采用的懶策略烧给,就是如果只是將transformation提交是不會(huì)執(zhí)行計(jì)算的,計(jì)算只有在action被提交的時(shí)候才被觸發(fā)

6.RDD中關(guān)于轉(zhuǎn)換(transformation)與動(dòng)作(action)的區(qū)別

transformation會(huì)生成新的RDD喝噪,而后者只是將RDD上某項(xiàng)操作的結(jié)果返回給程序础嫡,而不會(huì)生成新的RDD;無(wú)論執(zhí)行了多少次transformation操作,RDD都不會(huì)真正執(zhí)行運(yùn)算(記錄lineage)酝惧,只有當(dāng)action操作被執(zhí)行時(shí)榴鼎,運(yùn)算才會(huì)觸發(fā)。

7.RDD 與 DSM的最大不同是?

DSM(distributed shared memory)

RDD只能通過(guò)粗粒度轉(zhuǎn)換來(lái)創(chuàng)建晚唇,而DSM則允許對(duì)每個(gè)內(nèi)存位置上數(shù)據(jù)的讀和寫巫财。在這種定義下,DSM不僅包括了傳統(tǒng)的共享內(nèi)存系統(tǒng)哩陕,也包括了像提供了共享 DHT(distributed hash table) 的 Piccolo 以及分布式數(shù)據(jù)庫(kù)等平项。

8.RDD的優(yōu)勢(shì)?

1、高效的容錯(cuò)機(jī)制

2悍及、結(jié)點(diǎn)落后問(wèn)題的緩和 (mitigate straggler)

3闽瓢、批量操作

4、優(yōu)雅降級(jí) (degrade gracefully)

9.如何獲取RDD?

1心赶、從共享的文件系統(tǒng)獲取扣讼,(如:HDFS)

2、通過(guò)已存在的RDD轉(zhuǎn)換

3缨叫、將已存在scala集合(只要是Seq對(duì)象)并行化 椭符,通過(guò)調(diào)用SparkContext的parallelize方法實(shí)現(xiàn)

4、改變現(xiàn)有RDD的之久性;RDD是懶散耻姥,短暫的艰山。

10.RDD都需要包含以下四個(gè)部分

a.源數(shù)據(jù)分割后的數(shù)據(jù)塊,源代碼中的splits變量

b.關(guān)于“血統(tǒng)”的信息咏闪,源碼中的dependencies變量

c.一個(gè)計(jì)算函數(shù)(該RDD如何通過(guò)父RDD計(jì)算得到)曙搬,源碼中的iterator(split)和compute函數(shù)

d.一些關(guān)于如何分塊和數(shù)據(jù)存放位置的元信息,如源碼中的partitioner和preferredLocations0

11.RDD中將依賴的兩種類型

窄依賴(narrowdependencies)和寬依賴(widedependencies)。

窄依賴是指父RDD的每個(gè)分區(qū)都只被子RDD的一個(gè)分區(qū)所使用纵装。相應(yīng)的征讲,那么寬依賴就是指父RDD的分區(qū)被多個(gè)子RDD的分區(qū)所依賴。例如橡娄,map就是一種窄依賴诗箍,而join則會(huì)導(dǎo)致寬依賴

依賴關(guān)系分類的特性:

第一,窄依賴可以在某個(gè)計(jì)算節(jié)點(diǎn)上直接通過(guò)計(jì)算父RDD的某塊數(shù)據(jù)計(jì)算得到子RDD對(duì)應(yīng)的某塊數(shù)據(jù);

第二挽唉,數(shù)據(jù)丟失時(shí)滤祖,對(duì)于窄依賴只需要重新計(jì)算丟失的那一塊數(shù)據(jù)來(lái)恢復(fù);

Spark Streaming相關(guān)知識(shí)點(diǎn)

1.Spark Streaming的基本原理

Spark Streaming的基本原理是將輸入數(shù)據(jù)流以時(shí)間片(秒級(jí))為單位進(jìn)行拆分,然后以類似批處理的方式處理每個(gè)時(shí)間片數(shù)據(jù)

RDD 基本操作

常見的聚合操作:

count(*) 所有值不全為NULL時(shí)瓶籽,加1操作

count(1) 不管有沒有值匠童,只要有這條記錄,值就加1

count(col) col列里面的值為null塑顺,值不會(huì)加1汤求,這個(gè)列里面的值不為NULL,才加1

sum求和

sum(可轉(zhuǎn)成數(shù)字的值) 返回bigint

avg求平均值

avg(可轉(zhuǎn)成數(shù)字的值)返回double

distinct不同值個(gè)數(shù)

count(distinct col)

按照某些字段排序

select col1,other... from table where conditio order by col1,col2 [asc|desc]

Join表連接

join等值連接(內(nèi)連接)严拒,只有某個(gè)值在m和n中同時(shí)存在時(shí)扬绪。

left outer join 左外連接,左邊表中的值無(wú)論是否在b中存在時(shí)裤唠,都輸出;右邊表中的值挤牛,只有在左邊表中存在時(shí)才輸出。

right outer join 和 left outer join 相反种蘸。

Transformation具體內(nèi)容:

reduceByKey(func, [numTasks]) : 在一個(gè)(K赊颠,V)對(duì)的數(shù)據(jù)集上使用,返回一個(gè)(K劈彪,V)對(duì)的數(shù)據(jù)集竣蹦,key相同的值,都被使用指定的reduce函數(shù)聚合到一起沧奴。和groupbykey類似痘括,任務(wù)的個(gè)數(shù)是可以通過(guò)第二個(gè)可選參數(shù)來(lái)配置的。

join(otherDataset, [numTasks]) :在類型為(K,V)和(K,W)類型的數(shù)據(jù)集上調(diào)用滔吠,返回一個(gè)(K,(V,W))對(duì)纲菌,每個(gè)key中的所有元素都在一起的數(shù)據(jù)集

groupWith(otherDataset, [numTasks]) : 在類型為(K,V)和(K,W)類型的數(shù)據(jù)集上調(diào)用,返回一個(gè)數(shù)據(jù)集疮绷,組成元素為(K, Seq[V], Seq[W]) Tuples翰舌。這個(gè)操作在其它框架,稱為CoGroup

cartesian(otherDataset) : 笛卡爾積冬骚。但在數(shù)據(jù)集T和U上調(diào)用時(shí)椅贱,返回一個(gè)(T懂算,U)對(duì)的數(shù)據(jù)集,所有元素交互進(jìn)行笛卡爾積庇麦。

flatMap(func) :類似于map计技,但是每一個(gè)輸入元素,會(huì)被映射為0到多個(gè)輸出元素(因此山橄,func函數(shù)的返回值是一個(gè)Seq垮媒,而不是單一元素)

Case 1將一個(gè)list乘方后輸出

val input = sc.parallelize(List(1,2,3,4))

val result = input.map(x => x*x)

println(result.collect().mkString(","))

Case 2 wordcount

val textFile = sc.textFile(args(1))

val result = textFile.flatMap(line => line.split("\\s+")).map(word => (word, 1)).reduceByKey(_ + _)

println(result.collect().mkString(","))

result.saveAsTextFile(args(2))

Case 3 打印rdd的元素

rdd.foreach(println) 或者 rdd.map(println).

rdd.collect().foreach(println)

rdd.take(100).foreach(println)

spark SQL

Spark Streaming優(yōu)劣

優(yōu)勢(shì):

1、統(tǒng)一的開發(fā)接口

2航棱、吞吐和容錯(cuò)

3睡雇、多種開發(fā)范式混用,Streaming + SQL, Streaming +MLlib

4饮醇、利用Spark內(nèi)存pipeline計(jì)算

劣勢(shì):

微批處理模式它抱,準(zhǔn)實(shí)時(shí)

Storm結(jié)構(gòu):

DStream

1.將流式計(jì)算分解成一系列確定并且較小的批處理作業(yè)

2.將失敗或者執(zhí)行較慢的任務(wù)在其它節(jié)點(diǎn)上并行執(zhí)行,執(zhí)行的最小單元為RDD的partition

3.較強(qiáng)的容錯(cuò)能力

spark stream example code

4日志系統(tǒng)

1.Flume

Flume是一個(gè)分布式的日志收集系統(tǒng)驳阎,具有高可靠抗愁、高可用馁蒂、事務(wù)管理呵晚、失敗重啟等功能。數(shù)據(jù)處理速度快沫屡,完全可以用于生產(chǎn)環(huán)境饵隙。

Flume的核心是agent。

Agent是一個(gè)java進(jìn)程沮脖,運(yùn)行在日志收集端金矛,通過(guò)agent接收日志,然后暫存起來(lái)勺届,再發(fā)送到目的地驶俊。

Agent里面包含3個(gè)核心組件:source、channel免姿、sink饼酿。

Source組件是專用于收集日志的,可以處理各種類型各種格式的日志數(shù)據(jù),包括avro胚膊、thrift故俐、exec、jms紊婉、spoolingdirectory药版、netcat、sequencegenerator喻犁、syslog槽片、http何缓、legacy、自定義筐乳。source組件把數(shù)據(jù)收集來(lái)以后歌殃,臨時(shí)存放在channel中。

Channel組件是在agent中專用于臨時(shí)存儲(chǔ)數(shù)據(jù)的蝙云,可以存放在memory氓皱、jdbc、file勃刨、自定義波材。channel中的數(shù)據(jù)只有在sink發(fā)送成功之后才會(huì)被刪除。

Sink組件是用于把數(shù)據(jù)發(fā)送到目的地的組件身隐,目的地包括hdfs廷区、logger、avro贾铝、thrift隙轻、ipc、file垢揩、null玖绿、hbase、solr叁巨、自定義斑匪。

Apache Kafka是分布式發(fā)布-訂閱消息系統(tǒng)。

它最初由LinkedIn公司開發(fā)锋勺,之后成為Apache項(xiàng)目的一部分蚀瘸。Kafka是一種快速、可擴(kuò)展的庶橱、設(shè)計(jì)內(nèi)在就是分布式的贮勃,分區(qū)的和可復(fù)制的提交日志服務(wù)。

Apache Kafka與傳統(tǒng)消息系統(tǒng)相比苏章,有以下不同:

1寂嘉、它被設(shè)計(jì)為一個(gè)分布式系統(tǒng),易于向外擴(kuò)展;

2布近、它同時(shí)為發(fā)布和訂閱提供高吞吐量;

3垫释、它支持多訂閱者,當(dāng)失敗時(shí)能自動(dòng)平衡消費(fèi)者;

4撑瞧、它將消息持久化到磁盤棵譬,因此可用于批量消費(fèi)

5分布式搜索

搜索引擎是什么?

搜索引擎是指根據(jù)一定的策略、運(yùn)用特定的計(jì)算機(jī)程序從互聯(lián)網(wǎng)上搜集信息预伺,在對(duì)信息進(jìn)行組織和處理后订咸,為用戶提供檢索服務(wù)曼尊,將用戶檢索相關(guān)的信息展示給用戶的系統(tǒng)。搜索引擎包括全文索引脏嚷、目錄索引骆撇、元搜索引擎、垂直搜索引擎父叙、集合式搜索引擎神郊、門戶搜索引擎與免費(fèi)鏈接列表等。

Lucene是什么?

Lucene一個(gè)高性能趾唱、可伸縮的信息搜索庫(kù)涌乳,即它不是一個(gè)完整的全文檢索引擎,而是一個(gè)全檢索引擎的架構(gòu)甜癞,提供了完整的查詢引擎和索引引擎夕晓,部分文本分析引擎。

Elasticsearch是什么?

Elasticsearch一個(gè)高可擴(kuò)展的開源的全文本搜索和分析工具悠咱。

它允許你以近實(shí)時(shí)的方式快速存儲(chǔ)蒸辆、搜索、分析大容量的數(shù)據(jù)析既。Elasticsearch是一個(gè)基于ApacheLucene(TM)的開源搜索引擎躬贡。無(wú)論在開源還是專有領(lǐng)域,Lucene可以被認(rèn)為是迄今為止最先進(jìn)渡贾、性能最好的逗宜、功能最全的搜索引擎庫(kù)雄右。

ElasticSearch 有4中方式來(lái)構(gòu)建數(shù)據(jù)庫(kù)

最簡(jiǎn)單的方法是使用indexAPI空骚,將一個(gè)Document發(fā)送到特定的index,一般通過(guò)curltools實(shí)現(xiàn)擂仍。

第二第三種方法是通過(guò)bulkAPI和UDPbulkAPI囤屹。兩者的區(qū)別僅在于連接方式。

第四種方式是通過(guò)一個(gè)插件-river逢渔。river運(yùn)行在ElasticSearch上肋坚,并且可以從外部數(shù)據(jù)庫(kù)導(dǎo)入數(shù)據(jù)到ES中。需要注意的是肃廓,數(shù)據(jù)構(gòu)建僅在分片上進(jìn)行智厌,而不能在副本上進(jìn)行。

ELK是一套常用的開源日志監(jiān)控和分析系統(tǒng)

包括一個(gè)分布式索引與搜索服務(wù)Elasticsearch盲赊,一個(gè)管理日志和事件的工具logstash铣鹏,和一個(gè)數(shù)據(jù)可視化服務(wù)Kibana,logstash 負(fù)責(zé)日志的收集哀蘑,處理和儲(chǔ)存诚卸,elasticsearch 負(fù)責(zé)日志檢索和分析葵第,Kibana 負(fù)責(zé)日志的可視化。

6分布式數(shù)據(jù)庫(kù)

1.Hive是什么?

Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具合溺,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表卒密,并提供類SQL查詢功能。本質(zhì)是將HQL轉(zhuǎn)換為MapReduce程序

2.Hive的設(shè)計(jì)目標(biāo)?

1棠赛、Hive的設(shè)計(jì)目標(biāo)是使Hadoop上的數(shù)據(jù)操作與傳統(tǒng)SQL相結(jié)合哮奇,讓熟悉SQL編程開發(fā)人員能夠輕松向Hadoop平臺(tái)遷移

2、Hive提供類似SQL的查詢語(yǔ)言HQL睛约,HQL在底層被轉(zhuǎn)換為相應(yīng)的MapReduce操作

3屏镊、Hive在HDFS上構(gòu)建數(shù)據(jù)倉(cāng)庫(kù)來(lái)存儲(chǔ)結(jié)構(gòu)化的數(shù)據(jù),這些數(shù)據(jù)一般來(lái)源與HDFS上的原始數(shù)據(jù)痰腮,使用Hive可以對(duì)這些數(shù)據(jù)執(zhí)行查詢而芥、分析等操作。

3.Hive的數(shù)據(jù)模型

Hive數(shù)據(jù)庫(kù)

內(nèi)部表

外部表

分區(qū)

Hive的視圖

Hive在創(chuàng)建內(nèi)部表時(shí)膀值,會(huì)將數(shù)據(jù)移動(dòng)到數(shù)據(jù)倉(cāng)庫(kù)指向的路徑棍丐,若創(chuàng)建外部表,僅記錄數(shù)據(jù)所在的路徑沧踏,不對(duì)數(shù)據(jù)位置做任何改變歌逢,在刪除表的時(shí)候,內(nèi)部表的元數(shù)據(jù)和數(shù)據(jù)會(huì)被一起刪除翘狱,外部表只會(huì)刪除元數(shù)據(jù)秘案,不刪除數(shù)據(jù)。這樣來(lái)說(shuō)潦匈,外部表要比內(nèi)部表安全阱高,數(shù)據(jù)組織液更加靈活,方便共享源數(shù)據(jù)茬缩。

4.Hive的調(diào)用方式

1赤惊、Hive Shell

2、Thrift

3凰锡、JDBC

4未舟、ODBC

5.Hive的運(yùn)行機(jī)制

1、將sql轉(zhuǎn)換成抽象語(yǔ)法樹

2掂为、將抽象語(yǔ)法樹轉(zhuǎn)化成查詢塊

3裕膀、將查詢塊轉(zhuǎn)換成邏輯查詢計(jì)劃(操作符樹)

4、將邏輯計(jì)劃轉(zhuǎn)換成物理計(jì)劃(M\Rjobs)

6.Hive的優(yōu)勢(shì)

1勇哗、并行計(jì)算

2昼扛、充分利用集群的CPU計(jì)算資源、存儲(chǔ)資源

3智绸、處理大規(guī)模數(shù)據(jù)集

4野揪、使用SQL访忿,學(xué)習(xí)成本低

7.Hive應(yīng)用場(chǎng)景

1、海量數(shù)據(jù)處理

2斯稳、數(shù)據(jù)挖掘

3海铆、數(shù)據(jù)分析

4、SQL是商務(wù)智能工具的通用語(yǔ)言挣惰,Hive有條件和這些BI產(chǎn)品進(jìn)行集成

8.Hive不適用場(chǎng)景

1卧斟、復(fù)雜的科學(xué)計(jì)算

2、不能做到交互式的實(shí)時(shí)查詢

9.Hive和數(shù)據(jù)庫(kù)(RDBMS)的區(qū)別

1憎茂、數(shù)據(jù)存儲(chǔ)位置珍语。Hive是建立在Hadoop之上的,所有的Hive的數(shù)據(jù)都是存儲(chǔ)在HDFS中的竖幔。而數(shù)據(jù)庫(kù)則可以將數(shù)據(jù)保存在塊設(shè)備或本地文件系統(tǒng)中板乙。

2、數(shù)據(jù)格式拳氢。Hive中沒有定義專門的數(shù)據(jù)格式募逞,由用戶指定,需要指定三個(gè)屬性:列分隔符馋评,行分隔符放接,以及讀取文件數(shù)據(jù)的方法。數(shù)據(jù)庫(kù)中留特,存儲(chǔ)引擎定義了自己的數(shù)據(jù)格式纠脾。所有數(shù)據(jù)都會(huì)按照一定的組織存儲(chǔ)。

3蜕青、數(shù)據(jù)更新苟蹈。Hive的內(nèi)容是讀多寫少的,因此市咆,不支持對(duì)數(shù)據(jù)的改寫和刪除汉操,數(shù)據(jù)都在加載的時(shí)候中確定好的再来。數(shù)據(jù)庫(kù)中的數(shù)據(jù)通常是需要經(jīng)常進(jìn)行修改蒙兰。

4、執(zhí)行延遲芒篷。Hive在查詢數(shù)據(jù)的時(shí)候搜变,需要掃描整個(gè)表(或分區(qū)),因此延遲較高针炉,只有在處理大數(shù)據(jù)是才有優(yōu)勢(shì)挠他。數(shù)據(jù)庫(kù)在處理小數(shù)據(jù)是執(zhí)行延遲較低。

5篡帕、索引殖侵。Hive沒有贸呢,數(shù)據(jù)庫(kù)有

6、執(zhí)行拢军。Hive是MapReduce楞陷,數(shù)據(jù)庫(kù)是Executor

7、可擴(kuò)展性茉唉。Hive高固蛾,數(shù)據(jù)庫(kù)低

8、數(shù)據(jù)規(guī)模度陆。Hive大艾凯,數(shù)據(jù)庫(kù)小

hive代碼簡(jiǎn)單例子:

創(chuàng)建一個(gè)名為”test“的table

create table students (name string,age int,city string,class string) row format delimited fields terminated by ',';

load data local inpath "/opt/students.txt" into table students;

create EXTERNAL table IF NOT EXISTS studentX (name string,age int,city string,class string) partitioned by (grade string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

alter table studentX add partition (grade='excellent') location '/testM/excellent/';

alter table studentX add partition (grade='good') location '/testM/good/';

alter table studentX add partition (grade='moderate') location '/testM/moderate/';

#加載數(shù)據(jù)

load data inpath "/testtry/studentsm.txt" into table studentX partition (grade='excellent');

load data inpath "/testtry/students.txt" into table studentX partition (grade='good');

show partitions studentX;

select * from studentX where grade='excellent';

表刪除操作:drop table students;

創(chuàng)建一個(gè)名為”test“的table

create table students (name string,age int,city string,class string) row format delimited fields terminated by ',';

load data local inpath "/bin/students.txt" into table students;

###

練習(xí):創(chuàng)建外部表,指定數(shù)據(jù)存放位置

create EXTERNAL table IF NOT EXISTS studentX (name string,age int,city string,class string) partitioned by (class string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

alter table test add partition (class='one') location '/testmore/one';

對(duì)表進(jìn)行查詢

Select * from students;

分區(qū)表操作

hive>create table students (name string,age int,city string,class string) partitioned by (class string) row format delimited fields terminated by ',';

hive>load data local inpath "students.txt" into table students partition (class='one');

hive>show partitions students;

hive>select * from students where grade='two';

查詢操作

group by懂傀、 order by趾诗、 join 、 distribute by蹬蚁、 sort by沧竟、 clusrer by、 union all

hive常見操作

Hbase 的模塊:

原子性(是指不會(huì)被線程調(diào)度機(jī)制打斷的操作缚忧,這種操作一旦開始悟泵,就一直運(yùn)行到結(jié)束,中間不會(huì)有任何contextswitch(切換到領(lǐng)一個(gè)線程))闪水,一致性糕非,隔離性,持久性

Region- Region用于存放表中的行數(shù)據(jù)

Region Server

Master

Zookeeper

HDFS

API

列式存儲(chǔ)格式 Parquet

Parquet 是面向分析型業(yè)務(wù)的列式存儲(chǔ)格式球榆,由 Twitter 和 Cloudera 合作開發(fā)朽肥, 2015 年 5 月從 Apache 的孵化器里畢業(yè)成為 Apache 頂級(jí)項(xiàng)目,最新的版本是 1.8.0 持钉。

列式存儲(chǔ)和行式存儲(chǔ)相比的優(yōu)勢(shì) :

可以跳過(guò)不符合條件的數(shù)據(jù)衡招,只讀取需要的數(shù)據(jù),降低 IO 數(shù)據(jù)量每强。

壓縮編碼可以降低磁盤存儲(chǔ)空間始腾。由于同一列的數(shù)據(jù)類型是一樣的,可以使用更高效的壓縮編碼(例如 Run Length Encoding 和 DeltaEncoding )進(jìn)一步節(jié)約存儲(chǔ)空間空执。

只讀取需要的列浪箭,支持向量運(yùn)算,能夠獲取更好的掃描性能辨绊。

Hive操作

Hive

7其他知識(shí)點(diǎn)

MLlib是spark的可以擴(kuò)展的機(jī)器學(xué)習(xí)庫(kù)奶栖,由以下部分組成:通用的學(xué)習(xí)算法和工具類,包括分類,回歸宣鄙,聚類袍镀,協(xié)同過(guò)濾,降維冻晤。

數(shù)據(jù)分析常見模式:

1流椒、Iterative Algorithms,

2明也、Relational Queries宣虾,

3、MapReduce温数,

4绣硝、Stream Processing

Scala的好處:

1、面向?qū)ο蠛秃瘮?shù)式編程理念加入到靜態(tài)類型語(yǔ)言中的混合體

2撑刺、Scala的兼容性—-能夠與Java庫(kù)無(wú)縫的交互

3鹉胖、Scala的簡(jiǎn)潔性—-高效,更不容易犯錯(cuò)

4够傍、Scala的高級(jí)抽象

5甫菠、Scala是靜態(tài)類型—-類型推斷

6、Scala是可擴(kuò)展的語(yǔ)言

ElasticSearch 基礎(chǔ)代碼:

8基礎(chǔ)問(wèn)答題

Q:你理解的Hive和傳統(tǒng)數(shù)據(jù)庫(kù)有什么不同?各有什么試用場(chǎng)景冕屯。

A:1寂诱、數(shù)據(jù)存儲(chǔ)位置。Hive是建立在Hadoop之上的安聘,所有的Hive的數(shù)據(jù)都是存儲(chǔ)在HDFS中的痰洒。而數(shù)據(jù)庫(kù)則可以將數(shù)據(jù)保存在塊設(shè)備或本地文件系統(tǒng)中。

2浴韭、數(shù)據(jù)格式丘喻。Hive中沒有定義專門的數(shù)據(jù)格式,由用戶指定念颈,需要指定三個(gè)屬性:列分隔符泉粉,行分隔符,以及讀取文件數(shù)據(jù)的方法榴芳。數(shù)據(jù)庫(kù)中嗡靡,存儲(chǔ)引擎定義了自己的數(shù)據(jù)格式。所有數(shù)據(jù)都會(huì)按照一定的組織存儲(chǔ)翠语。

3叽躯、數(shù)據(jù)更新。Hive的內(nèi)容是讀多寫少的肌括,因此,不支持對(duì)數(shù)據(jù)的改寫和刪除,數(shù)據(jù)都在加載的時(shí)候中確定好的谍夭。數(shù)據(jù)庫(kù)中的數(shù)據(jù)通常是需要經(jīng)常進(jìn)行修改黑滴。

4、執(zhí)行延遲紧索。Hive在查詢數(shù)據(jù)的時(shí)候袁辈,需要掃描整個(gè)表(或分區(qū)),因此延遲較高珠漂,只有在處理大數(shù)據(jù)是才有優(yōu)勢(shì)晚缩。數(shù)據(jù)庫(kù)在處理小數(shù)據(jù)是執(zhí)行延遲較低。

5媳危、索引荞彼。Hive沒有,數(shù)據(jù)庫(kù)有

6待笑、執(zhí)行鸣皂。Hive是MapReduce,數(shù)據(jù)庫(kù)是Executor

7暮蹂、可擴(kuò)展性寞缝。Hive高,數(shù)據(jù)庫(kù)低

8仰泻、數(shù)據(jù)規(guī)模荆陆。Hive大,數(shù)據(jù)庫(kù)小

Q:Hive的實(shí)用場(chǎng)景

A:1集侯、Data Ingestion (數(shù)據(jù)攝取)

2慎宾、Data Discovery(數(shù)據(jù)發(fā)現(xiàn))

3、Data analytics(數(shù)據(jù)分析)

4浅悉、Data Visualization & Collaboration(數(shù)據(jù)可視化和協(xié)同開發(fā))

Q:大數(shù)據(jù)分析與挖掘方法論被稱為CRISP-DM方法是以數(shù)據(jù)為中心迭代循環(huán)進(jìn)行的六步活動(dòng)

A:它們分別是:商業(yè)理解趟据、數(shù)據(jù)理解、數(shù)據(jù)準(zhǔn)備术健、建立模型_汹碱、模型評(píng)估、結(jié)果部署_荞估。

Q:數(shù)據(jù)分析挖掘方法大致包含 ( ):

A:1.分類 Classification

2.估計(jì)Estimation

3.預(yù)測(cè)Prediction

4. 關(guān)聯(lián)規(guī)則Association Rules

5. 聚類Cluster

6. 描述與可視化Description and Visualization

Q:在數(shù)據(jù)分析與挖掘中對(duì)數(shù)據(jù)的訪問(wèn)性要求包括?

A:交互性訪問(wèn)咳促、批處理訪問(wèn)_、迭代計(jì)算勘伺、數(shù)據(jù)查詢跪腹,HADOOP僅僅支持了其中批處理訪問(wèn),而Spark則支持所有4種方式飞醉。

Q:Spark作為計(jì)算框架的優(yōu)勢(shì)是什么?

A:1冲茸、Spark的中間數(shù)據(jù)放到內(nèi)存中,對(duì)于迭代運(yùn)算效率更高

2、Spark比Hadoop更通用

3轴术、Spark提供了統(tǒng)一的編程接口

4难衰、容錯(cuò)性– 在分布式數(shù)據(jù)集計(jì)算時(shí)通過(guò)checkpoint來(lái)實(shí)現(xiàn)容錯(cuò)

5、可用性– Spark通過(guò)提供豐富的Scala, Java逗栽,Python API及交互式Shell來(lái)提高可用性

End.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盖袭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子彼宠,更是在濱河造成了極大的恐慌鳄虱,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凭峡,死亡現(xiàn)場(chǎng)離奇詭異拙已,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)想罕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門悠栓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人按价,你說(shuō)我怎么就攤上這事惭适。” “怎么了楼镐?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵癞志,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我框产,道長(zhǎng)凄杯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任秉宿,我火速辦了婚禮戒突,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘描睦。我一直安慰自己膊存,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布忱叭。 她就那樣靜靜地躺著隔崎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪韵丑。 梳的紋絲不亂的頭發(fā)上爵卒,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音撵彻,去河邊找鬼钓株。 笑死实牡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的享幽。 我是一名探鬼主播铲掐,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拾弃,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼值桩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起豪椿,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奔坟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后搭盾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咳秉,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年鸯隅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了澜建。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蝌以,死狀恐怖炕舵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跟畅,我是刑警寧澤咽筋,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站徊件,受9級(jí)特大地震影響奸攻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虱痕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一睹耐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧部翘,春花似錦硝训、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至表牢,卻和暖如春窄绒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背崔兴。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工彰导, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛔翅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓位谋,卻偏偏與公主長(zhǎng)得像山析,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掏父,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容