Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Scala 操作 HBase2.0 数据库

Scala 操作 HBase2.0 数据库

原创
作者头像
ZHANGHAO
修改于 2019-03-06 02:46:45
修改于 2019-03-06 02:46:45
3.2K20
代码可运行
举报
文章被收录于专栏:张浩的专栏张浩的专栏
运行总次数:0
代码可运行

环境配置

Maven添加hbase-client的依赖

代码语言:txt
AI代码解释
复制
  <!--HBase Client-->
    <dependencies>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>2.1.2</version>
        </dependency>
    </dependencies>

Scala操作HBase

创建HBase的配置、Connection、Admin

代码语言:txt
AI代码解释
复制
  /*
  *创建一个HBase的配置,创建的时候会去加载classpath下的hbase-default.xml和hbase-site.xml两个配置文件
  */
  private val conf = HBaseConfiguration.create()
  //设置Zookeeper的地址和端口来访问HBase,先从配置中读取,如配置中不存在,设置地址为localhost,端口为默认端口2181
  conf.set(HConstants.ZOOKEEPER_QUORUM, conf.get(HConstants.ZOOKEEPER_QUORUM, HConstants.LOCALHOST))
  conf.set(HConstants.ZOOKEEPER_CLIENT_PORT, conf.get(HConstants.ZOOKEEPER_CLIENT_PORT, HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT.toString))

  //创建操作HBase的入口connection
  private val conn: Connection = ConnectionFactory.createConnection(conf)
  //创建操作HBase表的入口Admin
  private val admin: Admin = conn.getAdmin

获取表

代码语言:txt
AI代码解释
复制
 /**
    * 获取表
    *
    * @param tableName 表名
    * @return HBase表
    */

  def getTable(tableName: String): Table = {
    val table = Try(conn.getTable(TableName.valueOf(tableName)))
    table.get.close()
    table match {
      case Success(v) => v;
      case Failure(e) => e.printStackTrace()
        null
    }
  }

创建表

代码语言:txt
AI代码解释
复制
/**
    * 创建表
    *
    * @param tableName 表名
    * @param cf        列族
    */
  def createTable(tableName: String, cf: String): Unit = {
    //创建表
    val tableDesc = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName))
    tableDesc.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder("basic".getBytes).build())
    println(s"Creating table `$tableName`. ")
    Try {
      if (admin.tableExists(TableName.valueOf(tableName))) {
        admin.disableTable(TableName.valueOf(tableName))
        admin.deleteTable(TableName.valueOf(tableName))
      }
      admin.createTable(tableDesc.build())
      admin.close()
      println("Done!")
    } match {
      case Success(_) =>
      case Failure(e) => e.printStackTrace()
    }

  }

删除表

代码语言:txt
AI代码解释
复制
/**
    * 删除表
    *
    * @param tableName 表名
    * @param rowKey    行键
    */
  def delete(tableName: String, rowKey: String): Unit = {
    val table = conn.getTable(TableName.valueOf(tableName))
    Try {
      val d = new Delete(rowKey.getBytes)
      table.delete(d)
      table.close()
    } match {
      case Success(_) =>
      case Failure(e) => e.printStackTrace()
    }

  }

往表中存放数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
    *
    * 往表中存放数据
    *
    * @param tableName 表名
    * @param rowKey    行键
    * @param cf        列族
    * @param qualifier 列限定符
    * @param value     具体的值
    */
  def put(tableName: String, rowKey: String, cf: String, qualifier: String, value: String): Unit = {
    println(s"Put row key $rowKey into $tableName. ")
    val table = conn.getTable(TableName.valueOf(tableName))
    Try {
      //准备一个row key
      val p = new Put(rowKey.getBytes)
      //为put操作指定 column qualifier 和 value
      p.addColumn(cf.getBytes, qualifier.getBytes, value.getBytes)
      //放数据到表中
      table.put(p)
      table.close()
    } match {
      case Success(_) => println("Done!")
      case Failure(e) => e.printStackTrace()
    }
  }

获得表中的数据

代码语言:txt
AI代码解释
复制
 /**
    * 获得表里面的数据
    *
    * @param tableName 表名
    * @param rowKey    行键
    * @param cf        列族
    * @param qualifier 列限定符
    * @return 获得的数据
    */
  def get(tableName: String, rowKey: String, cf: String, qualifier: String): String = {
    val table = conn.getTable(TableName.valueOf(tableName))
    Try {
      val g = new Get(rowKey.getBytes)
      val result = table.get(g)
      table.close()
      Bytes.toString(result.getValue(cf.getBytes(), qualifier.getBytes()))
    } match {
      case Success(v) => v
      case Failure(e) => e.printStackTrace()
        null
    }

  }

扫描表中的数据

代码语言:txt
AI代码解释
复制
 /**
    * 扫描数据
    *
    * @param tableName 表名
    * @param cf        列族
    * @param qualifier 列限定符
    */
  def scan(tableName: String, cf: String, qualifier: String): Unit = {
    val table = conn.getTable(TableName.valueOf(tableName))
    val s = new Scan()
    s.addColumn(cf.getBytes, qualifier.getBytes)
    val scanner = table.getScanner(s)
    Try {
      val iterator = scanner.iterator()
      while (iterator.hasNext) {
        val next = iterator.next()
        println("Found row: " + next)
        println("Found value: " + Bytes.toString(
          next.getValue(cf.getBytes, qualifier.getBytes)))
      }
      scanner.close()
      table.close()
    } match {
      case Success(_) =>
      case Failure(e) => e.printStackTrace()
    }

  }

附录

完整的代码已经上传到gist。

file-hbaseutils-scala

参考文献:

Spark 下操作 HBase(1.0.0 新 API)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
2 条评论
热度
最新
import TRTC from 'trtc-js-sdk'; 哥这一步就报错了
import TRTC from 'trtc-js-sdk'; 哥这一步就报错了
11点赞举报
我也是,报错,老铁,你这个 解决了吗?
我也是,报错,老铁,你这个 解决了吗?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
一篇文章完成Hbase入门
逻辑上,HBase的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从HBase的底层物理存储结构(K-V)来看,HBase更像是一个multi-dimensional map(多维地图)
ha_lydms
2023/11/26
1.4K0
一篇文章完成Hbase入门
HBase快速入门【集群安装配置、读写过程、表模型、命令行、API】
HBase与MySQL、Oralce、DB2、SQLServer等关系型数据库不同,它是一个NoSQL数据库(非关系型数据库)
Java架构师必看
2021/05/14
5120
HBase快速入门【集群安装配置、读写过程、表模型、命令行、API】
Win10 IDEA远程连接HBase
IDEA自带Maven,如果需要自己安装Maven可以参考安装Maven 创建项目,选择Maven,模板选择第一个maven-archetype-archetype
超级小的大杯柠檬水
2024/11/21
1280
Win10 IDEA远程连接HBase
【大数据技术基础 | 实验八】HBase实验:新建HBase表
通过Java代码实现与HBase数据库连接,然后用Java API创建HBase表,向创建的表中写数据,最后将表中数据读取出来并展示。
Francek Chen
2025/01/22
4770
【大数据技术基础 | 实验八】HBase实验:新建HBase表
Hadoop基础教程-第10章 HBase:Hadoop数据库(10.6 HBase API)
第10章 HBase:Hadoop数据库 10.6 HBase API (新特性) 本节所有代码可以从https://github.com/ihadron/hbase.git下载。 10.6.1 HB
程裕强
2018/01/02
2.4K0
Hadoop基础教程-第10章 HBase:Hadoop数据库(10.6 HBase API)
HBase的安装和使用
原文链接:https://foochane.cn/article/2019062801.html
foochane
2019/07/01
1.5K0
Hbase的javaAPI
(这里的方法在运行的时候要开启Hbase集群服务) 启动HBase 由于伪分布式下的 HBase 依赖 HDFS ,因此我们需要先启动 HDFS :
Maynor
2021/12/20
3780
HBase篇--HBase操作Api和Java操作Hbase相关Api
Hbase shell启动命令窗口,然后再Hbase shell中对应的api命令如下。
LhWorld哥陪你聊算法
2018/09/13
1.7K0
HBase篇--HBase操作Api和Java操作Hbase相关Api
HBase2.2.x 学习笔记
如果指定了 family或者 qualifier则删除的是部分字段,否则是删除整行
前Thoughtworks-杨焱
2021/12/07
4090
HBase案例之2个逻辑思维训练小题目
我们知道,在对Hbase表中的数据进行全表扫描时,可以指定rowkey的范围,比如:
CoderJed
2018/09/13
9360
HBase案例之2个逻辑思维训练小题目
Hadoop——HBase配置、shell编程和api编程
点击下载 链接:https://pan.baidu.com/s/17r-mfTTYwrgLFh50xDVEvA 提取码:h25r
不愿意做鱼的小鲸鱼
2022/09/24
3960
Hadoop——HBase配置、shell编程和api编程
HBase Java编程示例
HelloWorld.zip 点击(此处)折叠或打开 package elementary; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.atomic.Ato
一见
2018/08/06
6890
Spring Boot 优雅实现hbase功能
要在 Spring Boot 项目中实现 HBase 的功能,首先需要理解原理和作用,然后通过实际操作将其集成到 Spring Boot 项目中。以下是从理论到实践的详细步骤:
小马哥学JAVA
2024/06/24
1.1K0
2021年大数据HBase(五):HBase的相关操作-JavaAPI方式!【建议收藏】
因为缴费明细的数据记录非常庞大,该公司的信息部门决定使用HBase来存储这些数据。并且,他们希望能够通过Java程序来访问这些数据。
Lansonli
2021/10/11
1.2K1
Spark读写HBase之使用Spark自带的API以及使用Bulk Load将大量数据导入HBase
以上两个算子分别是基于Hadoop新版API和hadoop旧版API实现的,大部分代码都一样,需要注意的是新版API使用中Job类,旧版API使用JobConf类,另外导包的时候新版的相关jar包在org.apache.hadoop.mapreduce下,而旧版的相关jar包在org.apache.hadoop.mapred下
CoderJed
2018/09/13
3.3K0
Spark 下操作 HBase(1.0.0 新 API)
hbase1.0.0版本提供了一些让人激动的功能,并且,在不牺牲稳定性的前提下,引入了新的API。虽然 1.0.0 兼容旧版本的 API,不过还是应该尽早地来熟悉下新版API。并且了解下如何与当下正红的 Spark 结合,进行数据的写入与读取。鉴于国内外有关 HBase 1.0.0 新 API 的资料甚少,故作此文。
Spark学习技巧
2018/08/01
6180
HBase学习
操作 HBase 所用的 jar 包,使用 Maven 导入,引入依赖 hbase-it,pom.xml 文件依赖部分如下:
Wizey
2018/08/30
8240
Hbase连接与数据处理
注意:一次只能为一个表的一行数据的一个列,也就是一个单元格添加一个数据,所以直接用shell命令插入数据效率很低,在实际应用中,一般都是利用编程操作数据。
码客说
2023/01/11
5650
HBase快速入门系列(6) | Hbase简单的API操作
1. 添加依赖 <dependencies> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>org.apache.hbase</groupId>
不温卜火
2020/10/28
6010
HBase快速入门系列(6) | Hbase简单的API操作
项目使用Hbase进行数据快速查询的代码案例
之前项目中对于数据详情的查询使用的ddb技术,由于成本过高,现考虑使用开源的hbase框架,借此机会进行hbase的代码案例记录,之前已经对
小勇DW3
2019/07/08
2.4K0
相关推荐
一篇文章完成Hbase入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验