【Hbase批量插入数据】

article/2025/9/13 20:46:17

一.批量插入数据(hbase用户执行,不可以调整key)

-- create 'ns_zj001:bigTab','f01'

-- put 'ns_zj001:bigTab','001','f01:name','zhangsan'

java -cp ./hbase-tools-1.0.jar:`hbase classpath` com.suning.tools.Tools -zk hbase01-dev.cnsuning.com,hbase02-dev.cnsuning.com,hbase03-dev.cnsuning.com:2015:/hbase -put -batch 150 -threads 5 -count 1000 -speed 3 -table zj001:tabTestAgain -fq f01:name

说明:

1.hbase-tools-1.0.jar下载地址 hbase+批量上传jar包-Java文档类资源-CSDN下载hbase+批量上传jar包更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/zhujunqtp/86503732

2.依次为固定格式,集群信息

3.batch一个线程一次性插入条数,thread线程数,count总条数,table表名,fq列名(列族:列名)

二.linux环境执行shell批量插入

echo "create 'zj001:tmp110','f',{NUMREGIONS => 20, SPLITALGO => 'HexStringSplit'}" | hbase shell

for i in $(seq 1 100000); do a=`uuidgen`;echo "put 'zj002:tmp01','$a','f:name','$a'"; done | hbase shell   -- 平均插入 100000 条数据

-- 数据落盘
echo "flush 'zj001:tmp110'" | hbase shell               

三.利用ycsb插入数据,雅虎性能测试工具(key可控,效率更高)

ycsb工具:hbase+ycsb工具-Java文档类资源-CSDN下载hbase+ycsb工具更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/zhujunqtp/86503738

-- 创建表 20个分区
hbase(main):001:0> n_splits = 20      --分区数量
hbase(main):002:0> create 'ns_zjpre:tmp80', 'f', {SPLITS => (1..n_splits).map {|i| "user#{1000+i*(9999-1000)/n_splits}"}}   -创建分区表

-- fieldlength 单个 value大小 1kb,一行可以粗略认为是1kb数据
-- operationcount 操作数   209715200 = 1024 * 1024 * 200 = 200G
-- insertcount 插入数         209715200 = 1024 * 1024 * 200 = 200G

ycsb 安装地址 /home/hbase/ycsb-hbase12-binding-0.14.0
[hbase@namenode1-pst-xg ycsb-hbase12-binding-0.14.0]$ pwd
/home/hbase/ycsb-hbase12-binding-0.14.0
脚本在/home/hbase/ycsb-hbase12-binding-0.14.0/bin下面

执行:
./ycsb.sh run hbase12 -p workload=com.yahoo.ycsb.workloads.CoreWorkload -p table=ns_zjpre:tmp80 -p columnfamily=f -p clientbuffering=true -p fieldcount=1 -p fieldlength=1024

-p updateproportion=1 -p readproportion=0 -p insertproportion=0 -p writeallfields=true -p insertorder=hashed -p requestdistribution=zipfian -p operationcount=209715200-p insertcount=209715200 

-p zeropadding=9 -threads 30 -s

说明:

1.-- operationcount ,insertcount操作数 209715200为具体数,不能是表达式,=前后不能含有空格,否则无法识别

2..ycsb 造的数据 rowKey格式是 user[0-9]+

3.updateproportion=1,表示为纯插入模式

operationcount 是要操作的数量,insertcount 是插入数据的范围,为了保证数据尽可能覆盖每个分区,可将insertcount 设置的大一点,比如999999999

requestdistribution=uniform,数据均匀分布

--insertorder=ordered,requestdistribution=sequential
insertorder=ordered,不会产生数据碰撞
requestdistribution=sequential,能保证每条数据的rowKey 是唯一的

zeropadding 控制 前面是否填充0

recordcount 插入条数

insertorder=ordered + zeropadding=9 => 1 会生成 user000000001,如果生成的 数据总条数小于 1000 然后 zeropadding 设置4 那么会生成 user0001 ~user1000 的数据 user1x ~ user9x 的分区 就都是空的。

--insertorder=hashed,requestdistribution=zipfian
insertorder=hashed 这个会对生成的rowKey 做hash,大数据量的情况下可能碰撞 导致数据被覆盖,所以实际的数据量可能小于你设置的值
requestdistribution=zipfian,这个是生成rowKey的策略 ,含有一定随机性,不能保证每条数据的rowKey 是唯一的

4.

/hbase/data/ns_bdptrt/table_100part1/fe96ccf8802c1c8381c3296fdb7984fb/f/ns_bdptrt=table_100part1_20200109205217215=7b41f2ced80ce2d564f2b26b776daac4-24c5ea5f85fe4e4a87945320a16cc1f7_SeqId_4_

table_100part1_20200109205217215 这个archive下面的数据被 table_100part1 引用了,所以会一直存在 直到 hbase 下一次合并。所以基本上archive 里面的东西 都不需要管,hbase 会自动处理

5.写数据,region做compact都会移动文件

6.

保证分区数和位数对应:

n_splits = 200 # HBase recommends (10 * number of regionservers)
n_step = 9999 / n_splits
create 'ns_test:test_1y',{NAME => 'f', COMPRESSION => 'LZO'}, {SPLITS => (1..(n_splits-1)).map {|i| "user#{"%04d"% (i * n_step)}"}}

7.

truncate tablename:不保留预分区
truncate_preserve tablename:保留预分区


http://chatgpt.dhexx.cn/article/QRCJ3BLX.shtml

相关文章

大数据写入到Oracle数据库(批量插入数据)

开发中经常遇到批量插入数据的需求,为了提高开发效率大多会使用ORM架构,个别之处 才会手写SQL,我们使用C#.NET Core5.0开发,所以优先选择了微软的EF。 但是EF原生没有批量操作功能,需要自己扩展或使用第三方的扩展&am…

Mybatis如何批量插入数据?

有一小段时间没有写技术博文了,今天我又来更新啦😊😊😊5月份中间有个小插曲,那就是我在单位打球意外导致脚跟腱受伤,然后住院在家修养了一个多月了,所以小伙伴们在外锻炼时还是时刻注意自身的安…

MYSQL-批量插入数据

批量插入数据 存储过程也有返回值,存储过程有一个或多个返回值,函数有且只有一个返回值 往表里插入1000w数据 1.建表 create database bigData; use bigData;create table dept( id int unsigned primary key auto_increment, deptno mediumint unsi…

Mybatis批量插入数据

前言 在很多业务场景中,我们需要批量录入数据。那么意味着我们需要以最高效的方式去实现功能,同时也需要保证软件的便捷性与可维护性,开源字节使用MyBatis foreach标签方式优雅的实现了材料的出入库。源码开放,可前往码云仓库免费…

批量插入

目录 一、批量插入数据 ⚪JDBC的批量处理语句的方法 二、高效的批量插入 1.举例:向goods表中插入20000条数据 ⭐goods表的创建 方式一:使用Statement 方式二: 使用PreparedStatement替换Statement 🌙方式一与方式二的对比…

三种批量插入数据的方法

批量插入数据 本文将介绍三种批量插入数据的方法。第一种方法是使用循环语句逐个将数据项插入到数据库中;第二种方法使用的是SqlBulkCopy,使您可以用其他源的数据有效批量加载 SQL Server 表;第三种使用的方法是sql server中的表值参数方法&a…

Vue 通过a标签下载文件

vue前端点击某个a便签需要下载对应文件&#xff0c;href为下载路径&#xff0c;download为下载文件名 这是Vue-cli3 写法 因为public文件夹是静态拷贝。 并不要把文件放到src>assets里面 因为assets中的文件会经过 webpack 打包&#xff0c;重新编译。 <a href"./p…

通过 a 标签下载文件

后台管理项目涉及到文件下载到本地&#xff0c;类型包括&#xff08;图片&#xff0c;音频&#xff0c;视频&#xff0c;office文件等等&#xff09;&#xff0c;只需将后台接口提供的url给到 a 标签即可。 <div class"preview-download" click.stop"downLoa…

a标签下载文档 a下载文档失败问题 跨域调用

可以通过a标签下载文档 a中有一个download属性 这个属性可以为空&#xff0c;如果写入的话这是写下载文档的名字 a标签默认下载是在同一个域内&#xff0c;如果跨域的话下载会失败&#xff0c;可能变成预览 出现的问题 from origin ‘http://localhost:8080’ has been blocke…

js使用a标签实现文件下载功能

工作中遇到下载txt文本文件的下载需求&#xff0c;稍作整理&#xff0c;下载示例如下&#xff1a; <button onclick"log()">文件下载</button>// 日志函数 function log() {// dom中创建a标签let aTag document.createElement(a)// 日志展示的内容let c…

JS-a标签下载文件

目录 问题描述解决方法拓展 另一种文件流下载 问题描述 昨天拿到一个需求,就是做成这种下载的模样 后台返回的下载链接长成这样 解决方法 就是一个最普通的方法,创建a标签 ,加上download属性,模拟标签点击 就可以触发下载了 注意:这个是因为直接拿到了请求链接,get请求 co…

HTML中的一些细节处理

# 说明 参考资料:简书的 伴歌知行的JS下载图片和文件&#xff0c;防止浏览器直接打开 、夜半修仙,;CSDN的weixin_3791475的使用a标签下载文件不跳转;努力学习的汪&#xff1a;洪学习笔记 文章目录 # 说明前端利用a标签实现文件[图片]下载文件下载常用方式总结分析Ⅰ-后端设置下…

JAVA中数组和集合的区别

转换 数组转换为集合&#xff1a; Arrays.asList(数组) 示例&#xff1a; 1 2 3 4 5 int[] arr {1,3,4,6,6};//定义一个长度为5数组 Arrays.asList(arr); for(int i0;i<arr.length;i){ System.out.println(arr[i]); } 集合转换为数组&#xff1a; 集合.toArray()…

JAVA中数组和集合的相互转换

数组转集合&#xff1a; 1.遍历&#xff0c;最常用的方法&#xff0c;但是过程会繁琐一点 int arrs[] {1, 2};//1.遍历List<Integer> list new ArrayList<>();for (int ele : arrs) {list.add(ele);}System.out.println(list);2.使用数组工具类的asList()方法 但…

数组与集合的区别及知识拓展

一、数组和集合的区别 1、数组的长度是固定的&#xff0c;一个数组只能存储一种类型的元素&#xff0c;可以存储任意类型。 2、集合的长度是可变的&#xff0c;存储引用数据类型&#xff0c;当存储基本数据类型时需要存储其对应的包装类。 二、知识拓展 1、基本数据类型所对应…

数组和集合的区别及定义方式

数组和集合的定义 一、数组 数组是java语言内置的数据类型&#xff0c;他是一个线性的序列&#xff0c;所有可以快速访问其他的元素&#xff0c;数组和其他语言不同&#xff0c;当你创建了一个数组时&#xff0c;他的容量是不变的&#xff0c;而且在生命周期也是不能改变的&a…

Java的数组与集合

Java的数组与集合 数组1.数组的概念2.数组的定义3.数组的初始化数组静态初始化数组动态初始化数组默认初始化值 4.数组元素访问5.数组的遍历6.数组的内存图JVM的内存图数组的内存图扩展 集合1.集合与数组的比较基本数据类型的包装类 2.集合中的成员方法 数组 1.数组的概念 数组…

数组与集合有什么不同之处

这个问题其实就是一个非常基础的面试题&#xff0c;一般面试官想了解你基础知识方面的掌握时&#xff0c;基本都会问这个问题&#xff0c;尤其是一些&#xff0c;计算机学子毕业之后&#xff0c;如果还是想要从事计算机技术相关的行业时&#xff0c;那么在面试的时候就需要做好…

kotlin数组和集合

一、Kotlin数组 1.对象数组 由Kotlin的main函数的写法&#xff0c;可以看出Kotlin中的对象数组写法与泛型的写法很像。 fun main(args: Array<String>){ } 声明对象数组的三种形式&#xff1a; (1)使用arrayOf函数和指定的数组元素创建数组 //Java写法: String[] p…

Java--数组和集合区别

一、数组 1、Java语言中的数组是一种引用数据类型&#xff1b;不属于基本数据类型 2、数组当中既可以存储“基本数据类型”的数据&#xff0c;也可以存储“引用数据类型”的数据&#xff08;数组既可以存储基本数据类型&#xff0c;又可以存储引用数据类型&#xff0c;基本数…