大数据应用之HBase数据插入性能优化实测教程

2024-05-06 02:48

本文主要是介绍大数据应用之HBase数据插入性能优化实测教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言:

大家在使用HBase的过程中,总是面临性能优化的问题,本文从HBase客户端参数设置的角度,研究HBase客户端数据批量插入性能优化的问题。事实胜于雄辩,数据比理论更有说服力,基于此,作者设计了这么一个HBase数据插入性能优化实测实验,希望大家用自己的服务器跑出的结果,给自己一个值得信服的结论。

一、客户单优化参数

  1.Put List Size
  HBase的Put支持单条插入,也支持批量插入。

  2. AutoFlush  
  AutoFlush指的是在每次调用HBase的Put操作,是否提交到HBase Server。 默认是true,每次会提交。如果此时是单条插入,就会有更多的IO,从而降低性能

  3.Write Buffer Size
  Write Buffer Size在AutoFlush为false的时候起作用,默认是2MB,也就是当插入数据超过2MB,就会自动提交到Server

  4.WAL
  WAL是Write Ahead Log的缩写,指的是HBase在插入操作前是否写Log。默认是打开,关掉会提高性能,但是如果系统出现故障(负责插入的Region Server  挂掉),数据可能会丢失。

参数

默认值

说明

JVM Heap Size

 

平台不同值不同自行设置

AutoFlush

True

默认逐条提交

Put List Size

1

支持逐条和批量

Write Buffer Size

2M

与autoflush配合使用

Write Ahead Log

True

默认开启,需要手动关闭

 

 

 

 

二、源码程序

 import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;/** -------优化案例说明------------* 1.优化参数1:Autoflush                默认关闭,需要手动开启* 2.优化参数2:put list size            支持单条与批量* 3.优化参数3:JVM heap size             默认值是平台而不同,需要手动设置* 4.优化参数4:Write Buffer Size        默认值2M    * 5.优化参数5:Write Ahead Log             默认开启,需要手动关闭* */public class TestInsert {static Configuration hbaseConfig = null;public static void main(String[] args) throws Exception {Configuration HBASE_CONFIG = new Configuration();HBASE_CONFIG.set("hbase.master", "192.168.230.133:60000");HBASE_CONFIG.set("hbase.zookeeper.quorum", "192.168.230.133");HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181");hbaseConfig = HBaseConfiguration.create(HBASE_CONFIG);//关闭wal,autoflush,writebuffer = 24Minsert(false,false,1024*1024*24);//开启AutoFlush,writebuffer = 0insert(false,true,0);//默认值,全部开启insert(true,true,0);}private static void insert(boolean wal,boolean autoFlush,long writeBuffer)throws IOException {String tableName="etltest";HBaseAdmin hAdmin = new HBaseAdmin(hbaseConfig);if (hAdmin.tableExists(tableName)) {hAdmin.disableTable(tableName);hAdmin.deleteTable(tableName);}HTableDescriptor t = new HTableDescriptor(tableName);t.addFamily(new HColumnDescriptor("f1"));t.addFamily(new HColumnDescriptor("f2"));t.addFamily(new HColumnDescriptor("f3"));t.addFamily(new HColumnDescriptor("f4"));hAdmin.createTable(t);System.out.println("table created");HTable table = new HTable(hbaseConfig, tableName);table.setAutoFlush(autoFlush);if(writeBuffer!=0){table.setWriteBufferSize(writeBuffer);}List<Put> lp = new ArrayList<Put>();long all = System.currentTimeMillis();System.out.println("start time = "+all);int count = 10000;byte[] buffer = new byte[128];Random r = new Random();for (int i = 1; i <= count; ++i) {Put p = new Put(String.format("row d",i).getBytes());r.nextBytes(buffer);p.add("f1".getBytes(), null, buffer);p.add("f2".getBytes(), null, buffer);p.add("f3".getBytes(), null, buffer);p.add("f4".getBytes(), null, buffer);p.setWriteToWAL(wal);lp.add(p);if(i%1000 == 0){table.put(lp);lp.clear();}}System.out.println("WAL="+wal+",autoFlush="+autoFlush+",buffer="+writeBuffer+",count="+count);long end = System.currentTimeMillis();System.out.println("total need time = "+ (end - all)*1.0/1000+"s");System.out.println("insert complete"+",costs:"+(System.currentTimeMillis()-all)*1.0/1000+"ms");}
}

三、集群配置

3.1 服务器硬件配置清单

序号

节点名称

CUP

内存

硬盘

带宽

1

HMaster

 

 

 

 

2

HregionServer1

 

 

 

 

3

HregionServer2

 

 

 

 

4

 

 

 

 

5

 

 

 

 

 

6

 

 

 

 

 

7

 

 

 

 

 

3.2 客户端硬件配置清单

设备

节点名称

 

Cpu

 

 

内存

 

 

硬盘

 

 

带宽

 

 

四、测试报告

数据量

JVM

AutoFlush

Put List Size

WriteBufferSize

WAL

耗时

1000

512m

false

1000

1024*1024*24

false

 

2000

 

 

 

 

 

 

5000

 

 

 

 

 

 

10000

 

 

 

 

 

 

20000

 

 

 

 

 

 

50000

 

 

 

 

 

 

100000

 

 

 

 

 

 

200000

 

 

 

 

 

 

500000

 

 

 

 

 

 

100000

 

 

 

 

 

 

备注:该技术专题讨论正在群Hadoop高级交流群:293503507同步直播中,敬请关注。

这篇关于大数据应用之HBase数据插入性能优化实测教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963288

相关文章

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片