大数据初识

原文地址:

    https://juejin.im/post/5b1a71c25188257d571f24a2

一、前言

要说当下IT行业什么最火?ABC无出其右。所谓 ABC 者,AI + Big Data + Cloud也,即人工智能大数据云计算(云平台)。每个领域目前都有行业领袖在引领前行,今天我们来讨论下大数据 Big Data 这个方向。

二、大数据的4V特征

  1. 数据量大,TB->PB

  2. 数据类型繁多,结构化、非结构化文本、日志、视频、图片、地理位置等;

  3. 商业价值高,但是这种价值需要在海量数据之上,通过数据分析与机器学习更快速的挖掘出来;

  4. 处理时效性高,海量数据的处理需求不再局限在离线计算当中。

三、大数据用到相关的框架

现如今,正式为了应对大数据的这几个特点,开源的大数据框架越来越多,越来越强,先列举一些常见的:

  • 文件存储: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 。

下一篇:写给大数据开发初学者的话

猜你喜欢

转载自blog.csdn.net/gulang03/article/details/87943331