HBase 是一个NoSQL数据库,用于处理海量数据,可以支持10亿行百万列的大表,下面就了解一下数据是如何存放在HBase表中的 关系型数据库的表结构 为了更好的理解HBase表的思路,先回顾一下关系数据库中表的处理方式...HBase的处理方式 HBase的表结构 建表时要指定的是:表名、列族 建表语句 create 'user_info', 'base_info', 'ext_info' 意思是新建一个表,名称是user_info...: row key base_info ext_info row1 name:a, tel:123 row2 name:b addr:bj HBase表中还有一个重要概念:版本,每个字段的值都有版本信息...插入数据的过程可以看出 HBase 存储数据的特点了 和关系数据库一样,也是使用行和列的结构 建表时,定义的是表名和列族(字段的集合),而不是具体字段 列族中可以包含任意个字段,字段名不需要预定义,每一行中同一列族中的字段也可以不一致...多维结构,关系数据库的表是二维的,通过指行、列定位一个数据,HBase中需要通过 行健、列族名、字段名、版本号才能定位到具体数据 插入数据时,一次插入一个字段的数据,不是像关系数据库那样一次插入多个字段
创建conf和table var tableName = "httpsystem_dev" val conf= HBaseConfiguration.create() //设置要查询的表 conf.set...], classOf[org.apache.hadoop.hbase.client.Result]) 返回的数据是一个ImmutableBytesWritable,和一个result组成的二元组...DLCNN_juge_mal")) scan.addColumn(Bytes.toBytes("0"), Bytes.toBytes("DLCNN_juge_type")) //spark读取hbase...","slave5,slave6,slave7"); conf.set("hbase.zookeeper.property.clientPort","2181"); conf.addResource(".../home/hadoop/data/lib/hbase-site.xml"); val table = new HTable(conf,"data"); table.setAutoFlush(false
(离线备份) 直接备份HDFS数据,备份前需要disable表,在备份完成之前 服务不可用对在线服务类业务不友好 (二)CopyTable(热备) 执行命令前,需要创建表,支持时间区间、row区间,改变表名称...四,Replication(实时) 通过Hbase的replication机制实现Hbase集群的主从模式实时同步 五,Snapshot(备份实时,恢复需要disable) 个人觉得这里备份里面最经济划算的一个...,可以每天在固定时间点对hbase表数据进行快照备份,然后如果出现问题了,可以直接恢复到某个时间点上的数据,适合修复指标计算错误的场景,然后从某个时间点上重新修复。...snapshot create -n test_snapshot -t test (4)查看快照 list_snapshots (5)导出到HDFS hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot...时间短,体积小,恢复快,最终还可以恢复数据到一张新表中,不影响原来的表。
进程按角色分为Master和RegionServer,其中Master负责DDL操作,比如建表、删表,而RegionServer负责DML操作,比如数据的读写操作等。...从数据视图上讲,HBase中的Table会按Range切分为多个Region,然后由不同的RegionServer来负责对外提供服务。...HBase表在HDFS上的目录结构 [img] /hbase /data / (集群里的Namespaces)...HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile。...[img] Hbase UI 60010展示表结构如下 [img] [img] HLog的HDFS目录结构如下 /hbase /WALs / (
HBase的rowkey设计可以说是使用HBase最为重要的事情,直接影响到HBase的性能,常见的RowKey的设计问题及对应访问为: Hotspotting 的行由行键按字典顺序排序,这样的设计优化了扫描...假设行键的列表如下,表按照每个字母对应一个region来分割。前缀‘a’是一个region,‘b’就是另一个region。在这张表中,所有以‘f’开头的行都属于同一个region。...如果需要导入时间顺序的文件(如log)到HBase中,可以学习OpenTSDB的做法。它有一个页面来描述它的HBase模式。...因此,尽管有着连续的数据输入流,Put操作依旧能被分散在表中的各个region中 简化行和列 在HBase中,值是作为一个单元(Cell)保存在系统的中的,要定位一个单元,需要行,列名和时间戳。...表内[key]的最近的值可以用[key]进行Scan,找到并获取第一个记录。由于HBase行键是排序的,该键排在任何比它老的行键的前面,所以是第一个。
utm_content=m_31236 hbase中的宽表是指很多列较少行,即列多行少的表,一行中的数据量较大,行数少;高表是指很多行较少列,即行多列少,一行中的数据量较少,行数大。...据此,在HBase中使用宽表、高表的优劣总结如下: 查询性能:高表更好,因为查询条件都在row key中, 是全局分布式索引的一部分。高表一行中的数据较少。...分片能力:高表分片粒度更细,各个分片的大小更均衡。因为高表一行的数据较少,宽表一行的数据较多。HBase按行来分片。 元数据开销:高表元数据开销更大。...过大的元数据开销,可能引起HBase集群的不稳定、master更大的负担(这方面后续再好好总结)。 事务能力:宽表事务性更好。...而且解压缩可以通过协处理器(coproesssor)在HBase服务器上做,而不是在业务应用的服务器上做,以充分应用HBase集群的CPU能力。
,否则监控可用性降低,由于之前环境是由docker-compose部署,查到hbase可以修改表的ttl来清理数据,目前进入pinpoint-hbase容器操作,如果能在hbase表格生成时就修改ttl...效果会更佳,该方法需要熟悉docker-compose里面pinpoint-web及pinpoint-hbase部署方法,后期跟进 操作步骤 查找出数据大的hbase表 root@990fb5560f64...:/opt/hbase/hbase-1.2.6# ls CHANGES.txt LICENSE.txt README.txt conf hbase-webapps logs LEGAL...stop-hbase.cmd hbase-common.sh master-backup.sh stop-hbase.sh hbase-config.cmd region_mover.rb...修改表ttl root@990fb5560f64:/opt/hbase/hbase-1.2.6/bin# .
分布式数据库HBase开发: Java API 管理表 javaAPI获取表的列表 修改表 禁用表,启用表,删除表 前言: 第一关用一个foreach遍历,输出三行代码就行。....*; import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util....*; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.io.compress.Compression;....*; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.*; public class Task...{ /** * 刪除表 * @param tableName 表名 * @throws Exception */ public void deleteTable(String tableName
HBase中的元数据表中记录了Region的路由信息,如果元数据被损坏,将会影响正常的HBase读写业务,而元数据被损坏的问题时有发生,这篇文章介绍了如何进行元数据逆向修复的原理与操作。...本文整体思路如下: HBase目录结构 HBase数据文件 HBase元数据表结构 元数据逆向修复原理 如何利用HBase提供的工具进行修复 本文内容基于HBase 1.x版本。.../hbase/data/hbase/acl acl开启HBase权限控制时的权限记录系统表。 /hbase/data/hbase/meta 元数据表,记录region相关信息。...HBase元数据表格式定义 HBase元数据的完整名称为"hbase:meta",其中,"hbase"为元数据表所在的NameSpace名称。...步骤6:hbase hbck -fixMeta 修复meta表信息,利用regioninfo信息,重新生成对应meta row填写到meta表中,并为其填写默认的分配regionserver。
复制 hbase-site.xml 文件 从hbase集群中复制 hbase-site.xml 文件到 kettle 安装目录下的 “plugins/pentaho-big-data-plugin/hadoop-configurations...准备数据表 这里准备测试从一个hbase表导数据到另一个hbase表,其实往别存储介质也都是类似,比如文件,数据库。这里主要是为了说明怎样连hbase。...这里使用两个表,user和user2,测试从user表导数据到user2表。...######## # 创建 user 表 # 创建 user 表,其中包括两个列族 base 和 address。...Input” 和 “HBase Output”,并建立关联。
在学习HBase的表结构之前,首先需要了解一下什么是Google的BigTable思想。BigTable大表的思想是Google的“第三驾马车”。...HBase就是BigTable大表思想的一个具体实现,并且它是一个列式存储的NoSQL数据库适合执行数据的分析和处理。简单来说就是适合执行查询操作。...如果把上图中的部门-员工数据存入HBase的表中,那将会是什么样的呢?下图展示了HBase的表结构。 HBase的表由列族组成,上图的“emp”和“dept”都是列族,列族中包含列。...创建表的时候必须创建列族,不需要创建列。当执行插入语句插入数据到列族中的时候,需要指定rowkey和具体的列。如果列不存在,HBase会自动创建相应的列,再把数据插入到对应的单元格上。...例如,如果要得到上图所示的表结构和数据,可以在HBase中执行下面的语句。
创建 Connection 对象 要操作 HBase 的数据表,也和 JDBC 编程类似,需要创建一个 HBase Connection 对象,然后通过这个 Connection...connection.close(); 表管理 在 HBase中,要管理表,需要通过 org.apache.hadoop.hbase.client.Admin 类实现,可以通过 Connection.getAdmin...查看表 在 HBase 中,表的描述信息保存在 org.apache.hadoop.hbase.client.TableDescriptor 类中,因此我们可以通过 Admin.listTableDescriptors...() 来获取 HBase 中所有表的描述信息。...然后可以通过 org.apache.hadoop.hbase.client.TableDescriptor 类的一些方法查看或修改表的定义。
上一篇博客说了使用 HBase 的客户端 API 来操作管理 HBase 中的表,今天我们看看怎样通过 API 来操作表中的数据。...介绍 在 HBase 中对数据表中的数据的操做我们一般是通过 Table, Put, Get, Delete,Scan,Result等几个类来实现。...Table 是表对象,对应数据库中的一张表,我们可以在表上执行添加,修改,删除和查询操作。 Put 主要是用了对数据表中的记录执行写入/更新操作。 Get 主要是用了对数据表中的记录执行查询操作。...数据填充完后,在表上执行put操作。 最后,不要忘了关闭表。...; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.Bytes
// 检查meta表当中是否存在该表 if (MetaReader.tableExists(master.getCatalogTracker(), tableName)) { //不能对在线的表进行恢复操作...(可能这个表被删除了,还是咋地),就克隆出来一张新表 HTableDescriptor htd = RestoreSnapshotHelper.cloneTableSchema(snapshotTableDesc...} 恢复之前先判断这个表还在不在,有可能表都被删除掉了,分开两种情况处理,但是我们也可以看到它只是通过两个handler去处理了,走的是线程池提交handler。...用snapshot当中的表定义来覆盖现在的表定义 this.masterServices.getTableDescriptors().add(hTableDescriptor);...else { //是hfile的情况 HFileLink.create(conf, fs, familyDir, regionInfo, hfileName); } } 在hbase
POSTGRESQL, MARIA Arcus, Memcached, Redis, CASSANDRA iBATIS, MyBatis gson, Jackson, Json Lib log4j, Logback Hbase...表设计 序号 表名称 列簇 TTL 表说明 数据示例 备注 1 ApplicationIndex Agents 31536000 applicationIds 和 agentIds 注册信息 agentInfo.getApplicationName...7 AgentEvent E 5184000 agent的不同event,如request for thread dump等 8 ApiMetaData Api 31536000 方法信息的元数据表...9 SqlMetaData Sql 15552000 SQL语句的元数据表 10 StringMetaData Str 15552000 字符串值的元数据表,如方法参数、异常名称等 11 ApplicationTraceIndex...I 5184000 trace数据的索引表 12 Traces S 5184000 traced 处理信息 13 ApplicationMapStatisticsCaller C 5184000
正如我在前面章节强调的,HBase数据模型跟关系型数据库系统有非常大的差异。因此,设计Hbase的数据表的方法和思路跟关系型数据库不一样。...设计Hbase数据表最重要的是定义rowkey结构。为了有效定义rowkey结构,有必要预先定义数据访问模式(读取和写入)。为了定义模式(schema),HBase表的一些特性必须考虑。...让我们尝试在HBase表中对Twitter的用户关系进行建模(一些用户关注了另一些用户)。...我首先介绍了数据模型(这部分没有翻译,可以参看HBase官方文档),然后讨论了设计HBase表时要考虑的一些因素。在HBase表设计中还有更多可供探索和学习的东西,这些东西可以建立在这些基础之上。...本文的主要内容是: row key是HBase表设计中最重要的一个方面,它决定了应用程序与HBase表的交互方式,还会影响您从HBase中提取数据的性能。
一.前述 今天分享一篇关于HBase的一对多和多对多的案例的分析。...PS:说明,两张表User表和Role表, User表中定义两个列族,第一个列族是名字,第二个列族中 多个列定义为具体的角色,列的内容定义为具体的值,即优先级(这里利用了列也能存信息,所以把角色Id定义为具体的列...PS:解释 一个表 rowkey中0代表顶级部门 1代表非顶级部门 因为顶级部门不是经常查 列族的列是具体的子部门列表。值是具体的名称。...发布微博 查看某个用户所有的微博 排序:时间降序排序 查看首页 时间降序排序 001小明 关注 韩梅梅、李雷 002李雷 关注 韩梅梅 003韩梅梅 关注粉丝表...rowkey cf wid cf:content=微博内容; wid设计: pid_(Max-timestamp) 收取微博表 rowkey cf
configuration=null; static{ configuration= HBaseConfiguration.create(); configuration.set("hbase.zookeeper.property.clientPort...","2081"); configuration.set("hbase.zookeeper.quorum","192.168.136.135"); configuration.set...("hbase.master","192.168.136.135:60000"); } /** * HBase 根据表名与列信息与配置信息创建表 * @param...hbaseAdmin=new HBaseAdmin(configuration); if(hbaseAdmin.tableExists(tableName)){ //如果表存在...hbaseAdmin.disableTable(tableName); //删除表 hbaseAdmin.deleteTable
创建表,提示已经存在 [root@node1]# hbase shell 2017-04-07 14:13:46,230 WARN [main] util.NativeCodeLoader: Unable...删除该表时,提示不存在 hbase(main):024:0> disable 'googlebook' ERROR: Table googlebook does not exist....Table must first be disabled: hbase> drop 't1' hbase> drop 'ns1:t1' hbase(main):026:0> 3....重新创建表 [root@node1]# hbase shell 2017-04-07 15:13:55,669 WARN [main] util.NativeCodeLoader: Unable to...=> Hbase::Table - googlebook hbase(main):002:0>
维表关联系列目录: 一、维表服务与Flink异步IO 二、Mysql维表关联:全量加载 三、Hbase维表关联:LRU策略 四、Redis维表关联:实时查询 五、kafka维表关联:广播方式 六、自定义异步查询...在Flink中做维表关联时,如果维表的数据比较大,无法一次性全部加载到内存中,而在业务上也允许一定数据的延时,那么就可以使用LRU策略加载维表数据。...但是如果一条维表数据一直都被缓存命中,这条数据永远都不会被淘汰,这时维表的数据已经发生改变,那么将会在很长时间或者永远都无法更新这条改变,所以需要设置缓存超时时间TTL,当缓存时间超过ttl,会强制性使其失效重新从外部加载进来...接下来介绍两种比较常见的LRU使用: LinkedHashMap LinkedHashMap是双向链表+hash表的结构,普通的hash表访问是没有顺序的,通过加上元素之间的指向关系保证元素之间的顺序,...LRU方式读取Hbase 实现思路: 使用Flink 异步IO RichAsyncFunction去异步读取hbase的数据,那么需要hbase 客户端支持异步读取,默认hbase客户端是同步,可使用hbase
领取专属 10元无门槛券
手把手带您无忧上云