大數據究竟學的什麼,學會哪些才能入行?

爸爸愛你12138


數據採集、處理、分析,搜索python數據分析對你有所幫助,如有幫助麻煩點一下好評


壹心無物


很多初學者在萌生向大數據方向發展的想法之後,不免產生一些疑問,應該怎樣入門?應該學習哪些技術?學習路線又是什麼?


所有萌生入行的想法與想要學習Java的同學的初衷是一樣的。崗位非常火,就業薪資比較高,,前景非常可觀。基本都是這個原因而嚮往大數據,但是對大數據卻不甚瞭解。

如果你想學習,那麼首先你需要學會編程,其次你需要掌握數學,統計學的知識,最後融合應用,就可以想在數據方向發展,籠統來說,就是這樣的。但是僅僅這樣並沒有什麼幫助。

現在你需要問自己幾個問題:

  • 對於計算機/軟件,你的興趣是什麼?
  • 是計算機專業,對操作系統、硬件、網絡、服務器感興趣?
  • 是軟件專業,對軟件開發、編程、寫代碼感興趣?
  • 還是數學、統計學專業,對數據和數字特別感興趣。
  • 你自己的專業又是什麼?

如果你是金融專業,你可以學習,因為這結合起來你自己的專業,將讓你在只有你專業知識的競爭者之中脫穎而出,畢竟現在AI+已經涉及到金融行業了。

說了這麼多,無非就是想告訴你,大數據的三個大的發展方向:

  • 平臺搭建/優化/運維/監控;
  • 大數據開發/ 設計/ 架構;
  • 數據分析/挖掘。

請不要問我哪個容易,只能說能掙錢的都不簡單。

說一下大數據的四個典型的特徵:

  • 數據量大;
  • 數據類型繁多,(結構化、非結構化文本、日誌、視頻、圖片、地理位置等);
  • 商業價值高,但需要在海量數據之上,通過數據分析與機器學習快速的挖掘出來;
  • 處理時效性高,海量數據的處理需求不再侷限在離線計算當中。

現如今,為了應對大數據的這幾個特點,開源的大數據框架越來越多,越來越強,先列舉一些常見的:

  • 文件存儲: N、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

是不是眼花繚亂了,上面的這些內容,別談精通了,就算全部都會使用的,應該也沒幾個。咱們接下來就大數據開發/ 設計/ 架構方向來了解一下學習路線。

在接下的學習中,不論遇到什麼問題,先試試搜索並自己解決。Google首選,其次百度。

於入門者而言,官方文檔永遠是首選文檔。

第一章:Hadoop

在大數據存儲和計算中Hadoop可以算是開山鼻祖,現在大多開源的大數據框架都依賴Hadoop或者與它能很好的兼容。

關於Hadoop,你至少需要搞清楚這些是什麼:

  • Hadoop 1.0、Hadoop 2.0
  • MapReduce、HDFS
  • NameNode、DataNode
  • JobTracker、TaskTracker
  • Yarn、ResourceManager、NodeManager

自己學會如何搭建Hadoop,先讓它跑起來。建議先使用安裝包命令行安裝,不要使用管理工具安裝。現在都用Hadoop 2.0。

HDFS目錄操作命令;上傳、下載文件命令;提交運行MapReduce示例程序;打開Hadoop WEB界面,查看Job運行狀態,查看Job運行日誌。知道Hadoop的系統日誌在哪裡。

以上完成之後,就應該去了解他們的原理了:

MapReduce:如何分而治之;HDFS:數據到底在哪裡,究竟什麼才是副本;

Yarn到底是什麼,它能幹什麼;NameNode到底在幹些什麼;Resource Manager到底在幹些什麼;

如果有合適的學習網站,視頻就去聽課,如果沒有或者比較喜歡書籍,也可以啃書。當然最好的方法是先去搜索出來這些是幹什麼的,大概有了概念之後,然後再去聽視頻。

之後便是自己尋找一個例子:

自己寫一個(照抄也行)WordCount程序,

打包並提交到Hadoop運行。你不會Java?Shell、Python都可以,有個東西叫Hadoop Streaming。如果你認真完成了以上幾步,恭喜你,你的一隻腳已經進來了。

第二章:更高效的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表的數據;

MapReduce的原理(還是那個經典的題目,一個10G大小的文件,給定1G大小的內存,如何使用Java程序統計出現次數最多的10個單詞及次數);

HDFS讀寫數據的流程;向HDFS中PUT數據;從HDFS中下載數據;

自己會寫簡單的MapReduce程序,運行出現問題,知道在哪裡查看日誌;

會寫簡單的Select、Where、group by等SQL語句;

Hive SQL轉換成MapReduce的大致流程;

Hive中常見的語句:創建表、刪除表、往表中加載數據、分區、將表中數據下載到本地;

從上面的學習,你已經瞭解到,HDFS是Hadoop提供的分佈式存儲框架,它可以用來存儲海量數據,MapReduce是Hadoop提供的分佈式計算框架,它可以用來統計和分析HDFS上的海量數據,而Hive則是SQL On Hadoop,Hive提供了SQL接口,開發人員只需要編寫簡單易上手的SQL語句,Hive負責把SQL翻譯成MapReduce,提交運行。

此時,你的”大數據平臺”是這樣的:那麼問題來了,海量數據如何到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翻譯成MapReduce一樣,Sqoop把你指定的參數翻譯成MapReduce,提交到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

之所以介紹這個,是因為我們公司目前使用的Hadoop與關係型數據庫數據交換的工具,就是之前基於DataX開發的,非常好用。

可以參考我的博文《異構數據源海量數據交換工具-Taobao DataX 下載和使用》。現在DataX已經是3.0版本,支持很多數據源。你也可以在其之上做二次開發。有興趣的可以研究和使用一下,對比一下它與Sqoop。

第四章:把Hadoop上的數據搞到別處去

Hive和MapReduce進行分析了。那麼接下來的問題是,分析完的結果如何從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和MapReduce來分析數據,把分析結果同步到其他數據源。

接下來的問題來了,Hive使用的越來越多,你會發現很多不爽的地方,特別是速度慢,大多情況下,明明我的數據量很小,它都要申請資源,啟動MapReduce來執行。

第五章:SQL

其實大家都已經發現Hive後臺使用MapReduce作為執行引擎,實在是有點慢。因此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比MapReduce快。
  • 使用SparkSQL代替Hive,更快的運行SQL。
  • 使用Kafka完成數據的一次收集,多次消費架構。
  • 自己可以寫程序完成Kafka的生產者和消費者。

從前面的學習,你已經掌握了大數據平臺中的數據採集、數據存儲和計算、數據交換等大部分技能,而這其中的每一步,都需要一個任務(程序)來完成,各個任務之間又存在一定的依賴性,比如,必須等數據採集任務成功完成後,數據計算任務才能開始運行。如果一個任務執行失敗,需要給開發運維人員發送告警,同時需要提供完整的日誌來方便查錯。

第七章:越來越多的分析任務

不僅僅是分析任務,數據採集、數據交換同樣是一個個的任務。這些任務中,有的是定時觸發,有點則需要依賴其他任務來觸發。當平臺中有幾百上千個任務需要維護和運行時候,僅僅靠crontab遠遠不夠了,這時便需要一個調度監控系統來完成這件事。調度監控系統是整個數據平臺的中樞系統,類似於AppMaster,負責分配和監控任務。

7.1 Apache Oozie

  • Oozie是什麼?有哪些功能?
  • Oozie可以調度哪些類型的任務(程序)?
  • Oozie可以支持哪些任務觸發方式?
  • 安裝配置Oozie。

7.2 其他開源的任務調度系統

Azkaban,light-task-scheduler,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。

這麼多比較成熟的框架和方案,需要結合自己的業務需求及數據平臺技術架構,選擇合適的。原則只有一個:越簡單越穩定的,就是最好的。

如果你已經掌握瞭如何很好的對外(業務)提供數據,那麼你的“大數據平臺”應該是這樣的:

第十章:牛逼高大上的機器學習

關於這塊,也只能是簡單介紹一下了,研究不深入。在業務中,遇到的能用機器學習解決的問題大概這麼三類:

  • 分類問題:包括二分類和多分類,二分類就是解決了預測的問題,就像預測一封郵件是否垃圾郵件;多分類解決的是文本的分類;
  • 聚類問題:從用戶搜索過的關鍵詞,對用戶進行大概的歸類。
  • 推薦問題:根據用戶的歷史瀏覽和點擊行為進行相關推薦。

大多數行業,使用機器學習解決的也就是這幾類問題。

入門學習線路,數學基礎;機器學習實戰,懂Python最好;SparkMlLib提供了一些封裝好的算法,以及特徵處理、特徵選擇的方法。

機器學習確實牛逼高大上,也是我學習的目標。那麼,可以把機器學習部分也加進你的“大數據平臺”了。


初更


你好!我是@程序員學習很高興回答你的提問,希望對你有所幫助,謝謝!


學習大數據首先我們要學習Java語言和Linux操作系統,這兩個是學習大數據的基礎,學習的順序不分前後。

Java

大家都知道Java的方向有JavaSE、JavaEE、JavaME,學習大數據要學習那個方向呢?只需要學習Java的標準版JavaSE就可以了,像Servlet、JSP、Tomcat、Struts、Spring、Hibernate,Mybatis都是JavaEE方向的技術在大數據技術裡用到的並不多,只需要瞭解就可以了,當然Java怎麼連接數據庫還是要知道的,像JDBC一定要掌握一下。

有同學說Hibernate或Mybites也能連接數據庫啊,為什麼不學習一下,我這裡不是說學這些不好,而是說學這些可能會用你很多時間,到最後工作中也不常用,我還沒看到誰做大數據處理用到這兩個東西的,當然你的精力很充足的話,可以學學Hibernate或Mybites的原理,不要只學API,這樣可以增加你對Java操作數據庫的理解,因為這兩個技術的核心就是Java的反射加上JDBC的各種使用。

Linux

因為大數據相關軟件都是在Linux上運行的,所以Linux要學習的紮實一些,學好Linux對你快速掌握大數據相關技術會有很大的幫助,能讓你更好的理解hadoop、hive、hbase、spark等大數據軟件的運行環境和網絡環境配置,能少踩很多坑,學會shell就能看懂腳本這樣能更容易理解和配置大數據集群。還能讓你對以後新出的大數據技術學習起來更快。

好說完基礎了,再說說還需要學習哪些大數據技術,可以按我寫的順序學下去。

Hadoop

這是現在流行的大數據處理平臺幾乎已經成為大數據的代名詞,所以這個是必學的。Hadoop裡面包括幾個組件HDFS、MapReduce和YARN,HDFS是存儲數據的地方就像我們電腦的硬盤一樣文件都存儲在這個上面,MapReduce是對數據進行處理計算的,它有個特點就是不管多大的數據只要給它時間它就能把數據跑完,但是時間可能不是很快所以它叫數據的批處理。

YARN是體現Hadoop平臺概念的重要組件有了它大數據生態體系的其它軟件就能在hadoop上運行了,這樣就能更好的利用HDFS大存儲的優勢和節省更多的資源比如我們就不用再單獨建一個spark的集群了,讓它直接跑在現有的hadoop yarn上面就可以了。

其實把Hadoop的這些組件學明白你就能做大數據的處理了,只不過你現在還可能對"大數據"到底有多大還沒有個太清楚的概念,聽我的別糾結這個。等以後你工作了就會有很多場景遇到幾十T/幾百T大規模的數據,到時候你就不會覺得數據大真好,越大越有你頭疼的。當然別怕處理這麼大規模的數據,因為這是你的價值所在,讓那些個搞Javaee的php的html5的和DBA的羨慕去吧。

記住學到這裡可以作為你學大數據的一個節點。

Zookeeper

這是個萬金油,安裝Hadoop的HA的時候就會用到它,以後的Hbase也會用到它。它一般用來存放一些相互協作的信息,這些信息比較小一般不會超過1M,都是使用它的軟件對它有依賴,對於我們個人來講只需要把它安裝正確,讓它正常的run起來就可以了。

Mysql

我們學習完大數據的處理了,接下來學習學習小數據的處理工具mysql數據庫,因為一會裝hive的時候要用到,mysql需要掌握到什麼層度那?你能在Linux上把它安裝好,運行起來,會配置簡單的權限,修改root的密碼,創建數據庫。這裡主要的是學習SQL的語法,因為hive的語法和這個非常相似。

Sqoop

這個是用於把Mysql裡的數據導入到Hadoop裡的。當然你也可以不用這個,直接把Mysql數據表導出成文件再放到HDFS上也是一樣的,當然生產環境中使用要注意Mysql的壓力。

Hive

這個東西對於會SQL語法的來說就是神器,它能讓你處理大數據變的很簡單,不會再費勁的編寫MapReduce程序。有的人說Pig那?它和Pig差不多掌握一個就可以了。

Oozie

既然學會Hive了,我相信你一定需要這個東西,它可以幫你管理你的Hive或者MapReduce、Spark腳本,還能檢查你的程序是否執行正確,出錯了給你發報警並能幫你重試程序,最重要的是還能幫你配置任務的依賴關係。我相信你一定會喜歡上它的,不然你看著那一大堆腳本,和密密麻麻的crond是不是有種想屎的感覺。

Hbase

這是Hadoop生態體系中的NOSQL數據庫,他的數據是按照key和value的形式存儲的並且key是唯一的,所以它能用來做數據的排重,它與MYSQL相比能存儲的數據量大很多。所以他常被用於大數據處理完成之後的存儲目的地。

Kafka

這是個比較好用的隊列工具,隊列是幹嗎的?排隊買票你知道不?數據多了同樣也需要排隊處理,這樣與你協作的其它同學不會叫起來,你幹嗎給我這麼多的數據(比如好幾百G的文件)我怎麼處理得過來,你別怪他因為他不是搞大數據的,你可以跟他講我把數據放在隊列裡你使用的時候一個個拿,這樣他就不在抱怨了馬上灰流流的去優化他的程序去了。

因為處理不過來就是他的事情。而不是你給的問題。當然我們也可以利用這個工具來做線上實時數據的入庫或入HDFS,這時你可以與一個叫Flume的工具配合使用,它是專門用來提供對數據進行簡單處理,並寫到各種數據接受方(比如Kafka)的。

Spark

它是用來彌補基於MapReduce處理數據速度上的缺點,它的特點是把數據裝載到內存中計算而不是去讀慢的要死進化還特別慢的硬盤。特別適合做迭代運算,所以算法流們特別稀飯它。它是用scala編寫的。Java語言或者Scala都可以操作它,因為它們都是用JVM的。

會這些東西你就成為一個專業的大數據開發工程師了,月薪2W都是小毛毛雨

後續提高 :當然還是有很有可以提高的地方,比如學習下python,可以用它來編寫網絡爬蟲。這樣我們就可以自己造數據了,網絡上的各種數據你高興都可以下載到你的集群上去處理。

最後再學習下推薦、分類等算法的原理這樣你能更好的與算法工程師打交通。這樣你的公司就更離不開你了,大家都會對你喜歡的不要不要的。



希望對你有幫助,記得點贊和關注!😘😘


分享到:


相關文章: