kafka編程
『壹』 大數據處理需要用到的九種編程語言
大數據處理需要用到的九種編程語言
隨著大數據的熱潮不斷升溫,幾乎各個領域都有洪水傾瀉般的信息涌來,面對用戶成千上萬的瀏覽記錄、記錄行為數據,如果就單純的Excel來進行數據處理是遠遠不能滿足的。但如果只用一些操作軟體來分析,而不怎麼如何用邏輯數據來分析的話,那也只是簡單的數據處理。
替代性很高的工作,而無法深入規劃策略的核心。
當然,基本功是最不可忽略的環節,想要成為數據科學家,對於這幾個程序你應該要有一定的認識:
R若要列出所有程序語言,你能忘記其他的沒關系,但最不能忘的就是R。從1997年悄悄地出現,最大的優勢就是它免費,為昂貴的統計軟體像是Matlab或SAS的另一種選擇。
但是在過去幾年來,它的身價大翻轉,變成了資料科學界眼中的寶。不只是木訥的統計學家熟知它,包括WallStreet交易員、生物學家,以及矽谷開發者,他們都相當熟悉R。多元化的公司像是Google、Facebook、美國銀行以及NewYorkTimes通通都使用R,它的商業效用持續提高。
R的好處在於它簡單易上手,透過R,你可以從復雜的數據集中篩選你要的數據,從復雜的模型函數中操作數據,建立井然有序的圖表來呈現數字,這些都只需要幾行程序代碼就可以了,打個比方,它就像是好動版本的Excel。
R最棒的資產就是活躍的動態系統,R社群持續地增加新的軟體包,還有以內建豐富的功能集為特點。目前估計已有超過200萬人使用R,最近的調查顯示,R在數據科學界里,到目前為止最受歡迎的語言,佔了回復者的61%(緊追在後的是39%的python)。
它也吸引了WallStreet的注目。傳統而言,證券分析師在Excel檔從白天看到晚上,但現在R在財務建模的使用率逐漸增加,特別是可視化工具,美國銀行的副總裁NiallO』Conno說,「R讓我們俗氣的表格變得突出」。
在數據建模上,它正在往逐漸成熟的專業語言邁進,雖然R仍受限於當公司需要製造大規模的產品時,而有的人說他被其他語言篡奪地位了。
「R更有用的是在畫圖,而不是建模。」頂尖數據分析公司Metamarkets的CEO,MichaelDriscoll表示,
「你不會在Google的網頁排名核心或是Facebook的朋友們推薦演算法時看到R的蹤影,工程師會在R里建立一個原型,然後再到java或Python里寫模型語法」。
舉一個使用R很有名的例子,在2010年時,PaulButler用R來建立Facebook的世界地圖,證明了這個語言有多豐富多強大的可視化數據能力,雖然他現在比以前更少使用R了。
「R已經逐漸過時了,在龐大的數據集底下它跑的慢又笨重」Butler說。
所以接下來他用什麼呢?
Python如果說R是神經質又令人喜愛的Geek,那Python就是隨和又好相處的女生。
Python結合了R的快速、處理復雜數據采礦的能力以及更務實的語言等各個特質,迅速地成為主流,Python比起R,學起來更加簡單也更直觀,而且它的生態系統近幾年來不可思議地快速成長,在統計分析上比起R功能更強。
Butler說,「過去兩年間,從R到Python地顯著改變,就像是一個巨人不斷地推動向前進」。
在數據處理范疇內,通常在規模與復雜之間要有個取捨,而Python以折衷的姿態出現。IPythonNotebook(記事本軟體)和NumPy被用來暫時存取較低負擔的工作量,然而Python對於中等規模的數據處理是相當好的工具;Python擁有豐富的資料族,提供大量的工具包和統計特徵。
美國銀行用Python來建立新產品和在銀行的基礎建設介面,同時也處理財務數據,「Python是更廣泛又相當有彈性,所以大家會對它趨之若鶩。」O』Donnell如是說。
然而,雖然它的優點能夠彌補R的缺點,它仍然不是最高效能的語言,偶爾才能處理龐大規模、核心的基礎建設。Driscoll是這么認為的。
Julia今日大多數的數據科學都是透過R、Python、Java、Matlab及SAS為主,但仍然存在著鴻溝要去彌補,而這個時候,新進者Julia看到了這個痛點。
Julia仍太過於神秘而尚未被業界廣泛的採用,但是當談到它的潛力足以搶奪R和Python的寶座時,數據黑客也難以解釋。原因在於Julia是個高階、不可思議的快速和善於表達的語言,比起R要快的許多,比起Python又有潛力處理更具規模的數據,也很容易上手。
「Julia會變的日漸重要,最終,在R和Python可以做的事情在Julia也可以」。Butler是這么認為的。
就現在而言,若要說Julia發展會倒退的原因,大概就是它太年輕了。Julia的數據小區還在初始階段,在它要能夠和R或Python競爭前,它還需要更多的工具包和軟體包。
Driscoll說,它就是因為它年輕,才會有可能變成主流又有前景。
JavaDriscoll說,Java和以Java為基礎的架構,是由矽谷里最大的幾家科技公司的核心所建立的,如果你從Twitter、Linkedin或是Facebook里觀察,你會發現Java對於所有數據工程基礎架構而言,是非常基礎的語言。
Java沒有和R和Python一樣好的可視化功能,它也不是統計建模的最佳工具,但是如果你需要建立一個龐大的系統、使用過去的原型,那Java通常會是你最基的選擇。
Hadoop and Hive
為了迎合大量數據處理的需求,以Java為基礎的工具群興起。Hadoop為處理一批批數據處理,發展以Java為基礎的架構關鍵;相較於其他處理工具,Hadoop慢許多,但是無比的准確和可被後端資料庫分析廣泛使用。和Hive搭配的很好,Hive是基於查詢的架構下,運作的相當好。
Scala又是另一個以Java為基礎的語言,和Java很像,對任何想要進行大規模的機械學習或是建立高階的演算法,Scala會是逐漸興起的工具。它是善於呈現且擁有建立可靠系統的能力。
「Java像是用鋼鐵建造的;Scala則是讓你能夠把它拿進窯烤然後變成鋼的黏土」Driscoll說。
Kafka andStorm說到當你需要快速的、實時的分析時,你會想到什麼?Kafka將會是你的最佳夥伴。其實它已經出現五年有了,只是因為最近串流處理興起才變的越來越流行。
Kafka是從Linkedin內誕生的,是一個特別快速的查詢訊息系統。Kafka的缺點呢?就是它太快了,因此在實時操作時它會犯錯,有時候會漏掉東西。
魚與熊掌不可兼得,「必須要在准確度跟速度之間做一個選擇」,Driscoll說。所以全部在矽谷的科技大公司都利用兩個管道:用Kafka或Storm處理實時數據,接下來打開Hadoop處理一批批處理數據系統,這樣聽起來有點麻煩又會有些慢,但好處是,它非常非常精準。
Storm是另一個從Scala寫出來的架構,在矽谷逐漸大幅增加它在串流處理的受歡迎程度,被Twitter並購,這並不意外,因為Twitter對快速事件處理有極大的興趣。
MatlabMatlab可以說是歷久不衰,即使它標價很高;在非常特定的利基市場它使用的相當廣泛,包括密集的研究機器學習、信號處理、圖像辨識等等。
OctaveOctave和Matlab很像,除了它是免費的之外。然而,在學術信號處理的圈子,幾乎都會提到它。
GOGO是另一個逐漸興起的新進者,從Google開發出來的,放寬點說,它是從C語言來的,並且在建立強大的基礎架構上,漸漸地成為Java和Python的競爭者。
這么多的軟體可以使用,但我認為不見得每個都一定要會才行,知道你的目標和方向是什麼,就選定一個最適合的工具使用吧!可以幫助你提升效率又達到精準的結果。
以上是小編為大家分享的關於大數據處理需要用到的九種編程語言的相關內容,更多信息可以關注環球青藤分享更多干貨
『貳』 大數據培訓課程都包含哪些內容
大數據培訓課程內容一般都是從基礎知識講起,並且課程內容與企業實際需求相匹配、理論與實戰相結合這樣學員在培訓機構學完後找工作才比較容易,一般主要學習Java語言基礎、HTML、CSS、Java、JavaWeb和資料庫、Lnux基礎、Hadoop:生態體系、Spark:生態體系等課程內容。如需大數據培訓推薦選擇【達內教育】。
大數據技術龐大復雜,基礎的技術包含數據的採集、數據預處理、分布式存儲、資料庫、數據倉庫、機器學習、並行計算、可視化等名種技術范疇和不同的技術層面。一般工作包括數據清洗,執行分析和數據可視化。學習Python、資料庫、網路爬蟲、數據分析與處理等。感興趣的話點擊此處,免費學習一下
想了解更多有關大數據的相關信息,推薦咨詢【達內教育】。達內與阿里、Adobe、紅帽、ORACLE、微軟、美國計算機行業協會(CompTIA)、網路等國際知名廠商建立了項目合作關系。共同制定行業培訓標准,為達內學員提供高端技術、所學課程受國際廠商認可,讓達內學員更具國際化就業競爭力。達內IT培訓機構,試聽名額限時搶購。
『叄』 大數據雲計算好不好學習
說一下大數據的四個典型的特徵:
數據量大;
數據類型繁多,(結構化、非結構化文本、日誌、視頻、圖片、地理位置等);
商業價值高,但需要在海量數據之上,通過數據分析與機器學習快速的挖掘出來;
處理時效性高,海量數據的處理需求不再局限在離線計算當中。
第一章:Hadoop
在大數據存儲和計算中Hadoop可以算是開山鼻祖,現在大多開源的大數據框架都依賴Hadoop或者與它能很好的兼容。
關於Hadoop,你至少需要搞清楚這些是什麼:
自己學會如何搭建Hadoop,先讓它跑起來。建議先使用安裝包命令行安裝,不要使用管理工具安裝。現在都用Hadoop 2.0。
目錄操作命令;上傳、下載文件命令;提交運行MapRece示常式序;打開Hadoop WEB界面,查看Job運行狀態,查看Job運行日誌。知道Hadoop的系統日誌在哪裡。
以上完成之後,就應該去了解他們的原理了:
MapRece:如何分而治之;HDFS:數據到底在哪裡,究竟什麼才是副本;
Yarn到底是什麼,它能幹什麼;NameNode到底在幹些什麼;Resource Manager到底在幹些什麼;
如果有合適的學習網站,視頻就去聽課,如果沒有或者比較喜歡書籍,也可以啃書。當然最好的方法是先去搜索出來這些是干什麼的,大概有了概念之後,然後再去聽視頻。
第二章:更高效的WordCount
在這里,一定要學習SQL,它會對你的工作有很大的幫助。
就像是你寫(或者抄)的WordCount一共有幾行代碼?但是你用SQL就非常簡單了,例如:
SELECT word,COUNT(1) FROM wordcount GROUP BY word;
這便是SQL的魅力,編程需要幾十行,甚至上百行代碼,而SQL一行搞定;使用SQL處理分析Hadoop上的數據,方便、高效、易上手、更是趨勢。不論是離線計算還是實時計算,越來越多的大數據處理框架都在積極提供SQL介面。
另外就是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是數據倉庫工具,而不是資料庫工具呢?
有的朋友可能不知道數據倉庫,數據倉庫是邏輯上的概念,底層使用的是資料庫,數據倉庫中的數據有這兩個特點:最全的歷史數據(海量)、相對穩定的;所謂相對穩定,指的是數據倉庫不同於業務系統資料庫,數據經常會被更新,數據一旦進入數據倉庫,很少會被更新和刪除,只會被大量查詢。而Hive,也是具備這兩個特點,因此,Hive適合做海量數據的數據倉庫工具,而不是資料庫工具。
了解了它的作用之後,就是安裝配置Hive的環節,當可以正常進入Hive命令行是,就是安裝配置成功了。
了解Hive是怎麼工作的
學會Hive的基本命令:
創建、刪除表;載入數據到表;下載Hive表的數據;
MapRece的原理(還是那個經典的題目,一個10G大小的文件,給定1G大小的內存,如何使用Java程序統計出現次數最多的10個單詞及次數);
HDS讀寫數據的流程;向HDFS中PUT數據;從HDFS中下載數據;
自己會寫簡單的MapRece程序,運行出現問題,知道在哪裡查看日誌;
會寫簡單的Select、Where、group by等SQL語句;
Hive SQL轉換成MapRece的大致流程;
Hive中常見的語句:創建表、刪除表、往表中載入數據、分區、將表中數據下載到本地;
從上面的學習,你已經了解到,HDFS是Hadoop提供的分布式存儲框架,它可以用來存儲海量數據,MapRece是Hadoop提供的分布式計算框架,它可以用來統計和分析HDFS上的海量數據,而Hive則是SQL On Hadoop,Hive提供了SQL介面,開發人員只需要編寫簡單易上手的SQL語句,Hive負責把SQL翻譯成MapRece,提交運行。
此時,你的」大數據平台」是這樣的:那麼問題來了,海量數據如何到HDFS上呢?
第三章:數據採集
把各個數據源的數據採集到Hadoop上。
3.1 HDFS PUT命令
這個在前面你應該已經使用過了。put命令在實際環境中也比較常用,通常配合shell、python等腳本語言來使用。建議熟練掌握。
3.2 HDFS API
HDFS提供了寫數據的API,自己用編程語言將數據寫入HDFS,put命令本身也是使用API。
實際環境中一般自己較少編寫程序使用API來寫數據到HDFS,通常都是使用其他框架封裝好的方法。比如:Hive中的INSERT語句,Spark中的saveAsTextfile等。建議了解原理,會寫Demo。
3.3 Sqoop
Sqoop是一個主要用於Hadoop/Hive與傳統關系型資料庫,Oracle、MySQL、SQLServer等之間進行數據交換的開源框架。就像Hive把SQL翻譯成MapRece一樣,Sqoop把你指定的參數翻譯成MapRece,提交到Hadoop運行,完成Hadoop與其他資料庫之間的數據交換。
自己下載和配置Sqoop(建議先使用Sqoop1,Sqoop2比較復雜)。了解Sqoop常用的配置參數和方法。
使用Sqoop完成從MySQL同步數據到HDFS;使用Sqoop完成從MySQL同步數據到Hive表;如果後續選型確定使用Sqoop作為數據交換工具,那麼建議熟練掌握,否則,了解和會用Demo即可。
3.4 Flume
Flume是一個分布式的海量日誌採集和傳輸框架,因為「採集和傳輸框架」,所以它並不適合關系型資料庫的數據採集和傳輸。Flume可以實時的從網路協議、消息系統、文件系統採集日誌,並傳輸到HDFS上。
因此,如果你的業務有這些數據源的數據,並且需要實時的採集,那麼就應該考慮使用Flume。
下載和配置Flume。使用Flume監控一個不斷追加數據的文件,並將數據傳輸到HDFS;Flume的配置和使用較為復雜,如果你沒有足夠的興趣和耐心,可以先跳過Flume。
3.5 阿里開源的DataX
現在DataX已經是3.0版本,支持很多數據源。
第四章:把Hadoop上的數據搞到別處去
Hive和MapRece進行分析了。那麼接下來的問題是,分析完的結果如何從Hadoop上同步到其他系統和應用中去呢?其實,此處的方法和第三章基本一致的。
HDFS GET命令:把HDFS上的文件GET到本地。需要熟練掌握。
HDFS API:同3.2.
Sqoop:同3.3.使用Sqoop完成將HDFS上的文件同步到MySQL;使用Sqoop完成將Hive表中的數據同步到MySQL。
如果你已經按照流程認真完整的走了一遍,那麼你應該已經具備以下技能和知識點:
知道如何把已有的數據採集到HDFS上,包括離線採集和實時採集;
知道sqoop是HDFS和其他數據源之間的數據交換工具;
知道flume可以用作實時的日誌採集。
從前面的學習,對於大數據平台,你已經掌握的不少的知識和技能,搭建Hadoop集群,把數據採集到Hadoop上,使用Hive和MapRece來分析數據,把分析結果同步到其他數據源。
接下來的問題來了,Hive使用的越來越多,你會發現很多不爽的地方,特別是速度慢,大多情況下,明明我的數據量很小,它都要申請資源,啟動MapRece來執行。
第五章:SQL
其實大家都已經發現Hive後台使用MapRece作為執行引擎,實在是有點慢。因此SQL On Hadoop的框架越來越多,按我的了解,最常用的按照流行度依次為SparkSQL、Impala和Presto.這三種框架基於半內存或者全內存,提供了SQL介面來快速查詢分析Hadoop上的數據。
我們目前使用的是SparkSQL,至於為什麼用SparkSQL,原因大概有以下吧:使用Spark還做了其他事情,不想引入過多的框架;Impala對內存的需求太大,沒有過多資源部署。
5.1 關於Spark和SparkSQL
什麼是Spark,什麼是SparkSQL。
Spark有的核心概念及名詞解釋。
SparkSQL和Spark是什麼關系,SparkSQL和Hive是什麼關系。
SparkSQL為什麼比Hive跑的快。
5.2 如何部署和運行SparkSQL
Spark有哪些部署模式?
如何在Yarn上運行SparkSQL?
使用SparkSQL查詢Hive中的表。Spark不是一門短時間內就能掌握的技術,因此建議在了解了Spark之後,可以先從SparkSQL入手,循序漸進。
關於Spark和SparkSQL,如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的。
第六章:數據多次利用
請不要被這個名字所誘惑。其實我想說的是數據的一次採集、多次消費。
在實際業務場景下,特別是對於一些監控日誌,想即時的從日誌中了解一些指標(關於實時計算,後面章節會有介紹),這時候,從HDFS上分析就太慢了,盡管是通過Flume採集的,但Flume也不能間隔很短就往HDFS上滾動文件,這樣會導致小文件特別多。
為了滿足數據的一次採集、多次消費的需求,這里要說的便是Kafka。
關於Kafka:什麼是Kafka?Kafka的核心概念及名詞解釋。
如何部署和使用Kafka:使用單機部署Kafka,並成功運行自帶的生產者和消費者例子。使用Java程序自己編寫並運行生產者和消費者程序。Flume和Kafka的集成,使用Flume監控日誌,並將日誌數據實時發送至Kafka。
如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的。
這時,使用Flume採集的數據,不是直接到HDFS上,而是先到Kafka,Kafka中的數據可以由多個消費者同時消費,其中一個消費者,就是將數據同步到HDFS。
如果你已經認真完整的學習了以上的內容,那麼你應該已經具備以下技能和知識點:
為什麼Spark比MapRece快。
使用SparkSQL代替Hive,更快的運行SQL。
使用Kafka完成數據的一次收集,多次消費架構。
自己可以寫程序完成Kafka的生產者和消費者。
從前面的學習,你已經掌握了大數據平台中的數據採集、數據存儲和計算、數據交換等大部分技能,而這其中的每一步,都需要一個任務(程序)來完成,各個任務之間又存在一定的依賴性,比如,必須等數據採集任務成功完成後,數據計算任務才能開始運行。如果一個任務執行失敗,需要給開發運維人員發送告警,同時需要提供完整的日誌來方便查錯。
第七章:越來越多的分析任務
不僅僅是分析任務,數據採集、數據交換同樣是一個個的任務。這些任務中,有的是定時觸發,有點則需要依賴其他任務來觸發。當平台中有幾百上千個任務需要維護和運行時候,僅僅靠crontab遠遠不夠了,這時便需要一個調度監控系統來完成這件事。調度監控系統是整個數據平台的中樞系統,類似於AppMaster,負責分配和監控任務。
7.1 Apache Oozie
Oozie是什麼?有哪些功能?
Oozie可以調度哪些類型的任務(程序)?
Oozie可以支持哪些任務觸發方式?
安裝配置Oozie。
7.2 其他開源的任務調度系統
Azkaban,light-task-scheler,Zeus,等等。另外,我這邊是之前單獨開發的任務調度與監控系統,具體請參考《大數據平台任務調度與監控系統》。
第八章:我的數據要實時
在第六章介紹Kafka的時候提到了一些需要實時指標的業務場景,實時基本可以分為絕對實時和准實時,絕對實時的延遲要求一般在毫秒級,准實時的延遲要求一般在秒、分鍾級。對於需要絕對實時的業務場景,用的比較多的是Storm,對於其他准實時的業務場景,可以是Storm,也可以是Spark Streaming。當然,如果可以的話,也可以自己寫程序來做。
8.1 Storm
什麼是Storm?有哪些可能的應用場景?
Storm由哪些核心組件構成,各自擔任什麼角色?
Storm的簡單安裝和部署。
自己編寫Demo程序,使用Storm完成實時數據流計算。
8.2 Spark Streaming
什麼是Spark Streaming,它和Spark是什麼關系?
Spark Streaming和Storm比較,各有什麼優缺點?
使用Kafka + Spark Streaming,完成實時計算的Demo程序。
至此,你的大數據平台底層架構已經成型了,其中包括了數據採集、數據存儲與計算(離線和實時)、數據同步、任務調度與監控這幾大模塊。接下來是時候考慮如何更好的對外提供數據了。
第九章:數據要對外
通常對外(業務)提供數據訪問,大體上包含以下方面。
離線:比如,每天將前一天的數據提供到指定的數據源(DB、FILE、FTP)等;離線數據的提供可以採用Sqoop、DataX等離線數據交換工具。
實時:比如,在線網站的推薦系統,需要實時從數據平台中獲取給用戶的推薦數據,這種要求延時非常低(50毫秒以內)。根據延時要求和實時數據的查詢需要,可能的方案有:HBase、Redis、MongoDB、ElasticSearch等。
OLAP分析:OLAP除了要求底層的數據模型比較規范,另外,對查詢的響應速度要求也越來越高,可能的方案有:Impala、Presto、SparkSQL、Kylin。如果你的數據模型比較規模,那麼Kylin是最好的選擇。
即席查詢:即席查詢的數據比較隨意,一般很難建立通用的數據模型,因此可能的方案有:Impala、Presto、SparkSQL。
這么多比較成熟的框架和方案,需要結合自己的業務需求及數據平台技術架構,選擇合適的。原則只有一個:越簡單越穩定的,就是最好的。
『肆』 做軟體用什麼編程語言好
大家好,我是阿毛,計算機專業畢業,現在從事相關工作。我來回答你的這個問題。其實行內有句話叫開發軟體,不在於用什麼語言,精通就行。話雖不錯,但是個人覺得還是需要根據需求出發,不同的需要選擇不同的語言,不但可以提升開發效率,也是提升或野運行效率。下面我就來舉幾個例子,從不同角度說明下不同語言在不同面的優勢。
首推java語言,可從不同角度切入,做網站,應用平台,前端、後端等都適合。唯一缺緩團雹點就是大了點,耗內存,但是現在的電腦配置,運行基本沒什麼問題。腳本語言,如python等,膠水語言,在眾多擾帆環境及場合都能融入,而且簡單易學,容易入門。對後續的擴展也非常好。現在都是講究框架型、分布式等開發,可以學這些語言springboot、cloud、kafka、zookeeper、es等等想要精通一門語言,學java,想學數據分析AI,學python。個人建議供參加。希望我的回答能幫忙到你。