HBase应用开发

HBase的定义

HBase是一个高可靠、高性能、面向列、可伸缩的分布式存储系统。

  • 适合于存储大表数据,可以达到实时级别。
  • 利用Hadoop HDFS 作为其文件存储系统,提供实时的读写的数据库系统。
  • 利用ZooKeeper作为协同服务。

HBase架构

HBase的适用场景

  • 海量数据
  • 高吞吐量
  • 需要在海量数据中实现高效的随机读取
  • 需要很好的性能伸缩能力
  • 能够同时处理结构化和非结构化的数据
  • 不需要完全拥有传统关系型数据库所具备的ACID特性

HBase应用开发流程

  • 制定业务目标
  • 准备开发环境
  • 下载并导入样例工程

设计HBase表

设计原则:

查询数据唯一

数据均匀分布

查询性能优化

其他因素(region的提前划分,冷热Family的使用)

  • 根据场景开发工程
  • 编译并运行程序
  • 查看结果与调试程序

HBase表设计-总体原则

设计目标:提高吞吐量
设计原则:预分region,是region分布均匀,提高并发
实现方法:Rowkey范围和分布已知,建议预分region

设计目标:提高写入性能
设计原则:避免过多的热点region
设计方法:根据应用场景,可以考虑将时间因素引入Rowkey

设计目标:提高查询性能
设计原则:数据连续存储,频繁访问的数据存储一个地方,数据连续存储,离散度,信息冗余。
实现方法:同时读取的数据存放在同一行、cell,使用二级索引

HBase表设计-设计内容

设计内容通过不同维度,可分为:
Table设计(表粒度的设计)

  • 建表方法
  • 预分region
  • Family属性
  • 系统并发能力、数据清洗能力

RowKey设计

  • 原则:需要同时访问的数据,RowKey尽量连续
  • 访问效率:分散写,连续读
  • 属性内容:常用的查询场景属性
  • 属性值顺序:枚举,访问权重
  • 时间属性:循环Key+TTL,周期建表
  • 二级索引
  • 折中法
  • 冗余法

Family设计

可枚举数量少扩展性弱的属性作为Family

Qualifier设计

不可枚举、数量多且扩展性强的属性作为Qualifier

原则:同时访问的数据存放到同一个Cell,列名尽量简短

HBase常用接口

create()

put()

get()

getScanner(Scan scan)

、、、

创建Configuration实例以及Kerberos安全认证

HBaseConfiguration方法

创建表

create Table方法

写入数据

put方法

读取一行数据

get方法

读取多行数据

scan方法

更新中......

HBase的开发

. list_namespace:查询所有命名空间
hbase(main)::> list_namespace
NAMESPACE
default
hbase . list_namespace_tables : 查询指定命名空间的表
hbase(main)::> list_namespace_tables 'hbase'
TABLE
meta
namespace . create_namespace : 创建指定的命名空间
hbase(main)::> create_namespace 'myns'
hbase(main)::> list_namespace
NAMESPACE
default
hbase
myns . describe_namespace : 查询指定命名空间的结构
hbase(main)::> describe_namespace 'myns'
DESCRIPTION
{NAME => 'myns'} . alter_namespace :修改命名空间的结构
hbase(main)::> alter_namespace 'myns', {METHOD => 'set', 'name' => 'eRRRchou'} hbase(main)::> describe_namespace 'myns'
DESCRIPTION
{NAME => 'myns', name => 'eRRRchou'}
修改命名空间的结构=>删除name
hbase(main)::> alter_namespace 'myns', {METHOD => 'unset', NAME => 'name'}
hbase(main)::> describe_namespace 'myns' . 删除命名空间
hbase(main)::> drop_namespace 'myns' hbase(main)::> list_namespace
NAMESPACE
default
hbase . 利用新添加的命名空间建表
hbase(main)::> create 'myns:t1', 'f1', 'f2'

DDL

. 查询所有表
hbase(main)::> list
TABLE
HelloHbase
kylin_metadata
myns:t1
row(s) in 0.0140 seconds => ["HelloHbase", "kylin_metadata", "myns:t1"] . describe : 查询表结构
hbase(main)::> describe 'myns:t1' {NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '', IN_MEMORY => 'false', KEEP
_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMP
RESSION => 'NONE', MIN_VERSIONS => '', BLOCKCACHE => 'true', BLOCKSIZE => '
', REPLICATION_SCOPE => ''}
{NAME => 'f2', BLOOMFILTER => 'ROW', VERSIONS => '', IN_MEMORY => 'false', KEEP
_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMP
RESSION => 'NONE', MIN_VERSIONS => '', BLOCKCACHE => 'true', BLOCKSIZE => '
', REPLICATION_SCOPE => ''} . 创建分片表
hbase(main)::> create 'myns:t2', 'f1', SPLITS => ['', '', '', ''] . 修改表,添加修改列簇信息
hbase(main)::> alter 'myns:t1', {NAME=>'info1'}
hbase(main)::> describe 'myns:t1' . 删除列簇
hbase(main)::> alter 'myns:t1', {'delete' => 'info1'}
hbase(main)::> describe 'myns:t1' . 删除表
hbase(main)::> disable 'myns:t1'
hbase(main)::> drop 'myns:t1'

DML

用到的表创建语句:
hbase(main)::> create 'myns:user_info','base_info','extra_info' . 插入数据(put命令,不能一次性插入多条)
hbase(main)::> put 'myns:user_info','','base_info:username','张三' . scan扫描
hbase(main)::> scan 'myns:user_info' . 通过指定版本查询
hbase(main)::> scan 'myns:user_info', {RAW => true, VERSIONS => }
hbase(main)::> scan 'myns:user_info', {RAW => true, VERSIONS => } . 查询指定列的数据
hbase(main)::> scan 'myns:user_info',{COLUMNS => 'base_info:username'} . 分页查询
hbase(main)::> scan 'myns:user_info', {COLUMNS => ['base_info:username'], LIMIT => , STARTROW => ''} . get查询
hbase(main)::> get 'myns:user_info','','base_info:username'
hbase(main)::> put 'myns:user_info','','base_info:love','basketball'
hbase(main)::> get 'myns:user_info','' . 根据时间戳查询 是一个范围,包头不包尾
hbase(main)::> get 'myns:user_info','', {'TIMERANGE' => [, ]} . hbase排序
插入到hbase中去的数据,hbase会自动排序存储:
排序规则: 首先看行键,然后看列族名,然后看列(key)名; 按字典顺序 . 更新数据
hbase(main)::> put 'myns:user_info', '', 'base_info:name', 'rock'
hbase(main)::> put 'myns:user_info', '', 'base_info:name', 'eRRRchou' . incr计数器
hbase(main)::> incr 'myns:user_info', '', 'base_info:age3' . 删除
hbase(main)::> delete 'myns:user_info', '', 'base_info:age3' . 删除一行
hbase(main)::> deleteall 'myns:user_info','' . 删除一个版本
hbase(main)::> delete 'myns:user_info','','extra_info:feature', TIMESTAMP=> . 删除一个表
hbase(main)::> disable 'myns:user_info'
hbase(main)::> drop 'myns:user_info' . 判断表是否存在
hbase(main)::> exists 'myns:user_info' . 表生效和失效
hbase(main)::> enable 'myns:user_info'
hbase(main)::> disable 'myns:user_info' . 统计表行数
hbase(main)::> count 'myns:user_info' . 清空表数据
hbase(main)::> truncate 'myns:user_info'

更多学习:https://www.csdn.net/gather_2f/MtTaEgzsMzI2Ni1ibG9n.html

FusionInsight大数据开发--HBase应用开发的更多相关文章

  1. FusionInsight大数据开发学习总结(1)

    FusionInsight大数据开发 FusionInsight HD是一个大数据全栈商用平台,支持各种通用大数据应用场景. 技能需求 扎实的编程基础 Java/Scala/python/SQL/sh ...

  2. 大数据全栈式开发语言 – Python

    前段时间,ThoughtWorks在深圳举办一次社区活动上,有一个演讲主题叫做“Fullstack JavaScript”,是关于用JavaScript进行前端.服务器端,甚至数据库(MongoDB) ...

  3. 为什么说Python 是大数据全栈式开发语言

    欢迎大家访问我的个人网站<刘江的博客和教程>:www.liujiangblog.com 主要分享Python 及Django教程以及相关的博客 交流QQ群:453131687 原文链接 h ...

  4. 大数据之HBase

    大数据之HBase数据插入优化之多线程并行插入实测案例 一.引言: 上篇文章提起关于HBase插入性能优化设计到的五个参数,从参数配置的角度给大家提供了一个性能测试环境的实验代码.根据网友的反馈,基于 ...

  5. FusionInsight大数据开发---Redis应用开发

    Redis应用开发 要求: 了解Redis应用场景 掌握Redis二次开发环境搭建 掌握Redis业务开发 Redis简介 Redis是一个基于网络的,高性能key-value内存数据库 Redis根 ...

  6. FusionInsight大数据开发---Hive应用开发

    Hive应用开发 了解Hive的基本架构原理 掌握JDBC客户端开发流程 了解ODBC客户端的开发流程 了解python客户端的开发流程 了解Hcatalog/webHcat开发接口 掌握Hive开发 ...

  7. FusionInsight大数据开发---MapReduce与YARN应用开发

    MapReduce MapReduce的基本定义及过程 搭建开发环境 代码实例及运行程序 MapReduce开发接口介绍 1. MapReduce的基本定义及过程 MapReduce是面向大数据并行处 ...

  8. FusionInsight大数据开发---HDFS应用开发

    HDFS应用开发 HDFS(Dadoop Distributed File System) HDFS概述 高容错性 高吞吐量 大文件存储 HDFS架构包含三部分 Name Node DataNode ...

  9. 一文总结高并发大数据量下MySQL开发规范【军规】

    在互联网公司中,MySQL是使用最多的数据库,那么在并发量大.数据量大的互联网业务中,如果高效的使用MySQL才能保证服务的稳定呢?根据本人多年运维管理经验的总结,梳理了一些核心的开发规范,希望能给大 ...

随机推荐

  1. CSS @charset规则

    定义和用法 @charset规则指定样式表中使用的字符编码.@charset规则必须在样式表中的第一元素,而不是由任何字符之后进行.在外部样式文件中使用.如果@charset定义了多个规则,则仅使用第 ...

  2. 4. 海思Hi3519A MPP从入门到精通(四 视频输出)

    VO(Video Output,视频输出)模块主动从内存相应位置读取视频和图形数据,并通过相应的显示设备输出视频和图形. 1. 基本概念 3519A芯片支持的显示/回写设备.视频层和图形层见下表. 注 ...

  3. shell脚本模板----自动生成开头注释信息

    每当我们新建一个shell脚本都要去写一些繁琐的注释信息,这会浪费掉我们很多的时间,有没有感觉很痛苦呢? 哈哈 下面给大家分享一个shell脚本的模板文件,把它拷贝到用户的家目录下并命名成  .vim ...

  4. Ubuntu 根目录作用

    Ubuntu的根目录下存在着很多的文件夹,但你知道他们都存放着哪些文件呢?这些是深入了解Ubuntu系统必不缺少的知识,本文就关于此做一下介绍吧. /bin/    用以存储二进制可执行命令文件,/u ...

  5. C学习笔记(6)--- 共用体,位域深入

    1.共用体(Union): 共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型.您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值.共用体提供了一种使用相同的内存位置 ...

  6. ACM-求质因数

    求输入数字的所有质因数,并将所有质因数进行排序,并以质因数+空格的形式输出 #include <iostream> #include <string> #include < ...

  7. (转)新建maven项目时报错Error:Maven Resources Compiler: Maven project configuration required for module 'XX'解决方法

    转载地址:https://blog.csdn.net/qq784515681/article/details/85070195 在新建maven项目时,Problems中报错: Error:Maven ...

  8. windows server2008 R2下mysql 5.7版本中修改编码为utf-8的方法步骤

    首先通过 show variables like 'character_set_%'; 查看mysql字符集情 默认编码为 latin1 然后关闭数据库 在mysql安装目录下找到my.ini文件 在 ...

  9. lua 2 变量

    变量在使用前,必须在代码中进行声明,即创建该变量. 编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值. Lua 变量有三种类型:全局变量.局部变量.表中的域. Lua 中的 ...

  10. 快速获取 IP 地址

    IP 地址可以分为两类,公用和私有(专用).公用 IP 是唯一的 IP 地址,可以从 Internet 访问.专用 IP 地址保留供您专用网络内部使用,而不会直接暴露给 Internet. 本文将介绍 ...