一:机器学习和数据化挖掘的区别
机器学习,又可以理解为计算机学习、程序学习、模型学习,或者说是agent学习,即人们通过编程或其他方式创造出一个模型,然后训练该模型,使该模型具有通过学习增长知识的能力;数据挖掘,又可以理解为挖掘数据,在大量数据中发现和挖掘到的知识是我们想要获得的东西。机器学习更偏向于是一种手段或者方式,数据挖掘更偏向于是一种过程或者目的。以拿铲子挖宝藏为例,铲子代表机器学习,宝藏代表知识,土壤代表数据,整个动作或过程或做这件事的目的代表数据挖掘(即挖掘数据)。

二:大数据处理系统的分类,举例说明
就目前而言,主要的大数据处理系统有数据查询分析计算系统、批处理系统、流式计算系统、迭代计算系统、图计算系统和内存计算系统。下面我们就给依次介绍一下各系统。

1、数据查询分析计算系统
主要的数据查询分析计算系统包括很多内容,主要就是Hive、Cassandra、Hana、HBase、Dremel、Shark等。我们现在说一说这些内容。首先就是Hive,Hive是基于Hadoop的数据仓库工具,用于查询、管理分布式存储中的大数据集,提供完整的SQL查询功能,可以将结构化的数据文件映射为一张数据表。而Hive提供了一种类SQL语言,这可以将SQL语句转换为MapReduce任务运行。而Cassandra就不同了,Cassandra是开源的NoSQL数据库系统,并且有很好的可扩展性。一度被知名公司使用。最重要的就是Cassandra其数据模型是一种流行的分布式结构化数据存储方案。而Hana是与数据源无关、软硬件结合、基于内存计算的平台。

2、批处理系统
批处理系统,又名批处理操作系统。批处理是指用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行。这种采用批量处理作业技术的操作系统称为批处理操作系统。批处理操作系统分为单道批处理系统和多道批处理系统。批处理操作系统不具有交互性,它是为了提高CPU的利用率而提出的一种操作系统。

3、流式计算系统
流式计算是业界研究的一个热点,最近Twitter、LinkedIn等公司相继开源了流式计算系统Storm、Kafka等,加上Yahoo!之前开源的S4,流式计算研究在互联网领域持续升温。不过流式计算并非最近几年才开始研究,传统行业像金融领域等很早就已经在使用流式计算系统,比较知名的有StreamBase、Borealis等。

4、迭代计算系统
对MapReduce不支持迭代计算的缺陷,人们对Hadoop的MapReduce进行了大量改进,Haloop、iMapReduce、Twister、Spark是典型的迭代计算系统。而Haloop是Hadoop MapReduce框架的修改版本,用于支持迭代、递归类型的数据分析任务,如PageRank、K-means等。iMapReduce是一种基于MapReduce 的迭代模型,实现了MapReduce 的异步迭代。Twister是基于Java的迭代MapReduce模型,上一轮Reduce的结果会直接传送到下一轮的Map。Spark是基于内存计算的开源集群计算框架。

5、图计算系统
Pregel由Google研发是专用图计算系统的开山之作 [1] 。Pregel提出了以顶点为中心的编程模型,将图分析过程分析为若干轮计算,每一轮各个顶点独立地执行各自的顶点程序,通过消息传递在顶点之间同步状态。Giraph是Pregel的一个开源实现,Facebook基于Giraph使用200台机器分析万亿边级别的图数据,计算一轮PageRank的用时近4分钟 [2] 。

6、内存计算系统
目前常用的内存计算系统有分布式内存计算系统Spark、全内存式分布式数据库系统 HANA、 Google的可扩展交互式查询系统Dremel。首先说说Dremel,这是Google的交互式数据分析系统,可以在数以千计的服务器组成的集群上发起计算,处理PB级的数据。Dremel是Google MapReduce的补充,大大缩短了数据的处理时间,成功地应用在Google的bigquery中。然后就是HANA,这是SAP公司开发的基于内存技术、面向企业分析性的产品。而Spark是基于内存计算的开源集群计算系统。这些内容组成了内存计算系统。

三:大数据处理的流程
具体的大数据处理方法确实有很多,但是根据笔者长时间的实践,总结了一个普遍适用的大数据处理流程,并且这个流程应该能够对大家理顺大数据的处理有所帮助。整个处理流程可以概括为四步,分别是采集、导入和预处理、统计和分析,最后是数据挖掘。

大数据处理之一:采集

大数据的采集是指利用多个数据库来接收发自客户端(Web、App或者传感器形式等)的数据,并且用户可以通过这些数据库来进行简单的查询和处理工作。比如,电商会使用传统的关系型数据库MySQL和Oracle等来存储每一笔事务数据,除此之外,Redis和MongoDB这样的NoSQL数据库也常用于数据的采集。

在大数据的采集过程中,其主要特点和挑战是并发数高,因为同时有可能会有成千上万的用户来进行访问和操作,比如火车票售票网站和淘宝,它们并发的访问量在峰值时达到上百万,所以需要在采集端部署大量数据库才能支撑。并且如何在这些数据库之间进行负载均衡和分片的确是需要深入的思考和设计。

大数据处理之二:导入/预处理

虽然采集端本身会有很多数据库,但是如果要对这些海量数据进行有效的分析,还是应该将这些来自前端的数据导入到一个集中的大型分布式数据库,或者分布式存储集群,并且可以在导入基础上做一些简单的清洗和预处理工作。也有一些用户会在导入时使用来自Twitter的Storm来对数据进行流式计算,来满足部分业务的实时计算需求。

导入与预处理过程的特点和挑战主要是导入的数据量大,每秒钟的导入量经常会达到百兆,甚至千兆级别。

大数据处理之三:统计/分析

统计与分析主要利用分布式数据库,或者分布式计算集群来对存储于其内的海量数据进行普通的分析和分类汇总等,以满足大多数常见的分析需求,在这方面,一些实时性需求会用到EMC的GreenPlum、Oracle的Exadata,以及基于MySQL的列式存储Infobright等,而一些批处理,或者基于半结构化数据的需求可以使用Hadoop。

统计与分析这部分的主要特点和挑战是分析涉及的数据量大,其对系统资源,特别是I/O会有极大的占用。

大数据处理之四:挖掘

与前面统计和分析过程不同的是,大数据挖掘一般没有什么预先设定好的主题,主要是在现有数据上面进行基于各种算法的计算,从而起到预测(Predict)的效果,从而实现一些高级别数据分析的需求。比较典型算法有用于聚类的Kmeans、用于统计学习的SVM和用于分类的NaiveBayes,主要使用的工具有Hadoop的Mahout等。该过程的特点和挑战主要是用于挖掘的算法很复杂,并且计算涉及的数据量和计算量都很大,常用数据挖掘算法都以单线程为主。