阅读更多

0顶
0踩

数据库
引用
声明:本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅2017年《程序员》
作者:吕毅,链家网平台架构师。目前负责链家网大数据平台,之前曾负责链家网基础服务平台建设。
责编:郭芮,关注大数据领域,寻求报道或投稿请联系guorui@csdn.net。

链家网于2015年成立大数据部门,开始构建基于Hadoop的技术体系,初期大数据部门以运营数据报表需求、公司核心指标需求为主。随着2015年链家网发力线上业务,toB与toC业务齐头并进,数据需求量激增的情况也随之在2016年突显,数据量增至PB级。我们开始思考如何改变现状,如何高效支撑未来可预见的众多数据需求。

基于ROLAP技术的报表平台
链家网大数据部门成立之初,面对着零散的数据需求,最早期的办法是配置定时任务跑脚本,将结果通过邮件方式发送给需求方。2015年期间,随着运营数据需求的增加、希望查阅数据的人员增多,邮件的方式不方便人员间信息传递,并且查找历史数据也不方便,在技术上也因数据相关人太多导致邮件发送阻塞。因此,考虑到运营数据需求、公司核心指标需求相对固定,并且维度可枚举,特在2015年基于ROLAP技术方案,搭建了早期的报表系统。

图1 链家网早期的报表系统

早期的报表系统,由数据开发工程师提交数据任务,通过配置Oozie定时任务,定时的基于Hive数据做ETL过程,将报表系统所需的数据推入关系型数据库(MySQL)中。该系统从接收需求到报表系统里看到数据,需要比较长的一段时间过程,涵盖过程如下:
沟通需求,由数据开发工程师理解数据需求;
  • 对接数据,将数据源对接入HDFS;
  • 构造数据,将数据加工处理到Hive中,逐层由STG到ODG,再到DW层;
  • 数据任务,数据开发工程师根据需求方需求、DW层数据,编写基于Oozie的调度任务;
  • 发布任务,将Oozie调度任务发布到线上,定时执行,数据运行结果将被推送到MySQL;
  • 数据展示,由自研的报表系统,根据需求方展示需求,添加维度筛选能力,开发一些对结果数据的再加工程序,部署上线。

流程过程较长,角色间传递信息较多,前后依赖太强,都是制约当时报表系统快速产出数据的根本问题。该系统在之后的迭代中,通过增加选取MySQL数据、自助勾选维度,实现了自助报表系统,命名为“地动仪”并服务至今。然而,流程长、传递信息多、依赖强的问题依旧没有根本解决,对于逐渐增多的数据分析需求,更不能及时响应。
地动仪在一定程度上解决了邮件方式的弊端,提供Web界面化的查询,支持历史查询和多人使用。但对于非订制化需求、数据探索需求、数据分析需求支持的力度并不好。我们开始规划更好的数据分析平台服务。

链家网大数据平台的诞生
大数据工作划分,通常分为大数据应用、大数据平台两大部分。常见的大数据应用形态有数据挖掘、数据分析、个性化推荐、数据报表等,大数据应用形式相对更多样,可以根据业务不同而有具体的大数据应用产品。大数据平台,在一家公司中则应相对统一,以方便做好公司统一的数据接入规范、统一的数据管理机制、统一的数据处理能力等,做好数据管控。
因此,在对历史大数据架构进行梳理后,链家网将原有大数据部门工作细化,将大数据应用交由业务线团队或其他技术团队承担,便于业务线开展多样化的数据工作,同时将大数据部门聚焦于构建公司统一的大数据平台,负责公司内各部门数据相关需求的统一规划与实现,建设公司统一的数据仓库与数据服务。至此,链家网大数据平台团队诞生,我们开始着手建立平台,支持好未来公司内对数据使用上的各类需求。

在2016年中期,通过梳理各部门数据需求,将数据需求分类为:数据探索需求、报表需求、数据分析需求、数据API需求这四类。为满足这些数据需求,我们相应规划了下面这些数据产品:
  • AdHoc系统:解决数据探索性需求,基于SQL查询,查询速度要求高;
  • 地动仪:解决报表需求,承接较固化报表需求、公司级报表需求;
  • BI产品:解决数据分析需求,支持多维查询,支持数据分析中常用的下钻、上卷等功能;
  • 数据API:解决数据API需求,大数据API统一出口,支持各部门的格式化数据获取。

结合数据产品层面的规划,大数据平台在技术工作上做了重新规划,技术工作上划分出了四个部分:平台服务、数据管理、工具链与集群。其中平台服务包含报表系统、BI系统与大数据API;大数据工具链包括OLAP引擎、即席查询AdHoc系统、调度系统三部分;大数据集群层面除集群性能、稳定性工作外,还包括集群安全、集群资源隔离两部分;贯穿服务、工具链、集群三层的数据管理部分,更加关注数据治理,内含元数据管理、指标管理、数据权限管理三大数据管理工作。技术工作划分情况如图2:

图2 链家网大数据平台

大数据平台的建设过程,是由下而上逐步完成的。首先要有Hadoop集群,在有HDFS与Hive后,才能开展数据接入工作,才能基于集群建设工具链;当工具链部分的OLAP引擎构建好,才有上层BI、报表系统和数据API,只有AdHoc能力构建好,才能提供基于SQL的数据探索平台,工具链中特别需要建设好调度系统,才能在实现好数据ETL任务的同时,管控数据流向与数据关系。最后则是服务层面的建设,重心在于迎合需求的同时,服务做得更加易用。数据管理系统会穿插于整个大数据平台中。

大数据平台中衔接服务与集群的枢纽——工具链,正是整个平台能力的传送带,它肩负着将大数据能力输送到上层服务层的重任,也承担着上层多项服务被使用时的数据能力支持。

建设大数据平台枢纽——工具链
大数据平台内部工作,完全可以简单划分为集群与服务两部分,为何要在它们之间构建一层工具链层呢?由图1可以看到,原大数据架构中,因产品层面单一,数据从收集入HDFS后,数据流向单一,均由Oozie调度任务从Hive获取数据,并向上推送。考虑到平台服务层面的多个产品形态,数据流向也需扩展才能满足产品所需能力,而数据流的管理与集群工作强制规划在一起,太过生硬。故全新开辟一层工具链层,通过借助集群能力,通过或使用开源或自研,来扩展数据转换与输出的能力,提供更多种的数据流形式,以满足上层数据服务需求。

对于工具链层面的设计,我们按照数据流向设计了下图中的工具链结构:

图3 大数据工具链数据流向规划

数据探索类需求
数据探索类需求,即数据查询需求,若都基于Hive采用MapReduce运算,速度上会大大影响用户的使用体验,然而即席查询AdHoc技术方面,Facebook开源的基于内存计算的Presto进入了我们的视野,考虑到Presto与Hive均为Facebook开源技术,在SQL兼容性方面通用性更强,特对Hive、Presto、Spark在SQL on Hadoop方面进行测试对比:
引用
数据样本:2000万行数据集、7000万行数据集;
SQL样例:简单SQL(select count)、复杂SQL(线上真实SQL);
机器资源:
Hive:3台机器;
Spark:4个节点;
Presto:3个节点,每节点最大内存4G。

通过多次测试结果显示,在处理速度方面,Presto < Spark SQL < Hive,大部分情况下,Presto时间开销上远少于Hive SQL,速度优势稍微好于Spark SQL。考虑到公司内探索性数据查询需求由人发起,数量可控,Presto技术选型完全满足我们对响应速度的要求。故采用Presto引擎搭建AdHoc平台,AdHoc的Web界面我们通过自研,除基础的数据查询功能外,实现了数据导出、转发、生成报表等功能,其中生成报表功能与调度系统打通,将数据探索工作成果进一步延伸,由AdHoc发起的调度任务,则是使用MapReduce离线运算。关于Presto UI部分,Airbnb开源的Airpal界面简洁清晰,也是不错的选择。

图4 Airbnb开源的基于Presto的UI界面

数据分析类需求
数据分析性需求按照工作方式细分,还可以分为非技术人员使用Web工具分析数据、技术型人员直连Hadoop集群提交分析任务两种类型。前者更多是运营、研究院、产品线数据PM等角色使用,后者则是做数据挖掘、推荐的工程师们在使用,对于工程师们,我们内网开放集群运算能力,供工程师们提交任务,通过集群中的资源隔离保障大家的任务高效运行。工具链中,则更关注前者的分析类场景,如何方便地满足。

非技术人员的数据分析需求,相对于比较固话的数据报表型需求,指标、维度的组合上希望灵活性更高,并且有着下钻、上卷分析数据的需求,更多维的查询数据。因为分析工作一般是连续查询数据,所以对于查询速度也有一定的期望。

鉴于此,我们考虑通过预置数据的方式,通过空间换时间,来解决查询速度问题。对于多维查询需求,我们考虑通过构建多维Cube方案解决。这正是MOLAP解决数据查询问题的方式,而MOLAP方案的有限技术选型中,我们更看好Apache Kylin项目。

Apache Kylin项目的一些特性,匹配我们的数据需求以及我们当时的现状。数据需求已经梳理清晰,要快、要多维查询,Kylin项目对于已创建了Cube并构建好数据的数据集上,提供亚秒级的快速查询。并且Kylin还提供工具方便构建Cube、提供API方便对接上游BI产品。另一方面我们当时的现状是,海量数据库方面我们拥有稳定且调优过的HBase集群,这恰巧是Apache Kylin所依赖的数据库选型。综合这些情况,我们通过调研Kylin系统自身能力、Kylin与Sarku的对接情况,以及有Apache Kylin研发团队成员现场交流,逐步启动了基于Kylin的MOLAP引擎构建。预计不久我们将以Kylin为基础,为BI产品、数据API两项数据平台服务提供数据查询能力,以满足公司内的多维数据分析需求。

通过MOLAP建设,与原有地动仪ROLAP相辅相成,面向公司内有数据分析诉求的同事,提供更全面的数据分析平台。

调度系统
调度系统,是大数据工具链的核心环节,乃至是大数据平台化的基础。数据ETL任务完全基于任务调度在有计划地执行,数据任务的关系、数据血缘也需要基于调度系统的能力来自动化构建。

在链家网大数据平台建设之初,最先对原有的Oozie调度系统进行调研分析,发现Oozie与Hadoop集群绑定太过紧密,任务间的状态传递必须依赖HDFS中的文件状态来传递任务状态,这导致一些数据任务需要我们用Hack的手段处理,例如我们的任务是定时“先将Hive数据导到MySQL,再运行一个远程服务器脚本对MySQL统计数据,再将脚本统计的结果发送到xxx@lianjia.com邮箱”,这样的需求,整个过程没有产生HDFS文件的必要,但在使用Oozie时,我们不得不在每一步执行完后在HDFS中创建文件以便传递信息。

我们已经可预见未来数据任务需求会有所增加,随之而来的数据任务种类也将会扩充,若不做调度系统上的改变,大数据平台的数据任务能力,将会受限于Oozie的使用场景,这与平台设计理念不符,工具应当更好的支持平台建设,而非阻碍平台发展。所以在那时,我们决定自研大数据调度系统,在参考了行业内一些调度系统解决方案的同时,我们梳理了现有的任务种类与可能的未来需求,逐步排期的实现调度系统必须的两大环节:调度环节、执行环节,并且抽象的设计了他们之间的传输协议,为未来扩展新型执行单元提供了可能。

图5 调度系统前端功能


图6 调度系统后端能力

工具链作为数据驱动纽带,工具化的为上层平台服务提供各类能力,上层平台服务包装大数据平台能力,开放给用户使用。围绕着工具链的建设,大数据平台较改造前的数据加工模式,提供了更丰富的上层数据服务。通过Apache Kylin技术构建MOLAP引擎,与原有的ROLAP引擎相辅相成,搭配基于Presto的AdHoc服务,提供了一站式的快速数据查询、分析平台,并且提供了统一的大数据API,为公司各业务线、数据分析团队、数据应用方提供高可用稳定的数据格式化出口。随着调度系统的逐渐成熟,工具链层面的建设逐渐完善,平台化的大数据服务,整体较从前有全面的改善。链家网的大数据工作逐渐从报表阶段,步入了平台化自助服务的阶段。

技术挑战
当然,在建设大数据工具链的过程中,依然还有不少技术问题需要攻坚。例如Presto中还未完全兼容Hive SQL语法,需要涉及到Presto SQL解析器部分的调整工作,又例如Kylin如何能够根据指标系统中的指标自动构建Cube,需要考虑打通指标系统与Kylin系统,或通过自动化的程序来避免数据开发人员的重复操作。工具链中的技术挑战还有不少,但我们清晰的发展路线,让我们有坚定的信心去逐个攻克,也欢迎有志之士加入,一同建设链家网大数据平台。

大数据平台的规划
目前大数据工具链的技术问题,在陆续解决的同时,我们的平台服务、集群、数据管理相关的工作也都在紧锣密鼓的进行中。整体大数据平台长线的一些工作,也在逐渐规划着,例如自动化构建数据血缘、调度系统中任务DAG实时关系图、MOLAP与ROLAP的融合、数据API的全自助服务等技术问题。相信未来半年到一年的大数据平台发展过程中,在将平台服务包装的更为优秀的同时,将会积累更多实用的技术沉淀,促成公司、团队、个人共同成长与进步。

在建设链家网大数据平台期间,我们与百度、美团、滴滴和Kyligence有着良好的沟通交流,他们在大数据平台上的沉淀与经验在平台设计规划阶段,对我们的帮助很大,我们也将会在建设链家网大数据平台的同时,通过技术分享的方式与行业内大数据相关的朋友分享交流,帮助营造行业内大数据领域共同进步的良好氛围。

订阅2017年程序员(含iOS、Android及印刷版)请访问 http://dingyue.programmer.com.cn

【订阅咨询】QQ:2251809102 电话:010-64351436
  • 大小: 23.4 KB
  • 大小: 67.8 KB
  • 大小: 42.6 KB
  • 大小: 244.7 KB
  • 大小: 19.2 KB
  • 大小: 19.7 KB
  • 大小: 72 KB
  • 大小: 148.2 KB
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 给青年人的勉励

    你当竭力   你当竭力在上帝面前得蒙喜悦,作无愧的工人,按着正意分解真理的道。(提后2:15)   青年人特别应该觉察必须训练自己的智力,并且把握每一个使才智增长的机会,俾为那位因他们而舍弃自己宝贵生命的主作得蒙悦纳的服务。而且但愿任何人都不要犯这样的错误:以为自己已经受了那么高深的教育,大可不必再从书本或自然中研究了。   但愿人人都善用上帝按他的美意所赐予的每一个机会,以获得在启示和科学

  • FC 魔天童子 金手指

    0540-1-14-HP減らない 0541-1-2F-使いのHP減らない 0074-1-99-REST99回 0075-2-9999-お金最大 007D-1-10-無敵(穴に落ちたりしたらOFF) 009A-1-0-いぬぶえ所持 0099-1-0-てんけんじゅっぽう(ひのもと)所持 009B-1-0-鏡所持 0079-1-1-きそくほうじゅ(かっとびぐつ)所持 0762-1-14

  • [转载]无法不对你残酷

     作者/安宁(《中国青年报》2005年12月18日) 弟弟第一次到北京读大学的时候,与我是同样的年龄。在父母的眼里,17岁,只不过是个孩子,而且,又是没出过县城连火车也没有见过的农村少年。母亲便打电话给我,说要不你回来接他吧,实在是不放心,那么大的北京,走丢了怎么办?我想起这么多年来,一个人走过的路,很坚决地便拒绝掉了。我说有什么不放心的,一个男孩子,连路都不会走,考上大学有什么用?! 

  • javaScript快速入门之运算符

    一元运算符 自增和自减运算符 逻辑运算符 赋值运算符关系 相等运算符 条件运算符运算符的优先级运算符的优先级

  • ❤️撸完这个springboot项目,我对boot轻车熟路!【源码+视频都开源】【强烈建议收藏】❤️

    上次给大家分享了一个springboot+vue的校园招聘系统,视频教程加项目源码,都是开源的,应该说很香了,今天再给大家分享一个不错的springboot的项目。 老规矩,开源,开源,开源!!! 金九银十来了,小伙伴们,冲啊!前面已经整理了很多的面试题,拿去学习吧! 1,❤️爆肝!整理了一周的Spring面试大全【含答案】,吊打Java面试官【建议收藏】!❤️ 2,❤️肝完了,一天掌握数据结构和算法面试题,吊打面试官,建议收藏❤️ 3,❤️集合很简单?开什么玩笑?肝了一周,全是精华,

  • [转贴].net中即时消息发送的实现

    用了我一下午的时间终于写完并整理好了利用.net来发送即时消息的材料(当然了,还有上午的数据库设计:)    数据库设计:info表:id fromstu_id tostu_id content term   其中id是主键,fromstu_id是发送信息的用户的学号(这是和我做的学友录连在一起的),tostu_id是接受信息的用户的学号,content是消息的内容,term是判断是否为新消息。

  • Linux-固定usb转网口名称

    udev 是一个用户空间系统,它使操作系统管理员能够为事件注册用户空间处理程序。udev 守护程序接收的事件主要由 (Linux) 内核生成,以响应与外围设备相关的物理事件。因此,udev的主要目的是对外设检测和热插拔采取行动,包括将控制权返回给内核的操作,udev 可提供所需的基础结构来动态维护 /dev 目录中的设备节点文件和符号链接。udev 规则提供了将外部工具插入内核设备事件处理的方式。

  • 安装liveCD lfslivecd-x86-6.3-r2160.iso 到虚拟机中

    转载请注明。谢谢!        这篇文章的主要步骤是: > 进入liveCD > 格式化分区(hda1, hda5, hda6), 最后系统装在hda1上 > 把liveCD上的文件系统拷贝到分区 /dev/hda1上 > 安装grub 和 内核 > 重新启动 > 进入一些设置 > 添加2个快捷脚本 补充: 网上还有另外一篇文章,也是把liveCD安装到虚拟机中。 不同的是,他是通过liveCD

  • 99SE

    我需要币

  • (WIP)Start my first kernel journey (by quqi99)

    作者:张华  发表于:2016-03-22版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明( http://blog.csdn.net/quqi99 )第一件和kernel相关的work, 在HP DL360p Gen8服务器上运行OpenStack时发生crash。先排除APIC问题APIC(Advanced Programmable Interrupt C

  • Linux-固定usb转串口名称

    usb转串口

  • IPv6 OSPF and IPv6 BGP -- ipv6 unicast-routing

    IPv6 OSPF and IPv6 BGP -- ipv6 unicast-routing

  • mysql主从复制

    二个服务器,我这里用虚拟机.131为主数据库,135为从数据库 1.配置ip地址,关闭防火墙systemctl disable firewalld 2.进入主数据库的my.cnf文件(每个人安装的目录可能不同,一般在/etc目录下面,如果不知道可以find / -name my.cnf查找位置) 添加二个参数 log-bin=mysql-bin(主从复制依赖于二进制日志文件,简称为b...

  • The Rust Programming Language 笔记

    镜像资源 新建一个文件 ~/.cargo/config [source.crates-io] replace-with = 'tuna' [source.tuna] registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git" 构建帮助文档 cargo doc --open 语法 :: 语法 表示静态方法调用, 例如: String::new(), 这个静态方法是定义在 structure 中的一个 function

  • Linux 并发服务器雏形总结

    如下介绍一个并发回射客户端/服务器的雏形,所谓回射:就是客户端输入一条数据,服务器端读取并显示,然后服务器端再把刚读取的信息发送回客户端进行显示。示意图如下: 所谓并发服务器:就是一个服务器可以同时为多个连入的客户端提供服务,示意图如下: 如下主要介绍两种实现并发回射服务器的方式,一种是通过子进程方式实现并发,一种是通过I/O多路转接实现并发。 并发服务器(1)[子进程方...

  • 算法竞赛进阶指南第一章题解

    例题:CH0103 最短Hamilton路径 题意: 给定一张n(&lt;20)个点的带权无向图,点从0~n-1编号,求起点0到终点n-1的最短hanmilton路径; h路径的定义为0~n-1不重不漏的经过每个点恰好一次 解法: 二进制状态压缩f(i,j)表示点被经过的状态对应的二进制数为i,且目前处于点j时的最短路径。 最终目标为f((1&lt;&lt;n)-1,n-1)...

  • jxl 统计图_人教版试卷|小学数学,数学试卷下载_21试卷_21世纪教育网

    MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_NextPart_01D6EB7A.25CCBB00" ????????????????????????????Web ??????????????????????????????????????????????????????Web ???????????????...

  • 20170508测试

    问题 A: lyklyk?lyklyk! 时间限制:1 Sec内存限制:256 MB 题目描述 Lyk得到了一个1~n的全排列。Txm每次会交换第i个数和第j个数,对于每次交换,lyk需要回答该全排列的逆序对数为多少。“1、2、3、4......248289469!”lyk如是回答道。“最后答案取模2......” 输入 第一行一个数,n第二行...

  • facebooks pygraph是一个用于捕获大型图中的知识的开源框架

    I recently started a new newsletter focus on AI education. TheSequence is a no-BS( meaning no hype, no news etc) AI-focused newsletter that takes 5 minutes to read. The goal is to keep you up to date ...

  • 少年情怀

       夜深如海  默默独坐   静静回忆  久久沉醉    游离虚幻  思绪无边无际—夹着丝丝忧伤轻愁飘向那久远的时光隧道里   隐隐约约陈旧的画面又回到了眼前      在那条     如缎带般的碎石子公路上   两个充满幻想的青春少年       曾无数次   在放学后的夕阳暮色中     背着书包      肩并肩行走在回家的路上   那份笑容  那份纯真m    那份快乐 

Global site tag (gtag.js) - Google Analytics