在前面:

scala:2.12

hbase:2.0.2

开发工具:IDEA

准备工作:

1、将生产上的hbase中的conf/hbase-site.xml文件拷贝到idea中的src/resources目录下

2、将生产环境中hbase中的$HBASE_HOME/lib下的*.jar文件加载到IDEA中

3、点击libraries->中间的"+" ->java

4、选择jar包所放的位置,点击OK

5、继续点击ok即可

6、进行连接代码编写:

package spark._core

import java.io.IOException

import java.util.UUID

import org.apache.hadoop.conf.Configuration

import org.apache.hadoop.hbase.client._

import org.apache.hadoop.hbase._

import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp

import org.apache.hadoop.hbase.filter.SingleColumnValueFilter

import org.apache.hadoop.hbase.filter.SubstringComparator

import org.apache.hadoop.hbase.util.Bytes

import parquet.org.slf4j.LoggerFactory

/**

* Author Mr. Guo

* Create 2018/11/5 - 19:08

*/

object Operator_Hbase {

def LOG = LoggerFactory.getLogger(getClass)

def getHbaseConf: Configuration = {

val conf: Configuration = HBaseConfiguration.create

conf.addResource(".\\main\\resources\\hbase-site.xml")

conf.set("hbase.zookeeper.property.clientPort","2181")

/*conf.set("spark.executor.memory","3000m")

conf.set("hbase.zookeeper.quorum","master,slave1,slave2")

conf.set("hbase.master","master:60000")

conf.set("hbase.rootdir","Contant.HBASE_ROOTDIR")*/

conf

}

//创建一张表

@throws(classOf[MasterNotRunningException])

@throws(classOf[ZooKeeperConnectionException])

@throws(classOf[IOException])

def createTable(hbaseconn: Connection, tableName: String, columnFamilys: Array[String]) = {

//建立一个数据库操作对象

var admin: Admin = hbaseconn.getAdmin;

var myTableName: TableName = TableName.valueOf(tableName)

if (admin.tableExists(myTableName)) {

LOG.info(tableName + "Table exists!")

} else {

val tableDesc: HTableDescriptor = new HTableDescriptor(myTableName)

tableDesc.addCoprocessor("org.apache.hadoop.hbase.coprocessor.AggregateImplementation")

for (columnFamily

val columnDesc: HColumnDescriptor = new HColumnDescriptor(columnFamily)

tableDesc.addFamily(columnDesc)

}

admin.createTable(tableDesc)

LOG.info(tableName + "create table success!")

}

admin.close()

}

//载入数据

def addRow(table: Table, rowKey: String, columnFamily: String, quorm: String, value: String) = {

val rowPut: Put = new Put(Bytes.toBytes(rowKey))

if (value == null) {

rowPut.addColumn(columnFamily.getBytes, quorm.getBytes, "".getBytes())

} else {

rowPut.addColumn(columnFamily.getBytes, quorm.getBytes, value.getBytes)

}

table.put(rowPut)

}

//获取数据

def getRow(table: Table, rowKey: String): Result = {

val get: Get = new Get(Bytes.toBytes(rowKey))

val result: Result = table.get(get)

for (rowKv

println("Famiily:" + new String(rowKv.getFamilyArray, rowKv.getFamilyOffset, rowKv.getFamilyLength, "UTF-8"))

println("Qualifier:" + new String(rowKv.getQualifierArray, rowKv.getQualifierOffset, rowKv.getQualifierLength, "UTF-8"))

println("TimeStamp:" + rowKv.getTimestamp)

println("rowkey:" + new String(rowKv.getRowArray, rowKv.getRowOffset, rowKv.getRowLength, "UTF-8"))

println("Value:" + new String(rowKv.getValueArray, rowKv.getValueOffset, rowKv.getValueLength, "UTF-8"))

}

return result

}

//批量添加数据

def addDataBatch(table: Table, list: java.util.List[Put]) = {

try {

table.put(list)

} catch {

case e: RetriesExhaustedWithDetailsException => {

LOG.error(e.getMessage)

}

case e: IOException => {

LOG.error(e.getMessage)

}

}

}

//查询全部

def queryAll(table: Table): ResultScanner = {

val scan: Scan = new Scan

try {

val s = new Scan()

val result: ResultScanner = table.getScanner(s)

return result

} catch {

case e: IOException => {

LOG.error(e.toString)

}

}

return null

}

//查询条记录

def queryBySingleColumn(table: Table, queryColumn: String, value: String, columns: Array[String]): ResultScanner = {

if (columns == null || queryColumn == null || value == null) {

return null

}

try {

val filter: SingleColumnValueFilter = new SingleColumnValueFilter(Bytes.toBytes(queryColumn),

Bytes.toBytes(queryColumn),CompareOp.EQUAL,new SubstringComparator(value))

val scan: Scan = new Scan()

for (columnName

scan.addColumn(Bytes.toBytes(columnName), Bytes.toBytes(columnName))

}

scan.setFilter(filter)

return table.getScanner(scan)

} catch {

case e: Exception => {

LOG.error(e.toString)

}

}

return null

}

//删除表

def dropTable(hbaseconn: Connection, tableName: String) = {

try {

val admin: HBaseAdmin = hbaseconn.getAdmin.asInstanceOf[HBaseAdmin]

admin.disableTable(TableName.valueOf(tableName))

admin.deleteTable(TableName.valueOf(tableName))

} catch {

case e: MasterNotRunningException => {

LOG.error(e.toString)

}

case e: ZooKeeperConnectionException => {

LOG.error(e.toString)

}

case e: IOException => {

LOG.error(e.toString)

}

}

}

def main(args: Array[String]): Unit = {

val conf: Configuration = getHbaseConf

val conn = ConnectionFactory.createConnection(conf)

//定义表名称

val table:Table = conn.getTable(TableName.valueOf("test"))

try {

//列族fam1,fam2

val familyColumn:Array[String] = Array[String]("info1","info2")

//建表

// createTable(conn,"test",familyColumn)

val uuid:UUID = UUID.randomUUID()

val s_uuid:String = uuid.toString

//载入数据

// addRow(table,s_uuid,"info","column1A",s_uuid+"_1A")

//获取表中所有数据

// getRow(table,"9ec78ac4-6042-4c34-8862-f5aca3e")

//删除表

// dropTable(conn,"test")

}catch{

case e:Exception => {

if (e.getClass == classOf[MasterNotRunningException]){

System.out.println("MasterNotRunningException")

}

if (e.getClass == classOf[ZooKeeperConnectionException]){

System.out.println("ZooKeeperConnectionException")

}

if (e.getClass == classOf[IOException]){

System.out.println("IOException")

}

e.printStackTrace()

}

}finally{

if (null != table){

table.close()

}

}

}

}

7、实际操作的过程中可能会遇到如下问题:

解决方案:

双击打开该文件,找到标签  , 在标签里加一行

保存即可

hbase scala 实例_scala操作HBase2.0相关推荐

  1. HBase技术与应用实践 | HBase2.0重新定义小对象实时存取

    本次分享来自中国HBase技术社区第七届MeetUp成都站,分享嘉宾天引 阿里巴巴 技术专家专注在大数据领域,拥有多年分布式.高并发.大规模系统的研发与实践经验,先后参与HBase.Phoenix.L ...

  2. Hadoop2.7.2 HBase2.0.0环境搭建

    集群配置 HBase – Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. 一.基础环 ...

  3. Windows安装HBase2.0.0(单机版)

    Windows安装HBase2.0.0(单机版) 说明 准备工作 配置windows hosts文件,配置服务器IP和名称 查看HBase和hadoop版本对照关系 下载安装jdk1.8+ 下载安装 ...

  4. 2021年大数据HBase(二):HBase集群安装操作

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 HBase集群安装操作 一.上传解压HBase安装包 ...

  5. Hbase2.0版本安装教程

    目录: 前言: 1. 上传 2. 解压 3. 重命名 4. 修改环境变量 5. 修改配置文件 6. 把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下 ...

  6. 八年磨一剑,阿里云ApsaraDB for HBase2.0正式上线

    摘要: ApsaraDB for HBase2.0于2018年6月6日即将正式发布上线啦! 它是基于社区HBase2.0稳定版的升级,也是阿里HBase多年的实践经验和技术积累的持续延伸,全面解决了旧 ...

  7. 八年磨一剑,阿里云ApsaraDB for HBase2.0正式上线 1

    一.HBase2.0和阿里云的前世今生 ApsaraDB for HBase2.0于2018年6月6日即将正式发布上线啦! ApsaraDB for HBase2.0是基于社区HBase2.0稳定版的 ...

  8. Hbase-2.0.5

    大数据之Hbase-2.0.5 第1章 HBase简介 1.1 HBase定义 1.2 HBase数据模型 1.2.1 HBase逻辑结构 1.2.2 HBase物理存储结构 1.2.3 数据模型 1 ...

  9. 大数据技术之_11_HBase学习_03_HBase 实战之谷粒微博(练习API) + 扩展知识(布隆过滤器+HBase2.0 新特性)

    大数据技术之_11_HBase学习_03 第8章 HBase 实战之谷粒微博 8.1 需求分析 8.2 代码实现 第9章 扩展知识 9.1 HBase 在商业项目中的能力 9.2 布隆过滤器 9.3 ...

最新文章

  1. python基础知识点-Python基础中的29个知识点
  2. twig模板引擎使用php,Twig模板引擎用法入门教程_PHP
  3. oracle appen,Oracle中关于insert中使用/*+append*/和nologging的总结
  4. 【玩转cocos2d-x之三十五】Earth Warrior 3D大揭秘
  5. CSS3 背景起始位置 background-origin属性
  6. Atitit.eclipse git使用
  7. Java 学习笔记之 Synchronized锁重入
  8. vim中 E212:无法打开并写入文件的解决办法
  9. 在下层捕获上层抛出的异常
  10. 金融销售关键在于客户感受
  11. 历史 微信开发者工具_微信开发者工具代码管理
  12. 初试牛刀的收获-freetextbox的应用
  13. oracle+bmp转为txt,Bmp2Txt下载-图像转换成文字(Bmp2Txt )下载1.0-西西软件下载
  14. 宝塔linux webshell提权,linux提权 Root权限WebShell提权
  15. darknetYolov3图片的分类计数、置信度以及输出xmin,xmax,ymin,ymax的结果
  16. 交互式多模型-无迹卡尔曼滤波IMM-UKF算法matlab实现(跟踪场景二)
  17. 入侵oracle数据库时常用的操作命令整理
  18. 操作系统上机随笔《实验三》
  19. 8赛道,64匹马找最快的8匹马
  20. Fiddler(三)- Fiddler命令行和HTTP断点调试

热门文章

  1. 【clickhouse】clickhouse 大表删除 Size 256G is greater than max_[table/partition]_size_to_drop 50GB
  2. 【Flink】FLink 提交报错 instead of minReplication (=1). There are 3 datanode(s) running and 3 node(s) are
  3. 源代码:spark-shell解读
  4. 【集合】Vector 是线程安全的?
  5. Spring:@Configuration和@Component的使用与区别
  6. scala学习-scala中的特殊符号使用
  7. int基本类型变成Integer包装类
  8. 深入分析 RestController 与 Controller 的区别,你真的了解吗?
  9. 推荐这款接口管理神器,集成了Swagger和postman,mock的功能
  10. 手写一个RPC框架,理解更透彻(附源码)