跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
HBase表创建与管理
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= HBase表创建与管理 = == 概述 == HBase是一个基于Hadoop的分布式、面向列的NoSQL数据库,适用于海量数据的存储与实时访问。在HBase中,'''表(Table)'''是数据存储的核心单元,由行(Row)、列族(Column Family)和列限定符(Column Qualifier)组成。本章将详细介绍HBase表的创建、结构设计、修改及删除操作。 == 表结构设计 == HBase表的结构设计需考虑以下关键点: * '''行键(Row Key)''':唯一标识一行数据,按字典序排序,直接影响数据分布和查询性能。 * '''列族(Column Family)''':表的逻辑分组,同一列族下的列存储在相同物理文件中。 * '''版本控制(Versioning)''':每个单元格(Cell)可存储多个版本的值,通过时间戳区分。 <mermaid> graph TD A[HBase Table] --> B[Row 1] A --> C[Row 2] B --> D[Column Family 1] B --> E[Column Family 2] D --> F[Column Qualifier 1] D --> G[Column Qualifier 2] </mermaid> == 创建表 == 使用HBase Shell或Java API创建表时,需指定表名和至少一个列族。 === HBase Shell示例 === <syntaxhighlight lang="bash"> # 创建表 'employee',包含两个列族 'personal_data' 和 'professional_data' create 'employee', 'personal_data', 'professional_data' # 输出示例 Created table employee 0 row(s) in 1.2200 seconds </syntaxhighlight> === Java API示例 === <syntaxhighlight lang="java"> import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; public class CreateTable { public static void main(String[] args) throws Exception { Configuration config = HBaseConfiguration.create(); try (Connection connection = ConnectionFactory.createConnection(config); Admin admin = connection.getAdmin()) { HTableDescriptor table = new HTableDescriptor(TableName.valueOf("employee")); table.addFamily(new HColumnDescriptor("personal_data")); table.addFamily(new HColumnDescriptor("professional_data")); admin.createTable(table); System.out.println("Table created successfully"); } } } </syntaxhighlight> == 表属性配置 == 创建表时可指定高级属性: * '''MAX_VERSIONS''':保留的版本数,例如:<code>create 'employee', {NAME => 'personal_data', VERSIONS => 3}</code> * '''TTL(Time-To-Live)''':数据的存活时间(秒) * '''BLOCKCACHE''':是否启用块缓存 == 修改表结构 == === 添加列族 === <syntaxhighlight lang="bash"> alter 'employee', 'salary_data' </syntaxhighlight> === 删除列族 === <syntaxhighlight lang="bash"> alter 'employee', {NAME => 'salary_data', METHOD => 'delete'} </syntaxhighlight> == 删除表 == 需先禁用表再删除: <syntaxhighlight lang="bash"> disable 'employee' drop 'employee' </syntaxhighlight> == 实际应用案例 == '''场景''':电商用户行为日志存储 * '''表名''':<code>user_activity</code> * '''列族设计''': * <code>click_stream</code>:存储页面点击事件 * <code>purchase_history</code>:存储购买记录 * '''行键设计''':<code>user_id + timestamp</code> == 最佳实践 == 1. 列族数量不宜过多(通常1-3个) 2. 行键设计应避免热点问题(如使用哈希前缀) 3. 预分区(Pre-splitting)可提升写入性能: <syntaxhighlight lang="bash"> create 'employee', 'personal_data', {SPLITS => ['1000', '2000', '3000']} </syntaxhighlight> == 数学基础 == HBase的Region分区策略遵循以下公式确定rowkey分布: <math> RegionIndex = Hash(RowKey) \mod NumberOfRegions </math> == 常见问题 == * '''Q''':能否修改已存在列族的属性? * '''A''':可以,但需注意某些属性(如BLOCKCACHE)修改后需重启RegionServer生效。 * '''Q''':删除表后数据能否恢复? * '''A''':若未启用HBase的回收站功能(<code>hbase.fs.tmp.dir</code>配置),数据将永久丢失。 [[Category:大数据框架]] [[Category:Apache Hadoop]] [[Category:Hbase数据库]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)