云計算與分布式計算區(qū)別
分布式計算是指在一個松散或嚴格約束條件下使用一個硬件和軟件系統(tǒng)處理任務(wù),這個系統(tǒng)包含多個處理器單元或存儲單元、多個并發(fā)的過程、多個程序。一個程序被分成多個部分,同時在通過網(wǎng)絡(luò)連接起來的計算機上運行。分布式計算類似于并行計算, 但并行計算通常用于指一個程序的多個部分同時運行于某臺計算機上的多個處理器上。所以,分布式計算通常必須處理異構(gòu)環(huán)境、多樣化的網(wǎng)絡(luò)連接、不可預(yù)知的網(wǎng)絡(luò)或計算機錯誤。很顯然,云計算屬于分布式計算的范疇,是以提供對外服務(wù)為導(dǎo)向的分布式計算形式。云計算把應(yīng)用和系統(tǒng)建立在大規(guī)模的廉價服務(wù)器集群之上,通過基礎(chǔ)設(shè)施與上層應(yīng)用程序的協(xié)同構(gòu)建以達到最大效率利用硬件資源的目的以及通過軟件的方法容忍多個節(jié)點的錯誤,達到了分布式計算系統(tǒng)可擴展性和可靠性兩個方面的目標。
【小馬:一個是通過網(wǎng)絡(luò)連接起來的機器,一個是服務(wù)集群】
Hadoop的框架最核心的設(shè)計就是:HDFS和MapReduce。HDFS為海量的數(shù)據(jù)提供了存儲,而MapReduce則為海量的數(shù)據(jù)提供了計算。
es側(cè)重搜索引擎,hadoop側(cè)重數(shù)據(jù)分析。兩者都能存儲海量數(shù)據(jù),億級百億級不是問題。
更上層應(yīng)用,如:數(shù)據(jù)挖掘,機器學(xué)習(xí),發(fā)現(xiàn)、預(yù)測分析等都必須基于大規(guī)模的數(shù)據(jù),沒有足夠的數(shù)據(jù)一切扯淡,數(shù)據(jù)量足夠大,就必須分布式存儲,依賴大規(guī)模的廉價PC構(gòu)建hadoop集群是非常有必要的。
HADOOP 和 HIVE
為了滿足數(shù)據(jù)處理的巨大需求,基于 Java 的工具群涌而現(xiàn)。 作為基于 Java 的框架,Hadoop 在批處理領(lǐng)域成為熱點。Hadoop 比其他處理工具速度要慢,但是它非常精確且被廣泛的應(yīng)用于后臺分析,它很好的融合了 Hive, 一個運行在 Hadoop 上的基于查詢的框架。
大數(shù)據(jù)
IT行業(yè)術(shù)語,是指無法在一定時間范圍內(nèi)用常規(guī)軟件工具進行捕捉、管理和處理的數(shù)據(jù)集合,是需要新處理模式才能具有更強的決策力、洞察發(fā)現(xiàn)力和流程優(yōu)化能力的海量、高增長率和多樣化的信息資產(chǎn)。 具有4個V的特點。
數(shù)據(jù)挖掘
理論上不限制編程語言,只要能實現(xiàn)數(shù)據(jù)抓取和分析就可以,用Excel人工能分析也可以,不過確實有一些語言特別適合數(shù)據(jù)分析、數(shù)據(jù)挖掘。主要是語言的設(shè)計和社區(qū)生態(tài)決定的。
Python:Python 語言廣受數(shù)據(jù)分析、數(shù)據(jù)挖掘和機器學(xué)習(xí)領(lǐng)域的喜愛,在數(shù)據(jù)分析領(lǐng)域有比較著名的庫有 Numpy,Scipy,Pandas 等,繪圖庫非常豐富,還有像 JupyterNotebook 這樣為數(shù)據(jù)分析量身定做的筆記本工具。
R:一款非常強大的統(tǒng)計分析語言,自帶了非常豐富的統(tǒng)計和繪圖庫,是商業(yè)統(tǒng)計工具 S 的開源替代產(chǎn)品,在學(xué)術(shù)領(lǐng)域非常受歡迎,同時 JupyterNotebook 也支持 R。
Java:Java 應(yīng)用范圍非常廣,因為大數(shù)據(jù)領(lǐng)域的大多數(shù)系統(tǒng)(例如 Hadoop)都是基于 Java 開發(fā)的,所以用 Java 來進行大數(shù)據(jù)的分析也是最常見的。Java 在大型工程化應(yīng)用中使用廣泛,但是缺點是不能交互式分析。
Scala:Scala 是基于 Java 語言的動態(tài)腳本語言,在大數(shù)據(jù)領(lǐng)域也有廣泛的使用(例如 Spark,F(xiàn)link),可以和 Java 無縫集成,同時提供了非常靈活的動態(tài)特性和交互式編程方式。
Julia:這是專門為高性能科學(xué)計算設(shè)計的動態(tài)語言,對數(shù)據(jù)分析、可視化、機器學(xué)習(xí)領(lǐng)域的支持非常好,而且據(jù)說性能非常高。但是出來時間比較短,我自己也沒有嘗試過。
常見的Python數(shù)據(jù)分析庫
Pandas
Pandas是一個開放源碼的Python庫,它使用強大的數(shù)據(jù)結(jié)構(gòu)提供高性能的數(shù)據(jù)操作和分析工具。它的名字:Pandas是從Panel Data - 多維數(shù)據(jù)的計量經(jīng)濟學(xué)(an Econometrics from Multidimensional data)。
在Pandas之前,Python主要用于數(shù)據(jù)遷移和準備。它對數(shù)據(jù)分析的貢獻更小。 Pandas解決了這個問題。使用Pandas可以完成數(shù)據(jù)處理和分析的五個典型步驟,而不管數(shù)據(jù)的來源 - 加載,準備,操作,模型和分析。Python Pandas用于廣泛的領(lǐng)域,包括金融,經(jīng)濟,統(tǒng)計,分析等學(xué)術(shù)和商業(yè)領(lǐng)域。
總的來說,Pandas比較適合用作數(shù)據(jù)的預(yù)處理和數(shù)據(jù)結(jié)構(gòu)的處理。
NumPy
NumPy 是一個 Python 包。 它代表 “Numeric Python”。 它是一個由多維數(shù)組對象和用于處理數(shù)組的例程集合組成的庫。
NumPy的主要功能:
快速高效的多維數(shù)組對象ndarray
用于對數(shù)組執(zhí)行元素級計算以及直接對數(shù)組執(zhí)行數(shù)學(xué)運算的函數(shù)
用于讀寫硬盤上基于數(shù)組的數(shù)據(jù)集的工具
線性代數(shù)運算、傅里葉變換,以及隨機數(shù)生成
用于將C、C++、Fortran代碼集成到python的工具
與線性代數(shù)有關(guān)的操作;
NumPy 擁有線性代數(shù)和隨機數(shù)生成的內(nèi)置函數(shù);
總的來說,NumPy適合用于科學(xué)計算和機器學(xué)習(xí)等大型計算工程,甚至成了MatLab的優(yōu)秀替代者。
SciPy
SciPy是一個開放源碼的BSD許可的數(shù)學(xué),科學(xué)和工程庫。 SciPy庫依賴于NumPy,它提供了便捷且快速的N維數(shù)組操作。構(gòu)建SciPy庫的主要原因是,它能與NumPy數(shù)組一起工作,并提供了許多用戶友好和高效的數(shù)字實踐,例如:數(shù)值積分和優(yōu)化的例程。
Matplotlib
Matplotlib是一個Python 2D繪圖庫,可以生成各種硬拷貝格式和跨平臺交互式環(huán)境的出版物質(zhì)量數(shù)據(jù)。Matplotlib可用于Python腳本,Python和IPython shell,Jupyter筆記本,Web應(yīng)用程序服務(wù)器和四個圖形用戶界面工具包。
Matplotlib主要用于數(shù)據(jù)分析最后的數(shù)據(jù)可視化。當然目前有很Matplotlib的替代者,比如Pychart、echarts。