windix
作者windix2018-10-16 15:42
商业智能工程师, 蚂蚁金服

十二种大数据技术组件详解及高可用性部署

字数 13564阅读 5584评论 1赞 15

一、 前言

近年来互联网的新业形态快速涌现,互联网金融和金融大数据快速发展,对经济提质增效的促进作用不断凸显。阿里巴巴、腾讯、百度等数据研发应用企业开始引领数据产业的发展。同时政府和科研机构也高度关注大数据。
2012年:广东省启动了《广东省实施大数据战略工作方案》;北京成立“中关村大数据产业联盟”。
2013年:科技部将大数据列入973基础研究计划;同年国家自然基金指南中亦将大数据列入其中。
2014年:“互联网金融”和“大数据”首次出现在全国两会的《政府工作报告》中。
2015年:国务院常务会通过《关于促进大数据发展的行动纲要》;国务院发布《促进大数据发展行动纲要》,系统部署大数据发展工作。
2016年,继国家发改委印发了《关于组织实施促进大数据发展重大工程的通知》后,环保部、国务院办公厅、国土资源部、国家林业局、煤工委、交通运输部、农业部均推出大数据发展意见和方案。
2017年:工业和信息化部发布《大数据产业发展规划(2016—2020年)》,加快实施国家大数据战略,推动大数据产业健康快速发展。
2018年:工信部发布《大数据标准化白皮书(2018)》。
当前,大数据已经成为推动经济社会发展的重要力量,同时也是解决民生问题的重要支撑。大数据技术值得每个企业和个人去深入了解。作者收集并整理部分优秀的大数据相关文献,汇集成本文。参考文献放在文末。

二、 大数据生态圈

大数据生态圈经过十余年的指数式发展,各种技术百花齐放,新技术迭代更新速度日益加快。暂且抛开各种眼花缭乱的新名词,大数据技术本质上解决的是5个核心问题。
(1)采集,海量的数据怎样快速批量的采集?主要的技术包括Flume、Logstash等。
(2)存储,海量的数据怎样可靠的存储?主要的技术包括Hive、HDFS和Kafka等。
(3)计算,海量的数据怎样快速准确的计算?主要的技术包括MapReduce、Spark、Spark Streaming、Storm和Flink等。
(4)查询,海量的数据怎样准确有效的查询?主要的技术分为Nosql和Olap。Nosql主要解决随机查询,包括Redis、Hbase、Cassandra 等。Olap技术主要解决关联查询,包括Kylin、impla等。同时基于索引技术实现快速查询的技术也很成熟,如Lucene和Elasticsearch等。
(5)挖掘,海量的数据怎样挖掘出隐藏的知识?也就是当前火热的机器学习和深度学习等技术,包括Spark ML、TensorFlow、Caffe、Mahout等。
同时,一些优秀的技术用于协调以上各个技术组件的协同工作,如Yarn和ZooKeeper等。本章节简要介绍其中一些有代表性的技术组件。

1. Flume

Flume是一个分布式、高可靠和高可用的海量日志聚合系统,支持从各类数据发送方采集数据,同时也提供对数据的简单处理里能,并可以将处理后的数据定制化地写入各种数据接收方。例如,Flume可以采集文件、socket等多种形式的数据,并将采集到的数据输出到HDFS、Hbase、Hive、Kafka等多种组件中。并且Flume的管道是基于事务的,保证了数据在传送和接收时的一致性。Flume的另一个优势是当收集数据的速度超过数据接收方的最高写入速度时,Flume会在数据发送方和数据接收方之间做出调整,保证其能够在两者之间提供平稳的数据。

2. Hive

Hive是建立在Hadoop基础上的开源数据仓库,提供类似SQL的HQL(Hive Query Language)语言对存储在Hadoop中的大规模数据进行存储、查询和分析操作。除了某些查询操作,几乎其他所有的HiveQL查询操作会被转化为优化后的MapReduce程序执行。
Hive与传统的关系型数据库有以下区别:i)数据存储不同。Hive存储基于Hadoop的HDFS,而关系数据库则基于本地操作系统的文件系统。ii)计算模型不同。Hive基于Hadoop的MapReduce,而关系数据库则基于索引的内存计算模型。iii)应用场景不同。Hive适用于海量数据查询,实时性很差,而关系数据库使用普通数据查询,实时性较高。iv)扩展性不同。Hive基于Hadoop之上,很容易通过分布式的节点增加来扩大存储能力和计算能力,而关系数据库水平扩展很难,只能不断增加单机的性能。

3. HDFS

Hadoop分布式文件系统(Hadoop Distributed File System),提供高吞吐量的数据访问能力,适合用于大规模海量数据的存储。HDFS具有如下特点:i)低成本。HDFS实现的分布式存储实际是由数百上千个服务器提供的。相比于单独使用一台大型高性能服务器,服务器集群在遇到故障时所需要的维护成本要少的多。当集群中某个服务器发生故障中,只需要低成本地维护该服务器即可。ii)高容错。由于HDFS是众多服务器一起实现分布存储,每个数据文件都有2个冗余备份。所以HDFS是具有高容错性的,允许机器发生故障。iii)高吞吐。HDFS是“一次写入多次读写”的访问模型,除了在文件末尾追加数据,HDFS是不允许修改文件的。该访问模型简化了数据一致性的问题,并且实现了数据读取的高吞吐量。iv)就近原则。简言之就是在数据附近执行程序要比将数据转移到程序所在的位置之后再执行效率要高,大大降低系统IO。“移动计算要比移动数据便宜”。v)可移植性。HDFS可以实现不同平台之间的移植。

4. Kafka

kafka是一个分布式的、可分区的、多副本的实时消息发布和订阅系统,提供可扩展、高吞吐、低延迟、高可靠的消息分发服务。Kafka的主要应用场景是:日志采集和消息系统。kafka主要有如下特性:i)消息持久化。即便是TB级的数据,也不会丢失任何信息。ii)高吞吐。支持每秒数百万的消息。iii)Kafka支持服务器上的消息分区,以及在数据消费者集群上的分发消费,并维护每个分区的排序。iv)多客户端支持。Kafka提供多种编程语言接口,包括java、.NET、PHP、Ruby和Python等。v)实时性。生产者产生的消息对消费者立即可见。

5. MapReduce

MapReduce是一种分布式计算模型。它提供了快速并行处理海量数据的能力,主要用解决海量数据的批量计算问题。MR由 Map和Reduce两个过程组成。Map过程将一个分片数据根据用户定义的Map逻辑处理后,经由MapReduce框架处理,形成输出结果,供后续Reduce过程使用。Reduce过程即将Map的结果作为输入,根据用户定义的Reduce逻辑,将数据处理并汇总,输出最后的结果。在开发过程中,用户只需实现map()和reduce()两个函数,即可实现分布式计算。

6. Spark

Spark是基于内存计算的的大数据分布式计算框架。它是基于MapReduce算法实现的分布式计算平台,具有MapReduce所有优点。不同于MapReduce的是,Spark计算任务的中间结果和最终结果都可以保存在内存中,从而计算过程不再读写分布式文件系统。因此,Spark更加适用于数据挖掘与机器学习等需要迭代的MapReduce算法。
不同于MapReduce只提供了Map和Reduce两种操作,Spark将数据抽象成RDD,并提供更加丰富的数据集操作类型。例如,map、filter、flatMap、sample、groupByKey、reduceByKey、union、join、cogroup、mapValues、sort和partionBy等多种操作。Spark将这些操作统一称为Transformations。同时Spark还提供count、collect、reduce、lookup和save等多种Actions操作。利用Transformations和Actions操作,Spark为用户提供了更加灵活的编程模式。用户可以命名、物化、控制中间结果的存储和分区等。不过由于RDD的特性,Spark不适合用于对数据增量修改的场景。

7. Spark Streaming

Spark Streaming是一个分布式、可容错、高吞吐、高性能、高可靠的实时计算平台,可以为海量数据提供实时处理。Spark Streaming提供了一个对实时数据流的高级抽象DStream(Discretized Stream)。DStream表示一个持续不断输入的数据流,可以基于Kafka、TCP Socket、Flume等数据流创建。在Spark Streaming内部,一个DStream实际上是由一系列RDD组成的。Spark Streaming提供了类似Spark的Transformations和Actions两种操作类型,分别为Transformations和Output操作。它们的操作对象是DStream。Transformation操作将一个已有的DStream转换成一个新的DStream。而且Spark Streaming还增加了一类针对时间窗口(window)的操作,可以更灵活地控制DStream的大小(时间间隔大小、数据元素个数),例如window(windowLength,slideInterval)、countByWindow(windowLength,slideInterval)、reduceByWindow(func,windowLength,slideInterval)等。Output操作将DStream数据输出到一个外部的存储系统,如数据库或文件系统等,执行Output操作类似执行Spark的Action操作,使得该操作之前lazy的Transformation操作序列真正地执行。

8. HBase

Hbase是一种构建在HDFS之上的分布式、面向列的存储系统,提供海量数据存储功能,适合实时读写、随机访问超大规模数据集的应用场景。HBase的特点如下:i)大规模。一个表可以有上亿行,上百万列。ii)面向列。面向列表(簇)的存储和权限控制,列(簇)独立检索。iii)稀疏。空列不占用存储空间,因此,表可以设计的非常稀疏。iv)无模式。每一行都有一个可以排序的主键和任意多的列。列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列。v)数据多版本。每个单元中的数据项可以有多个版本。默认情况下,数据项的版本号自动分配,版本号就是单元格数据写入时的时间戳。vi)数据类型单一。HBase中的数据都是字符串,没有类型。Hbase非常适合用来进行大数据的实时查询。Facebook用Hbase进行消息和实时的分析,并用来统计用户之间的连接数。

9. Redis

Redis是一个开源的、高性能的key-value分布式存储数据库,支持丰富的数据类型,满足实时的高并发读写需求。相比于其他key-value缓存产品,Redis有三个特点:i)支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。ii)支持更多数据类型,提供list、set、zset、hash等数据结构。iii)支持数据的备份,即master-slave模式的数据备份。同时,Redis还具有以下优点:i)性能极高。每秒可读写上万次。ii)丰富的数据类型。Redis支持二进制表示的 Strings、Lists、Hashes、Sets和Ordered Sets等数据类型。iii)原子性。Redis的所有操作都是原子性的,操作要么成功执行要么失败完全不执行。iv)丰富的特性。Redis还支持 publish/subscribe、通知、key过期等特性。

10. Elasticsearch

Elasticsearch是一个基于Lucene的高性能搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎。Elasticsearch用Java开发,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索和分析引擎。Elasticsearch可以用于全文检索、结构化检索和分析,是现在使用最广的开源搜索引擎之一。Wikipedia、Stack Overflow、GitHub 等都基于 Elasticsearch 来构建他们的搜索引擎。

11. YARN

YARN是一个通用的资源管理系统,可以为各类应用程序进行资源管理和调度。YARN本质是第二代MapReduce,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。它完全不同于Hadoop MapReduce,所有代码全部重写而成。整个平台由Resource Manager(master,提供资源分配功能)和Node Manager组成(slave,提供节点管理功能)。相比于MapReduce,其最大特点是将JobTracker拆分成Resource Manager和Application Master,其中Resource Manager是全局的资源管理器,仅负责资源分配,而Application Master对应一个具体的application(如Hadoop job, Spark Job等),主要负责application的资源申请,启动各个任务和运行状态监控。

12. ZooKeeper

ZooKeeper提供分布式、高可用性的协调服务,帮助系统避免单点故障,从而建立可靠的应用服务。ZooKeeper典型应用场景包括,集群维护(master选举)、配置管理(数据的发布和订阅)、分布式锁、分布式队列和命名服务。ZooKeeper的优势在于,i)源代码开源。ii)分布式协调服务,解决了分布式数据一致性的问题,包括顺序一致性、原子性、单一视图和可靠性。iii)实时性。iv)高性能。一般情况下Zookeeper集群的服务器数量是奇数个,2N+1, N代表允许宕机的个数。

三、 高可用性部署

大数据平台主要可以采用两种高可用性方案。均很好地解决了单点故障问题,并提供了良好的横向扩展性。

1. 基于ZooKeeper集群的HA部署

在Hadoop生态环境中,大部分组件使用了基于Zookeeper集群的HA部署方式,包括:HDFS的NameNode、YARN的ResourceManager、Hbase的Hmaster、Hive的HiveServer、以及通过Standalone模式部署的在线Spark集群的Master等。如下图所示:
vdjul8nygotr

vdjul8nygotr

图3-1 基于ZooKeeper集群的HA部署

HA部署需要设置至少两个管理节点(例如NameNode、Spark Master等)。其中,只有一个节点处于Active状态,其余均为Standby状态。当Aciive状态下的管理节点服务崩溃时,ZooKeeper集群会自动选举出Standby状态的一个管理节点,并将它激活为Active状态,保持服务的持续进行。本节列举几个典型组件基于ZooKeeper的HA部署方式。
(1)Hbase
HBase中的HMaster负责region分配,维护meta信息表,当regionserver服务停止后把相应region迁移到其他regionserver。为了解决HMaster单点故障导致HBase正常功能受到影响的问题,引入HMaster HA模式。
p59ayb1xmiui

p59ayb1xmiui

图3-1 HMaster高可用性实现架构

HMaster高可用性架构通过在ZooKeeper集群创建empheral zookeeper node实现的。当HMaster两个节点启动时都会尝试在ZooKeeper集群上创建一个znode节点master,先创建的成为Active HMaster,后创建的成为Standby HMaster。Standby HMaster会在master节点添加监听事件。如果主节点服务停止,就会和zookeeper集群失去联系,session过期之后master节点会消失。Standby节点通过监听事件(watch event)感知到节点消失,会去创建master节点自己成为Active HMaster,主备倒换完成。如果后续停止服务的节点重新启动,发现master节点已经存在,则进入Standby模式,并对master znode创建监听事件。当客户端访问HBase时,会首先通过Zookeeper上的master节点信息找到HMaster的地址,然后与Active HMaster进行连接。

(2)HDFS
在Hadoop2.0.0之前,HDFS集群中存在单点故障问题。由于每个集群只有一个NameNode,如果NameNode所在机器发生故障,将导致HDFS集群无法使用,除非NameNode重启或者在另一台机器上启动。这在两个方面影响了HDFS的整体可用性:i)当异常情况发生时,如机器崩溃,集群将不可用,除非重新启动NameNode。ii)计划性的维护工作,如软硬件升级等,将导致集群停止工作。针对以上问题,HDFS高可用性方案通过自动或手动(可配置)的方式,在一个集群中为NameNode启动一个热替换的NameNode备份。当一台机器崩溃时,可以迅速地自动进行NameNode主备切换。或者当主NameNode节点需要进行维护时,通过管理员控制,可以手动进行NameNode主备切换,从而保证集群在维护期间的可用性。
b8p0abnz1ato

b8p0abnz1ato

图3-2 HDFS典型的HA部署方式

在一个典型的HA集群中,需要把两个NameNodes配置在两台独立的机器上。在任何一个时间点,只有一个NameNode处于Active状态,另一个处于Standby状态。Active节点负责处理所有客户端操作,Standby节点时刻保持与Active节点同步的状态以便在必要时进行快速主备切换。
为保持Active和Standby节点的数据一致性,两个节点都要与一组称为JournalNode的节点通信。为保证故障转移快速进行,Standby需要时刻保持最新的块信息,为此DataNodes同时向两个NameNodes发送块信息和心跳。对一个HA集群,保证任何时刻只有一个NameNode是Active状态至关重要。否则,命名空间会分为两部分,有数据丢失和产生其他错误的风险。为保证这个属性,防止“split-brain”问题的产生,JournalNodes在任何时刻都只允许一个NameNode写入。在故障转移时,将变为Active状态的NameNode获得写入JournalNodes的权限,这会有效防止其他NameNode的Active状态,使得切换安全进行。

(3)YARN
YARN中的ResourceManager负责整个集群的资源管理和任务调度,在Hadoop2.4版本之前,ResourceManager在YARN集群中存在单点故障的问题。YARN高可用性方案通过引入冗余的ResourceManager节点的方式,解决了这个基础服务的可靠性和容错性问题。
alyep3lretq2

alyep3lretq2

图3-3 ResourceManager高可用性实现架构

ResourceManager的高可用性方案是通过设置一组Active/Standby的ResourceManager节点来实现的。与HDFS的高可用性方案类似,任何时间点上都只能有一个ResourceManager处于Active状态。当Active状态的ResourceManager发生故障时,可通过自动或手动的方式触发故障转移,进行Active/Standby状态切换。
在未开启自动故障转移时,YARN集群启动后,管理员需要在命令行中使用yarn rmadmin命令手动将其中一个ResourceManager切换为Active状态。当需要执行计划性维护或故障发生时,则需要先手动将Active状态的ResourceManager切换为Standby状态,再将另一个ResourceManager切换为Active状态。开启自动故障转移后,ResourceManager会通过内置的基于ZooKeeper实现的ActiveStandbyElector来决定哪一个ResouceManager应该成为Active节点。当Active状态的ResourceManager发生故障时,另一个ResourceManager将自动被选举为Active状态以接替故障节点。

(4)Spark
Spark中实现了类似于HiveServer2的Thrift JDBC服务。用户可以通过beeline以及JDBC接口访问,在社区已有的Thrift Server基础上,实现高可用性部署方案。
8ypu7cq6zqut

8ypu7cq6zqut

图3-4 Spark Thrift Server HA

Thrift Server进程在启动时,首先向Zookeeper注册自身消息,并开始竞选。若竞选为主,则打开端口监听来自客户端的请求,并将自身的host和port写入Zookeeper,供客户端连接使用;若竞选为备,则监听Zookeeper上主服务的状态,当主服务状态失败时接管服务。

2. 集群部署

不同于Hadoop集群本身不提供管理节点的高可用性,需要引入ZooKeeper才能够保障高可用性,Elasticsearch和Redis集群自身就提供了每个节点的高可用性。

(1)Elasticsearch
xa2g7g3imtg6

xa2g7g3imtg6

图3-5 Elasticsearch集群模型

Elasticsearch集群的高可用部署主要将集群中的多个数据节点配置为master。集群会自动地选举并切换master节点。用户无需干预,也无需改动程序,甚至可以说用户完全感觉不到这个过程。而且不同于Hadoop NameNode只能设置一个Standby的节点,ElasticSearch可以设置多个master,这保证了两台甚至更多管理节点崩溃时,仍然能正常提供服务。

(2)Redis
Redis集群的高可用性是通过对master节点设置slave实现的,master负责把数据同步给slave,当master服务崩溃时,slave会自动切换为master。
umxkt8tdm5vr

umxkt8tdm5vr

图3-6 Redis集群模式

Redis集群模式补充说明如下。多个Redis实例组合为一个Redis集群,并将槽位均分到各主实例上。集群中的每个实例都记录有槽位与实例的映射关系,客户端也记录了槽位与实例的映射。客户端计算出槽位信息后,根据槽位-实例映射,将消息直接发送到对应实例处理。默认情况,从实例不能读不能写,在线执行readonly命令可使从实例可读。主实例故障,由集群中剩余的主实例选举出一个从实例升主,需要半数以上主实例OK才能选举。Redis集群可以进行扩容和减容,并进行槽位迁移。

四、 运行监控

运行监控可分为服务器状态监控、服务运行监控两个部分。用于方便、迅速地掌握服务器、服务进程、数据总线的实时状态,及时发现和解决潜在的问题。

1. 服务器状态监控

通过编写Shell脚本实现服务器cpu、内存、磁盘io、网络io等信息等数据的实时采集,并发送给OpenTSDB等时间序列数据库。OpenTSDB是基于Hbase的时间序列数据库,可以用于存储、查询和分析海量的时间序列明细数据。同时,它还提供了一个功能强大的GUI,可以轻松定制监控图表。用户只需选择相关参数即可分析、比较监控数据。
ws96j58bgaln

ws96j58bgaln

图4-1 OpenTSDB监控界面

管理员可以给不同系统服务器的不同数据信息设置不同的预警值。当发现CPU、内存、磁盘等容量达到预警值的时候,自动给系统运维人员发送警报。运维人员可根据报警信息处理系统错误,或根据系统的特点添加服务器资源来提高系统的容量。

2. 服务监控

服务监控方面,管理员可以使用Ambari监控Hadoop、Spark、Hbase、Hive等Hadoop生态圈的组件。Ambari是应用最为广泛的Hadoop生态部署、管理、监控工具。监控内容包括每个组件的服务状态,例如,HDFS的空间使用情况、Block的健康状态、YARN的资源使用、MapReduce Job历史及运行状态、Spark应用的状态等。然而,Ambari并没有对Hadoop组件集成过多的功能,如日志分析等。它只提供了安装、配置、启停等功能,尽量保持了与原生Hadoop组件之间的隔离性。对于某一特定组件的具体操作,可以通过Quick Links直接导航至原生的管理界面(如HBase Master UI)。Ambari主要解决了如下问题:
(1)简化了部署过程。在图形化的安装界面中可以方便的指定master所在的节点,使集群快速运行起来。
(2)通过Ambari Metrics实现集群状态的监控,并通过集成Grafana进行数据的展示(CPU、内存、负载等)。
(3)Service的高级配置。集群部署之后,可以方便的通过dashboard进行参数的修改(如HDFS的core-site等)。
(4)快速链接。Ambari提供快速导航至Hadoop组件原生管理界面的链接。
(5)节点的扩展。如HBase Master的增加。
(6)可定制的Alert功能。Ambari的报警信息可以自定义,使得用户可以根据自己的需要,设置哪些情况下需要报警,哪些不需要。
(7)增值功能。如HDFS的Rebalance DataNode、NameNode的HA等
(8)Ambari自身的用户管理,基于RBAC赋予用户对Hadoop集群的管理权限。

ewlz2i6uf0lb

ewlz2i6uf0lb

图4-2 Ambari监控界面

ElasticSearch集群的监控由Marvel负责。Marvel是Elastic官方的ElasticSearch监控工具,可以查看集群中各个节点的状态及cpu、磁盘、JVM Memory的使用情况,以及各个Index的shard在集群中各节点上的分布情况与状态。此外,还可以查看Elasticsearch的查询、写入速度及延时状况,以及Shard的活动情况。

五、 应用场景

携程推荐系统案例
该案例来自携程技术中心基础业务研发部的《应用架构涅槃》系列分享。携程通过广泛使用大数据技术对用户进行研究,为用户提供个性化服务。例如,通过将广告和栏位的“千人一面”变为“千人千面”,在提升用户便捷性,可用性,降低费力度的同时,其转化率也得到了数倍的提升,体现了大数据服务的真正价值。本节简要介绍携程在大数据平台上实现的个性化推荐系统。详细内容可参考文末的来源链接。

36kubq9au307

36kubq9au307

图5-1 携程推荐系统架构图

(1)数据采集
i)结构化数据。主要是携程各产线的产品维表和订单数据,有酒店、景酒、团队游、门票、景点等,还有一些基础数据,比如城市表、车站等,这类数据基本上都是T+1,每日通过调度程序从各个生产系统获取

ii)半结构化数据。主要是携程用户的访问行为数据,例如浏览、搜索、预订、反馈等。这些数据这些是由前端采集框架实时采集,然后下发到后端的收集服务,由收集服务在写入到Hermes消息队列。一路会落地到Hadoop上面做长期存储,另一路近线层可以通过订阅Hermes此类数据Topic进行近实时的计算工作。Hermes是基于Kafka和MySQL的消息队列。iii)非结构化数据。主要是外部合作渠道的数据,还有一些评论数据,T+1更新。
(2)数据存储
用户意图以及推荐产品数据以Key-Value的形式存储在HBase中。携程工程师对HBase操作进行了进一步优化,其中包括rowkey的设计、预分配、数据压缩等,同时针对特定使用场景对HBase本身配置方面的也进行了调优。Hbase等存储数据量已经达到TB级别,支持每天千万次请求,同时保证99%在50毫秒内返回。Redis主要用于缓存热点数据。
(3)搜索引擎
Elasticsearch索引各业务线产品特征数据,提供基于用户的意图特征和产品特征复杂的多维检索和排序功能。集群由4台大内存物理机器构成,采用全内存索引。在特定的复杂查询场景中,MySQL需要将近30次查询,Elasticsearch只需要一次组合查询且在100毫秒内返回。目前每天千万次搜索,99%以上在300毫秒以内返回。
(4)数据计算。
i)离线计算。预处理阶段,为后续数据挖掘做数据的准备工作。包括数据去重、过滤和缺失值填充等。数据挖掘阶段,主要运用一些常用的数据挖掘算法进行模型训练和推荐数据的输出(分类、聚类、回归、CF等)。结果导入阶段,通过可配置的数据导入工具将推荐数据进行一系列转换后导入到HBase、Redis以及建立Elasticsearch索引。Redis存储的是经统计计算出的热点数据。
ii)近线计算。当用户没有明确的目的时,很难搜索到满足兴趣的产品。此时不仅需要了解用户的历史兴趣,用户实时行为特征的抽取和理解更加重要,以便快速的推荐出符合用户当前兴趣的产品。一般来说用户特征分成两大类:一种是稳定的特征(用户画像),如用户性别、常住地、主题偏好等特征;另一类是根据用户行为计算获取的特征,如用户对酒店星级的偏好、目的地偏好、跟团游/自由行偏好等。基于前面所述的计算的特点,使用近在线计算来获取第二类用户特征。它的输入数据源包括两大类:第一类是实时的用户行为;第二类是用户画像、历史交易以及情景等离线模块提供的数据。结合这两类数据,经一些列复杂的近线学习算法和规则引擎,计算得出用户当前实时意图列表存储到HBase和Redis中。iii)在线计算。先将用户意图、用户浏览,相关推荐策略生成的产品集合等做为数据输入,接着按照场景规则,业务逻辑重新过滤,聚合、排序。最后验证和拼装业务线产品信息后输出推荐结果。

参考文献

如何用形象的比喻描述大数据的技术生态?Hadoop、Hive、Spark 之间是什么关系? - 有点文的回答 - 知乎,
https://www.zhihu.com/question/27974418/answer/156227565
大数据flume日志采集系统详解,https://cloud.tencent.com/info/65a8bc09334fbf6f78408bf920a58681.html
Hive -- 基于Hadoop的数据仓库分析工具,https://www.cnblogs.com/hanganglin/articles/4175247.html
Hadoop之——MapReduce实战(一),https://blog.csdn.net/l1028386804/article/details/45956487
1.MapReduce简介,https://blog.csdn.net/dream0352/article/details/57971260?locationNum=11&fps=1
Spark基础知识学习分享,https://blog.csdn.net/lantian0802/article/details/22507525
Redis简介,http://www.runoob.com/redis/redis-intro.html
Kafka+Spark Streaming+Redis实时计算整合实践,https://www.cnblogs.com/duanxz/p/3582192.html
Kafka简介及主要机制,https://blog.csdn.net/u010558660/article/details/51461399
统一资源管理与调度平台(系统)介绍,http://dongxicheng.org/mapreduce-nextgen/mesos_vs_yarn/
HDFS分布式存储及特点,https://blog.csdn.net/prettyeva/article/details/60146668
HBase详细概述,https://blog.csdn.net/u010270403/article/details/51648462
ZooKeeper简单介绍(一),https://blog.csdn.net/jiuqiyuliang/article/
FusionInsight系统架构 ,http://support.huawei.com/enterprise/docinforeader!loadDocument1.action?contentId=DOC1000104104&partNo=10052#ZH-CN_TOPIC_0022130864
Ambari 功能简介,https://blog.csdn.net/u012331758/article/details/78106714
携程大数据实践:高并发应用架构及推荐系统案例,https://blog.csdn.net/happytofly/article/details/80124929

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

15

添加新评论1 条评论

#WO13811318604软件开发工程师, 中青旅控股股份有限公司
2018-10-22 16:57
内容感觉好大
Ctrl+Enter 发表

本文隶属于专栏

最佳实践
不同的领域,都有先行者,实践者,用他们的最佳实践来加速更多企业的建设项目落地。

关于TWT  使用指南  社区专家合作  厂商入驻社区  企业招聘  投诉建议  版权与免责声明  联系我们
© 2019  talkwithtrend — talk with trend,talk with technologist 京ICP备09031017号-30