一、presto动态化概述

  近年来,基于hadoop的sql框架层出不穷,presto也是其中的一员.从2012年发展至今,依然保持年轻的活力(版本迭代依然很快),presto的相关介绍,我们就不赘述了,相信看官多对presto有或多或少的了解,详细的一些说明可以看官网(https://prestodb.io)的说明.

  presto自身功能和思想富有先进性,虽然由于是内存计算,稳定性方面还有很大提升空间,但整体依然在adhoc方面有很好的竞争力,我们本次介绍针对我们团队对于presto部分应用个性化定制功能的阐述,如果设计不合理或有待改进的方面,请大家多多反馈,我们共同进步.

  由于我们团队是围绕着hadoop相关项目进行,对于大数据的即席查询的需求是无可避免,最终选用presto和impala两款即席查询工具.一款新的开源工具从测试到生产环境,除了必要的覆盖测试,还要自动部署, 监控, 预警 , 日志分析 , 异常处理等等功能,还有一些来源业务部门的需求进行调整及改进(主要针对sql和易用性,性能改进,可后续其他系列文章进行说明).

我们针对presto动态开发,主要体现于三个方面:

  • presto节点的横向扩展与伸缩(动态资源)

  • presto的配置动态化(消除presto本地配置)

  • presto动态加载更新插件(不停服务情况下,自动增加或升级插件)

二、资源动态化:充分利用集群资源,混搭才是王道

presto从上线到切入业务,一直在独立hadoop集群中,遵从不抢占线上集群资源,不影响线上核心任务的原则,但是迁入presto的业务方日渐增多,T-1的跨机群将数据拷贝至独立presto集群方式已然无法满足,我们做出大胆的决定,便是将presto迁入线上集群直接使用,于是我们必须能够对presto的资源管理有完善的把控和管理.

PrestoSchedule1.0功能点:

1.presto on yarn

2.presto Server(白天100%节点,晚上5%节点)

3.presto 监控预警系统

4.presto 权限管理

5.presto 动态插件管理

6.presto 分流管理

7.presto 自动升级(用户无感知,保证task无失败)

三、PrestoSchedule1.0模块

1.Presto Server

  prestoServer 是PrestoSchedule独立部署模块.是包括管理界面,监控,权限管理等功能,提供了自主运维管理后台,让管理员能通过页面来配置、启停和管理presto集群, 同时管理presto master与work的节点数,监控每个节点运行信息,从节点启动-运行-消亡-删除启动包痕迹都有详细记录,管理员可以定制work的启动时间和停止时间, 同时能够看到每次启动耗时和结束耗时以及能看到执行成功或者失败,还会为保留过去的work的记录,可以查看定时历史启动记录.

  除此之外,prestoServer 还兼有管理多集群映射的职责(为presto性能考虑,尽量让presto使用hadoop block减少网络传输,我们在每个hadoop集群都部署一套对应的presto服务),让sql用户对于访问集群无任何感知,屏蔽具体master的地址,对master的迁移和 on yarn提供基础支撑.

  • 权限,屏蔽连接master的直接访问,同时对于presto访问者细粒度到人,对于非内部人员或非授权人员禁止访问,管控presto程序访问入口如客户端,jdbc,restful等方式

  • presto代理,甄别多个presto集群的所有入口方式及权限,用户无感知的使用presto, 使presto master完全进入黑盒子,便于动态迁移master, 新建presto集群,客户端无需感知或受到影响

  • 分流,监控presto master压力,可将一部分查询流量实时切换到另一presto master,同时支持presto新开发功能的灰色发布及线上自测

  • 运维管理,支持新建,启停presto集群,管理presto work的节点数,可以通过页面修改当前的presto work数量,及交互资源(将切换masterA的work转换为masterB的work).

  • 监控,包括presto sql分析,presto监控情况, JMX监控, presto队列情况, presto自恢复机制.

2.presto on yarn

  混搭性集群充分利用集群资源,一直是我们深入研究的主题,对于离线任务与实时任务,导数任务与计算任务应该各司其职,充分榨干集群每一寸土地,当然,这是理想的情况,presto on yarn是我们对于在离线集群进行长时间运行(long server)的服务的一次尝试.

  因我们有on yarn需求时,社区的presto-yarn项目(https://github.com/prestodb/presto-yarn)才是初版,Slider也不是很成熟,测试过程中也很多不满足我们需求的地方,于是我们便开发presto on yarn的项目.

  为了更好的融入混搭集群的方向, 我们需要解决如下几个问题:

资源:

1.利用空闲的资源

2.不能抢占核心任务的资源

3.不能影响其他任务的运行

稳定性:

1.保证presto在yarn上的稳定性

2.保证presto master和work的数量

3.保证用户查询不因平台框架原因查询失败

可伸缩性:

1.保证随时可扩展,可缩减的可操作性

易部署:

1.web页面一键部署,一键启停

2.兼容运行环境(JDK版本)问题.

权限控制:

1.表权限级别控制,与公司hadoop/hive权限验证打通(公司内部erp权限管理,请看hadoop erp权限管理)

定时性:

1.保证白天100%资源运行,夜间5%资源运行

  针对以上的问题,我们进行分解,针对问题进行对应涉及工作,其中思路与alluxio on yarn类似, 资源可以使用linux container 与 docker container 进行资源隔离.

  稳定性则可以增加AM 作为管理节点及ETCD注册, 通过thrift接收外部请求,增加或减少资源,同时AM与APP又受到prestoServer管理,即便APP或AM失败或者被意外kill,也可以重启任务或监听重试.

  可伸缩性,通过请求AM执行容器的创建及销毁工作,同时,对异常关闭(NodeManger异常关闭)的容器进程依然存在, AM定期向presto Master发送反向关闭无效work服务指令,Presto Master对于不在容器内的存活presto work发送关闭命令, presto work执行exit, 反向关闭presto work进程(需要增加presto API).

  易部署,使用on yarn的方式,比较方便的便是部署,能够达到一键部署的特征,但是随即而来的便是容器环境问题, hadoop JDK版本多为1.6,1.7, 并没有使用JDK1.8, 但是presto对于JDK1.8是强依赖, 我们解决方式有两种,其一是使用docker container(公司内部hadoop已支持多种容器模式共存,通过参数选择container 类型) ,方案二,我们presto是支持动态插件功能,其中动态插件管理可选择是否包含JDK启动,原理是将JDK及备用jar放置HDFS中,通过外部配置(系列二的配置管理系统)决定, 是使用localjdk,还是使用远程jdk(如使用远程,依然会对比本地JDK版本以及是否曾经已下载进行复用),然后启动presto服务.

  权限控制,除了与公司的权限管理系统贯通并兼容,presto server也作为所有用户访问presto的入口, 对于用户并不知道访问的具体hadoop集群或presto集群,将用户sql访问与presto技术实现松和耦合,我们随时可以将用户sql切换到其他平台中运行,如spark sql, hive, impala等.

  定时性,自动化伸缩节点是初期最重要的功能之一, presto性质决定他的用户多为白天, hive的跑批脚本多为在凌晨开始,早晨结束,故此两者时间上可以进行互补,技术实现相对简单, 仅仅定时器触发AM的thrift接口发送伸缩命令即可.

3.presto 服务发现

  服务发现现今使用的是etcd进行,原本有计划将presto的发现服务,转移到ETCD中,但开发计划一直未能展开,故此使得两个发现服务互补使用.(临时方案)

服务发现:

  • presto集群信息

  • yarn APP/AM 信息

  • hadoop配置信息

  • catalog版本信息

  • catalog配置

  • presto config信息

  • presto 插件版本信息

  • on yarn配置信息

4.presto IDE

  presto的快速查询使用方式则是多种多样, 我们支持presto client, SQL IDE(公司内部web开发工具) JDBC, ODBC, restful接口方式等方式进行sql的查询工作,从而保证业务方在任何条件下都可以访问.

四、文章说明

  本文出自本人的一个同事涵总之手,今天在本人的博客上晒一下!

presto的动态化应用(一):presto节点的横向扩展与伸缩的更多相关文章

  1. elasticsearch介绍集群,模拟横向扩展节点、节点宕机、改变分片

        出处:[http://www.cnblogs.com/dennisit/p/4133131.html] ,防楼主删博,故保留一份! elasticsearch用于构建高可用和可扩展的系统.扩展 ...

  2. JavaScript的DOM_节点类型的扩展

    DOM 自身存在很多类型,比如 Element 类型(元素节点)再比如 Text 类型(文本节点).DOM 还提供了一些扩展功能. 一.Node类型 Node 接口是 DOM1 级就定义了,Node ...

  3. OpenStack-Ocata版+CentOS7.6 云平台环境搭建 — 6.在计算节点上安装并配置计算服务Nova

    安装和配置计算节点这个章节描述如何在计算节点上安装和配置计算服务. 计算服务支持几种不同的 hypervisors.为了简单起见,这个配置在计算节点上使用 :KVM <kernel-based ...

  4. ES(一): 架构及原理

    Elasticsearch 是一个兼有搜索引擎和NoSQL数据库功能的开源系统,基于Java/Lucene构建,可以用于全文搜索,结构化搜索以及近实时分析.可以说Lucene是当今最先进,最高效的全功 ...

  5. ElasticSearch 学习记录之如任何设计可扩容的索引结构

    扩容设计 扩容的单元 一个分片即一个 Lucene 索引 ,一个 Elasticsearch 索引即一系列分片的集合 一个分片即为 扩容的单元 . 一个最小的索引拥有一个分片. 一个只有一个分片的索引 ...

  6. 大数据技术 - 分布式文件系统 HDFS 的设计

    本章内容介绍下 Hadoop 自带的分布式文件系统,HDFS 即 Hadoop Distributed Filesystem.HDFS 能够存储超大文件,可以部署在廉价的服务器上,适合一次写入多次读取 ...

  7. Azure SQL 数据库仓库Data Warehouse (1) 入门

    <Windows Azure Platform 系列文章目录> 在之前的项目中遇到了客户使用SQL数据仓库的场景,在这里记录一下 1.什么是SQL 数据库仓库 (SQL DW) SQL D ...

  8. Elasticsearch技术解析与实战(一)基础概念及环境搭建

    序言 ES数据架构的主要概念(与关系数据库Mysql对比) 集群(cluster) 集群,一个ES集群由一个或多个节点(Node)组成,每个集群都有一个cluster name作为标识.一下是我们的4 ...

  9. Zookeeper的基本概念和重要特性

    目录 1. 什么是Zookeeper 2. Zookeeper集群角色 3. Zookeeper的数据模型 3.1 Znode的类型 3.2 Znode的结构 4. Zookeeper的事件监听机制 ...

随机推荐

  1. Mysql5.7.14安装配置

    Mysql5.7.14免安装版配置方法: 运行 在命令行中输入 mysqld install mysql5.7 安装成功后,启动mysql 在命令行中输入 net start mysql5.7 这个时 ...

  2. springMVC、httpClient调用别人提供的接口!!!(外加定时调用)

    import com.ibm.db.util.AppConfig; import com.ibm.db.util.JacksonUitl; import org.apache.http.HttpEnt ...

  3. kafka模块概述

    简介 kafka主要用于实现低延迟的发送和收集大量的事件和日志数据--通常是活跃的数据(PV.访问记录等),数据以日志形式记录下来,然后由一个专门的系统来进行日志的收集与统计: 吞吐量极高的分布式消息 ...

  4. yxcms后台验证码不显示?怎么取消yxcms后台验证码

    嗨,大家好,我是YXCMS的小M老湿,(其实还是习惯大家叫我猪猪吧!)今天又要分享一则yxcms的使用技巧,当然也是yxcms用户在使用过程中很容易出现的小白问题,当然还是同样,yxcms的大神级别的 ...

  5. 用php实现一个敏感词过滤功能

    周末空余时间撸了一个敏感词过滤功能,下边记录下实现过程. 敏感词,一方面是你懂的,另一方面是我们自己可能也要过滤一些人身攻击或者广告信息等,具体词库可以google下,有很多. 过滤敏感词,使用简单的 ...

  6. 原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别

    一.原生JS事件绑定方法: 1.通过HTML属性进行事件处理函数的绑定如: <a href="#" onclick="f()"> 2.通过JavaS ...

  7. 去除select的样式

    select::-ms-expand { display: none } .info-select { width: 88px; height: 25px; border: none; outline ...

  8. html5 canvas画流程图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. (转)struts2:数据校验,通过XWork校验框架实现(validation.xml)

    转载自:http://www.cnblogs.com/nayitian/p/3475661.html struts2:数据校验,通过XWork校验框架实现(validation.xml)   根据输入 ...

  10. Creating Signing Identities 生成签名标识

    Before you can code sign your app, you create your development certificate and later, a distribution ...