HBase跨地区机房的压测小程序——从开发到打包部署(图文版)

今天做了一个跨地区机房的压测小程序,主要的思路就是基于事先准备好的rowkey文件,利用多线程模拟并发的rowkey查询,可以实现并发数的自由控制。主要是整个流程下来,遇到了点打包的坑,所以特意记录下。

编写代码

rowkey文件的准备就不说了。首先是HbaseClient的查询接口,由于创建连接的代价很重,因此这里采用HBase的ConnectionFactory工厂:

static {
    try {
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        conf.set("hbase.zookeeper.quorum", "此处不可描述");
        connection = ConnectionFactory.createConnection(conf);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private static Table getTable(String table) throws IOException {
    return connection.getTable(TableName.valueOf(table));
}

查询的时候直接使用get Api即可:

try (Table tab = getTable(table)) {
    Get get = new Get(Bytes.toBytes(key));
    Cell cell = tab.get(get).getColumnLatestCell(COLUMN_FAMILY, Bytes.toBytes(field));
    column = Bytes.toString(CellUtil.cloneValue(cell));
} catch (Exception e) {
    logger.error("查询请求出错:" + e.getMessage());
}

为了模拟并发,我这边直接使用了Fixed线程池,并且基于java8的lambda表达式创建线程池:

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(100);
for(String line : lines){
    fixedThreadPool.execute(() -> {
         Long start = System.currentTimeMillis();
         // ... todo ... 我这里只想统计一下平均的访问时间,所以就简单的做减法就行了
         Long end = System.currentTimeMillis();
         System.out.println(end-start);
     });
}

基于Idea打包

整体的项目结构大致如下:

点击project structure

点击add-->jar-->from models with dependencies...

选择对应的资源文件加入到打包路径中

点击build-->build artifacts-->build进行打包

观察文件MANIFEST.MF可以看到里面包含的内容:

Manifest-Version: 1.0
Class-Path: commons-beanutils-core-1.8.0.jar netty-all-4.0.23.Final.ja
 r hadoop-auth-2.5.1.jar snappy-java-1.0.4.1.jar protobuf-java-2.5.0.j
 ar jcodings-1.0.8.jar hadoop-yarn-common-2.5.1.jar httpclient-4.2.5.j
 ar commons-math3-3.1.1.jar commons-lang-2.6.jar findbugs-annotations-
 1.3.9-1.jar jaxb-api-2.2.2.jar slf4j-api-1.6.1.jar commons-el-1.0.jar
  commons-beanutils-1.7.0.jar commons-collections-3.2.2.jar commons-ht
 tpclient-3.1.jar commons-io-2.4.jar avro-1.7.4.jar hamcrest-core-1.3.
 jar hbase-client-1.3.1.jar slf4j-log4j12-1.6.1.jar commons-logging-1.
 2.jar hadoop-yarn-api-2.5.1.jar hbase-protocol-1.3.1.jar netty-3.6.2.
 Final.jar commons-configuration-1.6.jar hadoop-annotations-2.5.1.jar
 jackson-core-asl-1.9.13.jar paranamer-2.3.jar junit-4.12.jar metrics-
 core-2.2.0.jar jsr305-1.3.9.jar stax-api-1.0-2.jar hadoop-common-2.5.
 1.jar commons-compress-1.4.1.jar apacheds-i18n-2.0.0-M15.jar api-asn1
 -api-1.0.0-M20.jar jackson-mapper-asl-1.9.13.jar commons-codec-1.9.ja
 r xz-1.0.jar htrace-core-3.1.0-incubating.jar activation-1.1.jar hado
 op-mapreduce-client-core-2.5.1.jar commons-net-3.1.jar commons-digest
 er-1.8.jar hbase-annotations-1.3.1.jar jsch-0.1.42.jar commons-cli-1.
 2.jar xmlenc-0.52.jar httpcore-4.2.4.jar joni-2.1.2.jar api-util-1.0.
 0-M20.jar apacheds-kerberos-codec-2.0.0-M15.jar log4j-1.2.17.jar jett
 y-util-6.1.26.jar guava-12.0.1.jar zookeeper-3.4.6.jar hbase-common-1
 .3.1.jar
Main-Class: Test

我们需要的文件就都保存在/project_home/out目录下了,

传输到远程服务器

首先进入对应的out目录,执行下面的命令:

tar -cvf hbase_test.tar hbase_test_jar

使用scp命令拷贝到远程服务器:

scp hbase_test.tar xingoo@hnode10:/home/xingoo/

登录到远程服务器,解压:

tar -xvf hbase_test.tar

进入对应的目录直接执行jar包:

java -jar hbase-test.jar

结果200ms还可以接受吧...

本文转自博客园xingoo的博客,原文链接:HBase跨地区机房的压测小程序——从开发到打包部署(图文版),如需转载请自行联系原博主。

时间: 2024-11-10 12:04:21

HBase跨地区机房的压测小程序——从开发到打包部署(图文版)的相关文章

《微信小程序:开发入门及案例详解》—— 第2章 小程序开发核心 2.1 简介

第2章 小程序开发核心 上一章讲解了小程序创建流程,本章主要为大家讲解小程序框架及核心内容.小程序框架可让开发者在微信中用尽可能简单.高效的方式开发出具有原生App体验的服务,这套框架控制着小程序完整的生命周期,负责页面的加载.渲染.销毁等工作,它是小程序的核心,学习小程序前,我们一定要对这套框架有深入的了解.本章主要对小程序目录结构.文件类型进行详细分析,重点介绍小程序视图层WXML.MXSS,逻辑层JS,这些是小程序开发的核心内容.本章个别小节内容比较深,学习过程中不必过于深究,能对框架有个

《微信小程序:开发入门及案例详解》—— 1.3 第一个小程序

1.3 第一个小程序 完成开发准备后我们便可以开始编写小程序,微信小程序的开发十分简单,大家可以快速上手.下面我们利用官方提供的dmeo让大家对小程序开发有初步认识.1)打开微信开发者工具.第一次启动需要扫描二维码登录,如图1-9所示,开发权限配置参照上一小节. 2)登录后选择"添加项目".3)在填写项目信息之前,先创建一个空目录作为项目资源目录,这里我们以E:\weixin\demo为例.4)填写项目信息.如果没有AppID可以选择"无AppID":填写项目名称,

微信小程序开发教程第八章:微信小程序分组开发与左滑功能实现

接着上面微信小程序开发教程第八章:微信小程序分组开发与左滑功能实现.(第一二章:微信小程序开发教程,第三四章:微信小程序项目结构以及配置&微信小程序首页面开发,第五章:微信小程序名片夹详情页开发,第六章:「我」的页面开发,第七章:微信小程序编辑名片页面开发) 先来看看今天的整体思路: 进入分组管理页面-->点击新建分组新建 进入到未分组页面基本操作 进入到已建分组里面底部菜单栏操作-->从名片夹中添加进行操作. 理清完基本流程我们开始开发.首先整个布局可以先看下,我再一步步讲. 静态布

压测小工具

最近给某东西压测(由于是私有协议没有通用工具可用),就自己写了个可以给压力的工具,可以支持QPS显示和响应时间的分布显示,有兴趣的可以拿来玩玩 sql压测使用样例: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 import groovy.sql.Sql   /**  ``* @author <a h

《微信小程序:开发入门及案例详解》—— 2.4 框架页面文件

2.4 框架页面文件 小程序中一个框架页面包含4个文件,同一框架页面的这4个文件必须具有相同的路径与文件名,进入小程序时或页面跳转时,小程序会根据app.json配置的路径找到对应的资源进行渲染. ◇ .js文件:页面逻辑文件,必要项. ◇ .wxml文件:页面结构文件,必要项. ◇ .wxss文件:页面样式文件. ◇ .json文件:页面配置文件. 与框架主体文件相比框架页面文件多了一种页面结构文件,其余3个文件和框架主体文件的功能类同,下面我们一一讲解每个文件作用. 2.4.1 页面配置文件

《微信小程序:开发入门及案例详解》—— 导读

前 言      自2016年9月21日微信小程序公布以来,微信技术群中关于小程序的讨论就没间断过,这是又一次创业的好机会,尤其是对中小企业扩大网络影响力很有利.我们在抓紧时间学习小程序的过程中,总结并实践了小程序的功能,并希望通过这本书传达给广大的读者.我们在编写过程中正临电商行业中最忙的几个月,双11.双12.圣诞节.元旦节等需求已经堆叠如山,我和边思白天处理公司需求,晚上编写书籍,几乎没有周末,这样坚持了几个月终于完成本书,直至交稿时才如释重负.      小程序刚发布不久,很多功能都还在

《微信小程序:开发入门及案例详解》—— 第3章 布局 3.1 基本知识

第3章 布局 WXSS实现了CSS布局相关的大部分规范,但在一些细节上有差异,甚至同样的语法在小程序调试工具和微信中的表现也存在差异.本章主要讲述CSS布局相关的一些基本知识,包括经典的盒子模型.浮动定位.绝对定位以及近几年提出的Flex布局.这些基本知识在WXSS也是通用的.对于其他一些特性,开发者可在开发过程中尝试,如果大家想对CSS有更深的了解可以参考网络资料或<CSS权威指南>.这里再次提醒大家,在代码编写过程中一定要开启开发者工具中的这个功能:"开启上传代码时样式文件自动补

《微信小程序:开发入门及案例详解》—— 2.5 模块化

2.5 模块化 小程序逻辑层语言是JavaScript,而JavaScript作为脚本语言在设计初期仅是为了实现简单的页面交互,由Brendan Eich在1995年花了不到十天时间发明出来,语言本身缺失了很多用于支撑大型项目的设计,而现在前端业务逻辑越来越复杂,代码也越来越多,很多问题就暴露出来.模块化主要解决JavaScript中命名冲突和文件依赖这两个问题,现在模块化在前端中使用比较广泛,如Nodejs.Requirejs.Seajs.Webpack等,它们大部分都遵循或者接近Common

《微信小程序:开发入门及案例详解》—— 2.2 “徒手”创建小程序

2.2 "徒手"创建小程序 为了让开发者更好地理解小程序框架运行机制,接下来将带领大家"徒手"创建一个结构最简单的小程序,这样每个细节都是开发者自己完成的,这对理解小程序框架有很大帮助.步骤如下: 1)创建项目目录,这里以E:\weixin\myproject为例. 2)按图2-2所示的目录结构创建文件: 3)打开app.json,写入以下代码: { "pages" : [ / 指定默认启动页面地址 / "mypages/index/i