微店的大数据平台建设实践与探讨
微店是全球领先的移动电商网络,创造了一个便利的手机购物环境,目前有超过3000万的店主使用微店销售商品。微店大数据架构师王锋,将重点描述大数据处理平台中数据采集、传输、存储、分析过程中的公共基础技术部分。
“人类正从IT时代走向DT时代”,2014年三月在北京举行的一场大数据产业推介会上,阿里巴巴集团创始人马云在主题演讲中发表了他的这一观点。这个观念提法很快就被广泛传播开来,并被人们所接受。这里笔者不准备大谈DT时代,但是相信DT时代一定是以数据处理为核心的,因此大数据技术在这里有至关重要的地位,很有幸笔者及各位看官正在这个领域努力。
曾看到一篇文章,里面有个观点,“DT时代的骨骼——大数据处理平台”,反映了大数据处理平台在互联网或者移动互联网公司的重要性。大数据处理平台其实包含了整个大数据处理过程,它承载了从数据采集、传输、存储、分析挖掘(离线 OR、实时 OR、即席查询)、可视化、价值体现的整体流程。这些在大的互联网公司,尤其以BAT为首,已经逐步成熟,而且价值体现不断放大。而在初创公司或者具有一定规模的创业公司,大数据处理平台的基础设施或开始搭建,或处于较初始的状态,或者在逐步规范中。可能有人会有另外的想法:我们公司规模没有那么大,有必要整这么一套么?是的,如果数据量很小,每天新增数据(比如应用日志)都是MB级别,或者GB级别,而以后也不会有爆发式增长,也没必要太折腾。无论如何,有一个趋势非常明确,随着公司业务发展,数据量的爆发式增长,大数据处理平台的建设势在必行。
大数据处理平台建设是对数据采集、数据传输、存储、分析挖掘(离线 OR 实时 OR 即席查询)、数据展现、价值体现的整体流程梳理。微店是目前全球领先的移动电商网络(在微店生态体系,公司旗下还有口袋购物、微店全球购、微店买家版、今日半价、YouShop等5大优势平台),创造了一个便利的手机购物环境,是全球年轻人喜爱的移动购物网络。目前有超过3000万的店主使用微店销售商品,在这样的背景下,技术部门开发部署的各种应用每天需要服务巨量日志数据,这些数据既包含用户的行为特征、兴趣爱好,也包含了应用的服务质量情况,这些都是要进行深度分析发掘的数据,重要性不言而喻。基于此,负责大数据基础设施建设的我们承担起了大数据处理平台的建设任务,为业务分析部门提供公共基础支撑。接下来,本文将重点描述大数据处理平台中数据采集、传输、存储、分析过程中的公共基础技术部分。
随着业务的爆发式增长,公司部署了各种各样的应用服务,新的服务也不断被开发出来。日志数据由应用服务产生,应用服务由业务开发人员开发,由业务运维人员部署维护;分析挖掘这些数据的是数据分析人员、推荐算法开发人员等等,在实际工作过程中,由于各方关注角度不同,带来很多不必要的沟通交流成本。数据集(DATASET)正是为了在数据采集、传输、存储、分析过程中,数据关联各方对目标数据有统一的称谓、同时规范数据的使用。
图1 数据集的一些重要属性
图1显示了数据集的一些重要属性,原则上由业务开发部门申请创建新的数据集,申请者作为数据的owner,同时标识出其所属产品线、项目、数据类型,拟采用的数据收集方式、存储方式,数据规模情况预估以及要存储的时间。其中数据类型包含www日志(access log)、应用日志、错误日志、MySQL日志等等;数据收集包括:Agent实时收集、Rsync传输、HdfsClient上传、API推送;存储方式分为:HDFS、分布式消息队列Kafka、实时数据搜索Elasticsearch、第三方存储;数据规模预估可以对要收集的数据规模进行评估,传输层及存储层是否可以承载的一个初步判断。存储时间确定该数据集保存时间,到期后由平台方对数据集统一清理。
在数据集创建后,由数据采集端采集,经由数据传输层进入数据存储层。在这个过程中,category是数据集的一个代名词。category最初是Facebook开源的scribe配置中一个很重要的属性,标识数据传输对象,这里我们沿用了这个单词,并从开始到存储落地全程被携带。
数据集的划分是很重要的一个过程,决定了数据如何传输、存储,并被如何分析处理。一般由业务部门及分析部门确定。数据集内数据格式应一致,方便进行处理。但在实际场景下,尤其创业公司,单个业务部门内数据格式也未必统一,数据散落在多个日志文件中,单个体积相对较小,而分析人员也会关注这些数据,这种情况下为了方便处理,可以将这些划分到一个数据集下,同时在采集端对数据进行标注。典型方法,如在实时采集时日志行中加入header,由文件名或者其他特征区分数据。就像万事万物有其生命规律一样,数据集也不例外。图2描述了数据集的生命周期。
图2 数据集的生命周期
某一天,一个分析人员兴冲冲过来,“某某某,我要分析xxx服务打出的日志,xxx服务昨天上线了,这个需求非常重要,balabalabala……”。然后我们告诉他,让业务开发部门申请个数据集吧,数据集传输过来你就可以分析了:)。
数据集在创建后,所属产品线、项目、数据类型,拟采用的数据收集方式、存储方式,数据规模情况预估以及要存储的时间一一确定。以Agent实时采集为例,数据采集流程如图3所示。
图3 数据采集流程
目前大部分业务的日志数据采用这种方式采集。DataAgent基于Flume实现,自开发Flume插件Tailsource支持多数据集、多文件实时tail,DataAgent具有以下特性:
DataAgent采集方式具体使用Flume,何种channel由数据类型、存储方式、数据量及业务场景综合确定。根据我们的测试,单个Agent,MemoryChannel在很多场景下,都可以达到6w+/s;KafkaChannel可以到到2.5w-3w+每秒,而FileChannel最高在1w/s,有些场景下甚至在5000/s以下。对应用日志,我们需要保证数据的高可靠性传输,同时需要保证效率,所以目前大量采用tailsource+Kafkachannel方式;而访问日志主要采用tailsource+DualChannel+AVROSink方式。
一些业务数据也会采用Rsync方式(存储方式仅限于HDFS存储):在数据集确定后,大数据组分配rsync权限,由业务运维人员使用Rsync经过中间LVS层,将数据推送到databus指定的Rsync model(由category确定),最后由自开发的HADOOPLoader组件upload到HDFS。
采集层支持API推送,一些少量数据场景下,业务端可以直接调用我们提供的数据API,将数据直接写入KAFKA。
另外支持业务端直接使用HDFSClient写入HDFS,这种方式目前主要存在于以前遗留的一些数据收集上。因为Hadoop集群使用白名单方式对写入端IP进行授权,如果存在大量的这类客户端,会严重降低数据的传输效率,同时提高了客户端的维护成本。
业务运维人员部署DataAgent,或者其他收集方式后,数据集进入数据传输层。图4是数据传输层的整体架构。
图4 数据传输层的整体架构
DataBus统一负责对数据集的中间层传输、数据流转及数据落地,数据从业务端机器发出后中间经过LVS负载均衡层,进入Databus。Databus由几部分组成,包括:
支持的存储方式包括:
其中,数据写入Kafka的topic由数据集(或者category)唯一确定,分析开发人员在自己的kafka consumer端配置topic为category即可消费数据。
对于向Elasticsearch的写入格式化数据需求,在Databus端,我们提供了具有较强通用性的支持。基于Flume ElasticsearchSink,修改源码,支持正则及分隔符的字段切割,并可配置,将Databus传输过来的数据集原始数据,根据配置的解析方式及字段,格式化数据为结构化数据适配Elasticsearch,写入ES集群。
除访问日志及应用日志以外,Databus支持以syslog方式收集网络设备数据。交换机设备的稳定对业务服务至关重要。以前我们缺乏对交换机的监控,在6月底,我们专门对公司内各机房几乎所有交换机以syslog方式收集设备日志到Kafka,并对日志进行实时分析,发现异常及时报警。
绝大部分数据需要写入HDFS数据长时间存储。我们使用改造后Flume HdfsSink写入HDFS。原生的HdfsSink有一些缺点,我们对部分源码进行改造:
目前Databus写入HDFS或者Kafka配置比较繁琐,后面需要针对此进行优化。
HadoopLoader是我们自行开发的组件,用以定期扫描Rsync推送过来的本地磁盘数据集存储目录,根据统一存储规范上传至HDFS。简单流程如下:
客户端使用API post数据目前还在开发验证阶段,暂时不便透漏更多。Databus支持向第三方转发,基于Flume replica策略配置实现。
上文已经提到,数据集在Databus中支持向HDFS、Kafka、Elasticsearch写入数据。这里主要对HDFS存储及公共分析平台搭建重点介绍。
对于海量数据的分布式存储,Hadoop/HDFS已经成为事实标准,目前不仅在各大互联网公司,甚至在电信领域以及银行也都开始陆续落地。Hadoop2对比Hadoop1,无论在HA、namenode扩展性、权限控制、资源调度及分配、资源隔离等都有极大提升。目前我们使用Hadoop 2.6.0作为公司最新集群使用版本,并对已知的重要bug打了patch。
相信在很多公司,尤其是创业型公司,初期业务快速扩张,为了方便,内部存在多个集群,且集群规模可能都不是很大,各业务使用的集群版本可能也不一样,相互依赖也很少。初期的散列部署结构,可以轻松应对业务的迅速发展。随着业务的逐步发展,各个业务部门数据共享需求越来越强烈,同时数据依赖关系也越来越复杂,分析数据中集群间数据来回搬动越来越多,同时随着数据量的迅速猛增,各集群存储空间压力加大,这时集群间资源整合就越来越必要,散列的集群部署结构阻碍了数据的共享,增加了数据处理过程外的许多数据迁移环节,降低了数据处理的性能,并且不利于集群资源的最大化利用,集群管理成本太高。曾见到有个业务每天将近20个TB的数据在多个集群间来回折腾的案例(并非多机房灾备),十分典型。
在微店同样如此,单个机房内存在着若干个大大小小的集群,集群规模在几个节点到近百个节点不等,最小规模才4个节点,版本也不近相同。资源整合尤为重要,同时兼顾各业务部门的效率。为大家谋福利,才能更好的推进资源整合工作。在实际整合过程中,集群不同的业务处理类型,计算引擎,决定如何去资源整合。我们整合的原则是存储共享优先,计算类型分类,兼顾特殊业务需求。在此原则下,我们多个集群将共享统一的HDFS存储资源,解决数据来回搬运的问题,同时各个集群统一版本,方便集群管理;按照计算类型进行整合,整合后将会有:
整合后,集群使用统一的HDFS集群(规模300个节点),各计算集群物理隔离,服务器类型单独配置,有利于成本节约。
存储共享后,数据的存储规范、数据安全访问、读写权限规范等亟待建立。同时需要有统一的供数据分析开发人员使用的大数据处理平台Portal,作为唯一的用户授权、元数据访问、提交并管理作业、权限申请、集群资源使用情况查询、资源限额等等功能的入口。图5是对资源整合后的数据存储及分析处理流程简图。
图5 资源整合后的数据存储及分析处理流程
分析开发人员由统一Portal访问大数据基础资源,支持用户对有权限的数据集查询数据集属性信息、数据集数据;按条件查找数据集、权限申请;支持权限的精细化管理(如业务组内权限分配);作业管理(提交、运行、停止离线OR实时分析任务、Spark作业等等)、数据流转关系;查看资源使用情况报表等等。提交的作业由作业调度中心进行调度;支持公共UDF类库。元数据管理提供对业务数据仓库元数据的共享支持。
当前情况下,存在着很多客户机(任务提交机),用来提交作业。客户机必须经过平台管理方授权才可访问集群。
分析开发人员对数据集进行分析处理,需要经过数据集或Hive库表的授权,并提交到指定的队列(由集群管理房提前建立,对分析人员透明)。主要包括:
1.客户机授权。访问Hadoop集群的服务器称为客户机,授权才能访问。
2.用户及用户组。当前账号沿用Linux的user及group;将来会使用LDAP;用户组按照业务部门或产品线划分,灵活支持业务方的权限需求。
3.数据集授权。对数据集有读/写权限才可进行相应操作(得益于hadoop2.4新增的acl特性)。
3-1. 原始数据:Owner为超级管理员,业务部门只允许有读权限;生命周期由超级管理员统一管理。
3-2. 归档数据:为老数据(>6month),统一使用LZMA压缩,提高压缩比。
3-3. 结果数据:Owner为业务方,建议使用统一存储结构统一管理。
3-4. 用户目录:Owner为业务方,采用容量配额管理。
3-5. tmp目录:都可读写,存放临时数据,由管理方定时清理。
4. Hive服务授权。统一的Hive MetaStore服务,按照业务部门或产品线对DB及表划分权限,并配合使用HDFS授权。
5. 队列授权。按照业务组划分队列,并分配资源;支持队列嵌套。【注:Hive原生代码无法做到超级管理员角色,需要自行修改代码实现。】
大数据处理平台的最后一环无疑是监控。监控像是我们的眼睛,无时无刻盯着大数据平台的整个处理流程,当将要出现问题时触发报警,平台管理人员及时切入避免故障发生。我们统一使用Ganglia从采集端、传输层到存储层、分析层的基础资源指标、应用指标写入Ganglia,并使用Nagios进行报警。图6、图7分别是平台下各基础组件的监控布局及DataAgent端按业务分类监控。
图6 平台下各基础组件的监控布局
图7 DataAgent端按业务分类监控
由于时间仓促,未能有更多的时间校对,文章中难免有纰漏,欢迎看官指正。另外微店正在面临数据爆发式增长,大数据技术、Hadoop相关开发人员急缺,有志于大数据方向,并且乐于深耕的技术人,欢迎将简历砸来,邮箱地址:wangfeng@weidian.com。
作者简介:王锋。曾任职并负责新浪研发dip分析平台架构设计、开发工作,承载了新浪及微博各产品线的离线、实时等各类业务分析需求。目前任职微店大数据架构师,负责微店大数据(hadoop)基础技术架构及服务运营,并负责完成业务类及运维类指标分析需求,逐步构建微店的监控分析平台。
数据分析咨询请扫描二维码
在准备数据分析师面试时,掌握高频考题及其解答是应对面试的关键。为了帮助大家轻松上岸,以下是10个高频考题及其详细解析,外加 ...
2024-12-20互联网数据分析师是一个热门且综合性的职业,他们通过数据挖掘和分析,为企业的业务决策和运营优化提供强有力的支持。尤其在如今 ...
2024-12-20在现代商业环境中,数据分析师是不可或缺的角色。他们的工作不仅仅是对数据进行深入分析,更是协助企业从复杂的数据信息中提炼出 ...
2024-12-20随着大数据时代的到来,数据驱动的决策方式开始受到越来越多企业的青睐。近年来,数据分析在人力资源管理中正在扮演着至关重要的 ...
2024-12-20在数据分析的世界里,表面上的技术操作只是“入门票”,而真正的高手则需要打破一些“看不见的墙”。这些“隐形天花板”限制了数 ...
2024-12-19在数据分析领域,尽管行业前景广阔、岗位需求旺盛,但实际的工作难度却远超很多人的想象。很多新手初入数据分析岗位时,常常被各 ...
2024-12-19入门数据分析,许多人都会感到“难”,但这“难”究竟难在哪儿?对于新手而言,往往不是技术不行,而是思维方式、业务理解和实践 ...
2024-12-19在如今的行业动荡背景下,数据分析师的职业前景虽然面临一些挑战,但也充满了许多新的机会。随着技术的不断发展和多领域需求的提 ...
2024-12-19在信息爆炸的时代,数据分析师如同探险家,在浩瀚的数据海洋中寻觅有价值的宝藏。这不仅需要技术上的过硬实力,还需要一种艺术家 ...
2024-12-19在当今信息化社会,大数据已成为各行各业不可或缺的宝贵资源。大数据专业应运而生,旨在培养具备扎实理论基础和实践能力,能够应 ...
2024-12-19阿里P8、P9失业都找不到工作?是我们孤陋寡闻还是世界真的已经“癫”成这样了? 案例一:本硕都是 985,所学的专业也是当红专业 ...
2024-12-19CDA持证人Louis CDA持证人基本情况 我大学是在一个二线城市的一所普通二本院校读的,专业是旅游管理,非计算机非统计学。毕业之 ...
2024-12-18最近,知乎上有个很火的话题:“一个人为何会陷入社会底层”? 有人说,这个世界上只有一个分水岭,就是“羊水”;还有人说,一 ...
2024-12-18在这个数据驱动的时代,数据分析师的技能需求快速增长。掌握适当的编程语言不仅能增强分析能力,还能帮助分析师从海量数据中提取 ...
2024-12-17在当今信息爆炸的时代,数据分析已经成为许多行业中不可或缺的一部分。想要在这个领域脱颖而出,除了热情和毅力外,你还需要掌握 ...
2024-12-17数据分析,是一项通过科学方法处理数据以获取洞察并支持决策的艺术。无论是在商业环境中提升业绩,还是在科研领域推动创新,数据 ...
2024-12-17在数据分析领域,图表是我们表达数据故事的重要工具。它们不仅让数据变得更加直观,也帮助我们更好地理解数据中的趋势和模式。相 ...
2024-12-16在当今社会,我们身处着一个飞速发展、变化迅猛的时代。不同行业在科技进步、市场需求和政策支持的推动下蓬勃发展,呈现出令人瞩 ...
2024-12-16在现代商业世界中,数据分析师扮演着至关重要的角色。他们通过解析海量数据,为企业战略决策提供有力支持。要有效完成这项任务, ...
2024-12-16在当今数据爆炸的时代,数据分析师是组织中不可或缺的导航者。他们通过从大量数据中提取可操作的洞察力,帮助企业在竞争激烈的市 ...
2024-12-16