从零搭建企业大数据分析和机器学习平台-技术栈介绍(三)
数据传输和采集
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数据库查询编辑器
————————————————
版权声明:本文为csdn博主「有理想的iter」的原创文章,遵循 cc 4.0 by-sa 版权协议,转载请附上原文出处链接及本声明。
原文链接:
下一篇: C#开发学习人工智能的第一步