大数据中心平台一般是三个部分:大数据、超算、云计算,三个部分进行混搭以满足不同数据处理场景。本人目前接触的为大数据,大数据正常分为三个模块: 1)大数据平台建设目前是Hadoop平台(java技能,接触最多的是HW的FI大数据业务平台); 2)大数据计算(数字敏感性,常用计算语言HQL、CQL、Scala) 3)大数据挖掘(算法技能,常用实现语言python)
目前因为岗位需要,目前在学习模块一二,模块三正常是大数据分析师进行处理!Hadoop平台适用于对非结构化数据的分析,如图片检索,文本检索等,以及通过各类挖掘算法实现对有关业务数据的预测分析功能。
Hadoop具有的亮点,例如: 1)分布式文件系统:非结构化数据(文本)存储能力,如HDFS; 2)NoSQL数据库:提供海量数据存储库,满足海量数据点查询使用需要; 3)全文索引库:面向全文查询提供分布式索引处理和存储能力,如Solr组件; 4)分布式关系型数据库(hive)分布式数据库:面向数据库应用,提供分布式数据库存储能力; 。。。。。。 有兴趣的话研究一下hive和hbase的相同和不同点
计算分析能力是整个大数据分析处理平台的核心,就是数据挖掘也是先通过编写计算算法,嵌入平台进行数据的时间粒度的计算。 常用的模块使用类: 1)查询检索:基于NOSQL的KV查询(Hbase/Redis)、SQL引擎查询(SQL/Elk等)、全文检索(Solr)。 2)分析挖掘:离线、内存迭代分析挖掘能力;如MR/Spark/算法模型(MLlib)挖掘分析。 3)流处理:流处理提供基于分布式计算;treaming和Storm能力。 4)文件管理:基于大数据分析处理平台的非结构化文件提供基于Hbase或HDFS在线文件管理。
目前成熟计算技术 1)离线批处理计算:MapReduce:HQL 2)内存迭代计算:spark:Scala 3)流式计算:Storm:CQL
MR是一种可用于数据处理的编程模型,实现该离线任务可以通过各种语言实现 java、Python、c++等等。 在MapReduce流程中,map的输出经过shuffle过程聚集成后会交给reduce。所以从设计好的reduce输入可以反推出map的输出key应为数据,value任意。继续反推,map输出数据的key为数据,而在这个实例中每个数据代表输入文件中的一行内容,所以map阶段要完成的任务就是在采用Hadoop默认的作业输入方式之后,将value设置为key,并直接输出(输出中的value任意)。map中的结果经过shuffle过程之后交给reduce。reduce阶段不会管每个key有多少个value,它直接将输入的key复制为输出的key,并输出就可以了(输出中的value被设置成空了)。
对于单一的业务处理,可以通过编写健壮的代码进行定时MR的JOB任务进行相应数据的结算。若业务繁杂,需要定时获取多种数据采集分析,则通过代码实现各个JOB维护成本太高。在Hadoop2.0完美解决该问题,采用HQL自动生成数据的mapreduce任务。 Hive是如何将SQL转化为MapReduce任务的,整个编译过程分为六个阶段: (1)Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree; (2)遍历AST Tree,抽象出查询的基本组成单元QueryBlock; (3)遍历QueryBlock,翻译为执行操作树OperatorTree; (4)逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量; (5)遍历OperatorTree,翻译为MapReduce任务; (6)物理层优化器进行MapReduce任务的变换,生成最终的执行计划。 若需要更深入的了解可以观看:https://tech.meituan.com/hive-sql-to-mapreduce.html
MR离线数据分析核心部分:业务分析中各个指标进行并行结算,一次结算多次调用。设计思路类似于数据建模,将一个需求进行拆分成易于维护的JOB,避免各个指标之间的耦合。 例如我要分析VIP一些行为:
支付、浏览。
它们共性是每个VIP的ID,我先通过检索统计VIPusers(hive的数据仓库特性导致用户状态表中各个情况数据都会保存在同一张hive表中,我们需要进行当期VIP用户的统计)。再统计相应的指标数据。若业务增加新的指标
VIPusers操作失败统计
,我可以直接引用相应时间粒度下的VIPusers用户数据进行指标开发。
HQL和mysql创建表和数据操作类似(SQL语句),注意点是,表数据的分区和桶概念,hive的Thrift,和优化调整(主要是减少JOB即MR任务数和JOIN优化)