• Phoenix性能优化


    目录:

      1、建表优化

      2、二级索引

      3、并行处理

    1.建表优化

    1. Salting 翻译成中文是加盐的意思,本质是在hbase的rowkey的byte数组的第一个字节位置设定一个系统生成的byte值, 这个byte值是由主键生成rowkey的byte数组做一个哈希算法,计算得来的。Salting之后可以把数据分布到不同的region上,这样有利于phoenix并发的读写操作。 示例:CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR) SALT_BUCKETS=16
    2. Pre-split 这个就是HBase的预分区了,在建phoenix表时,可以精确的指定要根据什么值来做预分区 示例: CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR) SPLIT ON ('CS','EU','NA')
    3. 使用多个列族,在创建phoenix表是可以指定列所在的列族 示例: CREATE TABLE TEST (MYKEY VARCHAR NOT NULL PRIMARY KEY, A.COL1 VARCHAR, A.COL2 VARCHAR, B.COL3 VARCHAR)
    4. 在数据量大的表上使用压缩算法来提高性能 GZ,lzo等 示例: CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR) COMPRESSION='GZ'

    2.二级索引

         Phoenix的二级索引从2.1版本开始支持可变和不可变(数据插入之后不可更新)数据了,之前的版本只支持不可变的数据,我们现在使用的版本是2.2.2是支持二级索引的,我们可以做一些尝试。

         可以通过explain select … 来看phoniex在执行sql时是否用上了二级索引。

    3.并行

         Phoenix会将一个聚合查询分成多个Scan,然后将这些Scan分配给phoenix自定义的hbase协处理器,这些协处理器可以在服务器端并行执行来提高查询性能。平衡的拆分表是Phoenix获得高效查询的最重要因素之一,这包括将相等大小的分区平均分配到不同的region server上。这个工具http://www.sentric.ch/blog/hbase-split-visualisation-introducing-hannibal 可以帮助我们监控hbase表分区的情况。表中的数据在各个region sever上均匀分布可以保证每一个phoenix线程处理的数据量相当,这样就可以减少查询的等待时间。

       在客户端可以通过phoenix.query.targetConcurrency 和 phoenix.query.maxConcurrency 来控制查询如何来拆分扫描。并行查询最好可以将查询scan的切分和表数据的region切分对齐。如果扫描很不均匀,就需要用多个线程来处理数据量较大的分区扫描。

        并行执行扫描时的切分点定义如下,我们假设:
         t 是目标的并发数
         m 是最大的并发数
         r 是我们要扫描的分区数

    if r >= t 
            使用表的region边界
    Else if r/2 > t
        将每个region都拆分成s份,s满足公式: s = max(x)  x满足 s * x < m
    Else
        将每个region拆分成s份,s满足公式:s = max(x)  x满足 s * x < t

        可以根据客户端机器的内核数和集群的大小,来调大phoenix.query.threadPoolSize, phoenix.query.queueSize, phoenix.query.maxConcurrency, 和 phoenix.query.targetConcurrency的值,允许更多的线程做并行的查询,来降低延迟。

        但是这个方法也并非没有限制,最大的问题是phoenix没有足够的信息来拆分region。 如果查询结果跨越很多region,这没有问题,因为region中总会有一些大小相差不多的region,然而如果查询仅仅涉及到少数几个region,可能就会有问题

  • 相关阅读:
    oracle-游标总结
    js动态获取下拉框的数据(搜索条件之间互相影响)
    poi实现excel数据导入到mysql数据库(加上excel的验证)
    windows10下ActiveMQ的安装和启动
    hexo发表博文
    前端Web安全介绍及规避。。。
    小程序:pages/index/index/出现脚本错误或未正确调用Page()
    初步了解产品经理(个人笔记)
    浏览器唤起APP的思路(本文转载)
    常见浏览器兼容性问题总结
  • 原文地址:https://www.cnblogs.com/sh425/p/7273454.html
Copyright © 2020-2023  润新知