对于业务数据数据量的暴增,用户智能化需求提升。在这个DT的时代,大数据的开发也就应运而生了,大数据开发必须解决两个问题,大数据量如何统一存储,大数据量如何统一计算。针对这些问题产生了很多大数据方面的技术框架。到今天为止,大数据方面的技术可以说已经相当成熟,BAT在大数据方面都应用十分的广泛,大数据量的分析使得数据更有了价值,运营有了通过大数据的分析可以做出精确的营销计划,通过收集用户的操作日志,分析用户行为,给出用户精确和有价值的推荐。人工智能也是通过海量数据做分析,通过算法做出智能准确的行为。
大数据应用分析
SQL on Hadoop
hadoop 2.x 的概述
- hadoop 包含的四大模块
==Hadoop Common== 为其他Hadoop模块提供基础设施。 ==Hadoop HDFS== 一个高可靠、高吞吐量的分布式文件系统 ==Hadoop MapReduce== 一个分布式的离线并行计算框架 ==Hadoop YARN== 一个新的MapReduce框架,任务调度与资源管理
上述可以看出Hadoop的重点就主要包含三部分,hdfs存储,MapReduce分布式计算过程,Yarn管理计算任务,包含了资源调度,任务协调,任务监控。
在这里还是要推荐下我自己建的大数据学习交流群:199427210,群里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据软件开发相关的),包括我自己整理的一份最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴加入。
- HDFS 服务功能
==NameNode== 主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件 权限),以及每个文件的块列表和块所在DataNode等。 ==DataNode== 在本地文件系统存储文件块数据,以及块数据的校验和。 == Secondary NameNode== 用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照
- YARN 服务功能
==ResourceManager== 处理客户端请求 启动/监控ApplicationMaster 监控NodeManager 资源分配与调度 ==NodeManager== 单个节点上的资源管理 处理来自ResourceManager的命令 处理来自ApplicationMaster的命令 ==ApplicationMaster== 数据切分 为应用程序申请资源,并分配给内部任务 任务监控与容错 ==Container== 对任务运行环境的抽象,封装了CPU内存等多维资源以及环境变量、启动命令等任务运行相关的信息.
- 离线计算框架 MapReduce
== map和reduce== map 阶段并行处理输入数据 reduce 阶段对map 结果进行汇总。 ==shuffle == 连接map 和Reduce 两个阶段 map task 将数据写到本地磁盘 reduce task 从每个map TASK 上读取一份数据 特点: 仅适合 离线批处理 具有很好的容错性和扩展性 适合简单的批处理任务 缺点明显 启动开销大,过多使用磁盘导致效率底下等。
==nutch==爬虫取文本数据; 数据是半结构化数据==flume==准备日志数据==Scribe==是Facebook开源的日志收集系统. 它能够从各种日志源上收集日志,存储到一个中央存储系统上,以便于进行集中统计分析处理==RDBMS==(关系数据库管理系统)管理和存放在数据库 ==sqoop==可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中==Oozie==是一个工作流引擎服务器,用于运行Hadoop Map/Reduce和Pig 任务工作流==Mapreduce==是主要操作逻辑和引擎, map是分配, reduce是合并==HDFS==是分布式文件存储系统==HBase==快速存储, 快速响应查询==Jaql== 是一个 JSON 的查询语言,用于简化 JSON 数据的建模和操作,主要用于分析大规模的半结构化数据。==Hue==是一个可快速开发和调试Hadoop生态系统各种应用的一个基于浏览器的图形化用户接口。==mahout==对数据进行分析; 我们要学习好如何使用好来分析; 提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。
针对上述的生态圈做一个简单的说明:
对于大数据开发的步骤,第一步当然是数据来源的来源,爬虫技术,mutch当然也可以使用诸如Python的其他框架,公司中常用的还有通过前端接口收集,flume日志采集。采集到的数据入hdfs文件,第二步数据采集之后,需要日志解析,日志解析公司一般会自己开发,实现方式可以是mapreduce计算实现原始日志简单清洗和入库hive。第三步是日志分析,通过简单的sql可以实现对业务数据分析,简单的编写sql如hivesql,sparksql可以进行计划,如何实现任务流管理就需要用到oozie,数据的分析计算结果最后结果写入高性能,读写数据快的数据存储系统,例如关系型数据库mysql,sqlserver 或者HBase。以上基本的离线开发流程就。对于一些业务多维度的分析可能需要事先进行预计算比如使用kylin的cube。
对于实时的技术,一般的数据源是日志收集之后写入kafka,然后通过sparkStreaming或者Strom,现在比较流行的还有flink,这些框架都是基于内存去进行分布式计算,用空间换时间,达到实时的计算。
系统架构说明:
本系统架构基于真实的大数据平台构建:
基本的数据结构说明:
1.日志数据
来源:
1.APP的接口埋点或者其他渠道埋点
2.外部数据DB同步到hive
3.维度数据,用做于一些关联
对于日志数据可以分为两类,底层基础业务数据和维度配置数据。
业务数据量庞大,一般天,小时分区,维度数据可以使用拉链。也可以做mr同步。
2.计算引擎
如何实现各个不同位置数据的交互,比如hive到mysql或hbase的数据交换
3.计算依赖
如何实现一个工作流的计算oozie,sprak中的有向无环图,当然也可以自己实现计算依赖逻辑。
4.报表计算
报表计算过程平台管理,任务提交,计算频率等平台的治理和数据的结果展示。