HBase Java API 开发:批量操作 第3关:批量导入数据至HBase

news2024/11/26 18:35:40

每一次只添加一个数据显然不像是大数据开发,在开发项目的时候也肯定会涉及到大量的数据操作。

使用Java进行批量数据操作,其实就是循环的在Put对象中添加数据最后在通过Table对象提交。

如何进行批量操作呢,讲到批量操作,相信大家肯定第一时间会想到循环?

没错,使用循环确实就可以添加多个数据了,示例:

Table tableStep3 = connection.getTable(tableStep3Name);
// 循环添加数据
byte[] row = Bytes.toBytes("20001");
Put put = new Put(row);
for (int i = 1; i <= 4; i++) {
byte[] columnFamily = Bytes.toBytes("data");
byte[] qualifier = Bytes.toBytes(String.valueOf(i));
byte[] value = Bytes.toBytes("value" + i);
put.addColumn(columnFamily, qualifier, value);
}

tableStep3.put(put);

代码执行结果:

可以发现,这一段代码向同一个行中添加了四列数据。

我们要添加多行数据应该如何处理呢,我猜你肯定想到了:使用集合!

List<Put> puts = new ArrayList<>();
// 循环添加数据
for (int i = 1; i <= 4; i++) {
byte[] row = Bytes.toBytes("row" + i);
Put put = new Put(row);
byte[] columnFamily = Bytes.toBytes("data");
byte[] qualifier = Bytes.toBytes(String.valueOf(i));
byte[] value = Bytes.toBytes("value" + i);
put.addColumn(columnFamily, qualifier, value);
puts.add(put);
}
Table table = connection.getTable(tableName);
table.put(puts);

上述代码向HBase中添加了四行数据,结合上次实训,可以发现table对象的put()方法是一个重载方法既可以接收Put对象也可以接收Put集合

添加完数据的表结构:

编程要求

好了,到你啦,在右侧编辑器begin-end中编写Java代码向HBasestu表(表需要自己创建)中添加数据如下:

表名行键列族:列
stu20181122basic_info:name阿克蒙德
stu20181122basic_info:gendermale
stu20181122basic_info:birthday1987-05-23
stu20181122basic_info:connecttel:13974036666
stu20181122basic_info:addressHuNan-ChangSha
stu20181122school_info:collegeChengXing
stu20181122school_info:classclass 1 grade 2
stu20181122school_info:objectSoftware
stu20181123basic_info:name萨格拉斯
stu20181123basic_info:gendermale
stu20181123basic_info:birthday1986-05-23
stu20181123basic_info:connecttel:18774036666
stu20181123basic_info:addressHuNan-ChangSha
stu20181123school_info:collegeChengXing
stu20181123school_info:classclass 2 grade 2
stu20181123school_info:objectSoftware

可以发现这里有两个列族,如何添加多个列族呢?

在我们之前讲到的建表中setColumnFamily(family)方法,这个方法是可以调用多次的。

package step3;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.TableDescriptors;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
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.Table;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.util.Bytes;
public class Task {
 public void batchPut()throws Exception{
   /********* Begin *********/
   Configuration config = new Configuration();
   Connection conn = ConnectionFactory.createConnection(config);
   Admin admin = conn.getAdmin();
   // 建表
   TableName tableName = TableName.valueOf(Bytes.toBytes("stu"));
   TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);
   ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("basic_info")).build();
   ColumnFamilyDescriptor family2 = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("school_info")).build();
   builder.setColumnFamily(family);
   builder.setColumnFamily(family2);
   admin.createTable(builder.build());
   List<Put> puts = new ArrayList<>();
   String[] rows = {"20181122","20181123"};
   String[][] basic_infos = {{"阿克蒙德","male","1987-05-23","tel:139********","HUNan-ChangSha"},{"萨格拉斯","male","1986-05-23","tel:187********","HUNan-ChangSha"}};
   String[] basic_colums = {"name","gender","birthday","connect","address"};
   String[][] school_infos = {{"ChengXing","class 1 grade 2","Software"},{"ChengXing","class 2 grade 2","Software"}};
   String[] school_colums = {"college","class","object"};
   for (int x = 0; x < rows.length; x++) {
     // 循环添加数据
     Put put = new Put(Bytes.toBytes(rows[x]));
     for (int i = 0; i < basic_infos.length; i++) {
       byte[] columFamily = Bytes.toBytes("basic_info");
       byte[] qualifier = Bytes.toBytes(basic_colums[i]);
       byte[] value = Bytes.toBytes(basic_infos[x][i]);
       put.addColumn(columFamily, qualifier, value);
     }
     for (int i = 0; i < school_infos.length; i++) {
       byte[] columFamily = Bytes.toBytes("school_info");
       byte[] qualifier = Bytes.toBytes(school_colums[i]);
       byte[] value = Bytes.toBytes(school_infos[x][i]);
       put.addColumn(columFamily, qualifier, value);
     }
     puts.add(put);
   }
   Table table = conn.getTable(tableName);
   table.put(puts);
   /********* End *********/
 }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/88824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

秋招必备!阿里产出的高并发+JVM豪华套餐送给你,绝对硬核干货

**3、设计了方案&#xff0c;但细节掌握不透彻&#xff1a;**讲不出方案要关注的技术点和可能带来的消极影响。比如读性能有瓶颈会引入缓存&#xff0c;但是忽视了缓存命中率、数据一致性、热点key等问题。 面对马上就要到来的双十一的秒杀环节&#xff0c;你是否已经有备无患…

[附源码]Node.js计算机毕业设计高校第二课堂管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

数据结构为何重要(《数据结构与算法图解》by 杰伊•温格罗)

本文内容借鉴一本我非常喜欢的书——《数据结构与算法图解》。学习之余&#xff0c;我决定把这本书精彩的部分摘录出来与大家分享。 基础数据结构&#xff1a;数组 数组是计算机科学中最基本的数据结构之一。如果你用过数组&#xff0c;那么应该知道它就是一个含有 数据的列表…

免费U盘文件恢复,你不知道的10款u盘恢复软件

U盘是我们在工作和生活中经常使用的移动存储设备。在操作U盘时&#xff0c;里面重要的文件可能会因为疏忽而被删除。通过电脑回收站、备份等方法都不能恢复U盘里面的数据&#xff0c;我们该怎么办&#xff1f;其实U盘删除的文件在删除后不会被完全删除&#xff0c;通过u盘恢复软…

以太网 STP、RSTP、MSTP基础配置、STP生成树安全保障操作命令介绍

2.13.0 以太网 STP、RSTP、MSTP配置、生成树安全保障操作 主要参考&#xff1a;华为S2750, S5700, S6700 V200R005(C00&C01&C02&C03) 产品文档 《命令手册》 MSTP快速生成树STP配置RSTP配置MSTP配置生成树的安全保障操作&#xff08;1&#xff09;根桥保护&#xf…

jdk1.8下载与安装教程(win11)

一、JDK下载 1.首先在Oracle官网上下载jdk1.8 打开官网&#xff1a;https://www.oracle.com/ 2.选择Developer Services的Java 3.选择Oracle JDK 4.选择Java8 Window点击&#xff1a; jdk-8u351-windows-x64.exe下载 5.接受Oracle Java SE的Oracle技术网络许可协议 …

Folate-PEG-DBCO,DBCO-PEG- FA,叶酸聚乙二醇环辛炔

●中文名&#xff1a;叶酸聚乙二醇环辛炔&#xff0c;叶酸聚乙二醇二苯基环辛炔&#xff0c;DBCO-PEG-叶酸 ●英文名&#xff1a;FA-PEG-DBCO &#xff0c; Folate-PEG-DBCO&#xff0c;DBCO-PEG- FA&#xff0c;DBCO-PEG-Folate&#xff0c;DBCO-PEG- Folic acid ●外观以及…

游戏合作伙伴专题:BreederDAO 与 SuperGaming 建立 SuperCharged 合作伙伴关系

BreederDAO 很高兴地宣布与 SuperGaming 建立合作伙伴关系&#xff0c;SuperGaming 是一家充满激情的游戏工作室&#xff0c;希望通过 Tower Conquest&#xff1a;Metaverse Edition 进军 Web 3 行业&#xff0c;这是一款基于 Polygon 区块链的免费多人塔防游戏。 征服新领域 S…

产品设计学习过程中的技术和方法

在产品设计的过程中&#xff0c;当你心中有创意设计时&#xff0c;你需要写下这个创意设计&#xff0c;并生成一个例子标记&#xff0c;以便总结你以前的想法。此时&#xff0c;你需要设计性能。在设计性能的过程中&#xff0c;我们需要使用各种设计工具&#xff0c;这些设计工…

自定义Springboot Starter

1.创建一个父项目&#xff1a; demo 1.1 项目结构&#xff1a; 1.2 pom文件内容&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/X…

大四web前端网页制作课作业——HTML+CSS+JavaScript仿小米手机商城网站(37页)

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

Windows + Pycharm + Docker 配置GPU跑深度学习【不常见GPU问题】

Windows Pycharm Docker 配置GPU跑深度学习 核心配置方法回顾&#xff0c;与 GPU无法使用的解决方案。 1. 更换镜像源 用于加速资源下载&#xff01;修改配置文件: daemon.json 添加国内镜像源&#xff1a; "registry-mirrors": ["https://registry.docke…

yolov5修改骨干网络--原网络说明

yolov5l网络示意图&#xff1a; 以yolov5s为例&#xff08;模型都是在yolov5l上修改了depth_multiple和width_multiple&#xff0c;上面图形是画的yolov5l的&#xff0c;下面的yaml是yolov5s的目的是为了更好的计算网络信息&#xff09; nc: 80 # number of classes depth_mu…

JuiceFS CSI Driver 常见问题排查指南

Kubernetes 作为资源调度和应用编排的开源系统&#xff0c;正在成为云计算和现代 IT 基础架构的通用平台。JuiceFS CSI Driver 实现了容器编排系统的存储接口&#xff0c;使得用户可以在 Kubernetes 中以原生的方式使用 JuiceFS。 由于 Kubernetes 自身的复杂性&#xff0c;用…

全栈Jmeter接口测试(十一):BeanShell脚本通过BeanShell进行加解密

BeanShell脚本 BeanShell简介&#xff1a; BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些 语法和方法&#xff1b; BeanShell是一种松散类型的脚本语言&#xff1b; BeanShell是用Java写成的&#xff0c;一个小型的、免费的、可以下载、嵌入式的 Ja…

四、Docker 镜像发布阿里云、私有库(详解、实操)第一篇

1、概述 在上一篇中我们讲解到从Docker央仓库pull下来的镜像(centos7),是没有vim、ifconfig等命令的,我们可以以centos7为基础安装vim、ifconfig等需要的命令,然后export为一个tar,然后再import为一个新的增强版本的centos7镜像。那问题来了,这种export、import方式有没…

java计算机毕业设计基于安卓Android的教务的校内人员疫情排查系统设计与实现APP

项目介绍 校内人员疫情排查系统APP管理是校内人员疫情排查系统管理中对学生必不可少的一个部分。在人们校内人员疫情排查系统管理的整个过程中,校内人员疫情排查系统APP管理担负着最重要的角色。为满足如今日益复杂的管理需求,各类校内人员疫情排查系统APP管理程序也在不断改进…

java----类的加载与其初始化

java内存分析&#xff1a; 类加载的过程&#xff1a; 类的加载与ClassLoader的理解&#xff1a; 类的初始化&#xff1a; package Collections; public class text1 { public static void main(String[]args){A anew A();System.out.println(A.m); } } class A{static {System…

语言模型(马尔可夫模型,n元语法)

参考&#xff1a;8.3. 语言模型和数据集 — 动手学深度学习 2.0.0 documentation 假设长度为T的文本序列中的词元依次为x1,x2,…,xT。 于是&#xff0c;xt&#xff08;1≤t≤T&#xff09; 可以被认为是文本序列在时间步t处的观测或标签。 在给定这样的文本序列时&#xff0c;语…

Ubuntu中使用gcc/g++编译C/C++

对于习惯了使用windows进行开发的朋友们&#xff0c;如果想要编译C语言&#xff0c;只要要在windows中安装一个可以编译的IDE即可。或者直接自己加载编译的工具链&#xff0c;使用Cmd命令行也可以完成C语言的编译。 但是如果想要在linux环境中编译C语言&#xff0c;安装编译工具…