自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Hadoop、Spark、Hive到底是什么,做算法要不要學(xué)?

大數(shù)據(jù) 算法 Hadoop Spark
最近我發(fā)現(xiàn),很多萌新說(shuō)著想要做算法工程師,但是卻對(duì)這個(gè)崗位的要求以及工作內(nèi)容一無(wú)所知。以為學(xué)一個(gè)Python,再學(xué)一些機(jī)器學(xué)習(xí)、深度學(xué)習(xí)的模型就可以勝任了。工作就是用Python不停地寫(xiě)模型。

 [[422888]]

大家好,我是梁唐。

最近我發(fā)現(xiàn),很多萌新說(shuō)著想要做算法工程師,但是卻對(duì)這個(gè)崗位的要求以及工作內(nèi)容一無(wú)所知。以為學(xué)一個(gè)Python,再學(xué)一些機(jī)器學(xué)習(xí)、深度學(xué)習(xí)的模型就可以勝任了。工作就是用Python不停地寫(xiě)模型。

顯然,這樣的想法是有問(wèn)題的,如果真這么干,即使通過(guò)了面試成功入職,也會(huì)干得非常痛苦。因?yàn)槟銜?huì)發(fā)現(xiàn)這也不知道那也不知道,做啥都很吃力,需要一段很長(zhǎng)的時(shí)間學(xué)習(xí)。而這種為了應(yīng)付工作臨時(shí)抱佛腳的學(xué)習(xí)往往很難深入,有種不停打補(bǔ)丁的感覺(jué)。

今天就和大家聊聊算法工程師的幾項(xiàng)基本功,看看除了算法和模型之外,還需要學(xué)些什么。

hadoop

首先當(dāng)然是hadoop,不過(guò)hadoop不是一門(mén)技術(shù),而是一個(gè)大數(shù)據(jù)框架。它的logo是一只黃色的小象,據(jù)說(shuō)是這個(gè)項(xiàng)目的創(chuàng)建者用女兒的玩具命名的。

經(jīng)過(guò)了很多年的發(fā)展,現(xiàn)在hadoop框架已經(jīng)非常成熟,衍生出了一個(gè)龐大的家族。有多龐大呢,我在google里給大家找了一張圖,大家可以看看感受一下,這里面有多少是自己知道的,有多少?zèng)]聽(tīng)說(shuō)過(guò)。

當(dāng)然對(duì)于算法工程師來(lái)說(shuō),hadoop家族并不需要全部了解,只需要著重關(guān)注幾個(gè)就可以了。

hdfs

首先是hdfs,hdfs是hadoop框架中的分布式文件系統(tǒng)。因?yàn)樵诠I(yè)場(chǎng)景當(dāng)中,數(shù)據(jù)量是非常龐大的,動(dòng)輒TB甚至是PB量級(jí)。如此龐大的數(shù)據(jù),顯然不可能存在一塊磁盤(pán)里,必須要分布式存儲(chǔ),分成不同的部分,不同的部分分開(kāi)存儲(chǔ)。通過(guò)hdfs我們可以很方便地實(shí)現(xiàn)這一點(diǎn),可以使用一些簡(jiǎn)單的shell命令管理大規(guī)模的數(shù)據(jù)。

hdfs的內(nèi)部是分片(block)存儲(chǔ)的,并且設(shè)計(jì)了嚴(yán)謹(jǐn)?shù)娜蒎e(cuò)機(jī)制,盡可能地保證了數(shù)據(jù)的準(zhǔn)確性。一般我們用hdfs存儲(chǔ)一些離線(xiàn)數(shù)據(jù),也就是對(duì)延遲要求不高的數(shù)據(jù),比如模型的訓(xùn)練數(shù)據(jù)。它的特點(diǎn)是存儲(chǔ)能力很強(qiáng),但是讀取速度很慢,中間的延遲很長(zhǎng)。

因?yàn)橛?xùn)練數(shù)據(jù)的規(guī)模往往也非常龐大,并且從用戶(hù)線(xiàn)上的實(shí)時(shí)行為轉(zhuǎn)化成模型需要的輸入,中間需要大量的計(jì)算步驟。這會(huì)帶來(lái)巨大的計(jì)算壓力,因此對(duì)于這樣的數(shù)據(jù),我們往往都是借助于hdfs做離線(xiàn)處理。設(shè)計(jì)一套數(shù)據(jù)處理流程,進(jìn)行若干步驟的處理,每一步處理的中間數(shù)據(jù)都存儲(chǔ)在hdfs上。

模型訓(xùn)練的時(shí)候,也通過(guò)掛載hdfs的方式直接讀取tensor進(jìn)行訓(xùn)練。

MapReduce

hdfs是hadoop的存儲(chǔ)系統(tǒng),hadoop同樣也推出過(guò)一套計(jì)算系統(tǒng),就是MapReduce。

我在之前的文章曾經(jīng)介紹過(guò)MapReduce的原理,其實(shí)非常簡(jiǎn)單,它將數(shù)據(jù)的計(jì)算過(guò)程抽象成了兩個(gè)步驟。一個(gè)步驟叫map,一個(gè)步驟叫reduce。

map步驟做的數(shù)據(jù)的映射,比如我們從一個(gè)很大的json文件當(dāng)中讀取出我們想要的字段,在這個(gè)步驟當(dāng)中,我們從json獲得了幾個(gè)字段。

reduce步驟做的是匯總,我們把剛剛map階段得到的結(jié)果,按照我們的想法匯聚在一起,比如計(jì)算平均數(shù)、中位數(shù)等等。

這個(gè)想法巧妙的地方在于map和reduce都是可以分布式進(jìn)行的,比如map階段,我們可以對(duì)hdfs里的每一個(gè)文件都設(shè)置一個(gè)map讀取文件進(jìn)行處理。map階段結(jié)束之后,我們也可以起多個(gè)reducer對(duì)map的結(jié)果進(jìn)行加工,盡可能導(dǎo)致了整個(gè)過(guò)程都是并發(fā)進(jìn)行的,也就保證了數(shù)據(jù)的處理速度。

雖然MapReduce的提出到現(xiàn)在已經(jīng)十多年了,但仍然沒(méi)有淘汰,還在很多場(chǎng)景當(dāng)中廣泛使用。

hive

hive也是hadoop家族核心的一員,它的思想也很巧妙,做了一件非常有利于程序員的事情。

使用hdfs以及MapReduce其實(shí)就足夠應(yīng)付幾乎所有大數(shù)據(jù)計(jì)算的場(chǎng)景了,但是足夠應(yīng)付并不代表應(yīng)付起來(lái)很舒服。有些場(chǎng)景使用起來(lái)就不是很順手,比如說(shuō)我們要把兩份數(shù)據(jù)關(guān)聯(lián)在一起,一份是用戶(hù)點(diǎn)擊數(shù)據(jù),一份是商品數(shù)據(jù),我們想要得到用戶(hù)點(diǎn)過(guò)的商品信息。

你會(huì)發(fā)現(xiàn)使用MapReduce去做這樣一件事情會(huì)非常蛋疼,要寫(xiě)很多代碼。所以有人突發(fā)奇想,我們能不能利用hdfs以及MapReduce做一套好用一點(diǎn)的數(shù)據(jù)處理系統(tǒng),比如說(shuō)將數(shù)據(jù)全部格式化,然后像是數(shù)據(jù)庫(kù)一樣使用SQL來(lái)進(jìn)行數(shù)據(jù)的查詢(xún)和處理?于是就有了hive。

hive底層的運(yùn)算框架就是MapReduce,只不過(guò)有了表結(jié)構(gòu)之后,很多之前很復(fù)雜的操作被大大簡(jiǎn)化了。尤其是數(shù)據(jù)表之間的join、group by等操作,之前需要寫(xiě)大量MapReduce的代碼,現(xiàn)在幾行SQL就搞定了。

不過(guò)hive畢竟不是數(shù)據(jù)庫(kù),它的使用還是有一些它自己專(zhuān)屬的奇淫技巧。比如說(shuō)避免數(shù)據(jù)傾斜的情況,比如說(shuō)設(shè)置合理的內(nèi)存分片,比如說(shuō)udf的使用等等。

只是懂SQL的語(yǔ)法是寫(xiě)不好hive的,多少還需要做一些深入的了解。

spark

說(shuō)到spark相信很多同學(xué)也是久仰大名,它是一個(gè)非常著名的開(kāi)源集群計(jì)算框架,也可以理解成一個(gè)分布式計(jì)算框架。

spark在MapReduce的基礎(chǔ)上對(duì)MapReduce當(dāng)中的一些問(wèn)題進(jìn)行了優(yōu)化,比如MapReduce每次運(yùn)算結(jié)束之后都會(huì)把數(shù)據(jù)存儲(chǔ)在磁盤(pán)上,這會(huì)帶來(lái)巨大的IO開(kāi)銷(xiāo)。

而spark使用了存儲(chǔ)器內(nèi)運(yùn)算技術(shù),可以盡量減少磁盤(pán)的寫(xiě)入。這其中的技術(shù)細(xì)節(jié)看不懂沒(méi)有關(guān)系,我們只需要知道它的運(yùn)算性能比MapReduce快很多就可以了,一般來(lái)說(shuō)運(yùn)算速度是MapReduce的十倍以上。并且spark原生支持hdfs,所以大部分公司都是使用hdfs做數(shù)據(jù)存儲(chǔ),spark來(lái)進(jìn)行數(shù)據(jù)運(yùn)算。

在hadoop推出了hive之后,spark也推出了自己的spark SQL。不過(guò)后來(lái)hive也支持使用spark作為計(jì)算引擎代替MapReduce了,這兩者的性能上差異也就很小了,我個(gè)人還是更喜歡hive一點(diǎn),畢竟寫(xiě)起來(lái)方便。

另外spark除了計(jì)算框架之外,當(dāng)中也兼容了一些機(jī)器學(xué)習(xí)的庫(kù),比如MLlib,不過(guò)我沒(méi)有用過(guò),畢竟現(xiàn)在機(jī)器學(xué)習(xí)的時(shí)代都快結(jié)束了。很少再有使用場(chǎng)景了,大家感興趣也可以了解一下。

總結(jié)

最后做一個(gè)簡(jiǎn)單的總結(jié),總體上來(lái)說(shuō)想要成為一名合格的算法工程師,hadoop、MapReduce、hive這些或多或少都需要有所了解。不說(shuō)能夠精通到原理級(jí),但至少需要會(huì)用,大概知道里面怎么回事。

這也是工業(yè)界和實(shí)驗(yàn)室里的最大區(qū)別,畢竟學(xué)校里的實(shí)驗(yàn)數(shù)據(jù)量也不會(huì)很大,直接放在內(nèi)存里就完事了。所以數(shù)據(jù)處理一般都是numpy + pandas什么的,但是在公司里,幾乎沒(méi)有pandas的用武之地,畢竟數(shù)據(jù)量太大了,不可能都放內(nèi)存里,必須要借助大數(shù)據(jù)計(jì)算平臺(tái)來(lái)解決。

好了,就說(shuō)這么多吧,感謝大家的閱讀。

本文轉(zhuǎn)載自微信公眾號(hào)「Coder梁」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Coder梁公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: Coder梁
相關(guān)推薦

2018-07-12 09:04:15

RAID陣列硬盤(pán)

2017-11-20 09:00:43

跳槽職場(chǎng)精英年終獎(jiǎng)

2014-12-09 09:13:46

BaaS云備份備份即服務(wù)

2020-04-20 09:32:31

VIM程序員編程

2020-05-26 07:40:33

微服務(wù)聚合工程Project

2019-10-09 08:53:47

數(shù)據(jù)庫(kù)即服務(wù)DBaaS云計(jì)算

2021-04-27 15:27:56

iOS 14.5隱私跟蹤App

2019-09-27 15:40:04

云計(jì)算數(shù)據(jù)庫(kù)DBaaS

2020-05-26 08:52:01

程序員技術(shù)編程

2013-11-29 14:04:42

2012-03-16 14:23:00

框架

2012-03-16 14:23:00

框架

2023-10-06 12:04:41

ORM關(guān)系型數(shù)據(jù)庫(kù)

2017-09-16 19:31:29

Wi-Fi路由器輻射

2021-01-22 06:03:55

核酸隔離APP

2018-08-26 15:39:03

數(shù)據(jù)庫(kù)MySQL索引

2021-11-24 22:39:03

手機(jī)系統(tǒng)功能

2021-02-21 09:09:24

GoGOPATH代碼

2020-10-14 06:22:14

UWB技術(shù)感知
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)