大数据的学习需要预先了解哪些基础知识?

已邀请:

翊文化

赞同来自:

计算机的基本工作就是处理数据,包括磁盘文件中的数据,通过网络传输的数据流或数据包,数据库中的结构化数据等。随着互联网、物联网等技术得到越来越广泛的应用,数据规模不断增加,TB、PB量级成为常态,对数据的处理已无法由单台计算机完成,而只能由多台机器共同承担计算任务。而在分布式环境中进行大数据处理,除了与存储系统打交道外,还涉及计算任务的分工,计算负荷的分配,计算机之间的数据迁移等工作,并且要考虑计算机或网络发生故障时的数据安全,情况要复杂得多。

举一个简单的例子,假设我们要从销售记录中统计各种商品销售额。在单机环境中,我们只需把销售记录扫描一遍,对各商品的销售额进行累加即可。如果销售记录存放在关系数据库中,则更省事,执行一个SQL语句就可以了。现在假定销售记录实在太多,需要设计出由多台计算机来统计销售额的方案。为保证计算的正确、可靠、高效及方便,这个方案需要考虑下列问题:

  1. 如何为每台机器分配任务,是先按商品种类对销售记录分组,不同机器处理不同商品种类的销售记录,还是随机向各台机器分发一部分销售记录进行统计,最后把各台机器的统计结果按商品种类合并?
  2. 上述两种方式都涉及数据的排序问题,应选择哪种排序算法?应该在哪台机器上执行排序过程?
  3. 如何定义每台机器处理的数据从哪里来,处理结果到哪里去?数据是主动发送,还是接收方申请时才发送?如果是主动发送,接收方处理不过来怎么办?如果是申请时才发送,那发送方应该保存数据多久?
  4. 会不会任务分配不均,有的机器很快就处理完了,有的机器一直忙着?甚至,闲着的机器需要等忙着的机器处理完后才能开始执行?
  5. 如果增加一台机器,它能不能减轻其他机器的负荷,从而缩短任务执行时间?
  6. 如果一台机器挂了,它没有完成的任务该交给谁?会不会遗漏统计或重复统计?
  7. 统计过程中,机器之间如何协调,是否需要专门的一台机器指挥调度其他机器?如果这台机器挂了呢?
  8. (可选)如果销售记录在源源不断地增加,统计还没执行完新记录又来了,如何保证统计结果的准确性?能不能保证结果是实时更新的?再次统计时能不能避免大量重复计算?
  9. (可选)能不能让用户执行一句SQL就可以得到结果?

上述问题中,除了第1个外,其余的都与具体任务无关,在其他分布式计算的场合也会遇到,而且解决起来都相当棘手。即使第1个问题中的分组、统计,在很多数据处理场合也会涉及,只是具体方式不同。如果能把这些问题的解决方案封装到一个计算框架中,则可大大简化这类应用程序的开发。

2004年前后,Google先后发表三篇论文分别介绍分布式文件系统GFS、并行计算模型MapReduce、非关系数据存储系统BigTable,第一次提出了针对大数据分布式处理的可重用方案。在Google论文的启发下,Yahoo的工程师Doug Cutting和Mike Cafarella开发了Hadoop。在借鉴和改进Hadoop的基础上,又先后诞生了数十种应用于分布式环境的大数据计算框架。本文在参考业界惯例的基础上,对这些框架按下列标准分类:

  1. 如果不涉及上面提出的第8、9两个问题,则属于批处理框架。批处理框架重点关心数据处理的吞吐量,又可分为非迭代式和迭代式两类,迭代式包括DAG(有向无环图)、图计算等模型。
  2. 若针对第8个问题提出来应对方案,则分两种情况:如果重点关心处理的实时性,则属于流计算框架;如果侧重于避免重复计算,则属于增量计算框架。
  3. 如果重点关注的是第9个问题,则属于交互式分析框架。

本文下面分别讨论批处理、流计算、交互式分析三种类别的框架,然后简要介绍大数据计算框架的一些发展趋势。文章最后介绍这一领域的学习资料。




批处理框架
Hadoop

Hadoop最初主要包含分布式文件系统HDFS和计算框架MapReduce两部分,是从Nutch中独立出来的项目。在2.0版本中,又把资源管理和任务调度功能从MapReduce中剥离形成YARN,使其他框架也可以像MapReduce那样运行在Hadoop之上。与之前的分布式计算框架相比,Hadoop隐藏了很多繁琐的细节,如容错、负载均衡等,更便于使用。

Hadoop也具有很强的横向扩展能力,可以很容易地把新计算机接入到集群中参与计算。在开源社区的支持下,Hadoop不断发展完善,并集成了众多优秀的产品如非关系数据库HBase、数据仓库Hive、数据处理工具Sqoop、机器学习算法库Mahout、一致性服务软件ZooKeeper、管理工具Ambari等,形成了相对完整的生态圈和分布式计算事实上的标准。



图2. Hadoop生态圈(删减版)

MapReduce可以理解为把一堆杂乱无章的数据按照某种特征归并起来,然后处理并得到最后的结果。基本处理步骤如下:

  1. 把输入文件按照一定的标准分片,每个分片对应一个map任务。一般情况下,MapReduce和HDFS运行在同一组计算机上,也就是说,每台计算机同时承担存储和计算任务,因此分片通常不涉及计算机之间的数据复制。
  2. 按照一定的规则把分片中的内容解析成键值对。通常选择一种预定义的规则即可。
  3. 执行map任务,处理每个键值对,输出零个或多个键值对。
  4. MapReduce获取应用程序定义的分组方式,并按分组对map任务输出的键值对排序。默认每个键名一组。
  5. 待所有节点都执行完上述步骤后,MapReduce启动Reduce任务。每个分组对应一个Reduce任务。
  6. 执行reduce任务的进程通过网络获取指定组的所有键值对。
  7. 把键名相同的值合并为列表。
  8. 执行reduce任务,处理每个键对应的列表,输出结果。



图3. MapReduce处理过程

在上面的步骤中,应用程序主要负责设计map和reduce任务,其他工作均由框架负责。在定义map任务输出数据的方式时,键的选择至关重要,除了影响结果的正确性外,也决定数据如何分组、排序、传输,以及执行reduce任务的计算机如何分工。前面提到的商品销售统计的例子,可选择商品种类为键。MapReduce执行商品销售统计的过程大致如下:

  1. 把销售记录分片,分配给多台机器。
  2. 每条销售记录被解析成键值对,其中值为销售记录的内容,键可忽略。
  3. 执行map任务,每条销售记录被转换为新的键值对,其中键为商品种类,值为该条记录中商品的销售额。
  4. MapReduce把map任务生成的数据按商品种类排序。
  5. 待所有节点都完成排序后,MapReduce启动reduce任务。每个商品种类对应一个reduce任务。
  6. 执行reduce任务的进程通过网络获取指定商品种类的各次销售额。
  7. MapReduce把同一种商品下的各次销售额合并到列表中。
  8. 执行reduce任务,累加各次销售额,得到该种商品的总销售额。

上面的过程还有优化的空间。在传输各种商品每次的销售额数据前,可先在map端对各种商品的销售额进行小计,由此可大大减少网络传输的负荷。MapReduce通过一个可选的combine任务支持该类型的优化。
DAG模型

现在假设我们的目标更进一步,希望知道销售得最好的前10种商品。我们可以分两个环节来计算:

  1. 统计各种商品的销售额。通过MapReduce实现,这在前面已经讨论过。
  2. 对商品种类按销售额排名。可以通过一个排序过程完成。假定商品种类非常多,需要通过多台计算机来加快计算速度的话,我们可以用另一个MapReduce过程来实现,其基本思路是把map和reduce分别当作小组赛和决赛,先计算各分片的前10名,汇总后再计算总排行榜的前10名。

从上面的例子可以看出,通过多个MapReduce的组合,可以表达复杂的计算问题。不过,组合过程需要人工设计,比较麻烦。另外,每个阶段都需要所有的计算机同步,影响了执行效率。

为克服上述问题,业界提出了DAG(有向无环图)计算模型,其核心思想是把任务在内部分解为若干存在先后顺序的子任务,由此可更灵活地表达各种复杂的依赖关系。Microsoft Dryad、Google FlumeJava、Apache Tez是最早出现的DAG模型。Dryad定义了串接、全连接、融合等若干简单的DAG模型,通过组合这些简单结构来描述复杂的任务,FlumeJava、Tez则通过组合若干MapReduce形成DAG任务。



图4. MapReduce(左)与Tez(右)
执行复杂任务时对比

MapReduce的另一个不足之处是使用磁盘存储中间结果,严重影响了系统的性能,这在机器学习等需要迭代计算的场合更为明显。加州大学伯克利分校AMP实验室开发的Spark克服了上述问题。Spark对早期的DAG模型作了改进,提出了基于内存的分布式存储抽象模型RDD(Resilient Distributed Datasets,可恢复分布式数据集),把中间数据有选择地加载并驻留到内存中,减少磁盘IO开销。与Hadoop相比,Spark基于内存的运算要快100倍以上,基于磁盘的运算也要快10倍以上。



图5. MapReduce与Spark中间结果
保存方式对比

Spark为RDD提供了丰富的操作方法,其中map、 filter、 flatMap、 sample、groupByKey、 reduceByKey、union、join、cogroup、mapValues、sort、partionBy用于执行数据转换,生成新的RDD,而count、collect、 reduce、lookup、save用于收集或输出计算结果。如前面统计商品销售额的例子,在Spark中只需要调用map和reduceByKey两个转换操作就可以实现,整个程序包括加载销售记录和保存统计结果在内也只需要寥寥几行代码,并且支持Java、Scala、Python、R等多种开发语言,比MapReduce编程要方便得多。下图说明reduceByKey的内部实现。



图6. RDD reduceByKey内部实现

RDD由于把数据存放在内存中而不是磁盘上,因此需要比Hadoop更多地考虑容错问题。分布式数据集的容错有两种方式:数据检查点和记录数据的更新。处理海量数据时,数据检查点操作成本很高, 因此Spark默认选择记录更新的方式。不过如果更新粒度太细太多,记录更新成本也不低。因此,RDD只支持粗粒度转换,即只记录单个块上执行的单个操作,然后将创建RDD的一系列变换序列记录下来,类似于数据库中的日志。

当RDD的部分分区数据丢失时,Spark根据之前记录的演变过程重新运算,恢复丢失的数据分区。Spark生态圈的另一项目Alluxio(原名Tachyon)也采用类似的思路,使数据写入速度比HDFS有数量级的提升。

下面总结Spark对MapReduce的改进:

  • MapReduce抽象层次低,需要手工编写代码完成;Spark基于RDD抽象,使数据处理逻辑的代码非常简短。
  • MapReduce只提供了map和reduce两个操作,表达力欠缺;Spark提供了很多转换和动作,很多关系数据库中常见的操作如JOIN、GROUP BY已经在RDD中实现。
  • MapReduce中,只有map和reduce两个阶段,复杂的计算需要大量的组合,并且由开发者自己定义组合方式;Spark中,RDD可以连续执行多个转换操作,如果这些操作对应的RDD分区不变的话,还可以放在同一个任务中执行。
  • MapReduce处理逻辑隐藏在代码中,不直观;Spark代码不包含操作细节,逻辑更清晰。
  • MapReduce中间结果放在HDFS中;Spark中间结果放在内存中,内存放不下时才写入本地磁盘而不是HDFS,这显著提高了性能,特别是在迭代式数据处理的场合。
  • MapReduce中,reduce任务需要等待所有map任务完成后才可以开始;在Spark中,分区相同的转换构成流水线放到同一个任务中运行。
流计算框架

流计算概述

在大数据时代,数据通常都是持续不断动态产生的。在很多场合,数据需要在非常短的时间内得到处理,并且还要考虑容错、拥塞控制等问题,避免数据遗漏或重复计算。流计算框架则是针对这一类问题的解决方案。流计算框架一般采用DAG(有向无环图)模型。图中的节点分为两类:一类是数据的输入节点,负责与外界交互而向系统提供数据;另一类是数据的计算节点,负责完成某种处理功能如过滤、累加、合并等。从外部系统不断传入的实时数据则流经这些节点,把它们串接起来。如果把数据流比作水的话,输入节点好比是喷头,源源不断地出水,计算节点则相当于水管的转接口。如下图所示。



图7. 流计算DAG模型示意图

为提高并发性,每一个计算节点对应的数据处理功能被分配到多个任务(相同或不同计算机上的线程)。在设计DAG时,需要考虑如何把待处理的数据分发到下游计算节点对应的各个任务,这在实时计算中称为分组(Grouping)。最简单的方案是为每个任务复制一份,不过这样效率很低,更好的方式是每个任务处理数据的不同部分。随机分组能达到负载均衡的效果,应优先考虑。不过在执行累加、数据关联等操作时,需要保证同一属性的数据被固定分发到对应的任务,这时应采用定向分组。在某些情况下,还需要自定义分组方案。



图8. 流计算分组

由于应用场合的广泛性,目前市面上已经有不少流计算平台,包括Google MillWheel、Twitter Heron和Apache项目Storm、Samza、S4、Flink、Apex、Gearpump。
Storm及Trident

在流计算框架中,目前人气最高,应用最广泛的要数Storm。这是由于Storm具有简单的编程模型,且支持Java、Ruby、Python等多种开发语言。Storm也具有良好的性能,在多节点集群上每秒可以处理上百万条消息。Storm在容错方面也设计得很优雅。下面介绍Storm确保消息可靠性的思路。

在DAG模型中,确保消息可靠的难点在于,原始数据被当前的计算节点成功处理后,还不能被丢弃,因为它生成的数据仍然可能在后续的计算节点上处理失败,需要由该消息重新生成。而如果要对消息在各个计算节点的处理情况都作跟踪记录的话,则会消耗大量资源。

Storm的解决思路,是为每条消息分派一个ID作为唯一性标识,并在消息中包含原始输入消息的ID。同时用一个响应中心(Acker)维护每条原始输入消息的状态,状态的初值为该原始输入消息的ID。每个计算节点成功执行后,则把输入和输出消息的ID进行异或,再异或对应的原始输入消息的状态。由于每条消息在生成和处理时分别被异或一次,则成功执行后所有消息均被异或两次,对应的原始输入消息的状态为0。因此当状态为0后可安全清除原始输入消息的内容,而如果超过指定时间间隔后状态仍不为0,则认为处理该消息的某个环节出了问题,需要重新执行。



图9. Storm保证消息可靠性过程示意图

Storm还实现了更高层次的抽象框架Trident。Trident以微批处理的方式处理数据流,比如每次处理100条记录。Trident提供了过滤、分组、连接、窗口操作、聚合、状态管理等操作,支持跨批次进行聚合处理,并对执行过程进行优化,包括多个操作的合并、数据传输前的本地聚合等。以微批处理方式处理数据流的框架还有Spark Streaming。



(1) 实时流处理



(2) 微批处理
图10. 实时流处理与微批处理比较

下面是Storm、Trident与另外几种流计算框架的对比:



交互式分析框架
概述

在解决了大数据的可靠存储和高效计算后,如何为数据分析人员提供便利日益受到关注,而最便利的分析方式莫过于交互式查询。这几年交互式分析技术发展迅速,目前这一领域知名的平台有十余个,包括Google开发的Dremel和PowerDrill,Facebook开发的Presto, Hadoop服务商Cloudera和HortonWorks分别开发的Impala和Stinger,以及Apache项目Hive、Drill、Tajo、Kylin、MRQL等。

一些批处理和流计算平台如Spark和Flink也分别内置了交互式分析框架。由于SQL已被业界广泛接受,目前的交互式分析框架都支持用类似SQL的语言进行查询。早期的交互式分析平台建立在Hadoop的基础上,被称作SQL-on-Hadoop。后来的分析平台改用Spark、Storm等引擎,不过SQL-on-Hadoop的称呼还是沿用了下来。SQL-on-Hadoop也指为分布式数据存储提供SQL查询功能。
Hive

Apache Hive是最早出现的架构在Hadoop基础之上的大规模数据仓库,由Facebook设计并开源。Hive的基本思想是,通过定义模式信息,把HDFS中的文件组织成类似传统数据库的存储系统。Hive 保持着 Hadoop 所提供的可扩展性和灵活性。Hive支持熟悉的关系数据库概念,比如表、列和分区,包含对非结构化数据一定程度的 SQL 支持。它支持所有主要的原语类型(如整数、浮点数、字符串)和复杂类型(如字典、列表、结构)。它还支持使用类似 SQL 的声明性语言 Hive Query Language (HiveQL) 表达的查询,任何熟悉 SQL 的人都很容易理解它。HiveQL被编译为MapReduce过程执行。下图说明如何通过MapReduce实现JOIN和GROUP BY。



(1) 实现JOIN



(2) 实现GROUP BY
图11. 部分HiveQL操作的实现方式

Hive与传统关系数据库对比如下:




Hive的主要弱点是由于建立在MapReduce的基础上,性能受到限制。很多交互式分析平台基于对Hive的改进和扩展,包括Stinger、Presto、Kylin等。其中Kylin是中国团队提交到Apache上的项目,其与众不同的地方是提供多维分析(OLAP)能力。Kylin对多维分析可能用到的度量进行预计算,供查询时直接访问,由此提供快速查询和高并发能力。Kylin在eBay、百度、京东、网易、美团均有应用。
SQL引擎Calcite

对于交互式分析,SQL查询引擎的优劣对性能的影响举足轻重。Spark开发了自己的查询引擎Catalyst,而包括Hive、Drill、Kylin、Flink在内的很多交互式分析平台及数据仓库使用Calcite(原名optiq)作为SQL引擎。Calcite是一个Apache孵化项目,其创建者Julian Hyde曾是Oracle数据库SQL引擎的主要开发者。Calcite具有下列几个技术特点:

  • 支持标准SQL语言。
  • 支持OLAP。
  • 支持对流数据的查询。
  • 独立于编程语言和数据源,可以支持不同的前端和后端。
  • 支持关系代数、可定制的逻辑规划规则和基于成本模型优化的查询引擎。
  • 支持物化视图(materialized view)的管理。

由于分布式场景远比传统的数据存储环境更复杂,Calcite和Catalyst都还处于向Oracle、MySQL等经典关系数据库引擎学习的阶段,在性能优化的道路上还有很长的路要走。
其他类型的框架

除了上面介绍的几种类型的框架外,还有一些目前还不太热门但具有重要潜力的框架类型。图计算是DAG之外的另一种迭代式计算模型,它以图论为基础对现实世界建模和计算,擅长表达数据之间的关联性,适用于PageRank计算、社交网络分析、推荐系统及机器学习。这一类框架有Google Pregel、Apache Giraph、Apache Hama、PowerGraph、,其中PowerGraph是这一领域目前最杰出的代表。很多图数据库也内置图计算框架。

另一类是增量计算框架,探讨如何只对部分新增数据进行计算来极大提升计算过程的效率,可应用到数据增量或周期性更新的场合。这一类框架包括Google Percolator、Microsoft Kineograph、阿里Galaxy等。

另外还有像Apache Ignite、Apache Geode(GemFire的开源版本)这样的高性能事务处理框架。
总结与展望

从Hadoop横空出世到现在10余年的时间中,大数据分布式计算技术得到了迅猛发展。不过由于历史尚短,这方面的技术远未成熟。各种框架都还在不断改进,并相互竞争。

性能优化毫无疑问是大数据计算框架改进的重点方向之一。而性能的提高很大程度上取决于内存的有效利用。这包括前面提到的内存计算,现已在各种类型的框架中广泛采用。内存资源的分配管理对性能也有重要影响,JVM垃圾回收在给开发人员带来便利的同时,也制约了内存的有效利用。另外,Java的对象创建及序列化也比较浪费资源。在内存优化方面做足功夫的代表是Flink。出于性能方面的考虑,Flink很多组件自行管理内存,无需依赖JVM垃圾回收机制。Flink还用到开辟内存池、用二进制数据代替对象、量身定制序列化、定制缓存友好的算法等优化手段。Flink还在任务的执行方面进行优化,包括多阶段并行执行和增量迭代。

拥抱机器学习和人工智能也是大数据计算的潮流之一。Spark和Flink分别推出机器学习库Spark ML和Flink ML。更多的平台在第三方大数据计算框架上提供机器学习,如Mahout、Oryx及一干Apache孵化项目SystemML、HiveMall、PredictionIO、SAMOA、MADLib。这些机器学习平台一般都同时支持多个计算框架,如Mahout同时以Spark、Flink、H2O为引擎,SAMOA则使用S4、Storm、Samza。在深度学习掀起热潮后,又有社区探索把深度学习框架与现有分布式计算框架结合起来,这样的项目有SparkNet、Caffe on Spark、TensorFrames等。

在同一平台上支持多种框架也是发展趋势之一,尤其对于那些开发实力较为雄厚的社区。Spark以批处理模型为核心,实现了交互式分析框架Spark SQL、流计算框架Spark Streaming(及正在实现的Structured Streaming)、图计算框架GraphX、机器学习库Spark ML。而Flink在提供低延迟的流计算的同时,批处理、关系计算、图计算、机器学习,一个也没落下,目标直奔大数据通用计算平台。Google的BEAM(意为Batch+strEAM)则试图把Spark、Flink、Apex这样的计算框架纳入自己制定的标准之下,颇有号令江湖之意。



Google的那几篇论文这里就不一一列出了,网上很容易搜到。其他推荐的论文如下:



机器之心

赞同来自:

下面的大数据核心术语来自Apache 软件基金会(ASF)的大数据开源项目,目前有350多个。解释完这些项目需要耗费大量时间,所以只挑选解释了50个核心而流行的术语,希望对你学习大数据有帮助。


Apache Kafka:命名于捷克作家卡夫卡,用于构建实时数据管道和流媒体应用。 它如此流行的原因在于能够以容错的方式存储、管理和处理数据流,据说还非常“快速”。 鉴于社交网络环境大量涉及数据流的处理,卡夫卡目前非常受欢迎。

Apache Mahout:Mahout 提供了一个用于机器学习和数据挖掘的预制算法库,也可用作创建更多算法的环境。 换句话说,机器学习极客的最佳环境。

Apache Oozie:在任何编程环境中,你都需要一些工作流系统通过预定义的方式和定义的依赖关系,安排和运行工作。Oozie 为 pig、MapReduce 以及 Hive 等语言编写的大数据工作所提供正是这个。

Apache Drill, Apache Impala, Apache Spark SQL

这三个开源项目都提供快速和交互式的 SQL,如与Apache Hadoop数据的交互。 如果你已经知道SQL并处理以大数据格式存储的数据(即HBase或HDFS),这些功能将非常有用。抱歉,这里说的有点奇怪

Apache Hive:知道SQL吗? 如果知道那你就很好上手Hive了。 Hive有助于使用SQL读取、写入和管理驻留在分布式存储中的大型数据集。

Apache Pig:Pig 是在大型分布式数据集上创建、查询、执行例程的平台。 所使用的脚本语言叫做Pig Latin(我绝对不是瞎说,相信我)。 据说Pig很容易理解和学习。 但是我很怀疑有多少是可以学习的?

Apache Sqoop:一个用于将数据从Hadoop转移到非Hadoop数据存储(如数据仓库和关系数据库)的工具。

Apache Storm:一个免费开源的实时分布式计算系统。 它使得使用Hadoop进行批处理的同时可以更容易地处理非结构化数据。

人工智能(AI) - 为什么AI出现在这里? 你可能会问,这不是一个单独的领域吗? 所有这些技术发展趋势紧密相连,所以我们最好静下心来继续学习,对吧? AI以软硬件结合的方式开发智能机器和软件,这种硬件和软件的结合能够感知环境并在需要时采取必要的行动,不断从这些行动中学习。是不是听起来很像机器学习?跟我一起“困惑”吧。

行为分析(Behavioral Analytics):你有没有想过谷歌是如何为你需要的产品/服务提供广告的?行为分析侧重于理解消费者和应用程序所做的事情,以及如何与为什么它们以某种方式起作用。这涉及了解我们的上网模式,社交媒体互动行为,以及我们的网上购物活动(购物车等),连接这些无关的数据点,并试图预测结果。举一个例子,在我找到一家酒店并清空购物车后,我收到了度假村假期线路的电话。 我还要说多点吗?


Brontobytes-- 1后面27个零,这是未来数字世界存储单位的大小 。而我们在这里,来谈谈Terabyte、Petabyte、Exabyte、Zetabyte、Yottabyte 和 Brontobyte。你一定要读这篇文章才能深入了解这些术语。

商业智能(Business Intelligence):我将重用 Gartner 对 BI 的定义,因为它解释的很好。 商业智能是一个总称,包括应用程序、基础设施、工具以及最佳实践,它可以访问和分析信息,从而改善和优化决策及绩效。

生物测定学(Biometrics):这是一项James Bondish技术与分析技术相结合的通过人体的一种或多种物理特征来识别人的技术,如面部识别,虹膜识别,指纹识别等。

点击流分析(Clickstream analytics):用于分析用户在网络上浏览时的在线点击数据。 有没有想过即使在切换网站时,为什么某些谷歌广告还是阴魂不散?因为谷歌大佬知道你在点击什么。

聚类分析(Cluster Analysis)是一个试图识别数据结构的探索性分析,也称为分割分析或分类分析。 更具体地说,它试图确定案例的同质组(homogenous groups),即观察、参与者、受访者。 如果分组以前未知,则使用聚类分析来识别案例组。 因为它是探索性的,确实对依赖变量和独立变量进行了区分。 SPSS提供的不同的聚类分析方法可以处理二进制、标称、序数和规模(区间或比率)数据。

比较分析(Comparative Analytics):因为大数据的关键就在于分析,所以本文中我将深入讲解分析的意义。顾名思义,比较分析是使用诸如模式分析、过滤和决策树分析等统计技术来比较多个进程、数据集或其他对象。我知道它涉及的技术越来越少,但是我仍无法完全避免使用术语。 比较分析可用于医疗保健领域,通过比较大量的医疗记录、文件、图像等,给出更有效和更准确的医疗诊断。

关联分析(Connection Analytics):你一定看到了像图表一样的蜘蛛网将人与主题连接起来,从而确定特定主题的影响者。关联分析分析可以帮助发现人们、产品、网络之中的系统,甚至是数据与多个网络结合之间的相关连接和影响。

数据分析师(Data Analyst):数据分析师是一个非常重要和受欢迎的工作,除了准备报告之外,它还负责收集、编辑和分析数据。 我会写一篇更详细的关于数据分析师的文章。

数据清洗(Data Cleansing):顾名思义,数据清洗涉及到检测并更正或者删除数据库中不准确的数据或记录,然后记住「脏数据」。借助于自动化或者人工工具和算法,数据分析师能够更正并进一步丰富数据,以提高数据质量。请记住,脏数据会导致错误的分析和糟糕的决策。

数据即服务(DaaS):我们有软件即服务(SaaS),平台即服务(PaaS),现在我们又有DaaS,它的意思是:数据即服务。通过给用户提供按需访问的云端数据,DaaS提供商能够帮助我们快速地得到高质量的数据。

数据虚拟化(Data virtualization):这是一种数据管理方法,它允许某个应用在不知道技术细节(如数据存放在何处,以什么格式)的情况下能够抽取并操作数据。例如,社交网络利用这个方法来存储我们的照片。

脏数据(Dirty Data):既然大数据这么吸引人,那么人们也开始给数据加上其他的形容词来形成新的术语,例如黑数据(dark data)、脏数据(dirty data)、小数据(small data),以及现在的智能数据(smart data)。脏数据就是不干净的数据,换言之,就是不准确的、重复的以及不一致的数据。显然,你不会想着和脏数据搅在一起。所以,尽快地修正它。

模糊逻辑(Fuzzy logic):我们有多少次对一件事情是确定的,例如100%正确?很稀少!我们的大脑将数据聚合成部分的事实,这些事实进一步被抽象为某种能够决定我们决策的阈值。模糊逻辑是一种这样的计算方式,与像布尔代数等等中的「0」和「1」相反,它旨在通过渐渐消除部分事实来模仿人脑。

游戏化(Gamification):在一个典型的游戏中,你会有一个类似于分数一样的元素与别人竞争,并且还有明确的游戏规则。大数据中的游戏化就是使用这些概念来收集、分析数据或者激发玩家。

图数据库(Graph Databases):图数据使用节点和边这样的概念来代表人和业务以及他们之间的关系,以挖掘社交媒体中的数据。是否曾经惊叹过亚马逊在你买一件产品的时候告诉你的关于别人在买什么的信息?对,这就是图数据库。

Hadoop用户体验(Hadoop User Experience /Hue):Hue是一个能够让使用Apache Hadoop变得更加容易的开源接口。它是一款基于web的应用;它有一款分布式文件系统的文件浏览器;它有用于MapReduce的任务设计;它有能够调度工作流的框架Oozie;它有一个shell、一个Impala、一个Hive UI 以及一组Hadoop API。

高性能分析应用(HANA):这是SAP公司为大数据传输和分析设计的一个软硬件内存平台。

HBase: 一个分布式的面向列的数据库。它使用HDFS作为其底层存储,既支持利用MapReduce进行的批量计算,也支持利用事物交互的批量计算。

负载均衡(Load balancing):为了实现最佳的结果和对系统的利用,将负载分发给多个计算机或者服务器。

元数据(Metadata):元数据就是能够描述其他数据的数据。元数据总结了数据的基本信息,这使得查找和使用特定的数据实例变得更加容易。例如,作者、数据的创建日期、修改日期以及大小,这几项是基本的文档元数据。除了文档文件之外,元数据还被用于图像、视频、电子表格和网页。

MongoDB:MongoDB是一个面向文本数据模型的跨平台开源数据库,而不是传统的基于表格的关系数据库。这种数据库结构的主要设计目的是让结构化数据和非结构化数据在特定类型应用的整合更快、更容易。

Mashup:幸运的是,这个术语和我们在日常生活中使用的「mashup」一词有着相近的含义,就是混搭的意思。实质上,mashup是一个将不同的数据集合并到一个单独应用中的方法(例如:将房地产数据与地理位置数据、人口数据结合起来)。这确实能够让可视化变得很酷。

多维数据库(Multi-Dimensional Databases):这是一个为了数据在线分析处理(OLAP)和数据仓库优化而来的数据库。如果你不知道数据仓库是什么,我可以解释一下,数据仓库不是别的什么东西,它只是对多个数据源的数据做了集中存储。

多值数据库(MultiValue Databases):多值数据库是一种非关系型数据库,它能够直接理解三维数据,这对直接操作HTML和XML字符串是很好的。

自然语言处理(Natural Language Processing):自然语言处理是被设计来让计算机更加准确地理解人类日常语言的软件算法,能够让人类更加自然、更加有效地和计算机交互。

神经网络(Neural Network):根据这个描述(http://neuralnetworksanddeeplearning.com/),神经网络是一个受生物学启发的非常漂亮的编程范式,它能够让计算机从观察到的数据中学习。已经好久没有一个人会说一个编程范式很漂亮了。实际上,神经网络就是受现实生活中脑生物学启发的模型.......与神经网络紧密关联的一个术语就是深度学习。深度学习是神经网络中一系列学习技术的集合。

模式识别(Pattern Recognition):当算法需要在大规模数据集或者在不同的数据集上确定回归或者规律的时候,就出现了模式识别。它与机器学习和数据挖掘紧密相连,甚至被认为是后两者的代名词。这种可见性可以帮助研究者发现一些深刻的规律或者得到一些可能被认为很荒谬的结论。

射频识别(Radio Frequency Identification/RFID):射频识别是一类使用非接触性无线射频电磁场来传输数据的传感器。随着物联网的发展,RFID标签能够被嵌入到任何可能的「东西里面」,这能够生成很多需要被分析的数据。欢迎来到数据世界。

软件即服务(SaaS):软件即服务让服务提供商把应用托管在互联网上。SaaS提供商在云端提供服务。

半结构化数据(Semi-structured data):半结构化数据指的是那些没有以传统的方法进行格式化的数据,例如那些与传统数据库相关的数据域或者常用的数据模型。半结构化数据也不是完全原始的数据或者完全非结构化的数据,它可能会包含一些数据表、标签或者其他的结构元素。半结构化数据的例子有图、表、XML文档以及电子邮件。半结构化数据在万维网上十分流行,在面向对象数据库中经常能够被找到。

情感分析(Sentiment Analysis):情感分析涉及到了对消费者在社交媒体、顾客代表电话访谈和调查中存在的多种类型的交互和文档中所表达的情感、情绪和意见的捕捉、追踪和分析。文本分析和自然语言处理是情感分析过程中的典型技术。情感分析的目标就是要辨别或评价针对一个公司、产品、服务、人或者时间所持有的态度或者情感。

空间分析(Spatial analysis):空间分析指的是对空间数据作出分析,以识别或者理解分布在几何空间中的数据的模式和规律,这类数据有几何数据和拓扑数据。

流处理(Stream processing):流处理被设计用来对「流数据」进行实时的「连续」查询和处理。为了对大量的流数据以很快的速度持续地进行实时的数值计算和统计分析,社交网络上的流数据对流处理的需求很明确。

智能数据(Smart Data)是经过一些算法处理之后有用并且可操作的数据。

Terabyte:这是一个相对大的数字数据单位,1TB等于1000GB。据估计,10TB能够容纳美国国会图书馆的所有印刷品,而1TB则能够容纳整个百科全书Encyclopedia Brittanica。

可视化(Visualization):有了合理的可视化之后,原始数据就能够使用了。当然这里的可视化并不止简单的图表。而是能够包含数据的很多变量的同时还具有可读性和可理解性的复杂图表。

Yottabytes:接近1000 Zettabytes,或者2500万亿张DVD。现在所有的数字存储大概是1 Yottabyte,而且这个数字每18个月会翻一番。

Zettabytes :接近1000 Exabytes,或者10亿Terabytes。

西线学院

赞同来自:

  大多数数据科学家每天都使用组合技能,其中一些是他们在工作当中自学的,也有可能通过其他途径学到的。他们有各自不同的背景。不是说你非要有什么学位证书才能证明你是数据科学家。你可以把本文的内容看作是指导你如何成为一名数据科学家。
  数学
  数学是数据科学的重要组成部分。从微积分到线性代数这些大学数学的基础知识,要确保你都能知道。你知道的越多,你也会越来越好。
  当数据变得越来越庞大,也就意味着它越来越难处理。这时候你就必须使用数学来处理数据了。
  别以为你在大学没上过这些课,你就可以不知道了。说到底你还得需要了解如何操作数据矩阵,算法数学背后的大致思路你也得知道。
  统计学
  你必须得知道从一些小的数据集里如何利用统计学从而得出同样适用于大数据的理论。这是数据科学的基本法则。统计学将为你如何成为一名数据科学家铺平道路。
  你需要知道统计是基于数据的,有了数据才能进行统计。统计能够让你更好地理解从数据中观察到的模式,并提取你需要的观点来做出合理的结论。例如,理解推论统计学可以帮助你去证实取自于小人群中的观点放到所有人群中的每一个个体也同样适用。
  要了解数据科学,你必须了解假设检验的基础知识,并设计实验以了解数据的含义和上下文。
  算法
  理解如何使用机器来完成工作对于处理和分析数据集来说是至关重要的,因为这些数据集已经远远超出了人类的思维能够处理的范围。
  如果你想在数据科学方面做出重大的改进,那你就必须了解算法选择和优化背后的理论。你必须决定问题是否需要回归分析,还需要决定是否需要一个能够帮助你将不同数据点分类到已经定义好的类别里面去的算法。
  这样以后,你自己就会主动的去了解很多不同的算法以及机器学习的基本原理。机器学习就好比是允许亚马逊根据你的购买历史从而给你推荐产品,并且不需要任何直接的人工干预。这是一套算法,它是利用机器的能力去挖掘你的思维。
  为了处理这些大量的数据集,你到时候就得使用机器了,因为这样你才能扩展你的思维。
  数据可视化
  完成数据分析只是这场战役的一半。 要想推动影响,你必须说服他人相信并采纳你的观点。
  人类是视觉生物。 据3M和Zabisco透露,传递给大脑的几乎90%的信息本质上是视觉的,通过视觉进行处理的速度比通过文本将近快6万倍。
  数据可视化是一种通过图表和其他可视化工具来呈现信息的艺术,这样观众就可以很容易地理解数据并从中获取信息。使用条形图展示什么信息最好?我们在散点图中应该展示什么类型的数据?
  人类天生就会对视觉线索作出反应。你能够通过数据把你的观点表达得越好,别人就越有可能根据这些数据从而采取行动。
  商业知识
  数据在没有上下文的情况下是没有意义的。你必须了解正在分析的业务。清晰度是如何成为数据科学家的核心。
  大多数公司之所以依赖于他们的数据科学家,不仅仅是希望他们能够挖掘数据集,而且还希望他们能够将其结果传达给各种利益相关者,并提出可行的建议。
  最好的数据科学家不仅有能力处理大型复杂的数据集,而且还能理解他们所工作的业务或组织的复杂性。
  拥有一般的业务知识可以让他们提出正确的问题,并提出有见地的解决方案和建议。


  专业领域
  作为一名数据科学家,你应该了解你所从事的行业以及它所处的行业。
  除了对所在公司需要深入了解之外,你还必须了解它在你的商业洞察力中所起的作用。来自生物学研究的数据可能与精心设计的心理学研究中收集的数据具有截然不同的背景。 你应该足够了解行业行话。
  西线学院还为大家整理了一套非常齐全的大数据学习视频课程资料https://jinshuju.net/f/06LHFH?x_field_1=toutiao,它可以帮助大家更全面彻底地了解大数据相关技术,不论是兴趣爱好还是单纯的为了就业,它都是不错的选择!

蝙蝠侠IT

赞同来自:

虽然题主问的是大数据的入门,但在我看来“大数据”就是数据科学的一个高阶状态。以下内容中除个别情况,我基本上都会使用“数据科学”这个概念。


数据科学并没有一个独立的学科体系,统计学,机器学习,数据挖掘,数据库,分布式计算,云计算,信息可视化等技术或方法来对付数据。但从狭义上来看,我认为数据科学就是解决三个问题:
1. data pre-processing;
2. data interpretation; 3.data modeling and analysis.
这也就是我们做数据工作的三个大步骤:
1、原始数据要经过一连串收集、提取、清洗、整理等等的预处理过程,才能形成高质量的数据;2、我们想看看数据“长什么样”,有什么特点和规律;3、按照自己的需要,比如要对数据贴标签分类,或者预测,或者想要从大量复杂的数据中提取有价值的且不易发现的信息,都要对数据建模,得到output。
这三个步骤未必严谨,每个大步骤下面可能依问题的不同也会有不同的小步骤,但按我这几年的经验来看,按照这个大思路走,数据一般不会做跑偏。
这样看来,数据科学其实就是门复合型的技术,既然是技术就从编程语言谈起吧,为了简练,只说说R和Python。但既然是荐数据科学方面的书,我这里就不提R/Python编程基础之类的书了,直接上跟数据科学相关的。
1.R programming
如果只是想初步了解一下R语言已经R在数据分析方面的应用,那不妨就看看这两本:
R in action:我的R语言大数据101。其实对于一个没有任何编程基础的人来说,一开始就学这本书,学习曲线可能会比较陡峭。但如果配合上一些辅助材料,如官方发布的 R basics (http://cran.r-project.org/doc/contrib/usingR.pdf),stackoverflow上有tag-R的问题集(Newest 'r' Questions),遇到复杂的问题可在上面搜索,总会找到解决方案的。这样一来,用这本书拿来入门学习也问题不大。而且这本书作者写得也比较轻松,紧贴实战。
Data analysis and graphics using R:使用R语言做数据分析的入门书。这本书的特点也是紧贴实战,没有过多地讲解统计学理论,所以喜欢通过情境应用来学习的人应该会喜欢这本入门书。而且这本书可读性比较强,也就是说哪怕你手头没电脑写不了代码,有事没事拿出这本书翻一翻,也能读得进去。
但如果你先用R来从事实实在在的数据工作,那么上面两本恐怕不够,还需要这些:
Modern applied statistics with S:这本书里统计学的理论就讲得比较多了,好处就是你可以用一本书既复习了统计学,又学了R语言。(S/Splus和R的关系就类似于Unix和Linux,所以用S教程学习R,一点问题都没有)。
Data manipulation with R:这本书实务性很强,它教给你怎么从不同格式的原始数据文件里读取、清洗、转换、整合成高质量的数据。当然和任何一本注重实战的书一样,本书也有丰富的真实数据或模拟数据供你练习。对于真正从事数据处理工作的人来说,这本书的内容非常重要,因为对于任何研究,一项熟练的数据预处理技能可以帮你节省大量的时间和精力。否则,你的研究总是要等待你的数据。
R Graphics Cookbook:想用R做可视化,就用这本书吧。150多个recipes,足以帮你应付绝大多数类型的数据。以我现在极业余的可视化操作水平来看,R是最容易做出最漂亮的图表的工具了。
An introduction to statistical learning with application in R:这本书算是著名的the element of statistical learning的姊妹篇,后者更注重统计(机器)学习的模型和算法,而前者所涉及的模型和算法原没有后者全面或深入,但却是用R来学习和应用机器学习的很好的入口。
A handbook of statistical analysis using R:这本书内容同样非常扎实,很多统计学的学生就是用这本书来学习用R来进行统计建模的。
2.Python
Think Python,Think Stats,Think Bayes:这是Allen B. Downey写的著名的Think X series三大卷。其实是三本精致的小册子,如果想快速地掌握Python在统计方面的操作,好好阅读这三本书,认真做习题,答案链接在书里有。这三本书学通了,就可以上手用Python进行基本的统计建模了。
Python For Data Analysis:作者是pandas的主要开发者,也正是Pandas使Python能够像R一样拥有dataframe的功能,能够处理结构比较复杂的数据。这本书其实analysis讲得不多,说成数据处理应该更合适。掌握了这本书,处理各种糟心的数据就问题不大了。
Introduction to Python for Econometrics, Statistics and Data Analysis:这本书第一章就告诉你要安装Numpy, Scipy, Matplotlib, Pandas, IPython等等。然后接下来的十好几章就是逐一介绍这几个库该怎么用。很全面,但读起来比较枯燥,可以用来当工具书。
Practical Data Analysis:这本书挺奇葩,貌似很畅销,但作者把内容安排得东一榔头西一棒子,什么都讲一点,但一个都没讲透。这本书可以作为我们学习数据分析的一个索引,看到哪块内容有意思,就顺着它这个藤去摸更多的瓜。
Python Data Visualization Cookbook:用Python做可视化的教材肯定不少,我看过的也就这一本,觉得还不错。其实这类书差别都不会很大,咬住一本啃下来就是王道。
3.Exploratory Data Analysis 和 Data Visualization
Exploratory Data Analysis:John Tukey写于1977年的经典老教材,是这一领域的开山之作。如今EDA已经是统计学里的重要一支,但当时还是有很多人对他的工作不屑一顾。可他爱数据,坚信数据可以以一种出人意料的方式呈现出来。正是他的努力,让数据可视化成为一门无比迷人的技术。但这本书不推荐阅读了,内容略过时。要想完整地了解EDA,推荐下一本:
Exploratory Data Analysis with MATLAB:这本书虽然标题带了个MATLAB,但实际上内容几乎没怎么讲MATLAB,只是每讲一个方法的时候就列出对应的MATALB函数。这本书的重要之处在于,这是我读过的讲EDA最系统的一本书,除了对visualization有不输于John Tucky的讲解外,对于高维的数据集,通过怎样的方法才能让我们从中找到潜在的pattern,这本书也做了详尽的讲解。全书所以案例都有对应的MATALB代码,而且还提供了GUI(图形用户界面)。所以这本书学起来还是相当轻松愉悦的。
Visualize This:中译本叫“鲜活的数据”,作者是个“超级数据迷”,建立了一个叫http://flowingdata.com的网页展示他的数据可视化作品,这本书告诉你该选择什么样的可视化工具,然后告诉你怎样visualize关系型数据、时间序列、空间数据等,最后你就可以用数据讲故事了。
4.Machine Learning & Data Mining
这一块就不多说了,不是因为它不重要,而是因为它太太太重要。所以这一部分就推两本书,都是”世界名著“,都比较难读,需要一点点地啃。这两本书拿下,基本就算是登堂入室了。其实作为机器学习的延伸和深化,概率图模型(PGM)和深度学习(deep learning)同样值得研究,特别是后者现在简直火得不得了。但PGM偏难,啃K.Daphne那本大作实在太烧脑,也没必要,而且在数据领域的应用也不算很广。deep learning目前工业界的步子迈得比学术界的大,各个domain的应用如火如荼,但要有公认的好教材问世则还需时日,所以PGM和deep learning这两块就不荐书了。
The Element of Statistical Learning:要学机器学习,如果让我只推荐一本书,我就推荐这本巨著。Hastie、Tibshirani、Friedman这三位大牛写书写得太用心了,大厦建得够高够大,结构也非常严谨,而且很有前瞻性,纳入了很多前沿的内容,而不仅仅是一部综述性的教材。(图表也做得非常漂亮,应该是用R语言的ggplot2做的。)这本书注重讲解模型和算法本身,所以需要具备比较扎实的数理基础,啃起这本书来才不会太吃力。事实上掌握模型和算法的原理非常重要。机器学习(统计学习)的库现在已经非常丰富,即使你没有完全搞懂某个模型或算法的原理和过程,只要会用那几个库,机器学习也能做得下去。但你会发现你把数据代进去,效果永远都不好。但是,当你透彻地理解了模型和算法本身,你再调用那几个库的时候,心情是完全不一样的,效果也不一样。
Data Mining: Concepts and Techniques, by Jiawei Han and Micheline Kamber。数据挖掘的教材汗牛充栋,之所以推荐这本韩家炜爷爷的,是因为虽然他这本书的出发点是应用,但原理上的内容也一点没有落下,内容非常完整。而且紧跟时代,更新的很快,我看过的是第二版,就已经加进去了social network analysis这种当时的前沿内容。现在已经有第三版了,我还没看过,但应该也加入了不少新内容。其实这本书并不难读,只是篇幅较长,啃起来比较耗时。其实这两本书里单拎出来一块内容可能又是几本书的节奏,比如bayesian方法,再拿出两三本书来讲也不为过,我个人用到的比较多,而且也确实有不少好书。但并非是所有data scientist都要用到,所以这一块就不再细说。
还有一些印象比较深刻的书:
Big Data Glossary:主要讲解大数据处理技术及工具,内容涵盖了NoSQL,MapReduce,Storage,Servers,NLP库与工具包,机器学习工具包,数据可视化工具包,数据清洗,序列化指南等等。总之,是一本辞典式的大数据入门指导。
Mining of Massive Datasets:这本书是斯坦福大学Web Mining的讲义,里面很多内容与韩家炜的Data Mining那本书重合,但这本书里详细地讲了MapReduce的设计原理,PageRank(Google创业时期的核心排序算法,现在也在不断优化更新)讲解得也比较详细。
Developing Analytic Talent:作者是个从事了十几年数据工作的geek,技术博客写得很有个人风格,写的内容都比较偏门,通常只有具备相关数据处理经验的人能体会出来,丝毫不照顾初学者的感受。比如他会谈到当数据流更新太快时该怎么办,或者MapReduce在什么时候不好用的问题,才不管你懂不懂相关基础原理。所以这本书不太适合初学者阅读。这本书其实是作者的博客文章的集结,用how to become a data scientist的逻辑把他近几年的博客文章串联了起来。
Past, Present and Future of Statistical Science:这本书是由COPSS(统计学社主席委员会,由国际各大统计学会的带头人组成)在50周年出版的一本纪念册,里面有50位统计学家每人分别贡献出的一两篇文章,有的回忆了自己当年如何走上统计学这条路,有的探讨了一些统计学的根本问题,有的谈了谈自己在从事的前沿研究,有的则给年轻一代写下了寄语。非常有爱的一本书。
5.其它资料
Harvard Data Science:这是H大的Data science在线课,我没有修过,但口碑很好。这门课需要费用8千刀左右,比起华盛顿大学的4千刀的Data science在线课虽贵一倍,但比斯坦福的14千刀要便宜将近一半(而且斯坦福的更偏计算机)。如果想自学,早有好心人分享了slides: (https://drive.google.com/folde ... aring)和homeworks and solutions: (https://github.com/cs109/content)。
PyData:PyData是来自各个domain的用Python做数据的人每年举行一次的聚会,期间会有各路牛人举行一些规模不大的seminar或workshop,有好心人已经把video上传到github,有兴趣的去认领吧(DataTau/datascience-anthology-pydata · GitHub)。
6.工具
R/Python/MATLAB(必备):如果是做数据分析和模型开发,以我的观察来看,使用这三种工具的最多。R生来就是一个统计学家开发的软件,所做的事也自然围绕统计学展开。MATLAB虽然算不上是个专业的数据分析工具,但因为很多人不是专业做数据的,做数据还是为了自己的domain expertise(特别是科学计算、信号处理等),而MATLAB又是个强大无比的Domain expertise工具,所以很多人也就顺带让MATLAB也承担了数据处理的工作,虽然它有时候显得效率不高。Python虽然不是做数据分析的专业软件,但作为一个面向对象的高级动态语言,其开源的生态使Python拥有无比丰富的库,Numpy, Scipy 实现了矩阵运算/科学计算,相当于实现了MATLAB的功能,Pandas又使Python能够像R一样处理dataframe,scikit-learn又实现了机器学习。
SQL(必备):虽然现在人们都说传统的关系型数据库如Oracle、MySQL越来越无法适应大数据的发展,但对于很多人来说,他们每天都有处理数据的需要,但可能一辈子都没机会接触TB级的数据。不管怎么说,不论是用关系型还是非关系型数据库,SQL语言是必须要掌握的技能,用什么数据库视具体情况而定。
MongoDB(可选):目前最受欢迎的非关系型数据库NoSQL之一,不少人认为MongoDB完全可以取代mySQL。确实MongoDB方便易用,扩展性强,Web2.0时代的必需品。
Hadoop/Spark/Storm(可选):MapReduce是当前最著名也是运用最广泛的分布式计算框架,由Google建立。Hadoop是基于MapReduce的框架建立起来的分布式计算系统,Spark更进一步,在MapReduce的思路上利用有向无环图构建了RDD,这样就减少了Map和Reduce之间传递的数据,所以非常适合反复迭代计算的场景。至于存储方面,他们之间的区别就是,Hadoop用硬盘存储数据,Spark用内存存储数据,Storm只接受实时数据流而不存储数据。
OpenRefine(可选):Google开发的一个易于操作的数据清洗工具,可以实现一些基本的清洗功能。
Tableau(可选):一个可交互的数据可视化工具,操作简单,开箱即用。而且图表都设计得非常漂亮。专业版1999美刀,终身使用。媒体和公关方面用得比较多。
Gephi(可选):跟Tableau类似,都是那种可交互的可视化工具,不需要编程基础,生成的图表在美学和设计上也是花了心血的。更擅长复杂网络的可视化。

要回复问题请先登录注册