㈠ 大數據開發學習有哪些內容,怎麼學習
大數據學什麼
大數據開發學習的內容有8個階段,可以按照順序學習,大數據相對來說更適合有基礎的人學習,如果懂Java或者是做過Java開發,學習起來容易很多,選擇大數據培訓機構重點關注機構的口碑情況,希望你早日學有所成。㈡ 大數據開發用什麼語言
首先Java,是現階段使用較為居多,為什麼呢?是由於玩Java轉到大數據人數太多人的緣故,所以很多人都喜歡使用Java,也有的是由於公司為了維護和人才的使用考慮,會選擇使用Java語言開發,也有的是因為平台會有Hadoop的MapRece老程序與Spark任務混合使用,為了平台統一開發語言而選擇Java,也有的公司為了對接外面項目而選擇通用性比較強的Java語言開發。
Scala,也可以是說大數據Spark開發的主力語言了,因為當你學習Spark後,就一定會對Scala有進一步的研究與學習,因為為了學好Spark技術你需要研究源碼、需要更簡潔快速開發項目。從而Spark大數據開發語言Scala是最多。
Python,在機器學習、AI的崛起,也有很多人青睞的語言了;還有一波人喜歡,那就是大數據分析人員,在sql與spark SQL 使用Python來進行腳本調度。
R是用於統計分析、繪圖的語言和操作環境。R是屬於GNU系統的一個自由、免費、源代碼開放的軟體,它是一個用於統計計算和統計制圖的優秀工具。
㈢ 大數據開發怎麼學習
Java
大家都知道Java的方向有JavaSE、JavaEE、JavaME,學習大數據要學習那個方向呢?只需要學習Java的標准版JavaSE就可以了,像Servlet、JSP、Tomcat、Struts、Spring、Hibernate,Mybatis都是JavaEE方向的技術在大數據技術里用到的並不多,只需要了解就可以了,當然Java怎麼連接資料庫還是要知道的,像JDBC一定要掌握一下。
Linux
因為大數據相關軟體都是在Linux上運行的,所以Linux要學習的扎實一些,學好Linux對你快速掌握大數據相關技術會有很大的幫助,能讓你更好的理解hadoop、hive、hbase、spark等大數據軟體的運行環境和網路環境配置,能少踩很多坑,學會shell就能看懂腳本這樣能更容易理解和配置大數據集群。
Hadoop
這是現在流行的大數據處理平台幾乎已經成為大數據的代名詞,所以這個是必學的。Hadoop裡麵包括幾個組件HDFS、MapRece和YARN,HDFS是存儲數據的地方就像我們電腦的硬碟一樣文件都存儲在這個上面,MapRece是對數據進行處理計算的,它有個特點就是不管多大的數據只要給它時間它就能把數據跑完,但是時間可能不是很快所以它叫數據的批處理。
YARN
是體現Hadoop平台概念的重要組件有了它大數據生態體系的其它軟體就能在hadoop上運行了,這樣就能更好的利用HDFS大存儲的優勢和節省更多的資源比如我們就不用再單獨建一個spark的集群了,讓它直接跑在現有的hadoop yarn上面就可以了。
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腳本,還能檢查你的程序是否執行正確,出錯了給你發報警並能幫你重試程序,最重要的是還能幫你配置任務的依賴關系。
Hbase
這是Hadoop生態體系中的NOSQL資料庫,他的數據是按照key和value的形式存儲的並且key是唯一的,所以它能用來做數據的排重,它與MYSQL相比能存儲的數據量大很多。所以他常被用於大數據處理完成之後的存儲目的地。
Kafka
這是個比較好用的隊列工具當然我們也可以利用這個工具來做線上實時數據的入庫或入HDFS,這時你可以與一個叫Flume的工具配合使用,它是專門用來提供對數據進行簡單處理,並寫到各種數據接受方(比如Kafka)的。
Spark
它是用來彌補基於MapRece處理數據速度上的缺點,它的特點是把數據裝載到內存中計算而不是去讀慢的要死進化還特別慢的硬碟。特別適合做迭代運算,所以演算法流們特別稀飯它。它是用scala編寫的。Java語言或者Scala都可以操作它,因為它們都是用JVM的。
㈣ 大數據專業學什麼編程
大數據前景是很不錯的,像大數據這樣的專業還是一線城市比較好,師資力量跟得上、就業的薪資也是可觀的,學習大數據可以按照路線圖的順序,
0基礎學習Java是沒有問題的,關鍵是找到靠譜的Java培訓機構,你可以深度了解機構的口碑情況,問問周圍知道這家機構的人,除了口碑再了解機構的以下幾方面:
1. 師資力量雄厚
要想有1+1>2的實際效果,很關鍵的一點是師資隊伍,你接下來無論是找個工作還是工作中出任哪些的人物角色,都越來越愛你本身的技術專業java技術性,也許的技術專業java技術性則絕大多數來自你的技術專業java教師,一個好的java培訓機構必須具備雄厚的師資力量。
2. 就業保障完善
實現1+1>2效果的關鍵在於能夠為你提供良好的發展平台,即能夠為你提供良好的就業保障,讓學員能夠學到實在實在的知識,並向java學員提供一對一的就業指導,確保學員找到自己的心理工作。
3. 學費性價比高
一個好的Java培訓機構肯定能給你帶來1+1>2的效果,如果你在一個由專業的Java教師領導並由Java培訓機構自己提供的平台上工作,你將獲得比以往更多的投資。
希望你早日學有所成。
㈤ R,Python,Scala 和 Java,到底該使用哪一種大數據編程語言
哪一種都行,Python適用於腳本,網路和爬蟲,Java適用網路,商業和游戲,r適用於腳本和網路
㈥ 大數據開發一定要學習java嗎或者其他語言嗎
一、學習大數據,一定要學習java嗎?
如果要學習大數據,不管你是零基礎,還是有一定的基礎,都是要懂至少一種計算機編程語言,因為大數據的開發離不開編程語言,不僅要懂,還要精通!但這門編程語言不一定是java。
比如說,如果你主攻Hadoop開發方向,是一定要學習java的,因為Hadoop是由java來開發的。
如果你想要主攻spark方向,是要學習Scala語言的,每個方向要求的編程語言是不同的。
如果你是想要走數據分析方向,那你就要從python編程語言下手,這個也是看自己未來的需求的。
綜上所述:大數據是需要一定的編程基礎的,但具體學習哪一門編程,自己可以選擇的。其實只要學會了一門編程語言,其他編程語言也是不在話下的。
二、為什麼很多人選擇學java?
大數據技術方向是有很多的,作為零基礎的你,想要進入大數據領域,大數據開發是基礎方向,也是入門的突破口,而在大數據開發技術中,用的多的也是java編程語言。
因為java具有簡單性、面向對象、分布式、健壯性、安全性、平台獨立與可移植性、多線程、動態性等特點。 如果你對java有一定的了解,就更應該清楚java是一個強類型編程語言,擁有極高的跨平台能力,還有就是java的異常處理能夠保證系統的穩定性。
目前,java語言的應用也是很廣泛的,對於學習大數據的人而言是很多人的選擇,hadoop及其他大數據處理技術都用到了java,像Apache的基於Java的HBase和Accumulo以及 ElasticSearchas等等。
所以想要進入大數據領域的小夥伴,大部分都會選擇從java編程語言開始學起!
㈦ 大數據主要學什麼內容
大數據開發工程師是大數據領域一個比較熱門的崗位,有大量的傳統應用需要進行大數據改造,因此崗位有較多的人才需求。這個崗位需要掌握的知識結構包括大數據平台體系結構,比如目前常見的Hadoop、Spark平台,以及眾多組件的功能和應用,另外還需要掌握至少一門編程語言,比如Java、Python、Scala等。
大數據分析師是大數據領域非常重要的崗位,大數據分析師需要掌握的知識結構包括演算法設計、編程語言以及呈現工具,演算法設計是大數據分析師需要掌握的重點內容,而編程語言的作用則是完成演算法的實現。另外,大數據分析師還需要掌握一些常見的分析工具。
大數據運維工程師的主要工作內容是搭建大數據平台、部署大數據功能組件、配置網路環境和硬體環境、維護大數據平台,大數據運維工程師需要具備的知識結構包括計算機網路、大數據平台體系結構、編程語言(編寫運維腳本)等,通常情況下,大數據運維工程師也需要對資料庫有深入的了解。
㈧ 大數據如何入門
聽說你想要學大數據?你確定你搞清楚概念了嗎?我們來做個小測驗吧:
數據分析師在公司是干什麼的?
大數據和普通數據最大的區別是什麼?
你的日常工作中根本接觸不到大數據,你真正想學的是大數據嗎?
有點蒙圈了吧。魚君正是要幫你在最短的時間內理清這些概念,找准自己前進的方向。
大數據之「大」數據,大家會陌生嗎?不會。我們每天的日常生活都會接觸到數據。淘寶購物時貨比三家的價格,年終考核之後發給我們的獎金,發表在知乎上的文章的評論數量,這些都是數據。
從人們會計數開始,數據就有了,數據分析也是。那麼大數據呢?
說到大數據,你就繞不開互聯網。在互聯網出現之前,雖然政府部門和一些公共事業單位通過日積月累獲得了較大量的數據,但並沒有形成足夠的影響力。直到互聯網產品的出現,由於它收集用戶數據的便利性,通常在一天之內就能夠累計其他行業可能一年才能獲取的數據量。
數據量的升級造成演算法和硬體都必須要升級,操作起來的技術難度也就會提高很多。這個時候,就需要專業的技術和平台來完成存儲,處理和分析大數據的工作。比如說,大家都聽過的Hadoop平台,MapRece演算法。都是大數據時代的產物。
因此,我認為,大數據的核心,就在於大。
有一定規模的互聯網公司都會成立專門的大數據部門來管理自己產品所收集到的大數據。數據量越大,處理難度就越高,相應的,可能挖掘到的內涵也會更多。於是,大數據就成了一個產業,一個火熱的產業。
大數據圈子裡的人在大數據行業這個圈子裡,公司提供的職位大致分為三類:數據分析師,數據產品經理,數據工程師。他們緊密合作,共同驅動公司的數據決策文化。
那麼,著三種職位都是做什麼的?又該怎麼入行呢?
數據分析師
數據分析師,是使用大數據的人。核心是掌握各種數據分析工具和數據分析技能,目標是為公司管理層和產品團隊提供分析報告,幫助他們做決策。
實際工作中,數據會被處理成各種不同的類型提供給數據分析師使用,有比較原始的,有比較簡單好用的。因此,數據分析師需要掌握R, SQL,Excel, Python基礎編程等多種技能,以及熟練掌握常用的數據分析方法。
如果你立志於成為一個數據分析師甚至數據科學家,那麼我強烈建議你進行系統的學習。
數據產品經理
數據產品經理是設計數據產品的人。核心技能是數據需求分析和數據產品的設計,和其他的互聯網產品經理並沒有本質的不同。實際工作中,數據產品經理需要收集不同用戶的數據需求並且設計出好用的數據產品提供給大家,幫助他們「用數據做決定」。
怎麼入門呢?關於具體的進階流程,我希望你聽一下我在一塊聽聽上做的講座《4步讓你成為大數據產品經理》,會為你提供非常全面的介紹。
常見的推薦入門書籍有《人人都是產品經理》,《The DatawareHouse Toolkit》,《Lean Analytics》等等。
數據工程師
數據工程師,簡單分兩種,一類是數據挖掘工程師,另外一類是大數據平台工程師。工程師的基本技能當然是寫代碼,寫高質量的代碼。
數據挖掘工程師主要工作是開發大數據流水線以及和數據分析師一起完成數據挖掘項目,而數據平台工程師主要工作是維護大數據平台。
因此,理工科背景出身,掌握C, C#, Python等編程/腳本語言,熟悉各種基礎演算法即可以勝任。
如何用數據做決策
對於那些並不想轉行進入大數據圈子的人,我們要學的究竟是什麼?
我相信,在我們的日常工作中,特別是業績不佳,找不到突破口的時候,都曾想過能否用數據來幫助自己。因為我們都曾或多或少聽過一些牛逼的數據案例,比如紙尿布與啤酒之類。
舉一個簡單的例子,你經營的餐館現在狀況不佳。你可以自己拍腦袋想一堆的新點子來嘗試改善現狀。你也可以,收集整理數據,通過分析找出根本原因,並提出對應解決方案,從而扭轉局面。後者聽起來似乎更加靠譜一些。
那麼,你該收集什麼數據,做什麼分析,這就是你需要學習的:「如何用數據做決策」。從這個角度講,我認為:
人人都應該是數據分析師
學習系統的數據決策和數據分析思維,我們可以從這篇文章開始:從0到1搭建數據分析知識體系。我自己工作中常用的數據分析方法都被囊括在裡面,如果趨勢分析,多維分解,用戶分群,漏斗分析等等。請不要小看一篇文章,知識在精不在多。
你還可以從一本簡單好讀的《誰說菜鳥不會數據分析》開始搭建你的數據分析思維。
關於數據分析的書籍太多了,眾口難調,隨便一搜就有一大堆推薦。而其中所講的知識和理論其實都是類似的。最終要讓他們發揮作用,還是要和實踐結合起來。
因此,我認為,在自己的生意和工作中多實踐數據分析,多思考,遇到問題多在社群中提問和大家探討,是最好的學習辦法。我自己也一直是這樣踐行的。
帶著問題去學習,是最好的方式。
在這個過程中,隨著你對數據的深入了解,掌握更多的數據分析語言和工具。從Excel到SQL,甚至到R和Python。你所能使用的數據量也會越來越大。但你大可不必一開始就扎入這些工具的學習中,那樣會收效甚微。
㈨ 大數據需要學編程嗎
導讀:
第一章:初識Hadoop
第二章:更高效的WordCount
第三章:把別處的數據搞到Hadoop上
第四章:把Hadoop上的數據搞到別處去
第五章:快一點吧,我的SQL
第六章:一夫多妻制
第七章:越來越多的分析任務
第八章:我的數據要實時
第九章:我的數據要對外
第十章:牛逼高大上的機器學習
數據量大,TB->PB
數據類型繁多,結構化、非結構化文本、日誌、視頻、圖片、地理位置等;
商業價值高,但是這種價值需要在海量數據之上,通過數據分析與機器學習更快速的挖掘出來;
處理時效性高,海量數據的處理需求不再局限在離線計算當中。
Hadoop 1.0、Hadoop 2.0
MapRece、HDFS
NameNode、DataNode
JobTracker、TaskTracker
Yarn、ResourceManager、NodeManager
0和Hadoop2.0的區別;
MapRece的原理(還是那個經典的題目,一個10G大小的文件,給定1G大小的內存,如何使用Java程序統計出現次數最多的10個單詞及次數);
HDFS讀寫數據的流程;向HDFS中PUT數據;從HDFS中下載數據;
自己會寫簡單的MapRece程序,運行出現問題,知道在哪裡查看日誌;
會寫簡單的SELECT、WHERE、GROUP BY等SQL語句;
Hive SQL轉換成MapRece的大致流程;
Hive中常見的語句:創建表、刪除表、往表中載入數據、分區、將表中數據下載到本地;
為什麼Spark比MapRece快。
使用SparkSQL代替Hive,更快的運行SQL。
使用Kafka完成數據的一次收集,多次消費架構。
自己可以寫程序完成Kafka的生產者和消費者。
經常有初學者在博客和QQ問我,自己想往大數據方向發展,該學哪些技術,學習路線是什麼樣的,覺得大數據很火,就業很好,薪資很高。如果自己很迷茫,為了這些原因想往大數據方向發展,也可以,那麼我就想問一下,你的專業是什麼,對於計算機/軟體,你的興趣是什麼?是計算機專業,對操作系統、硬體、網路、伺服器感興趣?是軟體專業,對軟體開發、編程、寫代碼感興趣?還是數學、統計學專業,對數據和數字特別感興趣。。
其實這就是想告訴你的大數據的三個發展方向,平台搭建/優化/運維/監控、大數據開發/設計/架構、數據分析/挖掘。請不要問我哪個容易,哪個前景好,哪個錢多。
先扯一下大數據的4V特徵:
現如今,正式為了應對大數據的這幾個特點,開源的大數據框架越來越多,越來越強,先列舉一些常見的:
文件存儲: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,請使用第一步和第二步,能讓它跑起來就行。
建議先使用安裝包命令行安裝,不要使用管理工具安裝。
另外: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的語法和命令。
如果你已經按照《寫給大數據開發初學者的話》中第一章和第二章的流程認真完整的走了一遍,那麼你應該已經具備以下技能和知識點:
從上面的學習,你已經了解到,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》中第五章和第六章的流程認真完整的走了一遍,那麼你應該已經具備以下技能和知識點:
從前面的學習,你已經掌握了大數據平台中的數據採集、數據存儲和計算、數據交換等大部分技能,而這其中的每一步,都需要一個任務(程序)來完成,各個任務之間又存在一定的依賴性,比如,必須等數據採集任務成功完成後,數據計算任務才能開始運行。如果一個任務執行失敗,需要給開發運維人員發送告警,同時需要提供完整的日誌來方便查錯。
第七章:越來越多的分析任務
不僅僅是分析任務,數據採集、數據交換同樣是一個個的任務。這些任務中,有的是定時觸發,有點則需要依賴其他任務來觸發。當平台中有幾百上千個任務需要維護和運行時候,僅僅靠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。
這么多比較成熟的框架和方案,需要結合自己的業務需求及數據平台技術架構,選擇合適的。原則只有一個:越簡單越穩定的,就是最好的。
如果你已經掌握了如何很好的對外(業務)提供數據,那麼你的「大數據平台」應該是這樣的:
第十章:牛逼高大上的機器學習
關於這塊,我這個門外漢也只能是簡單介紹一下了。數學專業畢業的我非常慚愧,很後悔當時沒有好好學數學。
在我們的業務中,遇到的能用機器學習解決的問題大概這么三類:
分類問題:包括二分類和多分類,二分類就是解決了預測的問題,就像預測一封郵件是否垃圾郵件;多分類解決的是文本的分類;
聚類問題:從用戶搜索過的關鍵詞,對用戶進行大概的歸類。
推薦問題:根據用戶的歷史瀏覽和點擊行為進行相關推薦。
大多數行業,使用機器學習解決的,也就是這幾類問題