大数据初识
原文地址:
? ??https://juejin.im/post/5b1a71c25188257d571f24a2
一、前言
要說當下IT行業什么最火?ABC無出其右。所謂 ABC 者,AI + Big Data + Cloud也,即人工智能、大數據和云計算(云平臺)。每個領域目前都有行業領袖在引領前行,今天我們來討論下大數據 Big Data 這個方向。
二、大數據的4V特征
數據量大,TB->PB
數據類型繁多,結構化、非結構化文本、日志、視頻、圖片、地理位置等;
商業價值高,但是這種價值需要在海量數據之上,通過數據分析與機器學習更快速的挖掘出來;
處理時效性高,海量數據的處理需求不再局限在離線計算當中。
三、大數據用到相關的框架
現如今,正式為了應對大數據的這幾個特點,開源的大數據框架越來越多,越來越強,先列舉一些常見的:
- 文件存儲:Hadoop HDFS、Tachyon、KFS
- 離線計算:Hadoop MapReduce、Spark
- 流式、實時計算:Storm、Spark Streaming、S4、Heron、Flink
- 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多種吧,別說精通了,全部都會使用的,估計也沒幾個。就我個人而言,主要經驗是在第二個方向(開發/設計/架構),且聽聽我的建議吧。【PS:作者原話】
四、職位方向及對應職位應掌握的技能
職位主要分為:大數據工程師、大數據分析師Or數據科學家
4.1 大數據工程師
該職位主要偏向于應用開發,具備一下技能。
4.1.1 linux基礎
因為大數據體系,基本都是開源軟件,這些開源軟件都是在開源的linux系統上運行的,所以你必須會基本的linux操作,比如用戶管理,權限,shell編程之類的
4.1.2?一門JVM系語言:
當前大數據生態JVM系語言類的比重極大,某種程度上說是壟斷也不為過。這里我推薦大家學習Java或Scala,至于Clojure這樣的語言上手不易,其實并不推薦大家使用。另外,如今是“母以子貴”的年代,某個大數據框架會帶火它的編程語言的流行,比如Docker之于Go、Kafka之于Scala。
因此這里建議您至少要精通一門JVM系的語言。值得一提的,一定要弄懂這門語言的多線程模型和內存模型,很多大數據框架的處理模式其實在語言層面和多線程處理模型是類似的,只是大數據框架把它們引申到了多機分布式這個層面。
建議:學習 Java 或 Scala 【PS:python 的也有一定的優勢,python 的優勢是庫多、語法簡單、但是速度是痛點】
4.1.3?計算處理框架
嚴格來說,這分為?離線批處理?和 流式處理?。流式處理是未來的趨勢,建議大家一定要去學習;而離線批處理其實已經快過時了,它的分批處理思想無法處理無窮數據集,因此其適用范圍日益縮小。事實上,Google已經在公司內部正式廢棄了以MapReduce 為代表的離線處理。
因此如果要學習大數據工程,掌握一門實時流式處理框架是必須的。當下主流的框架包括:Apache Samza, Apache Storm, Apache Spark Streaming 以及最近一年風頭正勁的 Apache Flink 。當然 Apache Kafka 也推出了它自己的流式處理框架:Kafka Streams
建議:學習Flink、Spark Streaming 或 Kafka Streams中的一個。
4.1.4?分布式存儲框架
雖說 MapReduce 有些過時了,但 Hadoop 的另一個基石 HDFS 依然堅挺,并且是開源社區最受歡迎的分布式存儲,絕對您花時間去學習。
4.1.5?資源調度框架
Docker 可是整整火了最近一兩年。各個公司都在發力基于 Docker 的容器解決方案,最有名的開源容器調度框架就是 K8S 了,但同樣著名的還有 Hadoop 的 YARN 和 Apache Mesos 。后兩者不僅可以調度容器集群,還可以調度非容器集群,非常值得我們學習。
4.1.6?分布式協調框架
有一些通用的功能在所有主流大數據分布式框架中都需要實現,比如服務發現、領導者選舉、分布式鎖、KV存儲等。這些功能也就催生了分布式協調框架的發展。最古老也是最有名的當屬 Apache Zookeeper 了,新一些的包括 Consul,etcd 等。學習大數據工程,分布式協調框架是不能不了解的, 某種程度上還要深入了解。
4.1.7?列式存儲數據庫
曾經花了很長的時間學習Oracle,但不得不承認當下關系型數據庫已經慢慢地淡出了人們的視野,有太多的方案可以替代 rdbms了。人們針對行式存儲不適用于大數據 ad-hoc?查詢這種弊端開發出了列式存儲,典型的列式存儲數據庫就是開源社區的HBASE。
4.1.8?消息隊列
大數據工程處理中消息隊列作為“削峰填谷”的主力系統是必不可少的,當前該領域內的解決方案有很多,包括 ActiveMQ,Kafka等。國內阿里也開源了 RocketMQ 。這其中的翹楚當屬 Apache Kafka 了。Kafka 的很多設計思想都特別契合分布流式數據處理的設計理念。這也難怪,Kafka 的原作者 Jay Kreps 可是當今實時流式處理方面的頂級大神。
建議:學習 Kafka ,不僅僅好找工作(幾乎所有大數據招聘簡歷都要求會Kafka:-) ),還能觸類旁通進一步理解基于備份日志方式的數據處理范型。
4.2?大數據分析師Or數據科學家
大數據分析,對應的工作崗位就叫大數據分析師或者數據科學家,作為數據科學家的我們必須要掌握以下技能
4.2.1?數學功底
微積分是嚴格要掌握的。不一定要掌握多元微積分,但一元微積分是必須要熟練掌握并使用的。另外線性代數一定要精通,特別是矩陣的運算、向量空間、秩等概念。當前機器學習框架中很多計算都需要用到矩陣的乘法、轉置或是求逆。雖然很多框架都直接提供了這樣的工具,但我們至少要了解內部的原型原理,比如如何高效判斷一個矩陣是否存在逆矩陣并如何計算等。
重溫同濟版《高等數學》,有條件可以去 Coursea 學習賓夕法尼亞大學的微積分課程。
推薦學習Strang的線性代數:《Introduction to Linear Algebra》——這是最經典的教材,沒有之一!
4.2.2?數理統計
概率和各種統計學方法要做到基本掌握,比如貝葉斯概率如何計算?概率分布是怎么回事?雖不要求精通,但對相關背景和術語一定要了解
找一本《概率論》重新學習下
4.2.3?交互式數據分析框架
這里并不是指SQL或數據庫查詢,而是像Apache Hive或Apache Kylin這樣的分析交互框架。開源社區中有很多這樣類似的框架,可以使用傳統的數據分析方式對大數據進行數據分析或數據挖掘。
有過使用經驗的是Hive和Kylin。不過Hive特別是Hive1是基于MapReduce的,性能并非特別出色,而Kylin采用數據立方體的概念結合星型模型,可以做到很低延時的分析速度,況且Kylin是第一個研發團隊主力是中國人的Apache孵化項目,因此日益受到廣泛的關注。
首先學習Hive,有時間的話了解一下Kylin以及背后的數據挖掘思想
4.2.4?機器學習框架
機器學習當前真是火爆宇宙了,人人都提機器學習和 AI,但筆者一直認為機器學習恰似幾年前的云計算一樣,目前雖然火爆,但
沒有實際的落地項目,可能還需要幾年的時間才能逐漸成熟。
不過在現在就開始儲備機器學習的知識總是沒有壞處的。說到機器學習的框架,大家耳熟能詳的有很多種, 信手拈來的就包括TensorFlow、Caffe8、Keras9、CNTK10、Torch711 等,其中又以 TensorFlow 領銜。
當前建議大家選取其中的一個框架進行學習,但以我對這些框架的了解,這些框架大多很方便地封裝了各種機器學習算法提供給用戶使用,但對于底層算法的了解其實并沒有太多可學習之處。因此還是建議可以從機器學習算法的原理來進行學習,比如:
目前機器學習領域最NB的入門課程:吳恩達博士的 Machine Learning 。
?
下一篇:寫給大數據開發初學者的話
總結
- 上一篇: 写给大数据开发初学者的话
- 下一篇: 解决 centos7 最小化安装之后不能