大數(shù)據(jù)分析好學嗎雄嚣?大數(shù)據(jù)分析技術有哪些晒屎?

科多大數(shù)據(jù)小課堂之大數(shù)據(jù)分析之技術框架整理。

大數(shù)據(jù)離線部分

HDFS

1:HDFS的架構部分及工作原理

NameNode:負責管理元素據(jù)缓升,將信息保存在內(nèi)存中

DataNode:保存數(shù)據(jù)鼓鲁,以塊的形式保存。啟動后需要定時的向NameNode發(fā)送心跳港谊,報告自身存儲的塊信息

2:HDFS的上傳過程

3:HDFS的下載

4:NameNode的元數(shù)據(jù)安全機制

以記日志的形式將每一個操作寫在磁盤的日志文件中骇吭,然后借助Secondary NameNode的checkpoint功能將fsImage和日志進行合并。

重點:記住checkpoint工作過程

5:如果服務器的磁盤壞了歧寺,如何挽救數(shù)據(jù)?

配置多個dfs.namenode.name.dir 路徑為本地磁盤路徑和nfs網(wǎng)絡磁盤路徑燥狰。

6:hdfs集群中棘脐,受到拓展瓶頸的是NameNode還是Datanode?

是NameNode,因為DataNode不夠可以很方便的水平拓展龙致,而工作的NameNode只有一個蛀缝,他的存儲能力完全取決于他的內(nèi)存。

但是其實NameNode一般不會成為瓶頸目代,因為一個塊記錄的元數(shù)據(jù)信息大小約為150B屈梁,如果每一個塊大小為128M的話,那么15G的NameNode內(nèi)存可以存儲12PB的數(shù)據(jù)榛了。

7:datanode明明已啟動在讶,但是集群中的可用datanode列表中就是沒有,怎么辦?

在她的Data目錄下霜大,已經(jīng)有其他NameNode的標記构哺,這個NameNode不認。

8:文件下載到window中僧诚,為什么會報錯?

默認使用操作系統(tǒng)的內(nèi)核進行磁盤數(shù)據(jù)的寫入遮婶,也就是需要一個winutil的工具,而默認的安裝包中不提供湖笨,所以需要編譯源碼或者設置為使用Java的進行磁盤寫入旗扑。

9:hadoop的HA(高可用)

MapReduce

1:MapReduce中,fileinputformat -> map -> shuffle -> reduce的過程

2:MapReduce中慈省,job提交的過程

3:自定義Javabean作為數(shù)據(jù)臀防,需要extends writableandCompareble接口。

4:自定義outputformat边败,進行不同方向的處理袱衷。

5:MapReduce的一些應用場景

1、排序并且求 TOPOne 和TOPN

2笑窜、求某個用戶前幾個月的總流量致燥,并且選擇出流量前幾名的用戶。

3排截、reduce端的join

4嫌蚤、map端join

5、求共同好友問題

hive

1:什么是hive?

一個將sql轉化為MapReduce程序的断傲、單機版的脱吱、數(shù)據(jù)倉庫工具。通過關系型數(shù)據(jù)庫(mysql等)來記錄表元數(shù)據(jù)信息认罩。真正的數(shù)據(jù)在HDFS中箱蝠。

Hive利用HDFS存儲數(shù)據(jù),利用MapReduce查詢分析數(shù)據(jù)

hive2.0版本之后,都是基于Spark處理了宦搬。

安裝的時候牙瓢,需要注意jline的版本沖突。

2:如何啟動?

3:執(zhí)行的sql的形式

hiveshell床三、 hive -e “sql命令”一罩、 hive -f “一個包含著很多SQL語句的文件”

4:hive的創(chuàng)建表操作

內(nèi)部表、外部表 就差連個關鍵字(external 和 location)

分區(qū)表撇簿、分桶表

5:hive查詢表

join

動態(tài)分區(qū)

分組查詢

復雜的那個累計報表操作聂渊。

6:hive自定義函數(shù)(UDF)

sqoop

利用hadoop的map端進行數(shù)據(jù)的并行導入導出。

安裝在HDFS上四瘫,配置HDFS的路徑和Hive路徑即可汉嗽。

flume

1:agent:sources 、 channel 找蜜、 sinks

2:sources:exec饼暑、spooldir、arvo (加一個攔截器)

3:channel:men 洗做、 disk

4:sinks:arvo 弓叛、HDFS、kafka

5:flume安裝在數(shù)據(jù)源這一邊诚纸。

6:如何自定義攔截器?

class myiterceptor implements Iterceptor

//里面有一個靜態(tài)的公共內(nèi)部類撰筷。

public static class mybuilder implements Iterceptor.Builder

7:如何實現(xiàn)flume的多級連接,以及如何實現(xiàn)高可用?

大數(shù)據(jù)實時storm部分

storm

1 : storm是一個實時的計算框架畦徘,只負責計算毕籽,不負責存儲。它通過spout的open和nextTuple方法去外部存儲系統(tǒng)(kafka)獲取數(shù)據(jù)井辆,然后傳送給后續(xù)的bolt處理关筒,

bolt利用prepare和execute方法處理完成后,繼續(xù)往后續(xù)的bolt發(fā)送杯缺,或者根據(jù)輸出目錄蒸播,把信息寫到指定的外部存儲系統(tǒng)中。

2:storm的數(shù)據(jù)不丟失原理

交叉收到的數(shù)據(jù)做異或元算中間結果不為0的原理萍肆。

3:設置spout_max_pending (可以限流)

4:jstorm的通信機制,每一個:worker都有一個接受線程和輸出線程

5:storm的架構分析

nimbus袍榆、zookeeper、supervisor匾鸥、worker

nimbus:接受任務請求,并且進行任務的分發(fā)碉纳,最后寫入到zookeeper中勿负。

supervisor:接受nimbus的任務調度,然后啟動和管理屬于自己的worker進程,supervisor是可以快速失敗的,不影響任務的執(zhí)行奴愉。

我們可以寫一個腳本來監(jiān)控supervisor的進程琅摩,如果不存在了,立馬啟動锭硼,就可以了房资。

worker:啟動spoutTask、boltTask等等任務檀头,去執(zhí)行業(yè)務邏輯轰异。

6:storm的編程模型

topology:由spout和bolt組成的一個流程圖。他描述著本次任務的信息

spout:

open

nexttuple

declareOutputFields

bolt:

prepare

execute

declareOutputFields

6:storm的tuple結構暑始,它里面有兩個數(shù)據(jù)結構搭独,一個list、一個是map

list:記錄著信息

map:記錄著每個字段對應的下表廊镜,通過找到下邊再去上面的list中找數(shù)據(jù)牙肝。

7:storm任務提交的過程

kafka

1、kafka和jms的區(qū)別

2嗤朴、kafka的topic理解

topic是邏輯存在的配椭,真正在物理磁盤中的體現(xiàn)是partitioner,一個topic可以對應多個partition雹姊,不同的paritition存放在不同的broker中股缸,以提高并發(fā)存儲能力。

3容为、partitioner

partition是topic信息在屋里存儲中的具體體現(xiàn)乓序,在磁盤中它是一個文件夾,名字是topic名字_partition編號坎背。4替劈、segment

每個partition對對應多個segment文件,默認大小是1G得滤,為了快速定位到指定的offset位置陨献。

5、kafka為什么這么快

1/使用了操作系統(tǒng)使用的pagecache緩存懂更,緩存大眨业,緩存到一定量的數(shù)據(jù)時,以順序寫入的方 式寫入到磁盤中沮协。

因為:磁盤順序寫入的方式非常的快=>600MB/s,而隨機存儲只有100kb/s左右龄捡。

2/使用操作系統(tǒng)的sendfile技術。在讀取信息發(fā)送的時候慷暂,不需要經(jīng)過用戶區(qū)聘殖,而是在os端直接發(fā)送,可以減少很多步驟。

6奸腺、為什么要多個partitioner7餐禁、為什么每個partitioner需要切分為多個segment文件

8、kafka的HA

對partitioner分區(qū)進行備份突照,利用zookeeper的選舉機制選擇leader帮非。數(shù)據(jù)的生產(chǎn)存儲和消費讀取都是有l(wèi)eader負責,其他的replicatition只是負責備份而已讹蘑。

9末盔、kafka如何用shell腳本來講一個文件讀寫進去?10、kafka如何用JavaAPI實現(xiàn)生產(chǎn)者和消費者?

大數(shù)據(jù)一站式解決方案:Scala和Spark部分

scala回顧

1衔肢、如何定義變量

2庄岖、如何定義函數(shù)、方法角骤,如何在將函數(shù)作為方法的參數(shù)傳入進去?

3隅忿、條件判斷語句,循環(huán)控制語句

4邦尊、集合操作:Array背桐、list、set蝉揍、tuple链峭、map (注意:可變和不可變的區(qū)別)5、樣例類的使用6又沾、trit弊仪、抽象類的使用7、主構造器和輔助構造器的使用

8杖刷、scala的高級特性

高階函數(shù):作為值得函數(shù)励饵、匿名函數(shù)、閉包滑燃、柯里化

隱式轉換:一個類對象中役听,如果他沒有摸一個功能,但是我們有想要它實現(xiàn)表窘,可以使用英式轉換的方式典予。

object MyPredef{

//定義隱式轉換方法

implicit def fileReadToRichFile(file: File)=new RichFile(file)

}

使用:

import MyPredef._9、Actor

寫起來像多線程乐严,用起來像socket10瘤袖、akka

ActorSystem.actorOf()創(chuàng)建一個Actor,

創(chuàng)建的同時昂验,就是執(zhí)行Actor中的prestart方法捂敌,去初始化一些信息昭娩。

Spark RDD

1、SparkRDD叫做:彈性分布式數(shù)據(jù)集黍匾,其實就是一個類,用來描述:任務的數(shù)據(jù)從哪里讀取呛梆、用那個算進行計算锐涯、得到的結果有存放在哪里、RDD之間的依賴關系是款以來還是窄依賴

2填物、RDD有五個特點

一系列分區(qū)

每個算子作用在每個分區(qū)上

一系列依賴關系

最有位置(如果從HDFS上讀取數(shù)據(jù))

3纹腌、RDD的兩種算子Transformation和Action

Transformation是懶加載,只是定義了這個算子的任務滞磺,該如何做升薯,但是還沒有做。

Action是立即執(zhí)行击困,當執(zhí)行到Action時涎劈,會觸發(fā)DAGSchudle切分stage,切分完成后阅茶,有TaskScheduler將任務通過DriverActor發(fā)送到executor中執(zhí)行蛛枚。

4、RDD的幾個復雜的Transformation

->combineByKey(x=>x,(a:List[String],b:String) => a :+ b,

(m:List[String],n:List[String])=> m ++ n)

第一個參數(shù)表示分組后的第一個值如何處理脸哀,

第二個參數(shù)表示后續(xù)的值和前一個值如何處理蹦浦,

第三個參數(shù)表示,map端處理完成后撞蜂,在reduce端如何對這些list進行處理盲镶。

->aggregate(“初始量,可以是String也可以是int”)(第一個func蝌诡,第二個func)

初始量作用于沒一個分區(qū)溉贿,第一個func作用于map端,第二個func作用于reduce端送漠。

->reduceByKey(_+_) 作用于map端和reduce端顽照,可以進行局部聚合。

其實reduceByKey和aggregateByKey在底層都調用了combineByKey方法來實現(xiàn)響應的功能闽寡。

->mapPartitions

對每一個分區(qū)進行操作代兵,直接在里面使用匿名函數(shù)即可

當然如果邏輯非常復雜也是可以考慮在外面先定義好這個函數(shù)之后在傳輸進去。

rdd1.mapPartitions((it:Iterator[String]) => {

it.toList.map(x => (x,1)).iterator

})

>mapPartitionsWithIndex

首先定義一個函數(shù)爷狈,當然也可以寫在里面作為匿名函數(shù)

val func = (index:Int, it:Iterator[Int]) => {

it.toList.map(x => ("index:" + index, x)).iterator

}

rdd1.mapPartitionsWithIndex(func).collect

5植影、RDD自定義Partitioner

//自定義分區(qū)器,重寫里面的getPartition方法和numPartitions方法涎永。

//構造這個對象的時候思币,就把所有情況的信息傳輸過來鹿响,然后在里面進行分類處理。

class HostPartition(hostArr:Array[String]) extends Partitioner{

//對所有的數(shù)據(jù)進行分類谷饿,每一種類型對應一個int編號惶我。所以使用map比較合適。

val map = new mutable.HashMap[String,Int]()

for(index

map.put(hostArr(index),index)

}

//重寫getPartition的方法博投。

override def getPartition(key: Any): Int = {

map.getOrElse(key.toString,0)

}

override def numPartitions: Int = hostArr.length

}

應用:

val hostPartition: HostPartition = new HostPartition(hostList)

val allPartitionRDD: RDD[(String, (String, Int))] = host_url_count.partitionBy(hostPartition)

6绸贡、自定義排序規(guī)則 ==>定義一個

case class Gril(yanzhi:Int,nianling:Int) extends Ordered[Gril] with Serializable{

override def compare(that: Gril): Int = {

val yanzhiResult: Int = this.yanzhi.compareTo(that.yanzhi)

if(yanzhiResult == 0){

return this.nianling.compareTo(that.nianling)

}

return yanzhiResult

}

}

應用:

val rdd2: RDD[(String, Int, Int)] = rdd1.sortBy(msg => Gril(msg._2,msg._3))

Spark的SQLContext

1、Spark整合Hive和HDFS 只需要將Hive的hive-site.xml ; hadoop的core-site.xml和hdfs-site.xml拷貝到Spark的conf目錄下即可毅哗。Spark就知道如何使用hive的表听怕,同時也知道去哪個NameNode哪里都數(shù)據(jù)了。

2虑绵、DataFrame是什么?

是一個分布式數(shù)據(jù)集尿瞭,對RDD的封裝。RDD有的方法他基本上都有

3翅睛、DataFrame如何創(chuàng)建?

三種方式:->RDD + case class

->RDD + structType

->sqlContext.read.format.options(Map())

4声搁、DataFrame首先需要注冊成表結構之后才可以使用sqlContext來操作。

dF.registerTempTable(“person”)

5捕发、使用sqlContext ==> 返回一個DataFrame

sqlContext.sql(“select * from person”)

6酥艳、DataFrame將數(shù)據(jù)寫入到HDFS或者mysql中

val prop = new Properties()

prop.put("user", "root")

prop.put("password", "815325")

//如果數(shù)據(jù)庫中沒有這個表,那么他也會創(chuàng)建一張表(很強大)

resultDF.write.mode("append").jdbc("jdbc:mysql://localhost:3306/bigdata","result",prop)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爬骤,一起剝皮案震驚了整個濱河市充石,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌霞玄,老刑警劉巖骤铃,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坷剧,居然都是意外死亡惰爬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門惫企,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撕瞧,“玉大人,你說我怎么就攤上這事狞尔〈园妫” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵偏序,是天一觀的道長页畦。 經(jīng)常有香客問我,道長研儒,這世上最難降的妖魔是什么豫缨? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任独令,我火速辦了婚禮,結果婚禮上好芭,老公的妹妹穿的比我還像新娘燃箭。我一直安慰自己,他們只是感情好舍败,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布遍膜。 她就那樣靜靜地躺著,像睡著了一般瓤湘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上恩尾,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天弛说,我揣著相機與錄音,去河邊找鬼翰意。 笑死木人,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的冀偶。 我是一名探鬼主播醒第,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼进鸠!你這毒婦竟也來了稠曼?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤客年,失蹤者是張志新(化名)和其女友劉穎霞幅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體量瓜,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡司恳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绍傲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扔傅。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖烫饼,靈堂內(nèi)的尸體忽然破棺而出猎塞,到底是詐尸還是另有隱情,我是刑警寧澤杠纵,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布邢享,位于F島的核電站,受9級特大地震影響淡诗,放射性物質發(fā)生泄漏骇塘。R本人自食惡果不足惜伊履,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望款违。 院中可真熱鬧唐瀑,春花似錦、人聲如沸插爹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赠尾。三九已至力穗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間气嫁,已是汗流浹背当窗。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寸宵,地道東北人崖面。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像梯影,于是被迫代替她去往敵國和親巫员。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

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