❶ 大數據專業主要學什麼
「大數據」簡單來說,就是一些把我們需要觀察的對象數據化,然後把數據輸入計算機,讓計算機對這些大量的數據進行分析之後,給出我們一些結論。
①JavaSE核心技術
②Hadoop平台核心技術、Hive開發、HBase開發
③Spark相關技術、Scala基本編程
④掌握Python基本使用、核心庫的使用、Python爬蟲、簡單數據分析;理解Python機器學習
⑤大數據項目開發實戰,大數據系統管理優化
⑥雲平台開發技術
整體來說,大數據課程知識點多,課程難度較大。雖然是0基礎入門,但企業對大數據人才招聘要求高,至少需要本科學歷,建議本科及以上學歷同學報名。
南京北大青鳥祝你學有所成!
北大青鳥中博軟體學院小班教學實拍
❷ 學習java,C++,大數據我們如何成為技術大牛
僅供參考:
0段—非程序員:
初學編程者,遇到問題,完全是懵懵懂懂,不知道該怎麼編程解決問題。也就是說,還是門外漢,還不能稱之為「程序員」。計算機在他面前還是一個神秘的黑匣子。
1段—基礎程序員:
學習過一段時間編程後,接到任務,可以編寫程序完成任務。
編寫出來的代碼,正常情況下是能夠工作的,但在實際運行中,碰到一些特殊條件就會出現各類BUG。也就是說,具備了開發Demo軟體的能力,但開發的軟體真正交付給客戶使用,恐怕會被客戶罵死。
程序員程序是寫好了,但到底為什麼它有時能正常工作,有時又不行,程序員自己也不知道。
運行中遇到了bug,或者需求改變,需要修改代碼或者添加代碼,很快程序就變得結構混亂,代碼膨脹,bug叢生。很快,就連最初的開發者自己也不願意接手維護這個程序了。
2段—數據結構:
經過一段時間的編程實踐後,程序員會認識到「數據結構+演算法=程序」這一古訓的含義。他們會使用演算法來解決問題。進而,他們會認識到,演算法本質上是依附於數據結構的,好的數據結構一旦設計出來,那麼好的演算法也會應運而生。
設計錯誤的數據結構,不可能生長出好的演算法。
記得某一位外國先賢曾經說過:「給我看你的數據結構!」
3段—面向對象:
再之後,程序員就會領略面向對象程序設計的強大威力。大多數現代編程語言都是支持面向對象的。但並不是說,你使用面向對象編程語言編程,你用上了類,甚至繼承了類,你就是在寫面向對象的代碼了。
我曾經見過很多用Java,Python,Ruby寫的面向過程的代碼。
只有你掌握了介面,掌握了多態,掌握了類和類,對象和對象之間的關系,你才真正掌握了面向對象編程技術。
就算你用的是傳統的不支持面向對象的編程語言,只要你心中有「對象」,你依然可以開發出面向對象的程序。
如,我用C語言編程的時候,會有意識的使用面向對象的技巧來編寫和設計程序。用struct來模擬類,把同一類概念的函數放在一起模擬類。如果你懷疑用C語言是否能編寫出面向對象的代碼,你可以看一下Linux內核,它是用C語言編寫的,但你也可以看到它的源代碼字里行間散發出的濃濃的「對象」的味道。
真正掌握面向對象編程技術並不容易。
在我的技術生涯中,有兩個坎讓我最感頭疼。
一個坎是Dos向Windows開發的變遷過程中,框架的概念,很長一段時間我都理解不了。Dos時代,都是對函數庫的調用,你的程序主動調用函數。Windows時代,則換成了框架。就算是你的main程序,其實也是被框架調用的。UI線程會從操作系統獲取消息,然後發送給你的程序來處理。Java程序員熟悉的Spring框架,也是這樣一個反向調用的框架。
現在因為「框架」這個術語顯得很高大上,因此很多「類庫」/「函數庫」都自稱為「框架」。在我看來這都是名稱的濫用。
「類庫」/「函數庫」就是我寫的代碼調用它們。
「框架」就是我注冊回調函數到框架,框架來調用我寫的函數。
另一個坎就是面向對象。很長一段時間我都不知道應該怎麼設計類和類之間的關系,不能很好的設計出類層次結構來。
我記得當時看到一本外國大牛的書,他講了一個很簡單、很實用的面向對象設計技巧:「敘述問題。然後把其中的名詞找出來,用來構建類。把其中的動詞找出來,用來構建類的方法」。雖然這個技巧挺管用的,但也太草根了點,沒有理論依據,也不嚴謹。如果問題敘述的不好,那麼獲得的類系統就會是有問題的。
掌握面向對象思想的途徑應該有很多種,我是從關系資料庫中獲得了靈感來理解和掌握面向對象設計思想的。
在我看來,關系資料庫的表,其實就是一個類,每一行記錄就是一個類的實例,也就是對象。表之間的關系,就是類之間的關系。O-Rmapping技術(如Hibernate),用於從面向對象代碼到資料庫表之間的映射,這也說明了類和表確實是邏輯上等價的。
既然資料庫設計和類設計是等價的,那麼要設計面向對象系統,只需要使用關系資料庫的設計技巧即可。
關系資料庫表結構設計是很簡單的:
1,識別表和表之間的關系,也就是類和類之間的關系。是一對一,一對多,多對一,還是多對多。這就是類之間的關系。
2,識別表的欄位。一個對象當然有無數多的屬性(如,人:身高,體重,性別,年齡,姓名,身份證號,駕駛證號,銀行卡號,護照號,港澳通行證號,工號,病史,婚史etc),我們寫程序需要記錄的只是我們關心的屬性。這些關心的屬性,就是表的欄位,也就是類的屬性。「弱水三千,我取一瓢飲」!
4段—設計模式:
曾經在網上看到這樣一句話:「沒有十萬行代碼量,就不要跟我談什麼設計模式」。深以為然。
記得第一次看Gof的設計模式那本書的時候,發現雖然以前並不知道設計模式,但在實際編程過程中,其實還是自覺使用了一些設計模式。設計模式是編程的客觀規律,不是誰發明的,而是一些早期的資深程序員首先發現的。
不用設計模式,你也可以寫出滿足需求的程序來。但是,一旦後續需求變化,那麼你的程序沒有足夠的柔韌性,將難以為繼。而真實的程序,交付客戶後,一定會有進一步的需求反饋。而後續版本的開發,也一定會增加需求。這是程序員無法迴避的現實。
寫UI程序,不論是Web,Desktop,Mobile,Game,一定要使用MVC設計模式。否則你的程序面對後續變化的UI需求,將無以為繼。
設計模式,最重要的思想就是解耦,通過介面來解耦。這樣,如果將來需求變化,那麼只需要提供一個新的實現類即可。
主要的設計模式,其實都是面向對象的。因此,可以認為設計模式是面向對象的高級階段。只有掌握了設計模式,才能認為是真正徹底掌握了面向對象設計技巧。
我學習一門新語言時(包括非面向對象語言,如函數式編程語言),總是會在了解了其語法後,看一下各類設計模式在這門語言中是如何實現的。這也是學習編程語言的一個竅門。
5段--語言專家:
經過一段時間的編程實踐,程序員對某一種常用的編程語言已經相當精通了。有些人還成了「語言律師」,擅長向其他程序員講解語言的用法和各種坑。
這一階段的程序員,常常是自己所用語言的忠實信徒,常在社區和論壇上和其他語言的使用者爭論哪一種語言是最好的編程語言。他們認為自己所用的語言是世界上最好的編程語言,沒有之一。他們認為,自己所用的編程語言適用於所有場景。他們眼中,只有錘子,因此會把所有任務都當成是釘子。
6段--多語言專家:
這一個階段的程序員,因為工作關系,或者純粹是因為對技術的興趣,已經學習和掌握了好幾種編程語言。已經領略了不同編程語言不同的設計思路,對每種語言的長處和短處有了更多的了解。
他們現在認為,編程語言並不是最重要的,編程語言不過是基本功而已。
他們現在會根據不同的任務需求,或者不同的資源來選擇不同的編程語言來解決問題,不再會因為沒有使用某一種喜愛的編程語言開發而埋怨。
❸ 大數據如何入門
首先我們要了解Java語言和Linux操作系統,這兩個是學習大數據的基礎,學習的順序不分前後。
大數據
Java :只要了解一些基礎即可,做大數據不需要很深的Java 技術,學java SE 就相當於有學習大數據基礎。
Linux:因為大數據相關軟體都是在Linux上運行的,所以Linux要學習的扎實一些,學好Linux對你快速掌握大數據相關技術會有很大的幫助,能讓你更好的理解hadoop、hive、hbase、spark等大數據軟體的運行環境和網路環境配置,能少踩很多坑,學會shell就能看懂腳本這樣能更容易理解和配置大數據集群。還能讓你對以後新出的大數據技術學習起來更快。
Hadoop:這是現在流行的大數據處理平台幾乎已經成為大數據的代名詞,所以這個是必學的。Hadoop裡麵包括幾個組件HDFS、MapRece和YARN,HDFS是存儲數據的地方就像我們電腦的硬碟一樣文件都存儲在這個上面,MapRece是對數據進行處理計算的,它有個特點就是不管多大的數據只要給它時間它就能把數據跑完,但是時間可能不是很快所以它叫數據的批處理。
Zookeeper:這是個萬金油,安裝Hadoop的HA的時候就會用到它,以後的Hbase也會用到它。它一般用來存放一些相互協作的信息,這些信息比較小一般不會超過1M,都是使用它的軟體對它有依賴,對於我們個人來講只需要把它安裝正確,讓它正常的run起來就可以了。
Mysql:我們學習完大數據的處理了,接下來學習學習小數據的處理工具mysql資料庫,因為一會裝hive的時候要用到,mysql需要掌握到什麼層度那?你能在Linux上把它安裝好,運行起來,會配置簡單的許可權,修改root的密碼,創建資料庫。這里主要的是學習SQL的語法,因為hive的語法和這個非常相似。
Sqoop:這個是用於把Mysql里的數據導入到Hadoop里的。當然你也可以不用這個,直接把Mysql數據表導出成文件再放到HDFS上也是一樣的,當然生產環境中使用要注意Mysql的壓力。
Hive:這個東西對於會SQL語法的來說就是神器,它能讓你處理大數據變的很簡單,不會再費勁的編寫MapRece程序。有的人說Pig那?它和Pig差不多掌握一個就可以了。
Oozie:既然學會Hive了,我相信你一定需要這個東西,它可以幫你管理你的Hive或者MapRece、Spark腳本,還能檢查你的程序是否執行正確,出錯了給你發報警並能幫你重試程序,最重要的是還能幫你配置任務的依賴關系。我相信你一定會喜歡上它的,不然你看著那一大堆腳本,和密密麻麻的crond是不是有種想屎的感覺。
Hbase:這是Hadoop生態體系中的NOSQL資料庫,他的數據是按照key和value的形式存儲的並且key是唯一的,所以它能用來做數據的排重,它與MYSQL相比能存儲的數據量大很多。所以他常被用於大數據處理完成之後的存儲目的地。
Kafka:這是個比較好用的隊列工具,隊列是干嗎的?排隊買票你知道不?數據多了同樣也需要排隊處理,這樣與你協作的其它同學不會叫起來,你干嗎給我這么多的數據(比如好幾百G的文件)我怎麼處理得過來,你別怪他因為他不是搞大數據的,你可以跟他講我把數據放在隊列里你使用的時候一個個拿,這樣他就不在抱怨了馬上灰流流的去優化他的程序去了,因為處理不過來就是他的事情。而不是你給的問題。當然我們也可以利用這個工具來做線上實時數據的入庫或入HDFS,這時你可以與一個叫Flume的工具配合使用,它是專門用來提供對數據進行簡單處理,並寫到各種數據接受方(比如Kafka)的。
Spark:它是用來彌補基於MapRece處理數據速度上的缺點,它的特點是把數據裝載到內存中計算而不是去讀慢的要死進化還特別慢的硬碟。特別適合做迭代運算,所以演算法流們特別稀飯它。它是用scala編寫的。Java語言或者Scala都可以操作它,因為它們都是用JVM的。
❹ 大數據專業需要畢業後寫代碼嗎累嗎
大數據專業也屬於計算機領域的。而且了,今後大數據(Big Data)還是計算機領域的必然趨勢。畢業後當然需要寫程序代碼了。
至於說計算機軟體編程到底是否累這個問題,根據我多年的編程經驗就是一個字:累。
但是同時也能夠從累中體會到編程的快樂。當你花費很長時間終於調試通過一個源程序,看到運行出了正確運行結果那一刻,那種喜悅是無法表達的。
最後我的親身體會就是一句話:累並快樂著!!
❺ 大數據專業學什麼編程
大數據前景是很不錯的,像大數據這樣的專業還是一線城市比較好,師資力量跟得上、就業的薪資也是可觀的,學習大數據可以按照路線圖的順序,
0基礎學習Java是沒有問題的,關鍵是找到靠譜的Java培訓機構,你可以深度了解機構的口碑情況,問問周圍知道這家機構的人,除了口碑再了解機構的以下幾方面:
1. 師資力量雄厚
要想有1+1>2的實際效果,很關鍵的一點是師資隊伍,你接下來無論是找個工作還是工作中出任哪些的人物角色,都越來越愛你本身的技術專業java技術性,也許的技術專業java技術性則絕大多數來自你的技術專業java教師,一個好的java培訓機構必須具備雄厚的師資力量。
2. 就業保障完善
實現1+1>2效果的關鍵在於能夠為你提供良好的發展平台,即能夠為你提供良好的就業保障,讓學員能夠學到實在實在的知識,並向java學員提供一對一的就業指導,確保學員找到自己的心理工作。
3. 學費性價比高
一個好的Java培訓機構肯定能給你帶來1+1>2的效果,如果你在一個由專業的Java教師領導並由Java培訓機構自己提供的平台上工作,你將獲得比以往更多的投資。
希望你早日學有所成。
❻ 大數據需要學編程嗎
導讀:
第一章:初識Hadoop
第二章:更高效的WordCount
第三章:把別處的數據搞到Hadoop上
第四章:把Hadoop上的數據搞到別處去
第五章:快一點吧,我的SQL
第六章:一夫多妻制
第七章:越來越多的分析任務
第八章:我的數據要實時
第九章:我的數據要對外
第十章:牛逼高大上的機器學習
經常有初學者在博客和QQ問我,自己想往大數據方向發展,該學哪些技術,學習路線是什麼樣的,覺得大數據很火,就業很好,薪資很高。如果自己很迷茫,為了這些原因想往大數據方向發展,也可以,那麼我就想問一下,你的專業是什麼,對於計算機/軟體,你的興趣是什麼?是計算機專業,對操作系統、硬體、網路、伺服器感興趣?是軟體專業,對軟體開發、編程、寫代碼感興趣?還是數學、統計學專業,對數據和數字特別感興趣。。
其實這就是想告訴你的大數據的三個發展方向,平台搭建/優化/運維/監控、大數據開發/設計/架構、數據分析/挖掘。請不要問我哪個容易,哪個前景好,哪個錢多。
先扯一下大數據的4V特徵:
數據量大,TB->PB
數據類型繁多,結構化、非結構化文本、日誌、視頻、圖片、地理位置等;
商業價值高,但是這種價值需要在海量數據之上,通過數據分析與機器學習更快速的挖掘出來;
處理時效性高,海量數據的處理需求不再局限在離線計算當中。
現如今,正式為了應對大數據的這幾個特點,開源的大數據框架越來越多,越來越強,先列舉一些常見的:
文件存儲:Hadoop HDFS、Tachyon、KFS
離線計算:Hadoop MapRece、Spark
流式、實時計算:Storm、Spark Streaming、S4、Heron
K-V、NOSQL資料庫:HBase、Redis、MongoDB
資源管理:YARN、Mesos
日誌收集:Flume、Scribe、Logstash、Kibana
消息系統:Kafka、StormMQ、ZeroMQ、RabbitMQ
查詢分析:Hive、Impala、Pig、Presto、Phoenix、SparkSQL、Drill、Flink、Kylin、Druid
分布式協調服務:Zookeeper
集群管理與監控:Ambari、Ganglia、Nagios、Cloudera Manager
數據挖掘、機器學習:Mahout、Spark MLLib
數據同步:Sqoop
任務調度:Oozie
……
眼花了吧,上面的有30多種吧,別說精通了,全部都會使用的,估計也沒幾個。
就我個人而言,主要經驗是在第二個方向(開發/設計/架構),且聽聽我的建議吧。
第一章:初識Hadoop
1.1 學會網路與Google
不論遇到什麼問題,先試試搜索並自己解決。
Google首選,翻不過去的,就用網路吧。
1.2 參考資料首選官方文檔
特別是對於入門來說,官方文檔永遠是首選文檔。
相信搞這塊的大多是文化人,英文湊合就行,實在看不下去的,請參考第一步。
1.3 先讓Hadoop跑起來
Hadoop可以算是大數據存儲和計算的開山鼻祖,現在大多開源的大數據框架都依賴Hadoop或者與它能很好的兼容。
關於Hadoop,你至少需要搞清楚以下是什麼:
Hadoop 1.0、Hadoop 2.0
MapRece、HDFS
NameNode、DataNode
JobTracker、TaskTracker
Yarn、ResourceManager、NodeManager
自己搭建Hadoop,請使用第一步和第二步,能讓它跑起來就行。
建議先使用安裝包命令行安裝,不要使用管理工具安裝。
另外:Hadoop1.0知道它就行了,現在都用Hadoop 2.0.
1.4 試試使用Hadoop
HDFS目錄操作命令;
上傳、下載文件命令;
提交運行MapRece示常式序;
打開Hadoop WEB界面,查看Job運行狀態,查看Job運行日誌。
知道Hadoop的系統日誌在哪裡。
1.5 你該了解它們的原理了
MapRece:如何分而治之;
HDFS:數據到底在哪裡,什麼是副本;
Yarn到底是什麼,它能幹什麼;
NameNode到底在幹些什麼;
ResourceManager到底在幹些什麼;
1.6 自己寫一個MapRece程序
請仿照WordCount例子,自己寫一個(照抄也行)WordCount程序,
打包並提交到Hadoop運行。
你不會Java?Shell、Python都可以,有個東西叫Hadoop Streaming。
如果你認真完成了以上幾步,恭喜你,你的一隻腳已經進來了。
第二章:更高效的WordCount
2.1 學點SQL吧
你知道資料庫嗎?你會寫SQL嗎?
如果不會,請學點SQL吧。
2.2 SQL版WordCount
在1.6中,你寫(或者抄)的WordCount一共有幾行代碼?
給你看看我的:
SELECT word,COUNT(1) FROM wordcount GROUP BY word;
這便是SQL的魅力,編程需要幾十行,甚至上百行代碼,我這一句就搞定;使用SQL處理分析Hadoop上的數據,方便、高效、易上手、更是趨勢。不論是離線計算還是實時計算,越來越多的大數據處理框架都在積極提供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是數據倉庫工具,而不是資料庫工具呢?有的朋友可能不知道數據倉庫,數據倉庫是邏輯上的概念,底層使用的是資料庫,數據倉庫中的數據有這兩個特點:最全的歷史數據(海量)、相對穩定的;所謂相對穩定,指的是數據倉庫不同於業務系統資料庫,數據經常會被更新,數據一旦進入數據倉庫,很少會被更新和刪除,只會被大量查詢。而Hive,也是具備這兩個特點,因此,Hive適合做海量數據的數據倉庫工具,而不是資料庫工具。
2.4 安裝配置Hive
請參考1.1 和 1.2 完成Hive的安裝配置。可以正常進入Hive命令行。
2.5 試試使用Hive
請參考1.1 和 1.2 ,在Hive中創建wordcount表,並運行2.2中的SQL語句。
在Hadoop WEB界面中找到剛才運行的SQL任務。
看SQL查詢結果是否和1.4中MapRece中的結果一致。
2.6 Hive是怎麼工作的
明明寫的是SQL,為什麼Hadoop WEB界面中看到的是MapRece任務?
2.7 學會Hive的基本命令
創建、刪除表;
載入數據到表;
下載Hive表的數據;
請參考1.2,學習更多關於Hive的語法和命令。
如果你已經按照《寫給大數據開發初學者的話》中第一章和第二章的流程認真完整的走了一遍,那麼你應該已經具備以下技能和知識點:
0和Hadoop2.0的區別;
MapRece的原理(還是那個經典的題目,一個10G大小的文件,給定1G大小的內存,如何使用Java程序統計出現次數最多的10個單詞及次數);
HDFS讀寫數據的流程;向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上
此處也可以叫做數據採集,把各個數據源的數據採集到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表;
PS:如果後續選型確定使用Sqoop作為數據交換工具,那麼建議熟練掌握,否則,了解和會用Demo即可。
3.4 Flume
Flume是一個分布式的海量日誌採集和傳輸框架,因為「採集和傳輸框架」,所以它並不適合關系型資料庫的數據採集和傳輸。
Flume可以實時的從網路協議、消息系統、文件系統採集日誌,並傳輸到HDFS上。
因此,如果你的業務有這些數據源的數據,並且需要實時的採集,那麼就應該考慮使用Flume。
下載和配置Flume。
使用Flume監控一個不斷追加數據的文件,並將數據傳輸到HDFS;
PS:Flume的配置和使用較為復雜,如果你沒有足夠的興趣和耐心,可以先跳過Flume。
3.5 阿里開源的DataX
之所以介紹這個,是因為我們公司目前使用的Hadoop與關系型資料庫數據交換的工具,就是之前基於DataX開發的,非常好用。
可以參考我的博文《異構數據源海量數據交換工具-Taobao DataX 下載和使用》。
現在DataX已經是3.0版本,支持很多數據源。
你也可以在其之上做二次開發。
PS:有興趣的可以研究和使用一下,對比一下它與Sqoop。
如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的:
第四章:把Hadoop上的數據搞到別處去
前面介紹了如何把數據源的數據採集到Hadoop上,數據到Hadoop上之後,便可以使用Hive和MapRece進行分析了。那麼接下來的問題是,分析完的結果如何從Hadoop上同步到其他系統和應用中去呢?
其實,此處的方法和第三章基本一致的。
4.1 HDFS GET命令
把HDFS上的文件GET到本地。需要熟練掌握。
4.2 HDFS API
同3.2.
4.3 Sqoop
同3.3.
使用Sqoop完成將HDFS上的文件同步到MySQL;
使用Sqoop完成將Hive表中的數據同步到MySQL;
4.4 DataX
同3.5.
如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的:
如果你已經按照《寫給大數據開發初學者的話2》中第三章和第四章的流程認真完整的走了一遍,那麼你應該已經具備以下技能和知識點:
知道如何把已有的數據採集到HDFS上,包括離線採集和實時採集;
你已經知道sqoop(或者還有DataX)是HDFS和其他數據源之間的數據交換工具;
你已經知道flume可以用作實時的日誌採集。
從前面的學習,對於大數據平台,你已經掌握的不少的知識和技能,搭建Hadoop集群,把數據採集到Hadoop上,使用Hive和MapRece來分析數據,把分析結果同步到其他數據源。
接下來的問題來了,Hive使用的越來越多,你會發現很多不爽的地方,特別是速度慢,大多情況下,明明我的數據量很小,它都要申請資源,啟動MapRece來執行。
第五章:快一點吧,我的SQL
其實大家都已經發現Hive後台使用MapRece作為執行引擎,實在是有點慢。
因此SQL On Hadoop的框架越來越多,按我的了解,最常用的按照流行度依次為SparkSQL、Impala和Presto.
這三種框架基於半內存或者全內存,提供了SQL介面來快速查詢分析Hadoop上的數據。關於三者的比較,請參考1.1.
我們目前使用的是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中的表。
PS: Spark不是一門短時間內就能掌握的技術,因此建議在了解了Spark之後,可以先從SparkSQL入手,循序漸進。
關於Spark和SparkSQL,可參考http://lxw1234.com/archives/category/spark
如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的:
第六章:一夫多妻制
請不要被這個名字所誘惑。其實我想說的是數據的一次採集、多次消費。
在實際業務場景下,特別是對於一些監控日誌,想即時的從日誌中了解一些指標(關於實時計算,後面章節會有介紹),這時候,從HDFS上分析就太慢了,盡管是通過Flume採集的,但Flume也不能間隔很短就往HDFS上滾動文件,這樣會導致小文件特別多。
為了滿足數據的一次採集、多次消費的需求,這里要說的便是Kafka。
6.1 關於Kafka
什麼是Kafka?
Kafka的核心概念及名詞解釋。
6.2 如何部署和使用Kafka
使用單機部署Kafka,並成功運行自帶的生產者和消費者例子。
使用Java程序自己編寫並運行生產者和消費者程序。
Flume和Kafka的集成,使用Flume監控日誌,並將日誌數據實時發送至Kafka。
如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的:
這時,使用Flume採集的數據,不是直接到HDFS上,而是先到Kafka,Kafka中的數據可以由多個消費者同時消費,其中一個消費者,就是將數據同步到HDFS。
如果你已經按照《寫給大數據開發初學者的話3》中第五章和第六章的流程認真完整的走了一遍,那麼你應該已經具備以下技能和知識點:
為什麼Spark比MapRece快。
使用SparkSQL代替Hive,更快的運行SQL。
使用Kafka完成數據的一次收集,多次消費架構。
自己可以寫程序完成Kafka的生產者和消費者。
從前面的學習,你已經掌握了大數據平台中的數據採集、數據存儲和計算、數據交換等大部分技能,而這其中的每一步,都需要一個任務(程序)來完成,各個任務之間又存在一定的依賴性,比如,必須等數據採集任務成功完成後,數據計算任務才能開始運行。如果一個任務執行失敗,需要給開發運維人員發送告警,同時需要提供完整的日誌來方便查錯。
第七章:越來越多的分析任務
不僅僅是分析任務,數據採集、數據交換同樣是一個個的任務。這些任務中,有的是定時觸發,有點則需要依賴其他任務來觸發。當平台中有幾百上千個任務需要維護和運行時候,僅僅靠crontab遠遠不夠了,這時便需要一個調度監控系統來完成這件事。調度監控系統是整個數據平台的中樞系統,類似於AppMaster,負責分配和監控任務。
7.1 Apache Oozie
1. Oozie是什麼?有哪些功能?
2. Oozie可以調度哪些類型的任務(程序)?
3. Oozie可以支持哪些任務觸發方式?
4. 安裝配置Oozie。
第八章:我的數據要實時
在第六章介紹Kafka的時候提到了一些需要實時指標的業務場景,實時基本可以分為絕對實時和准實時,絕對實時的延遲要求一般在毫秒級,准實時的延遲要求一般在秒、分鍾級。對於需要絕對實時的業務場景,用的比較多的是Storm,對於其他准實時的業務場景,可以是Storm,也可以是Spark Streaming。當然,如果可以的話,也可以自己寫程序來做。
8.1 Storm
1. 什麼是Storm?有哪些可能的應用場景?
2. Storm由哪些核心組件構成,各自擔任什麼角色?
3. Storm的簡單安裝和部署。
4. 自己編寫Demo程序,使用Storm完成實時數據流計算。
8.2 Spark Streaming
1. 什麼是Spark Streaming,它和Spark是什麼關系?
2. Spark Streaming和Storm比較,各有什麼優缺點?
3. 使用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
java可以說是大數據最基礎的編程語言,據我這些年的經驗,我接觸的很大一部分的大數據開發都是從Jave Web開發轉崗過來的(當然也不是絕對我甚至見過產品轉崗大數據開發的,逆了個天)。
一是因為大數據的本質無非就是海量數據的計算,查詢與存儲,後台開發很容易接觸到大數據量存取的應用場景
二就是java語言本事了,天然的優勢,因為大數據的組件很多都是用java開發的像HDFS,Yarn,Hbase,MR,Zookeeper等等,想要深入學習,填上生產環境中踩到的各種坑,必須得先學會java然後去啃源碼。
說到啃源碼順便說一句,開始的時候肯定是會很難,需要對組件本身和開發語言都有比較深入的理解,熟能生巧慢慢來,等你過了這個階段,習慣了看源碼解決問題的時候你會發現源碼真香。
Scala
scala和java很相似都是在jvm運行的語言,在開發過程中是可以無縫互相調用的。Scala在大數據領域的影響力大部分都是來自社區中的明星Spark和kafka,這兩個東西大家應該都知道(後面我會有文章多維度介紹它們),它們的強勢發展直接帶動了Scala在這個領域的流行。
Python和Shell
shell應該不用過多的介紹非常的常用,屬於程序猿必備的通用技能。python更多的是用在數據挖掘領域以及寫一些復雜的且shell難以實現的日常腳本。
❽ 如何選擇大數據應用程序
如何選擇大數據應用程序
選擇大數據軟體對於組織來說是一個復雜的過程,組織需要仔細評估其目標和供應商提供的解決方案。
如今可以確定的是,組織對大數據解決方案需求量很大。組織的管理者知道他們的大數據是不可忽視的最寶貴的資源之一。因此,他們正在尋找可幫助存儲、管理和分析其大數據的硬體和軟體。
根據調研機構IDC公司的調查,2017年組織在大數據和數據分析方面的支出為1508億美元,比去年增長12.4%。到2020年,這一支出可能會以每年11.9%的速度增長,2020年的收入可能高達2100億美元。
大部分收入都用於大數據應用。據IDC公司預測,到2020年,僅軟體開支就可能超過700億美元。非關系分析數據存儲(如NoSQL資料庫)的支出增長尤其迅速,每年可能增長38.6%,認知軟體平台(如人工智慧和機器學習能力的分析工具)每年可能增長23.3%。
為了充分利用大量的數據支出,供應商在各種不同的產品和服務上打上了「大數據」標簽。這種產品的擴散會使組織很難找到合適的大數據應用程序來滿足他們的需求。專家建議,企業開始選擇大數據應用程序的一個好方法是精確地確定自己所需要什麼類型的應用程序。
大數據應用的類型
企業軟體供應商提供了大量不同類型的大數據應用程序。適合企業的大數據應用將取決於其目標。
例如,如果企業只想更加詳細和深入地擴展現有的財務報告功能,那麼數據倉庫和商業智能解決方案可能已足以滿足其需求;如果企業的銷售和營銷團隊希望利用其大數據的發現增加收入和利潤的新機會,則可以考慮創建數據湖和/或投資數據挖掘解決方案;如果企業想創建一個數據驅動的文化,組織中的每個人都在使用數據來指導他們的決策,那麼企業可能需要數據湖和預測分析,內存資料庫,也可能是流分析。
這樣的事情將會變得更復雜,因為不同類型的工具之間的界限可能會有些模糊。一些商業智能工具具有數據挖掘和預測分析功能。一些預測分析工具包括流媒體功能。
最好的辦法是組織一開始就清楚地確定自己的目標,然後去尋找能夠幫助其實現這些目標的產品。
選擇大數據應用程序時的關鍵決策
無論企業選擇哪種類型的大數據應用程序,都需要做出一些關鍵決策,以幫助企業縮小選擇范圍。以下是一些最重要的考慮事項:
(1)內部部署數據中心與基於雲計算的大數據應用程序
企業需要做出的第一個重大決策是要在自己的數據中心託管大數據軟體,還是希望採用基於雲計算的解決方案。
目前,更多的組織似乎正在選擇雲計算。分析機構Forrester公司副總裁兼首席分析師BrianHopkins在2017年8月的一篇博客文章中寫道:「通過雲訂閱在大數據解決方案上的全球支出將增長快近7.5倍。此外,根據數據分析專業人員的2016和2017調查,公有雲是大數據的頭號技術優先事項。」
基於雲計算的大數據應用受到歡迎有多種原因,其中包括可擴展性和易管理性。主要的雲計算供應商也在人工智慧和機器學習研究方面處於領先地位,這使得他們可以在解決方案中添加高級功能。
但是,雲計算對於組織來說並不總是最好的選擇。對合規性或安全性要求較高的組織有時會發現他們需要將敏感數據保留在內部部署的數據中心。此外,一些組織已經在現有的本地數據解決方案上進行投資,並且他們發現繼續在本地部署數據中心運行大數據應用程序或使用混合方法會更具成本效益。
(2)私有vs開源的大數據應用程序
一些最流行的大數據工具(包括Hadoop生態系統)可以在開源許可下獲得。 Forrester公司指出,「2017年,企業將在Hadoop軟體和相關服務上投入8億美元。」
Hadoop和其他開源軟體最大的吸引力之一是降低總體擁有成本。盡管專有解決方案需要支付高昂的許可費,並且可能需要昂貴的專用硬體,但Hadoop沒有許可費,並且可以在標準的硬體上運行。
然而,企業有時發現很難獲得開源的解決方案,以滿足他們的需要。他們可能需要購買支持或咨詢服務,組織在計算總擁有成本時需要考慮這些費用。
(3)批處理vs流式傳輸大數據應用程序
最早的大數據解決方案(如Hadoop)只是處理批量數據,但企業越來越多地發現他們希望實時分析數據。這引發了對Spark、Storm、Samza等流媒體解決方案的更多興趣。
許多分析師表示,即使組織認為他們現在不需要處理流式數據,流媒體功能也可能在不久的將來成為標准操作流程。出於這個原因,許多組織正在向Lambda體系結構邁進,這是一種既能處理實時數據又能批處理數據的數據處理體系結構。
在大數據應用中尋找特性
一旦企業縮小了選項范圍,就需要評估其正在考慮的大數據應用程序。以下包括一些最重要的需要考察的因素。
與傳統技術集成 - 大多數組織已經在數據管理和分析技術方面進行現有投資。完全替代該技術可能代價高昂並且具有破壞性,因此組織通常會選擇尋找可以與現有工具一起使用的解決方案,或者可以增加現有軟體。
績效 - 2017年Talend研究發現,實時分析功能是商業領袖的首要IT優先事項之一。如果要從這些洞察中獲益,管理人員和工作人員需要能夠及時獲取見解。這意味著投資可以提供他們所需速度的技術。
可擴展性 - 大數據存儲的規模每天都會變得更大。組織需要快速執行的大數據應用程序,隨著數據存儲量以指數級增長,這些應用程序可以繼續快速執行。這種對可擴展性的需求是基於雲計算的大數據應用變得非常流行的主要原因之一。
可用性 - 組織還應該考慮他們打算購買的任何大數據應用程序的「學習曲線」。易於部署、易於配置、界面直觀和/或與組織已經使用的工具相似或集成的工具可以提供巨大的價值。
可視化 - BI-Survey.com表示,「針對商業用戶的可視化和探索性數據分析(稱為數據發現)已經演變成當今市場上最熱門的商業智能和分析主題。」在圖表中呈現數據可以使人類的大腦更容易發現趨勢和異常值,加快識別可操作見解的過程。
靈活性 – 企業如今所需要的大數據可能與其在一兩年前的需求大不相同。這就是為什麼許多企業選擇尋找能夠滿足各種不同目標的工具,而不是很好地執行單一功能的原因。
安全性 - 這些大數據存儲中包含的大部分數據都是敏感信息,這對於競爭對手、國家機構或黑客都是非常有價值的。組織需要確保他們的大數據具有足夠的保護,以防止成為頭條新聞報道的大量數據泄露事件。這意味著組織需要尋找具有內置安全功能(如加密和強身份驗證)的工具,或者尋找與現有安全解決方案集成的工具。
支持 - 即使有經驗的IT專業人員有時也會發現難以部署、維護和使用復雜的大數據應用程序。不要忘記考慮各供應商提供的支持的質量和成本。
生態系統 - 大多數組織需要多種不同的應用程序來滿足他們所有的大數據需求。這意味著要尋找一個大數據平台,與其他許多流行工具以及與其他提供商有強大合作關系的供應商進行整合。
自助服務能力 - 2017年畢馬威公司針對組織的CIO調查發現,60%的CIO持續報告指出數據分析人才短缺,而大數據和分析是最需要的技能組合。由於沒有足夠的數據科學家去解決,組織正在尋找其他商業專業人士可以獨立使用的工具。調研機構Gartner公司最近的博客文章指出,通常在一個組織中,大約32%的員工正在使用商業智能和分析。
總體擁有成本 - 大數據應用的前期成本只是其中的一小部分。組織需要確保他們考慮相關硬體成本,正在採用的許可或訂購費用、員工時間、支持成本,以及與本地部署應用程序的物理空間相關的任何費用。不要忘記要考慮到雲計算成本隨著時間的推移普遍下降的事實。
預計價值的時間 - 另一個重要的財務考慮因素是企業能夠以多快的速度啟動並運行特定的解決方案。大多數公司都希望在幾天或幾周內,而不是幾個月或幾年內從他們的大數據項目中受益。
人工智慧和機器學習 - 最後,考慮各種大數據應用供應商的創新。人工智慧和機器學習的研究正在以驚人的速度發展,並成為大數據分析的主流部分。據Forrester公司預測,「企業在2017年對於人工智慧的投資增加了三倍,因為企業需要將客戶數據轉換為個性化體驗。」如果企業選擇的供應商在這項研究沒有處於行業前沿,那麼可能會發現自己落後於競爭對手。
選擇大數據應用程序的提示
很明顯,選擇正確的大數據應用程序是一個復雜的過程,這涉及諸多因素。已成功部署大數據軟體的專家和組織提供以下建議:
理解自己的目標–企業在選擇大數據應用程序時,需要知道自己想完成什麼是至關重要的。如果不確定為什麼要投資某項技術,那麼其項目不太可能成功。
從小規模開始-如果企業可以通過小規模的大數據分析項目取得成功,那麼企業對使用該工具將會產生更多的興趣。
採取整體方法-盡管小規模項目可以幫助企業獲得技術方面的經驗和專業知識,但選擇最終可用於整個業務的應用程序非常重要。Gartner公司建議:「為了支持無處不在的數據和分析世界,IT專業人員需要創建一個新的端到端體系結構,為敏捷、規模和實驗而構建。如今,技術學科正在融合,數據和分析的方法正在變得更加整體化,涵蓋整個業務。」
協同工作–Gartner公司的這篇博客文章還指出:「建議數據和分析領導者積極主動地在他們的組織中傳播分析,以便從啟用數據驅動業務操作中獲得最大的收益。」許多組織正試圖構建數據驅動文化,這需要業務和IT領導者之間的大量合作。
病毒式傳播–前面提到的自助服務功能還可以幫助創建數據驅動的文化。Gartner公司建議:「讓分析在企業內部和外部真正發揮作用。通過培養實用的自助服務方法,並通過在交互和流程中的數據攝入點上嵌入分析功能,使更多的業務用戶能夠執行分析。」
❾ 大數據專業主要都要學哪些知識
1、Java基礎
JAVA開發簡介 基本語法、運算符 流程式控制制語句 數組 函數 面向對象 常用類庫 異常 io系統 集合泛型 線程 網路編程 階段測試
2、JavaWeb
html+css; html5+css3; javascript; jquery; 資料庫; JDBC; WEB伺服器、開發工具-MyEclipse; HTTP協議; (資料庫連接池)數據源; JavaWeb開發之Servlet、Servlet3.0; 請求與響應; JSP; MVC; 會話管理; 過濾和監聽; 非同步請求; 階段測試
3、JavaEE高級+Linux課程+分布式計算JavaWeb
Jspring框架、mybatis框架、nio、JVM、maven框架、LINUX、MYSQL分庫分表、讀寫分離、JAVA搜索引擎、Redis、消息隊列、分布式計算框架、項目實戰
4、離線數據分析平台Hadoop
初識Hadoop以及Hadoop生態系統、;Hadoop分布式文件系統HDFS、Hadoop的設計目標;分布式計算框架MapRece;MapRece應用程序的開發;數據倉庫Hive的安裝和使用、分桶作用、創建點擊流數據數據倉庫、點擊流數據分析(HiveSql)。
5、實時數據分析平台Storm
python介紹、安裝、基本操作、基本語法、數據結構、內建函數、異常、模塊;Storm介紹、Storm應用場景及行業案例、Storm特點、Storm編程模型部署;Storm集群搭建、配置集群、通信機制;消息隊列Kafka、使用Flume收集數據到Kafka、Mahout的離線計算數據、Kafka基礎與常用API。
6、Scala語言與Spark
Scala;SparkStreaming、 SparkGraphX、Spark內核解析、Spark優化解析;Spark-Mllib機器學習、回歸演算法、決策樹、推薦系統、分類演算法等;升級Hive執行引擎為Spark、使用Spark Sql完成點擊流日誌業務需求、打通Spark數據收集、存儲、計算、展示流程。
❿ 大數據專業需要畢業後寫代碼嗎累嗎
大數據專業也屬於計算機領域的。而且了,今後大數據(Big
Data)還是計算機領域的必然趨勢。畢業後當然需要寫程序代碼了。
至於說計算機軟體編程到底是否累這個問題,根據我多年的編程經驗就是一個字:累。
但是同時也能夠從累中體會到編程的快樂。當你花費很長時間終於調試通過一個源程序,看到運行出了正確運行結果那一刻,那種喜悅是無法表達的。
最後我的親身體會就是一句話:累並快樂著!!