本文主要是關(guān)于大數(shù)據(jù)開發(fā)的相關(guān)介紹,并著重對大數(shù)據(jù)開發(fā)的算法運(yùn)算進(jìn)行了詳盡的闡述。
大數(shù)據(jù)
大數(shù)據(jù)(big data),指無法在一定時(shí)間范圍內(nèi)用常規(guī)軟件工具進(jìn)行捕捉、管理和處理的數(shù)據(jù)集合,是需要新處理模式才能具有更強(qiáng)的決策力、洞察發(fā)現(xiàn)力和流程優(yōu)化能力的海量、高增長率和多樣化的信息資產(chǎn)。 [1]
在維克托·邁爾-舍恩伯格及肯尼斯·庫克耶編寫的《大數(shù)據(jù)時(shí)代》 [2] 中大數(shù)據(jù)指不用隨機(jī)分析法(抽樣調(diào)查)這樣捷徑,而采用所有數(shù)據(jù)進(jìn)行分析處理。大數(shù)據(jù)的5V特點(diǎn)(IBM提出):Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價(jià)值密度)、Veracity(真實(shí)性)。
大數(shù)據(jù)(big data),指無法在一定時(shí)間范圍內(nèi)用常規(guī)軟件工具進(jìn)行捕捉、管理和處理的數(shù)據(jù)集合,是需要新處理模式才能具有更強(qiáng)的決策力、洞察發(fā)現(xiàn)力和流程優(yōu)化能力的海量、高增長率和多樣化的信息資產(chǎn)。 [1]
在維克托·邁爾-舍恩伯格及肯尼斯·庫克耶編寫的《大數(shù)據(jù)時(shí)代》 [2] 中大數(shù)據(jù)指不用隨機(jī)分析法(抽樣調(diào)查)這樣捷徑,而采用所有數(shù)據(jù)進(jìn)行分析處理。大數(shù)據(jù)的5V特點(diǎn)(IBM提出):Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價(jià)值密度)、Veracity(真實(shí)性)。
對于“大數(shù)據(jù)”(Big data)研究機(jī)構(gòu)Gartner給出了這樣的定義。“大數(shù)據(jù)”是需要新處理模式才能具有更強(qiáng)的決策力、洞察發(fā)現(xiàn)力和流程優(yōu)化能力來適應(yīng)海量、高增長率和多樣化的信息資產(chǎn)。 [1]
麥肯錫全球研究所給出的定義是:一種規(guī)模大到在獲取、存儲(chǔ)、管理、分析方面大大超出了傳統(tǒng)數(shù)據(jù)庫軟件工具能力范圍的數(shù)據(jù)集合,具有海量的數(shù)據(jù)規(guī)模、快速的數(shù)據(jù)流轉(zhuǎn)、多樣的數(shù)據(jù)類型和價(jià)值密度低四大特征。 [4]
大數(shù)據(jù)技術(shù)的戰(zhàn)略意義不在于掌握龐大的數(shù)據(jù)信息,而在于對這些含有意義的數(shù)據(jù)進(jìn)行專業(yè)化處理。換而言之,如果把大數(shù)據(jù)比作一種產(chǎn)業(yè),那么這種產(chǎn)業(yè)實(shí)現(xiàn)盈利的關(guān)鍵,在于提高對數(shù)據(jù)的“加工能力”,通過“加工”實(shí)現(xiàn)數(shù)據(jù)的“增值”。 [5]
從技術(shù)上看,大數(shù)據(jù)與云計(jì)算的關(guān)系就像一枚硬幣的正反面一樣密不可分。大數(shù)據(jù)必然無法用單臺(tái)的計(jì)算機(jī)進(jìn)行處理,必須采用分布式架構(gòu)。它的特色在于對海量數(shù)據(jù)進(jìn)行分布式數(shù)據(jù)挖掘。但它必須依托云計(jì)算的分布式處理、分布式數(shù)據(jù)庫和云存儲(chǔ)、虛擬化技術(shù)。 [2]
隨著云時(shí)代的來臨,大數(shù)據(jù)(Big data)也吸引了越來越多的關(guān)注。分析師團(tuán)隊(duì)認(rèn)為,大數(shù)據(jù)(Big data)通常用來形容一個(gè)公司創(chuàng)造的大量非結(jié)構(gòu)化數(shù)據(jù)和半結(jié)構(gòu)化數(shù)據(jù),這些數(shù)據(jù)在下載到關(guān)系型數(shù)據(jù)庫用于分析時(shí)會(huì)花費(fèi)過多時(shí)間和金錢。大數(shù)據(jù)分析常和云計(jì)算聯(lián)系到一起,因?yàn)閷?shí)時(shí)的大型數(shù)據(jù)集分析需要像MapReduce一樣的框架來向數(shù)十、數(shù)百或甚至數(shù)千的電腦分配工作。
大數(shù)據(jù)需要特殊的技術(shù),以有效地處理大量的容忍經(jīng)過時(shí)間內(nèi)的數(shù)據(jù)。適用于大數(shù)據(jù)的技術(shù),包括大規(guī)模并行處理(MPP)數(shù)據(jù)庫、數(shù)據(jù)挖掘、分布式文件系統(tǒng)、分布式數(shù)據(jù)庫、云計(jì)算平臺(tái)、互聯(lián)網(wǎng)和可擴(kuò)展的存儲(chǔ)系統(tǒng)。
最小的基本單位是bit,按順序給出所有單位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。
它們按照進(jìn)率1024(2的十次方)來計(jì)算:
1 Byte =8 bit
1 KB = 1,024 Bytes = 8192 bit
1 MB = 1,024 KB = 1,048,576 Bytes
1 GB = 1,024 MB = 1,048,576 KB
1 TB = 1,024 GB = 1,048,576 MB
1 PB = 1,024 TB = 1,048,576 GB
1 EB = 1,024 PB = 1,048,576 TB
1 ZB = 1,024 EB = 1,048,576 PB
1 YB = 1,024 ZB = 1,048,576 EB
1 BB = 1,024 YB = 1,048,576 ZB
1 NB = 1,024 BB = 1,048,576 YB
1 DB = 1,024 NB = 1,048,576 BB
全稱:
1 Bit(比特) =Binary Digit
8Bits = 1 Byte(字節(jié))
1,000 Bytes = 1 Kilobyte
1,000Kilobytes = 1 Megabyte
1,000 Megabytes = 1 Gigabyte
1,000 Gigabytes = 1Terabyte
1,000 Terabytes = 1 Petabyte
1,000 Petabytes = 1 Exabyte
1,000Exabytes = 1 Zettabyte
1,000 Zettabytes = 1 Yottabyte
1,000 Yottabytes = 1Brontobyte
1,000 Brontobytes = 1 Geopbyte
特征
容量(Volume):數(shù)據(jù)的大小決定所考慮的數(shù)據(jù)的價(jià)值和潛在的信息; [6]
種類(Variety):數(shù)據(jù)類型的多樣性; [6]
速度(Velocity):指獲得數(shù)據(jù)的速度; [6]
可變性(Variability):妨礙了處理和有效地管理數(shù)據(jù)的過程。 [6]
真實(shí)性(Veracity):數(shù)據(jù)的質(zhì)量 [6]
復(fù)雜性(Complexity):數(shù)據(jù)量巨大,來源多渠道 [6]
價(jià)值(value):合理運(yùn)用大數(shù)據(jù),以低成本創(chuàng)造高價(jià)值
大數(shù)據(jù)開發(fā)常用算法
奧地利符號計(jì)算研究所(Research Institute for Symbolic Computation,簡稱RISC)的Christoph Koutschan博士在自己的頁面上發(fā)布了一篇文章,提到他做了一個(gè)調(diào)查,參與者大多數(shù)是計(jì)算機(jī)科學(xué)家,他請這些科學(xué)家投票選出最重要的算法,以下是這次調(diào)查的結(jié)果,按照英文名稱字母順序排序。
1、A* 搜索算法——圖形搜索算法,從給定起點(diǎn)到給定終點(diǎn)計(jì)算出路徑。其中使用了一種啟發(fā)式的估算,為每個(gè)節(jié)點(diǎn)估算通過該節(jié)點(diǎn)的最佳路徑,并以之為各個(gè)地點(diǎn)排定次序。算法以得到的次序訪問這些節(jié)點(diǎn)。因此,A*搜索算法是最佳優(yōu)先搜索的范例。
2、集束搜索(又名定向搜索,Beam Search)——最佳優(yōu)先搜索算法的優(yōu)化。使用啟發(fā)式函數(shù)評估它檢查的每個(gè)節(jié)點(diǎn)的能力。不過,集束搜索只能在每個(gè)深度中發(fā)現(xiàn)最前面的m個(gè)最符合條件的節(jié)點(diǎn),m是固定數(shù)字——集束的寬度。
3、二分查找(Binary Search)——在線性數(shù)組中找特定值的算法,每個(gè)步驟去掉一半不符合要求的數(shù)據(jù)。
4、分支界定算法(Branch and Bound)——在多種最優(yōu)化問題中尋找特定最優(yōu)化解決方案的算法,特別是針對離散、組合的最優(yōu)化。
5、Buchberger算法——一種數(shù)學(xué)算法,可將其視為針對單變量最大公約數(shù)求解的歐幾里得算法和線性系統(tǒng)中高斯消元法的泛化。
6、數(shù)據(jù)壓縮——采取特定編碼方案,使用更少的字節(jié)數(shù)(或是其他信息承載單元)對信息編碼的過程,又叫來源編碼。
7、Diffie-Hellman密鑰交換算法——一種加密協(xié)議,允許雙方在事先不了解對方的情況下,在不安全的通信信道中,共同建立共享密鑰。該密鑰以后可與一個(gè)對稱密碼一起,加密后續(xù)通訊。
8、Dijkstra算法——針對沒有負(fù)值權(quán)重邊的有向圖,計(jì)算其中的單一起點(diǎn)最短算法。
9、離散微分算法(Discrete differentiation)。
10、動(dòng)態(tài)規(guī)劃算法(Dynamic Programming)——展示互相覆蓋的子問題和最優(yōu)子架構(gòu)算法
11、歐幾里得算法(Euclidean algorithm)——計(jì)算兩個(gè)整數(shù)的最大公約數(shù)。最古老的算法之一,出現(xiàn)在公元前300前歐幾里得的《幾何原本》。
12、期望-最大算法(Expectation-maximization algorithm,又名EM-Training)——在統(tǒng)計(jì)計(jì)算中,期望-最大算法在概率模型中尋找可能性最大的參數(shù)估算值,其中模型依賴于未發(fā)現(xiàn)的潛在變量。EM在兩個(gè)步驟中交替計(jì)算,第一步是計(jì)算期望,利用對隱藏變量的現(xiàn)有估計(jì)值,計(jì)算其最大可能估計(jì)值;第二步是最大化,最大化在第一步上求得的最大可能值來計(jì)算參數(shù)的值。
13、快速傅里葉變換(Fast Fourier transform,F(xiàn)FT)——計(jì)算離散的傅里葉變換(DFT)及其反轉(zhuǎn)。該算法應(yīng)用范圍很廣,從數(shù)字信號處理到解決偏微分方程,到快速計(jì)算大整數(shù)乘積。
14、梯度下降(Gradient descent)——一種數(shù)學(xué)上的最優(yōu)化算法。
15、哈希算法(Hashing)。
16、堆排序(Heaps)。
17、Karatsuba乘法——需要完成上千位整數(shù)的乘法的系統(tǒng)中使用,比如計(jì)算機(jī)代數(shù)系統(tǒng)和大數(shù)程序庫,如果使用長乘法,速度太慢。該算法發(fā)現(xiàn)于1962年。
18、LLL算法(Lenstra-Lenstra-Lovasz lattice reduction)——以格規(guī)約(lattice)基數(shù)為輸入,輸出短正交向量基數(shù)。LLL算法在以下公共密鑰加密方法中有大量使用:背包加密系統(tǒng)(knapsack)、有特定設(shè)置的RSA加密等等。
19、最大流量算法(Maximum flow)——該算法試圖從一個(gè)流量網(wǎng)絡(luò)中找到最大的流。它優(yōu)勢被定義為找到這樣一個(gè)流的值。最大流問題可以看作更復(fù)雜的網(wǎng)絡(luò)流問題的特定情況。最大流與網(wǎng)絡(luò)中的界面有關(guān),這就是最大流-最小截定理(Max-flow min-cut theorem)。Ford-Fulkerson 能找到一個(gè)流網(wǎng)絡(luò)中的最大流。
20、合并排序(Merge Sort)。
21、牛頓法(Newton‘s method)——求非線性方程(組)零點(diǎn)的一種重要的迭代法。
22、Q-learning學(xué)習(xí)算法——這是一種通過學(xué)習(xí)動(dòng)作值函數(shù)(action-value function)完成的強(qiáng)化學(xué)習(xí)算法,函數(shù)采取在給定狀態(tài)的給定動(dòng)作,并計(jì)算出期望的效用價(jià)值,在此后遵循固定的策略。Q-leanring的優(yōu)勢是,在不需要環(huán)境模型的情況下,可以對比可采納行動(dòng)的期望效用。
23、兩次篩法(Quadratic Sieve)——現(xiàn)代整數(shù)因子分解算法,在實(shí)踐中,是目前已知第二快的此類算法(僅次于數(shù)域篩法Number Field Sieve)。對于110位以下的十位整數(shù),它仍是最快的,而且都認(rèn)為它比數(shù)域篩法更簡單。
24、RANSAC——是“RANdom SAmple Consensus”的縮寫。該算法根據(jù)一系列觀察得到的數(shù)據(jù),數(shù)據(jù)中包含異常值,估算一個(gè)數(shù)學(xué)模型的參數(shù)值。其基本假設(shè)是:數(shù)據(jù)包含非異化值,也就是能夠通過某些模型參數(shù)解釋的值,異化值就是那些不符合模型的數(shù)據(jù)點(diǎn)。
25、RSA——公鑰加密算法。首個(gè)適用于以簽名作為加密的算法。RSA在電商行業(yè)中仍大規(guī)模使用,大家也相信它有足夠安全長度的公鑰。
26、Sch?nhage-Strassen算法——在數(shù)學(xué)中,Sch?nhage-Strassen算法是用來完成大整數(shù)的乘法的快速漸近算法。其算法復(fù)雜度為:O(N log(N) log(log(N))),該算法使用了傅里葉變換。
27、單純型算法(Simplex Algorithm)——在數(shù)學(xué)的優(yōu)化理論中,單純型算法是常用的技術(shù),用來找到線性規(guī)劃問題的數(shù)值解。線性規(guī)劃問題包括在一組實(shí)變量上的一系列線性不等式組,以及一個(gè)等待最大化(或最小化)的固定線性函數(shù)。
28、奇異值分解(Singular value decomposition,簡稱SVD)——在線性代數(shù)中,SVD是重要的實(shí)數(shù)或復(fù)數(shù)矩陣的分解方法,在信號處理和統(tǒng)計(jì)中有多種應(yīng)用,比如計(jì)算矩陣的偽逆矩陣(以求解最小二乘法問題)、解決超定線性系統(tǒng)(overdetermined linear systems)、矩陣逼近、數(shù)值天氣預(yù)報(bào)等等。
29、求解線性方程組(Solving a system of linear equations)——線性方程組是數(shù)學(xué)中最古老的問題,它們有很多應(yīng)用,比如在數(shù)字信號處理、線性規(guī)劃中的估算和預(yù)測、數(shù)值分析中的非線性問題逼近等等。求解線性方程組,可以使用高斯—約當(dāng)消去法(Gauss-Jordan elimination),或是柯列斯基分解( Cholesky decomposition)。
30、Strukturtensor算法——應(yīng)用于模式識(shí)別領(lǐng)域,為所有像素找出一種計(jì)算方法,看看該像素是否處于同質(zhì)區(qū)域( homogenous region),看看它是否屬于邊緣,還是是一個(gè)頂點(diǎn)。
31、合并查找算法(Union-find)——給定一組元素,該算法常常用來把這些元素分為多個(gè)分離的、彼此不重合的組。不相交集(disjoint-set)的數(shù)據(jù)結(jié)構(gòu)可以跟蹤這樣的切分方法。合并查找算法可以在此種數(shù)據(jù)結(jié)構(gòu)上完成兩個(gè)有用的操作:
查找:判斷某特定元素屬于哪個(gè)組。
合并:聯(lián)合或合并兩個(gè)組為一個(gè)組。
32、維特比算法(Viterbi algorithm)——尋找隱藏狀態(tài)最有可能序列的動(dòng)態(tài)規(guī)劃算法,這種序列被稱為維特比路徑,其結(jié)果是一系列可以觀察到的事件,特別是在隱藏的Markov模型中。
大數(shù)據(jù)開發(fā)初學(xué)者學(xué)習(xí)路線
1.1 學(xué)會(huì)百度與Google
不論遇到什么問題,先試試搜索并自己解決。
Google首選,翻不過去的,就用百度吧。
1.2 參考資料首選官方文檔
特別是對于入門來說,官方文檔永遠(yuǎn)是首選文檔。
相信搞這塊的大多是文化人,英文湊合就行,實(shí)在看不下去的,請參考第一步。
1.3 先讓Hadoop跑起來
Hadoop可以算是大數(shù)據(jù)存儲(chǔ)和計(jì)算的開山鼻祖,現(xiàn)在大多開源的大數(shù)據(jù)框架都依賴Hadoop或者與它能很好的兼容。
關(guān)于Hadoop,你至少需要搞清楚以下是什么:
Hadoop 1.0、Hadoop 2.0
MapReduce、HDFS
NameNode、DataNode
JobTracker、TaskTracker
Yarn、ResourceManager、NodeManager
自己搭建Hadoop,請使用第一步和第二步,能讓它跑起來就行。
建議先使用安裝包命令行安裝,不要使用管理工具安裝。
另外:Hadoop1.0知道它就行了,現(xiàn)在都用Hadoop 2.0.
1.4 試試使用Hadoop
HDFS目錄操作命令;
上傳、下載文件命令;
提交運(yùn)行MapReduce示例程序;
打開Hadoop WEB界面,查看Job運(yùn)行狀態(tài),查看Job運(yùn)行日志。
知道Hadoop的系統(tǒng)日志在哪里。
1.5 你該了解它們的原理了
MapReduce:如何分而治之;
HDFS:數(shù)據(jù)到底在哪里,什么是副本;
Yarn到底是什么,它能干什么;
NameNode到底在干些什么;
ResourceManager到底在干些什么;
1.6 自己寫一個(gè)MapReduce程序
請仿照WordCount例子,自己寫一個(gè)(照抄也行)WordCount程序,
打包并提交到Hadoop運(yùn)行。
你不會(huì)Java?Shell、Python都可以,有個(gè)東西叫Hadoop Streaming。
如果你認(rèn)真完成了以上幾步,恭喜你,你的一只腳已經(jīng)進(jìn)來了。
第二章:更高效的WordCount
2.1 學(xué)點(diǎn)SQL吧
你知道數(shù)據(jù)庫嗎?你會(huì)寫SQL嗎?
如果不會(huì),請學(xué)點(diǎn)SQL吧。
2.2 SQL版WordCount
在1.6中,你寫(或者抄)的WordCount一共有幾行代碼?
給你看看我的:
SELECT word,COUNT(1) FROM wordcount GROUP BY word;
這便是SQL的魅力,編程需要幾十行,甚至上百行代碼,我這一句就搞定;使用SQL處理分析Hadoop上的數(shù)據(jù),方便、高效、易上手、更是趨勢。不論是離線計(jì)算還是實(shí)時(shí)計(jì)算,越來越多的大數(shù)據(jù)處理框架都在積極提供SQL接口。
2.3 SQL On Hadoop之Hive
什么是Hive?官方給的解釋是:
The Apache Hive data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage and queried using SQL syntax.
為什么說Hive是數(shù)據(jù)倉庫工具,而不是數(shù)據(jù)庫工具呢?有的朋友可能不知道數(shù)據(jù)倉庫,數(shù)據(jù)倉庫是邏輯上的概念,底層使用的是數(shù)據(jù)庫,數(shù)據(jù)倉庫中的數(shù)據(jù)有這兩個(gè)特點(diǎn):最全的歷史數(shù)據(jù)(海量)、相對穩(wěn)定的;所謂相對穩(wěn)定,指的是數(shù)據(jù)倉庫不同于業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫,數(shù)據(jù)經(jīng)常會(huì)被更新,數(shù)據(jù)一旦進(jìn)入數(shù)據(jù)倉庫,很少會(huì)被更新和刪除,只會(huì)被大量查詢。而Hive,也是具備這兩個(gè)特點(diǎn),因此,Hive適合做海量數(shù)據(jù)的數(shù)據(jù)倉庫工具,而不是數(shù)據(jù)庫工具。
2.4 安裝配置Hive
請參考1.1 和 1.2 完成Hive的安裝配置。可以正常進(jìn)入Hive命令行。
2.5 試試使用Hive
請參考1.1 和 1.2 ,在Hive中創(chuàng)建wordcount表,并運(yùn)行2.2中的SQL語句。
在Hadoop WEB界面中找到剛才運(yùn)行的SQL任務(wù)。
看SQL查詢結(jié)果是否和1.4中MapReduce中的結(jié)果一致。
2.6 Hive是怎么工作的
明明寫的是SQL,為什么Hadoop WEB界面中看到的是MapReduce任務(wù)?
2.7 學(xué)會(huì)Hive的基本命令
創(chuàng)建、刪除表;
加載數(shù)據(jù)到表;
下載Hive表的數(shù)據(jù);
請參考1.2,學(xué)習(xí)更多關(guān)于Hive的語法和命令。
如果你已經(jīng)按照《寫給大數(shù)據(jù)開發(fā)初學(xué)者的話》中第一章和第二章的流程認(rèn)真完整的走了一遍,那么你應(yīng)該已經(jīng)具備以下技能和知識(shí)點(diǎn):
0和Hadoop2.0的區(qū)別;
MapReduce的原理(還是那個(gè)經(jīng)典的題目,一個(gè)10G大小的文件,給定1G大小的內(nèi)存,如何使用Java程序統(tǒng)計(jì)出現(xiàn)次數(shù)最多的10個(gè)單詞及次數(shù));
HDFS讀寫數(shù)據(jù)的流程;向HDFS中PUT數(shù)據(jù);從HDFS中下載數(shù)據(jù);
自己會(huì)寫簡單的MapReduce程序,運(yùn)行出現(xiàn)問題,知道在哪里查看日志;
會(huì)寫簡單的SELECT、WHERE、GROUP BY等SQL語句;
Hive SQL轉(zhuǎn)換成MapReduce的大致流程;
Hive中常見的語句:創(chuàng)建表、刪除表、往表中加載數(shù)據(jù)、分區(qū)、將表中數(shù)據(jù)下載到本地;
從上面的學(xué)習(xí),你已經(jīng)了解到,HDFS是Hadoop提供的分布式存儲(chǔ)框架,它可以用來存儲(chǔ)海量數(shù)據(jù),MapReduce是Hadoop提供的分布式計(jì)算框架,它可以用來統(tǒng)計(jì)和分析HDFS上的海量數(shù)據(jù),而Hive則是SQL On Hadoop,Hive提供了SQL接口,開發(fā)人員只需要編寫簡單易上手的SQL語句,Hive負(fù)責(zé)把SQL翻譯成MapReduce,提交運(yùn)行。
此時(shí),你的”大數(shù)據(jù)平臺(tái)”是這樣的:
那么問題來了,海量數(shù)據(jù)如何到HDFS上呢?
第三章:把別處的數(shù)據(jù)搞到Hadoop上
此處也可以叫做數(shù)據(jù)采集,把各個(gè)數(shù)據(jù)源的數(shù)據(jù)采集到Hadoop上。
3.1 HDFS PUT命令
這個(gè)在前面你應(yīng)該已經(jīng)使用過了。
put命令在實(shí)際環(huán)境中也比較常用,通常配合shell、python等腳本語言來使用。
建議熟練掌握。
3.2 HDFS API
HDFS提供了寫數(shù)據(jù)的API,自己用編程語言將數(shù)據(jù)寫入HDFS,put命令本身也是使用API。
實(shí)際環(huán)境中一般自己較少編寫程序使用API來寫數(shù)據(jù)到HDFS,通常都是使用其他框架封裝好的方法。比如:Hive中的INSERT語句,Spark中的saveAsTextfile等。
建議了解原理,會(huì)寫Demo。
3.3 Sqoop
Sqoop是一個(gè)主要用于Hadoop/Hive與傳統(tǒng)關(guān)系型數(shù)據(jù)庫
Oracle/MySQL/SQLServer等之間進(jìn)行數(shù)據(jù)交換的開源框架。
就像Hive把SQL翻譯成MapReduce一樣,Sqoop把你指定的參數(shù)翻譯成MapReduce,提交到Hadoop運(yùn)行,完成Hadoop與其他數(shù)據(jù)庫之間的數(shù)據(jù)交換。
自己下載和配置Sqoop(建議先使用Sqoop1,Sqoop2比較復(fù)雜)。
了解Sqoop常用的配置參數(shù)和方法。
使用Sqoop完成從MySQL同步數(shù)據(jù)到HDFS;
使用Sqoop完成從MySQL同步數(shù)據(jù)到Hive表;
PS:如果后續(xù)選型確定使用Sqoop作為數(shù)據(jù)交換工具,那么建議熟練掌握,否則,了解和會(huì)用Demo即可。
3.4 Flume
Flume是一個(gè)分布式的海量日志采集和傳輸框架,因?yàn)椤安杉蛡鬏斂蚣堋保运⒉贿m合關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)采集和傳輸。
Flume可以實(shí)時(shí)的從網(wǎng)絡(luò)協(xié)議、消息系統(tǒng)、文件系統(tǒng)采集日志,并傳輸?shù)紿DFS上。
因此,如果你的業(yè)務(wù)有這些數(shù)據(jù)源的數(shù)據(jù),并且需要實(shí)時(shí)的采集,那么就應(yīng)該考慮使用Flume。
下載和配置Flume。
使用Flume監(jiān)控一個(gè)不斷追加數(shù)據(jù)的文件,并將數(shù)據(jù)傳輸?shù)紿DFS;
PS:Flume的配置和使用較為復(fù)雜,如果你沒有足夠的興趣和耐心,可以先跳過Flume。
3.5 阿里開源的DataX
之所以介紹這個(gè),是因?yàn)槲覀児灸壳笆褂玫腍adoop與關(guān)系型數(shù)據(jù)庫數(shù)據(jù)交換的工具,就是之前基于DataX開發(fā)的,非常好用。
可以參考我的博文《異構(gòu)數(shù)據(jù)源海量數(shù)據(jù)交換工具-Taobao DataX 下載和使用》。
現(xiàn)在DataX已經(jīng)是3.0版本,支持很多數(shù)據(jù)源。
你也可以在其之上做二次開發(fā)。
PS:有興趣的可以研究和使用一下,對比一下它與Sqoop。
如果你認(rèn)真完成了上面的學(xué)習(xí)和實(shí)踐,此時(shí),你的”大數(shù)據(jù)平臺(tái)”應(yīng)該是這樣的:
第四章:把Hadoop上的數(shù)據(jù)搞到別處去
前面介紹了如何把數(shù)據(jù)源的數(shù)據(jù)采集到Hadoop上,數(shù)據(jù)到Hadoop上之后,便可以使用Hive和MapReduce進(jìn)行分析了。那么接下來的問題是,分析完的結(jié)果如何從Hadoop上同步到其他系統(tǒng)和應(yīng)用中去呢?
其實(shí),此處的方法和第三章基本一致的。
4.1 HDFS GET命令
把HDFS上的文件GET到本地。需要熟練掌握。
4.2 HDFS API
同3.2.
4.3 Sqoop
同3.3.
使用Sqoop完成將HDFS上的文件同步到MySQL;
使用Sqoop完成將Hive表中的數(shù)據(jù)同步到MySQL;
4.4 DataX
同3.5.
如果你認(rèn)真完成了上面的學(xué)習(xí)和實(shí)踐,此時(shí),你的”大數(shù)據(jù)平臺(tái)”應(yīng)該是這樣的:
如果你已經(jīng)按照《寫給大數(shù)據(jù)開發(fā)初學(xué)者的話2》中第三章和第四章的流程認(rèn)真完整的走了一遍,那么你應(yīng)該已經(jīng)具備以下技能和知識(shí)點(diǎn):
知道如何把已有的數(shù)據(jù)采集到HDFS上,包括離線采集和實(shí)時(shí)采集;
你已經(jīng)知道sqoop(或者還有DataX)是HDFS和其他數(shù)據(jù)源之間的數(shù)據(jù)交換工具;
你已經(jīng)知道flume可以用作實(shí)時(shí)的日志采集。
從前面的學(xué)習(xí),對于大數(shù)據(jù)平臺(tái),你已經(jīng)掌握的不少的知識(shí)和技能,搭建Hadoop集群,把數(shù)據(jù)采集到Hadoop上,使用Hive和MapReduce來分析數(shù)據(jù),把分析結(jié)果同步到其他數(shù)據(jù)源。
接下來的問題來了,Hive使用的越來越多,你會(huì)發(fā)現(xiàn)很多不爽的地方,特別是速度慢,大多情況下,明明我的數(shù)據(jù)量很小,它都要申請資源,啟動(dòng)MapReduce來執(zhí)行。
第五章:快一點(diǎn)吧,我的SQL
其實(shí)大家都已經(jīng)發(fā)現(xiàn)Hive后臺(tái)使用MapReduce作為執(zhí)行引擎,實(shí)在是有點(diǎn)慢。
因此SQL On Hadoop的框架越來越多,按我的了解,最常用的按照流行度依次為SparkSQL、Impala和Presto.
這三種框架基于半內(nèi)存或者全內(nèi)存,提供了SQL接口來快速查詢分析Hadoop上的數(shù)據(jù)。關(guān)于三者的比較,請參考1.1.
我們目前使用的是SparkSQL,至于為什么用SparkSQL,原因大概有以下吧:
使用Spark還做了其他事情,不想引入過多的框架;
Impala對內(nèi)存的需求太大,沒有過多資源部署;
5.1 關(guān)于Spark和SparkSQL
什么是Spark,什么是SparkSQL。
Spark有的核心概念及名詞解釋。
SparkSQL和Spark是什么關(guān)系,SparkSQL和Hive是什么關(guān)系。
SparkSQL為什么比Hive跑的快。
5.2 如何部署和運(yùn)行SparkSQL
Spark有哪些部署模式?
如何在Yarn上運(yùn)行SparkSQL?
使用SparkSQL查詢Hive中的表。
PS: Spark不是一門短時(shí)間內(nèi)就能掌握的技術(shù),因此建議在了解了Spark之后,可以先從SparkSQL入手,循序漸進(jìn)。
關(guān)于Spark和SparkSQL,可參考
http://lxw1234.com/archives/category/spark
如果你認(rèn)真完成了上面的學(xué)習(xí)和實(shí)踐,此時(shí),你的”大數(shù)據(jù)平臺(tái)”應(yīng)該是這樣的:
第六章:一夫多妻制
請不要被這個(gè)名字所誘惑。其實(shí)我想說的是數(shù)據(jù)的一次采集、多次消費(fèi)。
在實(shí)際業(yè)務(wù)場景下,特別是對于一些監(jiān)控日志,想即時(shí)的從日志中了解一些指標(biāo)(關(guān)于實(shí)時(shí)計(jì)算,后面章節(jié)會(huì)有介紹),這時(shí)候,從HDFS上分析就太慢了,盡管是通過Flume采集的,但Flume也不能間隔很短就往HDFS上滾動(dòng)文件,這樣會(huì)導(dǎo)致小文件特別多。
為了滿足數(shù)據(jù)的一次采集、多次消費(fèi)的需求,這里要說的便是Kafka。
6.1 關(guān)于Kafka
什么是Kafka?
Kafka的核心概念及名詞解釋。
6.2 如何部署和使用Kafka
使用單機(jī)部署Kafka,并成功運(yùn)行自帶的生產(chǎn)者和消費(fèi)者例子。
使用Java程序自己編寫并運(yùn)行生產(chǎn)者和消費(fèi)者程序。
Flume和Kafka的集成,使用Flume監(jiān)控日志,并將日志數(shù)據(jù)實(shí)時(shí)發(fā)送至Kafka。
如果你認(rèn)真完成了上面的學(xué)習(xí)和實(shí)踐,此時(shí),你的”大數(shù)據(jù)平臺(tái)”應(yīng)該是這樣的:
這時(shí),使用Flume采集的數(shù)據(jù),不是直接到HDFS上,而是先到Kafka,Kafka中的數(shù)據(jù)可以由多個(gè)消費(fèi)者同時(shí)消費(fèi),其中一個(gè)消費(fèi)者,就是將數(shù)據(jù)同步到HDFS。
如果你已經(jīng)按照《寫給大數(shù)據(jù)開發(fā)初學(xué)者的話3》中第五章和第六章的流程認(rèn)真完整的走了一遍,那么你應(yīng)該已經(jīng)具備以下技能和知識(shí)點(diǎn):
為什么Spark比MapReduce快。
使用SparkSQL代替Hive,更快的運(yùn)行SQL。
使用Kafka完成數(shù)據(jù)的一次收集,多次消費(fèi)架構(gòu)。
自己可以寫程序完成Kafka的生產(chǎn)者和消費(fèi)者。
從前面的學(xué)習(xí),你已經(jīng)掌握了大數(shù)據(jù)平臺(tái)中的數(shù)據(jù)采集、數(shù)據(jù)存儲(chǔ)和計(jì)算、數(shù)據(jù)交換等大部分技能,而這其中的每一步,都需要一個(gè)任務(wù)(程序)來完成,各個(gè)任務(wù)之間又存在一定的依賴性,比如,必須等數(shù)據(jù)采集任務(wù)成功完成后,數(shù)據(jù)計(jì)算任務(wù)才能開始運(yùn)行。如果一個(gè)任務(wù)執(zhí)行失敗,需要給開發(fā)運(yùn)維人員發(fā)送告警,同時(shí)需要提供完整的日志來方便查錯(cuò)。
結(jié)語
關(guān)于大數(shù)據(jù)開發(fā)的相關(guān)介紹就到這了,如有不足之處歡迎指正。
-
SQL
+關(guān)注
關(guān)注
1文章
780瀏覽量
44800 -
大數(shù)據(jù)
+關(guān)注
關(guān)注
64文章
8949瀏覽量
139449
發(fā)布評論請先 登錄
評論