推荐系统相关工具简介
下面对上篇《推荐系统架构及流程说明》中提到的相关工具做个简单介绍。 1、Lambda架构 Lambda架构的目标是设计出一个能满足实时大数据系统关键特性的架构,包括有:高容错、低延时和可扩展等。Lambda架构整合离线计算和实时计算,融合不可变性(Immunability),读写分离和复杂性隔离等一系列架构原则,可集成Hadoop,Kafka,Storm,Spark,Hbase...
下面对上篇《推荐系统架构及流程说明》中提到的相关工具做个简单介绍。
1、Lambda架构
Lambda架构的目标是设计出一个能满足实时大数据系统关键特性的架构,包括有:高容错、低延时和可扩展等。Lambda架构整合离线计算和实时计算,融合不可变性(Immunability),读写分离和复杂性隔离等一系列架构原则,可集成Hadoop,Kafka,Storm,Spark,Hbase等各类大数据组件。Lambda是一个通用框架,各模块选型不要局限于上面给出的组件,特别是view的选型。因为View是和各业务关联非常大的概念,View选择组件时要根据业务的需求,选择最合适的组件。
框架支持反馈时间:
- 实时计算框架:0——5s
- 交互式计算框架:5s——1m
- 无交互式离线计算框架:1m——1h
- 批处理计算框架:1h+
2、HDFS
HDFS即Hadoop分布式文件系统(HadoopDistributed Filesystem),以流式数据访问模式来存储超大文件,运行于商用硬件集群上,是管理网络中跨多台计算机存储的文件系统。
HDFS的三个节点:Namenode,Datanode,SecondaryNamenode
- Namenode:HDFS的守护进程,用来管理文件系统的命名空间,负责记录文件是如何分割成数据块,以及这些数据块分别被存储到那些数据节点上,它的主要功能是对内存及IO进行集中管理。
- Datanode:文件系统的工作节点,根据需要存储和检索数据块,并且定期向namenode发送他们所存储的块的列表。
- Secondary Namenode:辅助后台程序,与NameNode进行通信,以便定期保存HDFS元数据的快照。
HDFS不适合用在:要求低时间延迟数据访问的应用,存储大量的小文件,多用户写入,任意修改文件。
3、Hbase
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,位于结构化存储层,为构成HDFS的大数据块环境提供随机访问和操作数据的能力。
Hbase的优点:
- 列的可以动态增加,并且列为空就不存储数据,节省存储空间.
- Hbase自动切分数据,使得数据存储自动具有水平scalability.
- Hbase可以提供高并发读写操作的支持
Hbase的缺点:
不能
- 支持条件查询,只支持按照Row key来查询.
- 暂时不能支持Masterserver的故障切换,当Master宕机后,整个存储系统就会挂掉.
4、Spark
(1)Spark的优势
Spark突破了mapreduce的局限性,集成了多个计算框架到同一个集群中,使用统一的开发语言,统一的api模式,统一的运维模式,减少开发和运维成本。
- mapreduce的局限性(中间结果写磁盘,不能充分利用内存;计算框架map+reduce设计简单,处理效率低;开发复杂,不适合迭代开发、交互式计算、流式计算等等)
- 框架的多样性(交互式计算、批处理、流式计算)
- spark api支持的语言:scala、R、python、java
- 代码量比mapreduce减少2——5倍
- 同一个查询语句,mapreduce将产生多个map+reduce任务,每个任务的中间结果都存在hdfs上,下一个任务再读出来。而spark则产生一个dag任务,整个过程都在内存中进行。
- 能与Hadoop无缝结合。在一个节点安装,将hadoop信息配置给spark,即可使用yarn-cluster模式管理spark。
(2)Spark的运行模式
生产环境用,一般以yarn-cluster模式运行:
drive和Executor都运行在YARN集群中。driver由集群统一管理,一旦Driver挂掉,ResourceManager会另外找节点重新启动Driver重新从头开始执行。
(3)Spark MLlib
Spark MLlib是基于Spark计算框架实现的机器学习算法库。
(4)Spark Streaming
Spark Streaming在内部的处理机制是,接收实时流的数据,并根据一定的时间间隔拆分成一批批的数据,然后通过Spark Engine处理这些批数据,最终得到处理后的一批批结果数据。框架如下:
由Receiver不断接收数据,一旦到达指定阈值,则将数据提交给Executor进行处理。
SparkStreaming是一个对实时数据流进行高通量、容错处理的流式处理系统,可以对多种数据源(如Kafka、Flume、Twitter、Zero和TCP 套接字)进行类似Map、Reduce和Join等复杂操作,并将结果保存到外部文件系统、数据库或应用到实时仪表盘。
5、kafka
Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下:
- 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。
- 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。
- 支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。
- 同时支持离线数据处理和实时数据处理。
- Scale out:支持在线水平扩展。
上图所示,一个典型的Kafka集群中包含若干Producer(可以是web前端产生的PageView,或者是服务器日志,系统CPU、Memory等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干Consumer Group,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance。Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息。
6、Redis
Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序。
Redis的特点
- Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化。
- 与其它键值数据存储相比,Redis有一组相对丰富的数据类型。Redis支持开发人员常用的大多数数据类型,例如列表,集合,排序集和散列等等。这使得Redis很容易被用来解决各种问题,因为我们知道哪些问题可以更好使用地哪些数据类型来处理解决。
- Redis可以将数据复制到任意数量的从机中。
- Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET)操作。
- 所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。
- Redis是一个多实用工具,可用于多种用例,如:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等。
7、hadoop生态系统
Hadoop HDFS是分布式存储,是Hadoop生态系统的基础。
Hbase是基于HDFS的一种列式nosql数据库。
YARN用于分布式集群的资源管理。
Hadoop MapReduce是Hadoop自身的分布式计算框架。
Spark是为了解决MapReduce的自身缺陷推出的另一种内存计算框架Spark综合了批处理、流处理(Spark Streaming)和交互式处理(Spark Sql)多种模式。Spark MLlib是基于Spark的机器学习算法库。
Storm则是一种流式计算框架。
Pig和Hive为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。hive、pig的处理原本是基于MapReduce计算框架,后来有了基于Spark计算框架的版本,速度更快。
Zookeeper为HBase提供了稳定服务和failover机制。
Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。
Flume是集群的日志收集程序。
Ambari是整个集群的图形化安装、监控、管理工具。
更多推荐
所有评论(0)