浅谈管理数据平台的一些想法

前言:

对于任何使用大数据技术的公司来说,大数据平台特别是Hive来说,维护其高效快速的运行,对整个公司的运作来说至关重要。比如说:某个调度任务失败了造成业务部门的某些报表无法正常产出;hive平台最近速度下降了,造成业务跑sql,跑半天不出结果,进而发起投诉等等。对于数据平台来说任何一个小的事故轻则造成公司的运行效率降低,重则使整个公司的业务运行异常(异常可能不会被立刻发现)等等,可以夸张点的说,数据将像电力资源一样对整个公司至关重要,而数据平台自然也是其中的“主角”。那我们要如何确保这个“主角”可以一直稳定的运行呢?废话少说,下面就结合博主的一些经历,简单聊下数据平台维稳的一些想法。特此声明,本人菜鸟一枚,以下想法纯属胡扯,如有说的不对的地方,望各位大佬多多指教,也欢迎各位评论交流。

如何维稳?

针对如何维护数据平台稳定的问题,我想拿一些问题从以下几个层面说下自己的一些想法:底层表,SQL,调度任务。
问题场景一:业务频繁反馈Hive平台运行查询慢。
针对以上问题,可能是由多方面的原因引起的,也可以有多种解决办法。但是首先我想抛出的一个问题是:“如何证实业务所说的话?”凡事讲究证据,特别是在这个DT的时代。所以首先我觉得应该有一些指标来量化Hive平台运行的快慢,比如我们可以统计下每天Hive平台执行SQL的平均时间。根据这些指标,我们知道Hive平台的确变慢了,那如何去优化呢?业务我们可以加资源(加机器,加内存,换硬件设备如固态硬盘,调整集群参数等等)。但是我想说的还是我们要做的任何的优化的操作的依据是什么?或者说如果我们不知道要进行那种优化的操作,那我们能不能用一些方法排除掉我们不需要进行哪些方法去优化?用一些什么样的方法呢?还是指标量化的方法,拿出有效的指标去论证你的观点,而不是通过拍脑门来决定,特别是针对已有大量数据积累的场景下。

我们经常为业务做各种报表来辅助决策,那为什么我们不能为包含各类数据的数据平台的来做一版“体检表”来定位各种问题,进而为解决各种问题做决策呢?所以这篇文章我想传达的一点是通过指标化,报表化的方法来帮助你做决策或者说定位问题,解决问题,也就是用数据分析的方法来维护数据平台。

针对上面抛出的怎么优化的问题,说实话,我也没有一套很好的策略说要怎么做怎么做。但是我结合下自己的工作经历说下其中的一些想法吧。

底层表的优化

问题场景:数据仓库长时间未进行过底层数据的整理,如果说在近期业务量未大幅增加的情况下,Hive平台慢会不会是由于底层数据的“异常”造成的?
为了印证想法,开始着手先对数仓的底层表进行统计分析,主要从以下几个维度去初步生成一份报表:“表名,表大小,小文件数,更新时间,分区数,近段时间表的查询次数”。有了这张表我就对数仓底层的表数据一目了然,这里针对上面的问题,我们可以从“表的查询次数”和“小文件数量”两个维度进行分析,通过观察最常用的一些表的小文件数的情况来判定是否是底层表小文件的原因造成Hive平台慢的问题。当然有了这张报表,后续我们可以高效的完成各种需求:比如要节省硬盘空间,可以通过“表大小”,“表更新时间”字段进行高效的操作,以最低的成本(处理少量的表,节省大量的空间)获取不错的成果。当然后续该报表可以衍生出其他的字段如“是否包含V表”,“是否是分区表”等等,也可以和其他的数据关联衍生出更多的新的字段,如根据表名是否可以和业务的sql_log表进行关联,这样你可以从公司,部门,个人三个层面得到对不同表的查询次数,知道这些会不会对我们数仓的搭建有帮助?再放开脑洞一点,如果知道sql中每条sql对应的引用的表和查询的用户,可否利用算法建模来做一个推荐系统,比如用户输入sql的过程中可以自动推荐出接下来需要关联的表;更甚者是否能从中提取出表和表之间的类似相关系数的指标去衡量各个表之间的关联?最终如果说能再细分到字段和字段之间的联系(比如我知道对于某个部门来说哪几个字段一起出现的概率很大),那么我们就真的达到了利用数据挖掘技术来倒推出业务知识(业务知识体现在某组一起出现字段,但是为什么这组字段会一起出现,背后的业务含义我们并不知道,但是这又有什么关系,至少有了这些信息对我们搭建数仓来说已经足够了。毕竟比如你让搞数仓的去熟知业务和搞业务的去熟知数仓表是同等难度(这也是技术和业务之间的代沟),如果有了上面的一些信息,那就相当于搞数仓的搞懂了业务,这不正是技术人员所需要的)。

SQL优化

针对SQL的优化,我们可否利用报表去定位问题?
比如有时候,对于已经上线的调度任务,由于各种原因会去优化相关的sql。但是如何筛选这些sql以及如何快速的优化这些sql呢?自己的一个想法:以sql_log为基础数据,首先筛选出目标类别的sql数据(调度任务的sql),之后可以以sql耗时为度量筛选簇耗时较多的sql进行优化,一条sql耗时慢可能和许多因素有关:如表相关的因素小文件数量、表大小等,sql语法的因素等。那么如何才能快速的确定到底是那些因素呢?正常的操作,也许我们需要将这条sql拿出来,然后一点点执行,一步步的分析问题原因。但是针对一些经验化,固定化的操作可否转化为相应的指标?比如针对优化调度任务sql的问题,如果我有一张报表里面包含以下字段“sql语句,sql耗时,sql中各表的大小,sql中各表的小文件数”等,那么我们是不是就可以直接排除小文件数量的问题,进而去验证其他的原因。当然这张报表绝不可能停留在这个阶段,后续根据排查问题的需要,你可以添加任何的指标字段(如针对Spark的任务能否将sql执行时你在SparkUI中看到的信息加进来等),来帮助排查问题,这样的话,你甚至不需要执行一条sql就能定位到问题!

调度任务的优化

调度任务如何才能科学合理的规划?也是一直再思考的问题。虽然市面上有各种调度任务框架如Azkaban等,他们有很好的功能来满足调度的需求,但是这对于整个调度任务更高效的运行来说好像还有点差距。比如最近要上个新的调度任务,我要把它放到那个时间段去执行?某些调度任务经常性失败的原因是什么?
嗯~~,我想表达的是无论是Azkaban也好还是其他的调度任务框架,我们能看到的只是单个的调度任务本身,并没有一个更高的维度来描述一群调度任务运行的情况。针对上面的问题同样可能的原因有很多中,那我们能否通过一些图表来排除一些原因呢?如果我们有一张描述调度任务的图表,横轴代表的时间,纵轴代表的是平台总的资源使用情况,如内存(如果能显示并行的任务名称更好)。那么我们就能知道任何的时间点,我们平台的任务并行度以及对应的资源使用情况,这样对我们新增的调度任务的添加或者说整个调度任务更科学的规划会不会有更好的帮助?如果能在图中的时间轴标注下每次发生的事故事件,那对我们分析事故会不会有一个更高层面的认识?有了更高维度的认识,也就会少犯很多错误,产生更少的事故。

总结:

以上只是自己脑洞大开的一些想法,比较乱,也是想到哪写到哪,如果能对各位有帮助更好。但是只想传递一点:就是如何将工作中一些经验性、重复性的工作给指标化,利用数据分析的思路来“高效”的工作,更好的去定位问题,解决问题,甚至预防问题的发生等。总之,在这个DT的时代,我们要利用好深表的数据,凡事尽可能的拿数据说话,而不是拍脑门做决定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB误删表恢复

一、场景描述公司某工程师执行db.giveget_card.drop(),误将线上表删除。幸好每天都有做备份,这个时候就体现了备份的重要性了,哈哈哈。。。二、模拟故障过程备份数据大小:rs_test01:PRIMARY> use ycsb switched to db ycsb rs_…

linux下kill某个应用

linux命令行与桌面切换快捷键CtrAltF1,CtrAltF7 ps -e | grep abc sudo kill xyz 转载于:https://www.cnblogs.com/cj2014/p/6512354.html

flask中数据库的基本操作-增删改查【备忘】

1.增加数据(就相当于增加一个实例对象) user1 User(namelong,email1006550026qq.com,password123456,role_id1) db.session.add(user1) db.session.commit() 2.修改数据 修改用户表里面的name为long的姓名为:fang 首先查询到名为…

两个文件比较之comm命令

comm命令可用于两个文件之间的比较。它有很多不错的选项可用来调整输出,以便我们执行交集、求差(difference)以及差集操作。 交集:打印出两个文件所共有的行。 求差:打印出指定文件所包含的且互不相同的那些行。…

【转】error while loading shared libraries: xxx.so.x 错误的原因和解决办法

原博客地址:http://www.cnblogs.com/Anker/p/3209876.html#undefined error while loading shared libraries: xxx.so.x" 错误的原因和解决办法 今天在执行一个protobuf程序时,提示error while loading shared libraries: libprotobuf.so.8: cannot…

Flask学习记录之Flask-SQLAlchemy

Flask-SQLAlchemy库让flask更方便的使用SQLALchemy,是一个强大的关系形数据库框架,既可以使用orm方式操作数据库,也可以使用原始的SQL命令. Flask-Migrate 是一个数据迁移框架,需要通过Flask-script库来操作. 一.配置Flask-SQLAlchemy 程序使用的数据库地址需要配置在SQLALCH…

Postico —— OS X 上的免费 PostgreSQL 客户端

Postico 是 OS X 下的一个 PostgreSQL 客户端管理工具。要求 OS X 10.8 或者更新版本。 文章转载自 开源中国社区 [http://www.oschina.net]

hdu 1760 A New Tetris Game(搜索博弈)

题目链接&#xff1a;hdu 1760 A New Tetris Game 题意&#xff1a; 给你一个矩阵&#xff0c;0表示可以放格子&#xff0c;现在给你2*2的格子&#xff0c;lele先放&#xff0c;问是否能赢。 题解&#xff1a; 爆搜。具体看代码 1 #include<bits/stdc.h>2 #define F(i,a,…

flask-restful接口

同flask一样&#xff0c;flask-restful同样支持返回任一迭代器&#xff0c;它将会被转换成一个包含原始 Flask 响应对象的响应&#xff1a; class ArticleApi(Resource):def get(self):return {"hello":"world"},201&#xff0c;{"course":&quo…

如约而至 Nexus 6 的 Android 7.1.1 已经上线

经过近一个月的等待&#xff0c;Google 已正式为 Nexus 6 推送 Android 7.1.1 更新&#xff0c;本次更新版本号为 N6F26Q&#xff0c;可以点击这里下载完整系统镜像或者下载 OTA 升级包。 相比其他 Nexus 和 Pixel 设备&#xff0c;Nexus 6 已经发布了超过两年之久&#xff0c;…

关于jedis2.4以上版本的连接池配置,及工具类

jedis.propertise 注意以前版本的maxAcitve和maxWait有所改变&#xff0c;JVM根据系统环境变量ServerType中的值 取不同的配置&#xff0c;实现多环境&#xff08;测试环境、生产环境&#xff09;集成。 redis.pool.maxTotalredis.pool.maxActive.${ServerType} redis.pool.max…

关于response格式转换

调用图灵机器人api实例&#xff1a; class RobotHandler(WebSocketHandler):def open(self):# print("WebSocket opened",self.request.remote_ip)robot_set.add(self)# 获取websocket的发过来的信息def on_message(self, message):urlhttp://openapi.tuling123.com/…

微软老兵 Antoine LeBlond 将正式离职

Antoine LeBlond (安东勒布朗)是微软众高管之一,他在微软工作将近25年之久,然而他将在下周一,也就是他在微软的第9000天正式离职. 在发给微软众同事的邮件中,勒布朗表示他希望"探索微软之外的世界". 勒布朗在微软Office部门度过了他在微软的前20年时光,并与前微软高管…

转载——java synchronized详解

文章来源&#xff1a;http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966606.html转载于:https://www.cnblogs.com/insist8089/p/6515885.html

Django中的F对象和Q对象

F对象 可以获取到自己的属性值实现自己的属性自己的属性关联的复杂条件支持运算 Q对象 Q对象实际上是对条件的一个封装封装后支持逻辑运算与或非 &|~ 支持嵌套 例子 from django.db.models import Max, Avg, F, Q from django.http import HttpResponse from django.s…

总链接

字符集修改、Linux时间同步、调整文件描述符http://11815879.blog.51cto.com/11805879/1915276正则表达式&#xff1a;http://11815879.blog.51cto.com/11805879/1919777 文件系统inode与blockhttp://11815879.blog.51cto.com/11805879/1917068 文件类型与软硬链接&#xff1a;…

Django模型关系

模型关系 1:1 一对一 &#xff08;一个身份证对应一个驾照&#xff09; 是使用外键唯一约束实现的对应最多只能有一个我们通常会在从表中声明关系 主表&#xff0c;从表 主表数据删除&#xff0c;从表数据级联删除从表数据删除&#xff0c;主表不受影响谁声明关系&#xff0c…

Android常用开源项目

Android常用开源项目 Android 2014-05-23 16:39:43 发布您的评价: 4.3 收藏 24收藏Android开源项目第一篇——个性化控件(View)篇包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar、TextView、其他Android开源项目第二篇——工具库…

Django中数据知识点归纳

Django对象的增删改查 我们为了对django对象的增删改查进行总结&#xff0c;先在model.py文件中创建类便于举例 定义学生&#xff1a; class Students(models.Model):snamemodels.CharField(max_length20)sgendermodels.BooleanField(defaultTrue)sagemodels.IntegerField()…

面 试 细 节 一 点 通

面谈的礼节是社会新人及求职者踏人社会工作前最重要且最需学习的课题&#xff0c;因为这关系到是否能顺利踏入社会且寻找到一份合适满意的工作。 一个社会新人除了应注意的面试礼节外&#xff0c;在开始进行面谈之前及面谈结束之后&#xff0c;还有不少必须注意的礼仪。 面谈时…