数据传输和采集
Sqoop数据传输工具
实际项目开发中,往往很多业务数据是存放在关系型数据库中,如 MySQL数据库。我们需要将这些数据集中到数据仓库中进行管理,便于使用计算模型进行统计、挖掘这类操作。
Sqoop是Apache软件基金会的⼀一款顶级开源数据传输工具,用于在 Hadoop与关系型数据库(如MySQL、Oracle、PostgreSQL等)之间进 行数据传递。它可以将关系型数据中的数据导⼊入到Hadoop的分布式文件 系统(HDFS)中,也可以将分布式文件系统(HDFS)中的数据导出到 关系型数据库中。
Flume日志收集工具
在实际项目中,有些源数据是以gz压缩格式存储在磁盘⽬目录上,并非存储 在数据库中。如需将这类源数据存储到分布式⽂文件系统(HDFS)上,可 以借助Flume这款Apache顶级的日志收集工具来完成。
Flume是⼀一个分布式、高可用、高可靠的系统,它能将不同的海量数据源收 集、传输、存储到一个数据存储系统中,如分布式⽂文件系统(HDFS)、发 布订阅消息系统(Kafka)。
Kafka分布式消息队列
Apache Kafka(http://kafka.apache.org)是LinkedIn公司设计和开发 的⾼高吞吐量的分布式发布订阅消息系统,其内在设计就是分布式的,具有良好的可扩展性。Kafka的创造者们在使⽤用 之前的一些消息中间件时,发现如果严格遵循JMS的规范,虽然消息投递的成功率非常之高,但是会增加不少额外的消耗,例如JMS所需的沉重消息头,以及维护各种索引结构的开销等。最终导致系统性能很难有 进一步的突破,不太适合海量数据的应用。因此,他们并没有完全按照 JMS的规范来设计Kafka,而是对⼀一些原有的定义做了简化,大幅提升了了处理性能,同时对传送成功率也有一定的保证。总体看来,Kafka有 如下特性。
高性能存储:通过特别设计的磁盘数据结构,保证时间复杂度为 O(1)的消息持久化,这样数以TB的消息存储也能够保持良好的稳定 性能。此外,被保存的消息可以多次被消费,用于商务智能ETL和其他 一些实时应⽤用程序。
天生分布式:Kafka被设计为一个分布式系统,它利用ZooKeeper来管理多个代理(Broker),支持负载均衡和副本机制,易于横向地扩 展。ZooKeeper旨在构建可靠的、分布式的数据结构,这里用于管理和协调Kafka代理。当系统中新增了代理,或者某个代理故障失效时, ZooKeeper服务会通知生产者和消费者,让它们据此开始与其他代理协调工作。
高吞吐量:由于存储性能的大幅提升,以及良好的横向扩展性,因此即使是非常普通的硬件Kafka也可以支持每秒数十万的消息流,同时为发布和订阅提供惊人的吞吐量。
无状态代理:与其他消息系统不同,Kafka代理是无状态的。代理不会记录消息被消费的状态,而是需要消费者各自维护。
主题(Topic)和分区(Partition):支持通过Kafka服务器和消费机集群来分区消息。一个主题可以认为是一类消息,而每个主题可以分成多个分区。通过分区,可以将数据分散到多个服务器上,避免达到单机瓶颈。更多的分区意味着可以容纳更多的消费者,有效提升并发消费的能力。基于副本方案,还能够对多个分区进行备份和调度。
消费者分组(Consumer Group)
数据存储
Hbase分布式Nosql数据库
在大规模的数据集中,考虑数据存储的高可用性、高吞吐量、半结构 化的数据、高效的查询性能等因素,一般的数据库很难满⾜足需求。有需求自然会有解决方案,HBase的诞生很好地弥补了这个缺陷。
HBase是⼀一个分布式的、面向列的开源非关系型数据库(NoSQL), 和Google的BigTable能力类似。HBase和一般的关系型数据库不同,它适合于存储非结构化的数据。 提示:BigTable是Google设计的分布式数据存储系统,⽤用来处理海量数据的⼀一种⾮非关系型的数据库(NoSQL)。 HBase拥有高可用性、高性能、面向列存储、可拓展等特性。利用 HBase的这些特性,可以在廉价的服务器上搭建⼀一套大规模的存储集群。
应用场景:
- 数据量大,并且访问需要满足随机、快速响应的需要。
- 需要满足动态扩容的需要。
- 不需要满足关系型数据库中的特性(如事务、连接、交叉表)。
- 写数据时,需要拥有高吞吐的能力。
Hdfs分布式文件系统
HDFS(Hadoop Distributed File System),作为Google File System(GFS)的实现,是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上。它所具有的高容错、高可靠性、高可扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储,为超大数据集(Large Data Set)的应用处理带来了很多便利。
大数据处理
Hadoop
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,它可以使用户在不了解分布式底层细节的情况下开发分布式程序,充分利用集群的威力进行高速运算和存储。 从其定义就可以发现,它解决了两大问题:大数据存储、大也就是 Hadoop的两大核心:HDFS和MapReduce。
今的Hadoop系统已经可以让使用者轻松地架构分布式存储平台了,开发和运行大规模的数据处理应用,其主要优势如下。
透明性:使用者可以在不了解Hadoop分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。
高扩展性:扩展分为纵向扩展和横向扩展,纵向扩展将增加单机的资源,总会达到瓶颈;而横向将增加集群中的机器数量,获得近似线性增加的性能,不容易达到瓶颈。Hadoop集群中的节点资源,采用的就是横向方式,可以方便地进行扩充,并获得显著的性能提升。
高效性:由于采用了多个资源并行处理,使得Hadoop不再受限于单机操作(特别是较慢的磁盘I/O读写),可以快速地完成大规模的任务。加上其所具有的可扩展性,随着硬件资源的增加,性能将会得到进⼀一步的提升。
高容错和高可靠性:Hadoop中的数据都有多处备份,如果数据发生丢失或损坏,能够自动从其他副本(Replication)进行复原。同理,失败的计算任务也可以分配到新的资源节点,进行自动重试。
低成本:正是因为Hadoop有良好的扩展性和容错性,所以没有必要再为其添置昂贵的⾼高端服务器。廉价的硬件,甚⾄至是个人计算机都可以成为资源节点。 HDFS(Hadoop Distributed File System)是可扩展、容错、高性能的分布式文件系统,异步复制,一次写入多次读取,主要负责存储。
Spark
Spark是由加州大学伯克利分校AMP实验室开源的分布式大规模数据处理通用引擎,具有高吞吐、低延时、通用易扩展、高容错等特点。 Spark内部提供了丰富的开发库,集成了数据分析引擎Spark SQL、图 计算框架GraphX、机器学习库MLlib、流计算引擎Spark Streaming。 Spark在函数式编程语⾔言Scala中实现,提供了丰富的开发API,支持 Scala、Java、Python、R等多种开发语言。同时,Spark提供了多种运行模式,既可以采用独立部署的方式运行,也可以依托Hadoop YARN、Apache Mesos等资源管理器调度任务运行。目前,Spark已经在金融、交通、医疗、气象等多种领域中广泛使用。
数据查询分析工具
Apache Hive
Apache Hive是建立在Hadoop上的数据仓库,它提供了一系列工具,可 以用来查询和分析数据。Hive提供了执行SQL的接口,⽤用于操作存储在 Hadoop分布式文件系统(HDFS)中的数据。
Hive可以将结构化的数据文件映射成为一张数据库表,并且提供了便捷 的SQL查询功能,开发者可以通过SQL语句将实现的业务功能转化为 MapReduce任务来运行。 Hive的学习成本较低,可以通过类SQL语句快速实现MapReduce统计任务,所以开发者不必开发专门的MapReudce应用,十分适合做数据仓库 的统计工作。 Hive定义了了类SQL的查询语句,称为HQL或者Hive SQL。它允许用户通 过编写SQL语句来实现查询、统计、表数据迁移等功能。同时,也允许 熟悉MapReduce的开发者编写自定义的Mapper和Reducer来实现复杂的 需求。 Hive数据仓库是构建在Hadoop的分布式文件系统(HDFS)之上,而 Hive底层的设计是通过MapReduce计算框架来执行用户提交的任务。因为MapReduce计算框架底层设计的原因,所以在操作数据仓库(Hive) 时具有较高的延时,并且在提交作业(Job)和调度(Scheduler)时需要大量的资源开销,因而Hive比较适合处理离线数据,如联机分析处理(OLAP)。
Pig、Impala和Spark SQL
除了Hive以外,还有一些其他的选择,可帮助用户更容易地使用 Hadoop中存放的数据,这里先简单阐述一下Pig、Impala和Spark SQL。从Hive的介绍中大家不难发现,要使用该工具,需要对类 SQL语言有比较深入的认识。然⽽而有些开发者,虽然对SQL不甚理解,但是擅于MapReduce的编程。那么,对于这些人群而言是否有工具能够提升他们的生产效率呢?Pig(http://pig.apache.org)就是在这样的背景下应运而生的,它也是Apache旗下的开源项目。很多时候数据的处理需要多个MapReduce过程才能实现,数据处理过程与可能的数据转换也可能很困难。而Pig 为大型数据集的处理提供了更高层次的抽象,以及更丰富的数据结构。从抽象层次来看,它提供了脚本语⾔言Pig Latin,该语言的编译 器会将数据分析请求转换成一系列经过优化处理的MapReduce运算,可以认为是SQL的一个面向过程的简化版本。其中,一条语句就是一个操作,与数据库的表类似。同时,Pig还拥有大量的数据类型,不仅支持包、元组和映射等高级概念,还支持简单的数据类型。Pig的比较运算符也相对完整,包括使用正则表达式的丰富匹配 模式。因此,有了Pig,用户不一定需要懂得SQL的语法和含义也能控制MapReduce的作业,同时又能简化MapReduce的开发和不同的数据之间的转换。
另一个执行于现有Hadoop基础设施上的互动SQL查询引擎是 Impala,它是Cloudera公司主导开发的查询系统。类似Apache Hive,Impala也能通过类SQL的语言查询存储在HDFS和HBase中的PB级大数据。不过,Impala考虑了实时性更强的需求,在设计上和Hive有所不同。Hive采用 的方法是SQL查询转化成MapReduce任务,这仍然是一个 批处理过程,故而难以满足查询的交互性。相比之下,Impala 的速度之快就成了它的一大特色。为了实现这一点,Impala参考了Google的交互式数据分析系统Dremel。Impala使用 Parquet实现了列存储,并借鉴了MPP并行数据库的思想。同 时,它采用HiveQL和JDBC等接口,进行全局统一的元数据存储和读取。对于用户查询则是直接进行分布式处理,在HDFS 或HBase上本地读写,因此具有良好的扩展性和容错性。此 外,由于放弃了MapReduce的运行框架,它也没有 MapReduce作业启动、洗牌、排序等开销,无须将中间结果 写入磁盘,节省了大量的I/O开销,也降低了网络传输的数据量。当然,Impala并不是用来取代现有的MapReduce框架的,而是作为MapReduce的一个强力补充。一般而言, Impala更适合处理输出数据较小的查询请求,而对于大数据量 的批处理任务,MapReduce依然是更好的选择。有理由相信在不久的未来,借助处理速度上的优势,Impala可以在大数据 处理领域占得一席之地
机器学习
Mahout
Apache Mahout的主要目标是建立可伸缩的机器学习算法。这种可伸缩性是针对大规模的数据集而言的。Apache Mahout的算法运行在Apache Hadoop平台下,它通过MapReduce模式实现。但是, Apache Mahout并不严格要求算法的实现要基于Hadoop平台,单个节点或非Hadoop平台也可以。Apache Mahout核心库的非分布式算法也具有良好的性能。
Apache Mahout是 Apache Software Foundation (ASF)旗下的一个开源项目,提供了一些经典的机器学习算法,旨 在帮助开发人员更加方便快捷地创建智能应用程序。该项目已经发展到了它的第三个年头,有了三个公共发行版本。Apache Mahout项目包含聚类、分类、推荐引擎、频繁子项挖掘。
Spark mllib
MLlib是Spark的机器学习(ML)库。旨在简化机器学习的工程实践工作,并方便扩展到更大规模。MLlib由一些通用的学习算法和工具组成,包括分类、回归、聚类、协同过滤、降维等,同时还包括底层的优化原语和高层的管道API。
其他工具
大数据平台CDH(一站式打包)
Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,简称“CDH”),基于Web的用户界面,支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop,简化了大数据平台的安装、使用难度。
Hue hadoop可视化操作
Hue是一个开源的Apache Hadoop UI系统,最早是由Cloudera Desktop演化而来,由Cloudera贡献给开源社区,它是基于Python Web框架Django实现的。通过使用Hue我们可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据,例如操作HDFS上的数据,运行MapReduce Job等等Hue所支持的功能特性集合:
- 默认基于轻量级sqlite数据库管理会话数据,用户认证和授权,可以自定义为MySQL、Postgresql,以及Oracle
- 基于文件浏览器(File Browser)访问HDFS
- 基于Hive编辑器来开发和运行Hive查询
- 支持基于Solr进行搜索的应用,并提供可视化的数据视图,以及仪表板(Dashboard)
- 支持基于Impala的应用进行交互式查询
- 支持Spark编辑器和仪表板(Dashboard)
- 支持Pig编辑器,并能够提交脚本任务
- 支持Oozie编辑器,可以通过仪表板提交和监控Workflow、Coordinator和Bundle
- 支持HBase浏览器,能够可视化数据、查询数据、修改HBase表
- 支持Metastore浏览器,可以访问Hive的元数据,以及HCatalog
- 支持Job浏览器,能够访问MapReduce Job(MR1/MR2-YARN)
- 支持Job设计器,能够创建MapReduce/Streaming/Java Job
- 支持Sqoop 2编辑器和仪表板(Dashboard)
- 支持ZooKeeper浏览器和编辑器
- 支持MySql、PostGresql、Sqlite和Oracle数据库查询编辑器