Hbase插入参数测试与对比

简介: HBase读写性能和几个参数有密切关系,比如cache和batch会影响读, 而write buffer会影响写,另外除了参数会影响,在程序里怎么处理也极大的影响插入性能,诸如List比一条一条put性能是否要高呢? 网上大部分言论是否正确呢?今天我会通过程序读取HBASE,然后再原封不动的写入另外一张表,对比各个参数的组合对插入的影响。HTable htable1 = new HTable(hbaseconf, "test2");Scan scan1 = new Scan();ResultScanner scaner = htable.getScanner(scan1);List

HBase读写性能和几个参数有密切关系,比如cache和batch会影响读, 而write buffer会影响写,另外除了参数会影响,在程序里怎么处理也极大的影响插入性能,诸如List比一条一条put性能是否要高呢? 网上大部分言论是否正确呢?今天我会通过程序读取HBASE,然后再原封不动的写入另外一张表,对比各个参数的组合对插入的影响。

HTable htable1 = new HTable(hbaseconf, "test2");
Scan scan1 = new Scan();
ResultScanner scaner = htable.getScanner(scan1);
List list = new ArrayList();
scan1.setCaching(300);
htable1.setWriteBufferSize(610241024);
htable1.setAutoFlush(false);
put.setWriteToWAL(false)

测试一:
方法 参数 时间 插入条数 结果比较
put setWriteToWAL(false)
setCaching(300)
setWriteBufferSize(610241024)
setAutoFlush(false) 1分钟 105000 所有参数给到最优的时候,2者性能旗鼓相当
List List<500>
setWriteToWAL(false)
setCaching(300)
setWriteBufferSize(610241024)
setAutoFlush(false) 1分钟 105000

测试二:

方法 参数 时间 插入条数 结果比较
put setWriteToWAL(true)
setCaching(300)
setWriteBufferSize(610241024)
setAutoFlush(false) 1分钟 95000 开启不写Wal log好像没有影响,哪怕对put也影响不大
List List<500>
setWriteToWAL(true)
setCaching(300)
setWriteBufferSize(610241024)
setAutoFlush(false) 1分钟 105000

测试三:

方法 参数 时间 插入条数 结果比较
put setWriteToWAL(true)
setCaching(300)
setWriteBufferSize(110241024)
setAutoFlush(false) 1分钟 95000 write buffer List
影响较大,但是对Put好像
没什么影响
List List<500>
setWriteToWAL(true)
setCaching(300)
setWriteBufferSize(110241024)
setAutoFlush(false) 1分钟 75000

测试四:

方法 参数 时间 插入条数 结果比较
put setWriteToWAL(true)
setCaching(300)
setWriteBufferSize(610241024)
setAutoFlush(true) 1分钟 20000 auto flush 对Put影响极大,但是对List没影响要少很多
List List<500>
setWriteToWAL(true)
setCaching(300)
setWriteBufferSize(610241024)
setAutoFlush(true) 1分钟 65000

通过以上几个测试, setAutoFlush参数对性能影响最大,不管是QQ号码转让通过List 还是直接put, 另外write buffer影响对List 有较大影响。 本身的List和put 好像差距不大,甚至说没有差距。

所以对于Hbase使用put插入,主要关注2个参数,一个是write buffer,一个就是setAutoFlush.

整个测试程序:

import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.util.Bytes;

import com.sun.java_cup.internal.runtime.Scanner;
import com.sun.org.apache.xpath.internal.operations.Mod;

public class filterTest {
public static void main(String[] args) throws IOException {

SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Configuration hbaseconf = HBaseConfiguration.create();
hbaseconf.set("hbase.zookeeper.quorum",
"datanode01.isesol.com,datanode02.isesol.com,datanode03.isesol.com,datanode04.isesol.com,cmserver.isesol.com");
hbaseconf.set("hbase.zookeeper.property.clientPort", "2181");
hbaseconf.set("user", "hdfs");
HTable htable = new HTable(hbaseconf, "t_ui_all");
HTable htable1 = new HTable(hbaseconf, "test2");
Scan scan1 = new Scan();
scan1.setCaching(300);

/*Filter rowfilter = new RowFilter(CompareOp.EQUAL,
new BinaryPrefixComparator(Bytes.toBytes("A131420033-1007-9223370539574828268")));
Filter rowfilter1 = new RowFilter(CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes("A131420033-1007-9223370539574828268"))); */

// scan1.setRowPrefixFilter(Bytes.toBytes("A131420033-1007-9223370539574828268"));
// Filter filter = new SingleColumnValueFilter(Bytes.toBytes("cf"),
// Bytes.toBytes("fault_level2_name"), CompareOp.EQUAL,
// Bytes.toBytes("电气问题"));
// scan1.setFilter(rowfilter);
// scan1.setRowPrefixFilter(Bytes.toBytes("A131420033-1007-9223370539574828268"));
ResultScanner scaner = htable.getScanner(scan1);
List list = new ArrayList();
Result result = null;
int j = 0;
System.out.println("start to scan original table and put this result into List" + dateformat.format(System.currentTimeMillis()));

htable1.setWriteBufferSize(610241024);
//htable1.setAutoFlush(false);

while (scaner.iterator().hasNext()) {

result = scaner.next();
Put put = new Put(result.getRow());
//put.setWriteToWAL(false);
for (int i = 0; i <= result.listCells().size() - 1; i++) {
put.add("cf".getBytes(), Bytes.toBytes(new String(result.listCells().get(i).getQualifier())), result
.getValue("cf".getBytes(), new String(result.listCells().get(i).getQualifier()).getBytes()));
}
/* j++;
htable1.put(put);
System.out.println("total number is " + j + " start to put these data into hbase");*/

list.add(put);

j++;

if(j % 500 == 0){
System.out.println("total number is " + j + " start to put these data into hbase" + list.size());

htable1.put(list);
list.clear();
}
}

htable1.put(list);
htable1.close();
htable.close();

System.out.println("Job finish" + dateformat.format(System.currentTimeMillis()));
}

}

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
7月前
|
JavaScript 前端开发 测试技术
Postman 加密接口测试 | 使用Rsa、Aes对参数加密
Postman 加密接口测试 | 使用Rsa、Aes对参数加密
1092 0
|
存储 Oracle 关系型数据库
HBase集群环境搭建与测试(上)
HBase集群环境搭建与测试
265 0
|
7月前
|
Web App开发 Java Linux
Nexus【部署 02】最新版本 nexus-3.35.0-02-unix.tar.gz 安装配置启动及测试(JDK版本+虚拟机参数配置说明)
Nexus【部署 02】最新版本 nexus-3.35.0-02-unix.tar.gz 安装配置启动及测试(JDK版本+虚拟机参数配置说明)
507 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-13-Hive 启动Hive 修改启动参数命令行启动测试 几句简单的HQL了解Hive
Hadoop-13-Hive 启动Hive 修改启动参数命令行启动测试 几句简单的HQL了解Hive
66 2
|
2月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
117 1
|
2月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
78 4
|
2月前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
157 0
|
4月前
|
Shell
[shell]在curl测试的data参数中引用变量
[shell]在curl测试的data参数中引用变量
240 1
|
5月前
|
数据采集 存储 测试技术
使用LabVIEW和示波器测试IGBT参数
使用LabVIEW和示波器测试IGBT参数
51 0
|
7月前
|
测试技术 Apache Windows
如何使用apache的ab压力测试小工具传参数
该内容是关于在Windows环境下使用PHPStudy中的Apache集成的ab工具进行性能测试的简要教程。
71 9