2015年10月28日星期三

拨开大数据的迷雾

  之所以有这么一个话题,确实是有原因的。就在前几天,我又收到了一个同行的邮件,是向我咨询关于大数据方向的问题,他们想涉足大数据这个领域,或者说已经涉足大数据这个领域,只是不知道下一步该如何进行,很是迷茫。

  于是我想,这么多人都在纠结自己到底该在大数据领域中如何前行,面对于大数据这个看起来很泛的概念,并且有愈演愈乱的趋势,我们确实需要好好的理一理。

  于是就有了这个话题。这个圈子到底是干吗的,涉及的技术到底有哪些,我们到底该如何入手,该如何进一步提升自己。

  对于个人来说,很庆幸一毕业就在这个圈子里偷摸打滚,虽然不能说懂多少,但还是很愿意把自己的一些观点分享给大家,能帮的上忙当然是好的,帮不上忙纯当个人的吐槽了。

  理清大数据的脉络

  我们先来理一理大数据这个圈子的脉络,先来确定一个问题:我们所说的大数据,研究其的核心价值在哪里?

  是的,这是一个很奇怪问题,像是在几年前,大数据这个词突然就火了,然后就一直火,然后火的一塌糊涂。我们再来思考一下这个问题,在数据量未增长到一定规模,或者说大家还没有意识到数据成长到了一定规模,又或者说相关技术支撑尚未成熟的时期,数据被人关注的并不是太多。

  在大数据技术日渐成熟时候,特别是以hadoop生态为代表的技术圈日渐丰富,在数据规模日渐增长的今天,对于数据研究的人也越来越多。

  于是,越来越多的人投身其中。我们需要先明白我们的目的:挖掘数据中的价值。这里所谓的挖掘并不是狭义上的数据挖掘的概念,而是包括了对于杂乱数据的整理以期发现其体现的业务现状,通过对大批数据的统计分析达到对业务的调整以及决策,通过对大批量数据的潜在关系或者趋势的挖掘实施相关个性化的策略等等。

  说白了就两个字,价值。不管是大的价值还是小的价值,我们需要从数据中获利,这是我们的根本目标。也就是说,我们在大数据这个圈子里所干的一切,都是为了榨干数据潜藏的价值。

  明白了核心价值所在,我们再来关注一下我们的研究实体——数据。

  我们的数据从哪而来?我们的数据拿过来就可以用吗?榨干数据的价值,用榨汁机榨吗?数据到底该怎么处理?是的,我们要用到哪些技术?

  围绕怎么榨干数据这个问题,我们可以衍生出很多很多的问题,都是需要我们一一去解决的,这也就是为何很多人迷茫的直接原因。

  杂乱无章,无从下手。这是很多新手或者说已经身陷其中的程序猿都面临的一个问题。

  不可否认的是我们的研究实体始终是数据,我们是围绕它在转的,确定了这一点,剩下的问题,我们一个一个的来理。

拨开大数据的迷雾

  数据从何而来?

  对于这个问题,答案还是比较多的。

  在此之前,虽然很多企业公司对于数据,并没有很大的研究,但是潜意识的把那些产生的数据都收集起来了,如今在有能力研究或者进一步处理的前提下,这就是一个不可估量的数据量。在传统的数据收集方式上,主要以现成文件或者传统数据库的方式体现。

  企业公司线上业务产生的业务log。这应该是最常见的一种数据来源,当前很大一部分同行处理的应该都是这种数据。这种数据的格式主要是按时间切分的log文件。

  互联网公开数据。这部分数据源有以下几个特点:获取难度高,数据比较杂乱。想要使用这一部分数据,其成本也是相对较高的。所以,就目前来说能够使用这部分数据的企业还是比较少的,但在未来它必定是一个主流数据来源。

  除此之外,随着移动互联网的发展,移动终端带来的数据也越来越多,成为一种新型的数据来源。当然进一步延伸,包括了各种智能终端产生的数据。

  数据拿来就能用吗?

  答案显然是否定的,就连怎么拿数据都是一个大问题。这就不得不说到一些大数据领域数据收集相关的技术了,比如比较流行的Scribe以及Flume等,他们都是为解决多节点日志收集而产生的解决方案。我们通常产生的数据都是分散在各个不同节点上的,我们需要用到这些数据,进一步从数据中提取价值,前提是能统一收集到这些数据。而这些开源的日志收集系统解决了分散数据如何集中的痛点。

  此外,对于存储在关系型数据库中的传统数据,我们需要通过一定的转换,让其导入到我们的大数据处理平台中,比如数据仓库中等等。这就涉及到一些数据转换的开源系统,比如sqoop之类的。

  而对于互联网上公共数据,这就涉及到各种网络爬虫、网页解析相关的技术。

  并且对于绝大部分数据来说,在获取之后并不能直接使用,典型如各种业务数据,我们需要进一步提取其中我们所需要的信息。而对于爬取的互联网数据,更是纷杂凌乱,我们需要进一步的进行筛选,进一步的清洗,最终拿到有用的基础数据。

  对于数据的清洗、预处理,大规模离线处理典型如MapReduce,内存处理典型如Spark Streming,数据流式处理典型如Storm等。

  在数据传递的过程中,我们又涉及到了各种消息队列;在整个数据平台中,涉及到了分布式协调、分布式监控、任务调度等相关的知识。

  不管在各个环节也好,或者说最终处理的数据也好,我们需要进行存储,这就涉及到分布式存储、非关系型数据库、大规模数据仓库等相关的技术。

  榨取数据的价值!

  在数据经过层层处理之后,终于到了我们的目的所在了。对于部分业务来说,在经过精提纯的数据已经是可用的了,可以直接呈现了,这就直接体现了数据价值,不多说。

  对于部分数据,我们需要进行进一步的统计分析,然后把握数据体现的业务趋势、业务变化,这可以算是大数据BI的领域,也算是数据价值的体现。

  而对于部分数据,不能直接使用,并且其数据直接体现的状况对于我们并没有太大的作用,这个时候我们需要进一步的挖掘其潜藏的价值。典型如个性化推荐,我们希望通过一定的数据模型,建立起现有数据与未来数据的关系,进一步实施我们个性化业务,提升商业利益。这也是一种数据价值的体现。

  我们来梳理一下整个过程!

  在最开始阶段,我们进行初始数据的收集工作,根据不同的业务场景,可能会涉及到的一些技术领域:分散日志收集技术,诸如Scribe、Flume为代表的开源日志收集系统;数据消息传递相关的技术,各种开源的消息队列MQ,诸如ActiveMQ、RocketMQ、Kafka等;各种爬虫技术、网页解析技术;数据库数据转换技术,如Apache的Sqoop等;

  在数据处理阶段,通常我们会有两种不同的处理方式,一种是在数据落地之前,我们进行预处理,典型如Storm为代表的实时处理系统,还有近一两年比较火的Spark Streming;还有一种就是落地之后进行的批量离线处理,如Hadoop的MapReduce,以及使用Spark进行处理。当然,对于数据的预处理,并不是说一定要用到什么框架,但是这个过程肯定是需要的,我们需要对数据进行进一步得过滤、规整操作。

  然后是数据的落地,对于规整之后的数据,我们需要进行落地存储,然后才能做进一步的处理。对于一般性的大规模存储,目前有很多开源的分布式文件系统方案,典型如HDFS,但更多的是存入数据仓库中,或者一些NoSQL中。其中以Hadoop生态中的Hive以及Hbase为代表。

  然后在整个数据被规整到存储落地的过程中,是一整套完整的数据处理流程,是一个完善的数据处理平台,我们可能还会涉及到一些分布式的协调系统,典型如Zookeeper;还涉及到一些分布式平台的监控,如Ganglia和Nagios的结合使用,以及Puppet、Zabbix等等相关技术。

  然后接着就是数据的价值体现,对于部分业务来说,处理过的数据已经是可以直接使用了,例如通过数据仓库的操作,直接对外展现;而部分数据则是需要对其进行统计分析,例如通过对Hive的各种操作,生产的各种BI报表,我们则可以从中找到现有数据的规律,进而完善我们的业务策略;而部分业务则希望现有的数据对未来数据能够产生影响,所以引入了各种数据深度挖掘的东西,例如在大规模数据挖掘场景下的Mahout以及Spark的MLlib等;还有部分业务则是想把这些数据作为一个搜索数据源,那这个时候我们会对数据索引化的操作。

  在如上的这些过程中,虽然在使用的技术上可能会有所出入,但是这个基本流程是不变的。通过这个梳理,我们知道在这个过程中,我们会涉及到哪些流程,然后才能说在大数据的这个圈子里,我们到底该往哪个方面发展。

  定位自己的位置

  如上所言,在大数据整个领域中,涉及的东西很多,需要掌握的处理问题的思路也很多。但我们的精力是有限的。

  我很庆幸自己一毕业就投身其中。最早开始接触是构建数据中心平台,包括了一整套数据接入,实时处理以及离线处理的东西。在往后的工作中又陆续接触到了大数据领域中数据仓库以及数据大规模缓存相关的技术,逐渐补充我在大数据领域的空白,并且陆陆续续在NoSQL、搜索、网页解析、爬虫等方面也有所了解。而如今,一边做着数据处理相关的工作,一边依托于大规模的数据,在此基础上进行数据潜在价值的挖掘,比如正在研究的推荐系统,热度排名模型研究等等。

  在整个体系中,其实也是可以分为两类的,由于在这个圈子里大量使用了各种开源的平台系统,因此对于平台人员的需求量也是很大的,保证大规模集群以及平台的正常运行,也是一个很有挑战的事;然后就是纯开发人员,需要考虑的东西就会更多一些。

  对于初入这个领域的人来说,首先需要确定自己的兴趣所在,然后结合如上所说的脉络,找到自己的切入点,想一下子都整明白是不可能的,找准自己的兴趣点,然后逐渐完善自己对大数据的认知体系。

  名词解释:大数据(Big data或Megadata),指的是所涉及的数据量规模巨大到无法通过人工,在合理时间内达到截取、管理、处理、并整理成为人类所能解读的形式的信息。在总数据量相同的情况下,与个别分析独立的小型数据集(data set)相比,将各个小型数据集合并后进行分析可得出许多额外的信息和数据关系性,可用来察觉商业趋势、判定研究质量、避免疾病扩散、打击犯罪或测定实时交通路况等;这样的用途正是大型数据集盛行的原因。

  来源:投稿,作者:博客虫,作者公众微信号blogchong