目前大数据相关的技术可以说是蓬勃发展 百花齐放,对于初人者来说,一个个响亮的名字, 一个个眼花缭乱的框架,之前刚了解了一个,很快又跳出来一个,真是让人眼花缭乱,无从下手,但是万变不离其宗,不管这些技术如何变化、名词如何新颖,它们都属于下图介绍的某个具体流程和环节,因此下面将结合前面所述的数据流程来介绍当前
数据采集传输工具和技术主要分为两大类:离线批处理和实时数据采集和传输。离线批处理主要是批量一次性采集和导出数据,离线批处理目前比较有名的的是sqoop,下游的用户主要是离线数据处理平台(如Hive等)。实时数据采集和传输最为常用的则是Flume和kafka,其下游用户一般是实时流处理平台,如Storm、Spark、Flink等。
Sqoop 作为一款开源的离线数据传输工具,主要用于Hadoop(Hive)与传统数据库(Mysql,PostgreSQL等)间的数据传递。它可以将一个关系型数据库中的数据导入Hadoop的HDFS中,也可以将HDFS的数据导入关系型数据库中。
随着目前业务对实时数据需求的日益增长,实时数据的采集越来越受到重视,而Flume也是这方面的主流的开源框架,国内很多互联网公司也都是基于Flume搭建自己的实时日志采集平台。
Flume是Cloudera提供的一个高可用、高可靠、分布式的海量日志采集、聚合和传输的系统,使用Flume可以收集诸如日志、时间等数据,并将这些数据资源集中存储起来供下游使用。
通常来说Flume采集数据的速度和下游处理的速度通常不同步,因此实时平台架构都会用一个消息中间件来缓冲,而这方面最为流行和应用最为广泛的无疑是Kafka。
Kafka是由LinkedIn开发的一个分布式消息系统,以其可以水平扩展和高吞吐率而被广泛使用,Kafka是一个基于分布式的消息发布-订阅系统,特点是快速、可扩展且持久。Kafka可在主题当中保存消息的信息。生产者向主题写入数据,消费者从主题读取数据。作为一个分布式的、分区的、低延迟的、冗余的日志提交服务,得益于其独特的设计,目前Kafka使用非常广泛。
数据处理是数据开源技术最为百花齐放的领域,离线和准实时的工具主要包括MapReduce、Hive和Spark,流处理的工具主要包含Storm,还有最近较为火爆的Flink、Beam等。
MapReduce是一种编程模型,用于大规模数据集,它将运行于大规模集群上的复杂并行计算过程高度抽象为两个函数:map和reduce。MapReduce最伟大之处在于其将处理大数据的能力赋予了普通开发人员,以至于开发人员即使不会任何的分布式编程知识,也能将自己的程序运行在分布式系统上处理海量数据。
MapReduce将处理大数据的能力赋予了普通开发人员,而Hive进一步将处理和分析大数据的能力赋予了实际的数据使用人员。
Hive是由Facebook开发并贡献给Hadoop开源社区的,是一个建立在Hadoop体系结构上的一层SQL抽象。Hive提供了一些对Hadoop文件中的数据集进行数据处理、查询和分析的工具,它支持类似于传统RDBMS的SQL语言的查询语言,以帮助哪些熟悉SQL的用户处理和查询Hadoop中的数据,该查询语言成为Hive QL。Hive SQL实际上先被SQL解析器解析,然后被Hive框架解析成一个MapReduce可执行计划,并按照该计划生成MapReduce任务后交给Hadoop集群处理。
尽管MapReduce和Hive能完成海量数据的大多数批处理工作,并且在大数据时代成为企业大数据处理的首选技术,但是其数据查询的延迟一直被诣病,而且也非常不合适迭代计算和DAG(有向无环图)计算。由于Spark具有可伸缩、基于内存计算等特点,且可以直接读写Hadoop上任何格式的数据,较好地满足了数据即使查询和迭代分析地需求,因此变得越来越流行。
Spark它拥有Hadoop MapReduce所具有的有点。但不同于MapReduce的是,Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此能更好地适用于数据挖掘与机器学习等需要迭代地MapReduce算法。
Spark也提供类Hive的SQL接口(Spark Sql),来方便数据人员处理和分析数据。
此外,Spark还有用于处理实时数据的流计算框架Spark Streaming,其基本原理是将实时流数据分成小的时间片段(秒或者几百毫秒),以类似Spark离线批处理的方式来处理这小部分数据。
在数据处理领域,批处理任务与实时流计算任务一般被认为是两种不同的任务,一个数据项目一般会被设计为只能处理其中一种任务,例如Storm只支持流处理任务,而MapReduce、Hive只支持批处理任务。那么两者能够统一用一种技术框架来完成吗?批处理是流处理的特例吗?
Apache Flik是一个同时面向分布式实时流处理和批量数据处理的开源计算平台,他能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能。Flink在实现流处理和批处理时,与传统的一些方案完全不同,它从另一个视角看待流处理和批处理,将二者统一起来。Flink完全支持流处理,批处理被作为一种特殊的流处理,只是它的输入数据被定义为有界的而已。基于同一个Flink运行时,Flink分别提供了流处理和批处理API,而这两种API也是实现上层面向流处理、批处理类型应用框架的基础。
Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。它是谷歌的Google File System(GFS)提出之后,Doug Cutting受Google启发而开发的一种类GFS文件系统。它有一定高度的容错性,而且提供了高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS提供了一个高容错性和高吞吐量的海量数据存储解决方案。
在Hadoop的整个架构中,HDFS在MapReduce任务处理过程中提供了对文件操作和存储等的支持,MapReduce在HDFS基础上实现了任务的分发、跟踪和执行等工作,并收集结果,两者相互作用,共同完成了Hadoop分布式集群的主要任务。
HBase是一种构建在HDFS之上的分布式、面向列族的存储系统。在需要实时读写并随机访问超大规模数据集等场景下,HBase目前是市场上主流的技术选择。
HBase技术来源于Google论文《Bigtable:一个结构化数据的分布式存储系统》。如同Bigtable利用了Google File System 提供的分布式数据存储方式一样,HBase在HDFS之上提供了类似于Bigtable的能力。HBase解决了传统数据库的单点性能极限。实际上,传统的数据库解决方案尤其是关系型数据库也可以通过复制和分区的方法来提高单点性能极限,即通过都是后知后觉的,安装和维护都非常复杂。而HBase从另一个角度处理伸缩性问题,即通过线性方式从下到上增加节点来进行扩展。
HBase不是关系型数据库,也不支持SQL,其中的表一般有这样的特点。
数据有很多种应用方式 如固定报表 即时分析 数据服务 数据分析、数据挖掘和机器学习等 下面挑选典型的即时分析 Drill 框架、数据分析 语言 机器学习 TensorFlow
框架进行介绍 。
Apache Drill 个开源实时大数据分布式查询引擎,目前已经成为 Apache 的顶级项目 。
Drill 是开掘版本的 Google Dremel Dremel Google 的“交互式”数据分析系统,可 以组建成规模上千的集群,处理 PB 级别的数据 MapReduce 处理数据一般在分钟甚至小 时级别, 而Dremel 将处理时间缩短到秒级,即 Drill 是对 MapReduce 的有力补充 Dremel 作为 Google BigQuery 的报表引擎,获得了很大的成功 。
Drill 兼容 ANSI SQL 语法作为接口,支持对本地文件、 HDFS Hive HBase MongeDB 作为存储的数据查询,文件格式支持 Parquet csv TSV 以及 JSON 这种无模 式( schema-free )的数据 所有这些数据都可以像使用传统数据库的表查询一样进行快速实 时查询 。Drill 2014 年年底成为 Apache 的顶级项目,旨在为基于 Hadoop 应用的开发者和 BI 分析人员 工作效率带来巨大提升。
是一种开源的数据分析解决方案,其实市面上也有很多优秀的统计和制图软件,如 Exce SAS SPSS Stata 那么为什么 变得这么流行,成了很多数据分析师的主要 工具呢?原因如下 。R是自由软件 这意味着它是完全免费的、开放源代码的。可 以在官方阿站及其 像中下载任何有关的安装程序、源代码、程序包及其源代码、文档资料,标准的 装文件自身就带有许多模块和内嵌统计函数,安装好后可以直接实现许多常用的 计功能 。
R是一种可编程的语言 作为一个开放的统计编程环境, 语言的语法通俗易懂, 而且目前大多数最新的统计方法和技术都可以在 中直接得到 。R 具有很强的互动性 除了图形输出是在另外的窗口,它的输入/输出都是在同一个 窗口进行的,输入语法中如果出现错误会马上在窗口中给出提示,对以前输入过 命令有记忆功能,可以随时再现、编辑 修改以满足用户的需要,输出的图形可直接保存为 JPG BMP PNG等图片格式,还可以直接保存为PDF 文件此外与其他编程语言和数据库之间有很好的接口 。
随着大数据时代和人工智能热潮的到来,数据已经不仅仅局限在“看”,数据和 法已经是生产系统的一部分,众多的开源机器学习平台和深度学习平台纷纷出现, Tensor Flow 无疑是目前最为流行的一个Tensor Flow 一个非常灵活的框架,它能够运行在个人电脑或者服务器的单个/多个GPU 上,甚至是移动设备上 TensorFlow 最早是 Google 大脑团队为了研究机器学习和深度神经网络而开发的,但后来发现这个系统足够通用,能够支持更加广泛的应用, 于是将其开源 。
Tensor Flow 是基于数据流图的处理框架, TensorFlow 节点表示数学运算( mathematical operations ),边表示运算节点之间的数据交互 TensorFlow 字面意义上来讲有两层含 义:第一层含义, Tensor 代表的是节点之间传递的数据,通常这个数据是一个多维度矩阵(multidimensional data arrays )或者一维向量 ;第二层含义, Flow 指的是数据流,形象理解就是数据按照流的形式进入数据运算图的各个节点。
本章主要从整体上对数据进行了概述,包括数据从产生到消费的 四大过 :数据产生、 数据采集和传输、数据存储处理以及数据应用,每一个过程都涉及很多的技术、开源框架、工具和平台,比如离线的主要数据处理技术是基于 Hadoop MapReduce Hive ,而Hive 是一种 SQL on Hadoop 的技术,但类似的 SQL on Hadoop 技术和框架还有很多,比如Cloudera Impala、 Apache 的 Drill 以及 Presto 和 Shark 等,初学者应该以一种技术为主,辅助了解其他相关的技术,否则容易失去重点 ,从而不知所措。