南修子学Hbase-Hbase Split流程

这篇博客探讨了HBase在0.94版本前后的Region拆分策略,包括最大文件大小限制和基于内存flush大小的触发条件。0.94之后的策略引入了Region数量的因素,避免了小文件问题。同时,博客建议避免多列族并保持数据增长同步,以及建表时进行预分区来有效管理Region。

0.94版本之前

一个Region里面最大的file大小,如果超过就一分为二

hbase.hregion.max.filesize默认是10G

0.94版本之后

当一个Region中某个Store下面所有的StoreFile的总大小超过Min(R^2 * "hbase.hregion.memstore.flush.size" , "hbase.hregion.max.filesize"),该region就会进行拆分,其中R为当前RegionServer中属于该Table的个数,就是当前这个表的Region数量

 

hbase.hregion.memstore.flush.size会导致小文件问题,比如两个列族的数据增长不均匀,但是这个参数是针对全局的,所以都会进行切分,那么数据比较稀疏的这个就会产生小文件的问题,hbase官方也是建议尽量不要多个列族,如果是多个列族的话要保证多个列族的数据增长保持同步

 

预分区: 建表的时候要预分区,规划好我要建多少个分区,10000-20000,20000-30000,30000-40000

本关任务:在右侧命令行中,导入 sql 文件至 MySQL 中并使用 Sqoop 工具将 MySQL 中的数据导入至 HBase 。 相关知识 为了完成本关任务,你需要掌握: 1.Sqoop 命令与操作 Sqoop 命令 Sqoop 支持 HDFS 和 Hive 之外的其他导入目标。Sqoop 还可以将记录导入到 HBase 中的表中。 参数名称 参数含义 --column-family <family> 设置导入的目标列族 --hbase-create-table 如果指定,则创建缺少的 HBase--hbase-row-key <col> 指定要用作行键的输入列,如果输入表包含复合键,则 <col> 必须采用单个的形式,逗号分隔的组合键列表属性 --hbase-table <table-name> 指定要用作目标的 HBase 表名而不是 HDFS --hbase-bulkload 启用批量加载 通过指定--hbase-table,您指示 Sqoop 导入到 HBase 中的表而不是 HDFS 中的目录。Sqoop 会将数据导入到指定为 的参数的表中--hbase-table。输入表的每一行都会转化为一个HBase Put操作到输出表的一行。每行的键取自输入的一列。默认情况下,Sqoop 将使用 split-by 列作为行键列。如果未指定,它将尝试识别源表的主键列(如果有)。您可以使用 手动指定行键列--hbase-row-key。每个输出列都将放置在同一个列族中,必须用--column-family. 如果输入表有复合键,则--hbase-row-key必须采用逗号分隔的复合键属性列表的形式。在这种情况下,HBase 行的行键将通过使用下划线作为分隔符组合复合键属性的值来生成。注意:只有--hbase-row-key在指定了参数的情况下,Sqoop 导入表才能使用复合键。 如果目标表和列族不存在,则 Sqoop 作业将退出并显示错误。您应该在运行导入之前创建目标表和列族。如果指定--hbase-create-table,Sqoop 将使用 HBase 配置中的默认参数创建目标表和列族(如果它们不存在)。 Sqoop 当前通过将每个字段转换为其字符串表示形式(就像您以文本模式导入到 HDFS 一样)将所有值序列化到 HBase,然后在目标单元格中插入此字符串的 UTF-8 字节。Sqoop 将跳过除行键列之外的所有列中包含空值的所有行。 为了减少 hbase 上的负载,Sqoop 可以进行批量加载而不是直接写入。要使用批量加载,请使用--hbase-bulkload。 MySQL 导入至 HBase MySQL 中有一张 student 表,表数据如下: 1.进入 HBase 客户端,创建一个列族 为 info表名为 student 的表。 create 'student','info' 2.使用 Sqoop 将 MySQL 数据导入 HBase 表 student 中。 sqoop import -D sqoop.hbase.add.row.key=true --connect jdbc:mysql://127.0.0.1/test --username root --password 123123 --table student --hbase-table student --column-family info --hbase-row-key stu_no -m 1 成功执行后,显示。 3.查询 HBase 表 student 是否成功导入数据; 数据已经成功导入至 HBase 中了。总结: 1.导入至 HBase 中时,最好是先在 HBase 中创建好表,否则导入时会报 HBase 找不到表。 2.导入命令中加上 Map Task 数目(-m),可以更好、更快的执行程序。 编程要求 根据相关知识,在右侧命令行中完成 MySQL 数据成功导入至 HBase 中,具体操作如下: 1.启动服务 启动 Hadoop、MySQL、ZooKeeper、HBase服务,命令已经写在 sh 文件中了,执行 shell 脚本启动所有服务; sh /data/workspace/myshixun/service.sh 如果服务全部启动,输入jsp 查看服务进程 2.将 MySQL 数据导入至 HBase 表中 导入 SQL 至 MySQL 中 mysql -uroot -p123123 < /data/workspace/myshixun/step1/1.sql 进入 HBase 客户端创建表 tb_class 列族为 info。 使用 Sqoop 将 MySQL 中 sc
最新发布
11-07
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南修子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值