大搜车已经搭建起比较完整的汽车产业互联网协同生态。在这一生态中,不仅涵盖了大搜车已经数字化的全国 90% 中大型二手车商、9000+ 家 4S 店和 70000+ 家新车二网,还包括大搜车旗下车易拍、车行168、运车管家、布雷克索等具备较强产业链服务能力的公司, 与大搜车在新零售解决方案上达成深度战略合作的长城汽车、长安汽车、英菲尼迪等主机厂商,以及与中石油昆仑好客等产业链上下游的合作伙伴。基于这样的生态布局,大搜车数字化了汽车流通链条上的每个环节,进而为整个行业赋能。

说到大数据,对于每个公司都不陌生。存储组件 HDFS,计算资源管理 YARN,离线计算 Hive、Spark、Spark SQL,列存储数据库 HBase,实时计算Spark Streaming、Flink等。这些组件在集群稳定情况下维护还算比较轻松,但是在公司快速发展过程中,集群容量的高速增长是不可避免的,作为大数据的设计者不得不从集群的成本和效益上思考两者的权衡。

大数据集群现状

大搜车目前大数据集群分为离线计算集群和实时计算集群,离线计算基于 Hive 和 Spark,实时计算基于 Flink,这两类集群分别基于 HDP 和 CDH 两套管理方式。早期离线计算选用了 HDP,实时计算后来选用 CDH 的初衷是多集群管理比较方便。由于离线计算引擎两者是有区别的,迁移会有兼容性问题,两套集群一直并存,集群间资源完全隔离。

集群维护痛点

数据量持续增长,成本一定的情况下做集群扩容耗时耗力

从 18 年初到 19 年 6 月份,离线集群从最初的数十个节点持续增长到上百个节点,数据量也从数十 TiB 增长了 10 多倍,并且保持每天数 TiB 的速度增加。在节省开支的情况下,每月做一次集群扩容,形成了与数据增长速度赛跑的情况。每月固定工作差不多变成了接受磁盘告警狂炸、扩容、均衡数据、再均衡数据的情况。遇到一些极端情况,比如阿里云在某个可用区没有数据类型设备资源而要新在另一个可用区创建,还会涉及到数据网段变更,就更复杂了。

  1. 存储所需资源跟计算资源不同步

在对离线集群数据做分析过程中发现,热点数据仅占大约 20%。在集群不断扩容的情况下,计算资源会有较大冗余,产生了不必要的成本,另外每次均衡会占用节点网络带宽,影响任务读写数据的速度。

  1. 跨集群数据同步

为了减少了实时任务和离线任务的相互影响,方便资源控制和云资源选型价值最大化,实时计算和离线计算集群在物理上做了资源隔离,难点也随之出现,实时和离线集群的数据无法实时同步,造成一些需求无法实现。

  1. NameNode内存持续增长,重启时间过久

在文件存储中,文件数量过多导致 NameNode 管理内存持续增加,重启一次时间过长,势必影响数据同步;并且在数仓层面不严加控制数据生命周期,资源占用也会越来越大,在对集群中整个资源做分析时也会受到影响。

选择 JuiceFS

针对以上这些问题,选取一款产品做底层存储势在必行。存储选择上作为大数据的基石,需要遵从如下特点:

  • 兼容Hadoop框架协议
  • 多版本集群兼容
  • 高吞吐、低延时
  • 支持深度压缩减少资源使用

在一开始,我们尝试使用阿里云的 OSS 作为冷备存储。在测试过程中,由于没有元信息管理,在数据维护上很受限制。后来接触到了 JuiceFS 这款产品,在选择上很是满足上述要求。对此我们做了一些性能测试(均基于实际场景提取业务逻辑)。

实际场景性能测试

以下测试均选取实际业务数据,数据大小是 where 查询条件不同选取的,仅做两个文件系统性能对比:

  • SELECT + INSERT 操作

从 3000 万左右表中分别选取不同量级数据插入另一张表结构一样的表中,横向对比 HDFS 和 JuiceFS 耗时。

  • SELECT + COUNT 操作

从3000万左右表中分别选取不同量级数据做 COUNT,横向对比 HDFS 和 JuiceFS 耗时。

  • SELECT + ORDERBY

对 3000 万左右表中数据做排序,横向比较 HDFS 和 JuiceFS 的耗时。

综上,JuiceFS 在查询、插入数据时多数耗时比较稳定且整体比HDFS耗时要少,在 SELECT 数据情况,多数性能相差不多极个别情况要优于 HDFS,单行做排序操作性能差不多。

成本控制

我们对比了采用 JuiceFS 和 HDFS 两种方案的费用(HDFS 集群保证存储冗余 20%)。在同等数据量(JuiceFS 会再次做深度压缩,压缩比大约为 3:1)和对等计算资源的情况下采用 JuiceFS 每月会比使用云主机部署 HDFS 节省至少 18%。

综合看 JuiceFS 的性能和成本都非常满足公司对成本和产品性能的要求。

未来展望

存储计算分离

大数据集群引入 JuiceFS,存储和计算实际上已经分离。大数据集群灵活弹性扩展计算资源已经成为可能,在凌晨业务低谷期可以将业务机器的计算资源调度给大数据集群。

以下是目前整个大数据集群架构:

后续可以结合计算存储分离和动态伸缩设计为如下目标架构:

与 Kubernetes 做结合,按需申请资源,节省成本和减少维护成本。

推荐阅读:

JuiceFS CSI Driver 的最佳实践

项目地址: Github (https://github.com/juicedata/juicefs)如有帮助的话欢迎关注我们哟! (0ᴗ0✿)

JuiceFS 在大搜车数据平台的实践的更多相关文章

  1. 车架号VIN码识别,合格证,购车发票,房产证,车牌,驾驶证,行驶证,征信报告等等识别 从易鑫、大搜车、淘车网,看汽车金融发展新模式

    随着我国汽车保有量和产销量的持续增长,汽车技术的日趋成熟,以及互联网+对汽车行业的不断影响,汽车金融的市场规模逐步扩大,市场主体逐步丰富,汽车金融模式也在不断演进. 2016年左右,美国主要汽车厂商通 ...

  2. HBase在大搜车金融业务中的应用实践

    摘要: 2017云栖大会HBase专场,大搜车高级数据架构师申玉宝带来HBase在大搜车金融业务中的应用实践.本文主要从数据大屏开始谈起,进而分享了GPS风控实践,包括架构.聚集分析等,最后还分享了流 ...

  3. 回客科技 面试的 实现ioc 容器用到的技术,简述BeanFactory的实现原理,大搜车面试的 spring 怎么实现的依赖注入(DI)

    前言:这几天的面试,感觉自己对spring 的整个掌握还是很薄弱.所以需要继续加强. 这里说明一下spring的这几个面试题,但是实际的感觉还是不对的,这种问题我认为需要真正读了spring的源码后说 ...

  4. 大数据平台迁移实践 | Apache DolphinScheduler 在当贝大数据环境中的应用

    大家下午好,我是来自当贝网络科技大数据平台的基础开发工程师 王昱翔,感谢社区的邀请来参与这次分享,关于 Apache DolphinScheduler 在当贝网络科技大数据环境中的应用. 本次演讲主要 ...

  5. 大搜车知乎live中的面试题结题方法记录

    1.HTML&CSS(分别10分) 1. 一个div,宽度是100px,此时设置padding是20px,添加一个什么css属性可以让div的实际宽度仍然保持在100px,而不是140px? ...

  6. Kafka 集群在马蜂窝大数据平台的优化与应用扩展

    马蜂窝技术原创文章,更多干货请订阅公众号:mfwtech Kafka 是当下热门的消息队列中间件,它可以实时地处理海量数据,具备高吞吐.低延时等特性及可靠的消息异步传递机制,可以很好地解决不同系统间数 ...

  7. 海豚调度5月Meetup:6个月重构大数据平台,帮你避开调度升级改造/集群迁移踩过的坑

    当今许多企业都有着技术架构的DataOps程度不够.二次开发成本高.迁移成本高.集群部署混乱等情况,团队在技术选型之后发现并不适合自己的需求,但是迁移成本和难度又比较大,甚至前团队还留下了不少坑,企业 ...

  8. 从 Hadoop 到云原生, 大数据平台如何做存算分离

    Hadoop 的诞生改变了企业对数据的存储.处理和分析的过程,加速了大数据的发展,受到广泛的应用,给整个行业带来了变革意义的改变:随着云计算时代的到来, 存算分离的架构受到青睐,企业开开始对 Hado ...

  9. 大数据 > 数据平台方案评估

    分类 当前措施 说明 百度竞价如何进行数据分析(SEM工程师)数据来源: 1. 百度后台推广数据:api 总展现 总点击 点击率 总消费 点击均价 BDP功能点 1. 串联百度->网站商务通-& ...

  10. 大数据平台R语言web UI应用架构 设计与开发

    1. 系统拓扑图 在日常业务分析中,R是非常常用的分析工具,而当数据量较大时,用R语言需要需用更多的时间来完成训练模型,spark作为大规模数据处理框架,采用内存计算,可以短时间内完成大量的数据的处理 ...

随机推荐

  1. Can‘t resolve ‘core-js/modules/es.symbol‘ in

    https://blog.csdn.net/guoqing2016/article/details/108639300?utm_medium=distribute.pc_relevant.none-t ...

  2. P2241

    这么多年不写代码,竟然忘了longlong这茬,我半天没想明白错在哪里,过了好久才反应过来.浪费不少时间,真的得记住longlong 啊.... Code #include <iostream& ...

  3. 项目使用 GlobalExceptionHandler 与 @RestControllerAdvice自定义异常 二

    未经博主允许不得转载: 自定义异常,不仅需要定义符合自己业务的异常状态码,也需要定义自己项目中的异常封装.记录下自己手敲代码中的异常封装: 1.定义一个枚举类,枚举类中定义状态码及状态码描述,再定义一 ...

  4. 如果诸葛亮用C#写出师表...

    看到一篇18年的文章 "C++版<出师表>",站长觉得挺有意思的,就用C# 控制台也实现了一遍,技术上没啥难度,但复制代码费了1.2个小时,纯粹无聊写着玩,看者别在意枚 ...

  5. 例2.8 已知带头结点单链表L,设计算法实现:以表中第一元素作为标准,将表中所有值小于第一个元素的结点均放在第一结点之前,所有值大于第一元素的结点均放在第一元素结点之后。

    1.题目 例2.8已知带头结点单链表L,设计算法实现:以表中第一元素作为标准,将表中所有值小于第一个元素的结点均放在第一结点之前,所有值大于第一元素的结点均放在第一元素结点之后. 2.算法分析 3.代 ...

  6. [SpringMVC] - 解决 RequestMappingHandlerAdapter 报红的错误

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdap ...

  7. 浏览器兼容 : IE 5 到 IE 9

    <!--[if IE]> <link href="ie.css" rel="stylesheet"> <![endif]--> ...

  8. UEditor 添加在线管理图片删除功能 (转载)

    第一,需要添加一个 php 文件来实现删除功能,文件添加到: ueditor\php\action_delete.php 代码内容: <?php /*---------------------- ...

  9. [转帖]005、体系结构之TiKV_Raft日志

    Raft日志 1.Raft与Multi Raft 2.Raft 日志复制 2.1.复制流程总览 2.2.Propose 2.3.Append 2.3.Replicate(Append) 2.4 Com ...

  10. [转帖]shell脚本实现文本内容比较交互程序

    背景介绍 脚本基于Comm命令进行功能封装,考虑到命令执行前需要对文本进行排序,并且在多文件需要比较内容时可能会导致多个文本混乱,因此使用Shell封装成了一个交互式程序,快速对文件内容进行判断和输出 ...