大数据无疑是当下最流行的热词和前沿技术之一。本质上,大数据具有三大类特征:快速、海量和复杂,大多数公司都在经历着这三大特征的各种形态组合。目前,这些特征中,还存在很多较难以解决的挑战,诸如处理数据流中的丢失、重复问题,数据质量参差不齐,数据存储成本高,大数据人才缺乏等。在本文中,我们将对“大数据”的问题进行拆分,是什么使大数据充满挑战,以及现在我们如何用最新的方法解决这些问题。
在本文中,我们将对“大数据”的问题进行拆分,是什么使大数据充满挑战,以及现在我们如何解决这些问题。大数据一度成为流行语,但本质上它是指具备这三大类特征的数据:快速,海量和复杂。让我们仔细研究下这些特征,举一些例子,看看如何用最新的方法解决这些难题。
“大数据是描述海量的高速、复杂和多变数据的一个术语,这些数据需要结合先进的技能和技术来实现信息的捕获、存储、分发、管理和分析”( TechAmerica Foundation’s Federal Big Data Commission, 2012 )
高速的数据
高速的数据指什么?高速的数据指在短时间内产生的大量的数据。比如汽车工厂的传感器数据,温度监测器,飞行仪表等产生的数据。
高速数据通常被认为是实时的或是准实时的数据流。数据流本质上是在生成后就发给处理器的数据包(比如天线收到的电视信号或是通过固话传输的语音电话)。实时数据的定义值得深入讨论,但是它本质上可以归结为需要在毫秒内被更新的数据。处理数据流有很多挑战,包括在采集时不丢失数据、处理数据流中的重复记录、流数据与更大的历史数据集集成、以及进行实时分析。
传统的数据流服务比如 Rabbit MQ 和 Active MQ 只在单节点上运行因此收到了服务器能力的限制。Apache Kafka 引入了分布式流服务的概念,使得数据流可以分散到多个节点(服务器)上。这实现了高吞吐的流处理,每秒能达到数百万条。随着服务向云上的迁移,开发者不用再管理底层的硬件。亚马逊的 Kinesis 和谷歌的 Pub/Sub 将后方的服务器完全抽离,使开发者能够更专注于业务逻辑和数据。
ELK 是常用的在流式数据上作实时分析的技术栈。ELK 由多个工具组成,用 Log Stash 将多种数据源的数据传输进 Elastic Search(ES)。在 ES 中存储的数据可以轻松的通过特定的短语和关键词检索到。Kibana 是 ES 最上层的工具,它在数据流入时就能进行实时分析,用户可以通过它来查询数据、为数据创建度量。
海量数据
“大数据”的第二个
特征是数据量足够大。
典型的例如一个包含顶级投资银行 20 年股票交易历史的超大数据集,20 年间所有信用卡的交易记录,或是热门网站(如 buzz feed)的用户交互信息等。通常这些数据都会在 TB 甚至 PB 量级。
处理超大数据集通常会受到存储和处理数据的计算资源的限制。通常一块商用硬盘可以容纳 1TB 的数据量。有些数据集能有好多 PB(相当于上千块硬盘的容量)。这些数据需要在数据中心内跨多个服务器(或传统的 RAID 盘)存储。除此之外,处理这些数据也需要大量的物理内存和 CPU。
Hadoop(一个开源分布式大数据处理生态)的出现一定程度上降低了数据处理的成本。这套系统的核心是 Hive,一种能像数据库一样存储数据的类 SQL 处理系统。数据处理在商用硬件上进行,使用 Map-Reduce 算法(专门为分布式处理设计的算法)。这些服务器通常被存放在数据中心。但是,管理维护数据中心和 Hadoop 套件的成本非常高。
但最近,很多的存储和处理都转移到了云上,比如 Amazon Web Service (AWS) 和 Google Cloud Platform (GCP) 这些主流玩家。AWS 和 GCP 都提供受管理的 map reduce 或 spark 服务(AWS Elastic Map Reduce 以及 GCP Cloud data proc)。他们也提供大规模可扩展的数据库服务(分别是 Google Big Query 和 AWS Redshift),能为 PB 级的数据集提供关系型数据库服务。这些解决方案最大的优点是用户不用管理底层的硬件,可以专注于更重要的任务,如存储 / 移动数据或者是写 SQL。这个生态中的典型玩家是 Snowflake,在 AWS 中提供即买即用的数据处理服务。
复杂数据
“大数据”的第三个特征是复杂。在解释什么造成了数据的复杂性前,我先讲下理想的数据集是什么样的。理想的数据集有预先定义的 schema,每种数据类型(string, number, date)都有定义好的主键,以及完善的数据字典。数据集中没有重复,所有的值都是精准的。
复杂数据的概念和理想数据完全相反。所有数据集都有一定的复杂性,但有一些天生更难处理。通常这些复杂数据集没有定义结构(没有行列结构),经常变化,数据质量很差或没有记录。
比如人工输入的医生的笔记、博客的文字、时刻更新的网页日志以及深嵌套的 XML 或 JSON 文件。
为复杂数据做快速标注时,大多数不好的数据应该在源头就进行识别。数据工程师需要构建足够强壮的系统来快速获取和过滤这些数据集,但是这些数据最终还是要在源头纠正。此外,如果可以,我们建议在数据产生的源头定好 SLA 来减少低质量的数据,使数据更好管理。
处理复杂数据集,让它们能遵从整洁的格式需要下很大的功夫。每种数据质量问题都需要区别处理,比如记录重复、主键缺失、字符 / 字符串的格式错误等。
有很多工具可以用来处理这种数据。通常数据科学家和工程师会用 Jupyter notebook 以及 Pandas 或 Spark 来处理、分析、可视化这些数据集。Jupyter 为开发者提供了交互式的环境使他们能在代码中逐行遍历数据集,从而节省很多时间。Databricks 也提供了非常好的数据处理和分析环境,包含了一个类似 Jupyter notebook 的 UI、独有的 Spark 特性、以及简单易用的节点管理能力。
还有很多第三方的工具,比如 Trifacta,能够自动进行一些数据清洗任务,通过提供 UI 和非常好的功能代替完全手写的数据清洗代码,来加速清洗和分析任务。Google Cloud 在 GCP 中提供了这个工具 cloud Data Prep。
小结
可以看出,这些特征中的任何一个挑战都很难解决。但是,大多数的公司都经历着这三种问题的各种形态组合。挑战变得更庞大了,这需要衡量不同的工具和方法来解决他们特定的问题。
向云服务的转移很大程度上降低了处理和管理大数据的壁垒,公司不再需要建设数据中心并且花大量的预算在专用软件上。但是招聘懂得如何使用正确的工具来处理大数据问题的人才仍然是个难题。
降低大数据使用门槛的下一步是利用机器学习技术来理解数据的结构以及监测数据发生的变化。由于高技能人才将成为处理大数据的瓶颈,未来 5-10 年间产生的下一代工具,很可能会关注这些特征。
在这里还是要推荐下我自己建的大数据学习交流群:943791324,群里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据软件开发相关的),包括我自己整理的一份最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴加入。
在大数据行业中有很多领域。通常来说它们可以被分为两类:
-
大数据工程
-
大数据分析
这些领域互相独立又互相关联。
大数据工程涉及大量数据的设计,部署,获取以及维护(保存)。大数据工程师需要去设计和部署这样一个系统,使相关数据能面向不同的消费者及内部应用。
而大数据分析的工作则是利用大数据工程师设计的系统所提供的大量数据。大数据分析包括趋势、图样分析以及开发不同的分类、预测预报系统。
因此,简而言之,大数据分析是对数据的高级计算。而大数据工程则是进行系统设计、部署以及计算运行平台的顶层构建。
3.你的领域是什么,适合什么方向?
现在我们已经了解了行业中可供选择的职业种类,让我们想办法来确定哪个领域适合你。这样,我们才能确定你在这个行业中的位置。
第一阶段:linux系统
本阶段为大数据学习入门基础课程,帮大家进入大数据领取打好Linux基础,以便更好的学习Hadoop、habse、NoSQL、saprk、storm等众多技术要点。
另:目前企业中无疑例外是使用Linux来搭建或部署项目的
第二阶段:大型网站高并发处理
本阶段的学习是为了让大家能够了解大数据的源头,数据从而而来,继而更好的了解大数据。通过学习处理大型网站高并发问题反向的更加深入的学习Linux,同事站在了更高的角度去触探架构
第三阶段:Hadoop学习
1、Hadoop分布式文件系统:HDFS
详细解剖HDFS,了解其工作原理,打好学习大数据的基础
2、Hadoop分布式计算框架:MapReduce
MapReduce可以说是任何一家大数据公司都会用到的计算框架,也是每个大数据工程师应该熟练掌握的
3、Hadoop离线体系:Hive
hive是使用SQL尽心计算的Hadoop框架,工作中经常会使用,也是面授的重点
4、Hadoop离线计算体系:Hbase
Hbase的重要性不言而喻,即便是工作多年的大数据工程师也是需要去重点学习Hbase性能优化的
第四阶段:zookeeper开发
zookeeper在分布式集群中的地位越来越突出,对分布式应用的开发也提供了极大的便利,学习zookeeper的时候,我们主要学习zookeeper的深入,客户端开发、日常运维、web界面监控等等。学好此部分的内容对后面技术的学习也是至关重要的。
第五阶段:elasticsearch分布式搜索
第六阶段:CDH集群管理
第七阶段:storm实时数据处理
本阶段覆盖storm内部机制和原理,掌握从数据采集到实时极端到数据存储再到前台展示,一人讲所有的工作全部完成,知识覆盖面广
第八阶段:Redis缓存数据库
对Redis做个全部的学习,包括其特点、散列集合类型、字符串类型等等,最后到优化,做个详细的学习
第九阶段:spark核心部分
本阶段内容覆盖了spark生态系统的概述及其编程模型,深入内核的研究,Spark on Yarn,Spark Streaming流式计算原理与实践,Spark SQL,Spark的多语言编程以及SparkR的原理和运行。
在了解了以上知识点后,云计算机器学习的部分也是至关重要的。通常在云计算这部分内容,我们会对Docker、虚拟化KVM、云平台OpenStack做个了解和学习,防止在以后的工作中会遇到