点击star是对我们最好的鼓励!
HBase 读写
HBase对更新和点查具有很好的支持,在实时计算场景下也是应用十分广泛的。为了进一步简化HBase读写api,提高开发效率,fire框架对HBase API进行了深度封装。目前支持3种读写模式,分别是:Java API、Bulk API以及Spark提供的API。另外,fire框架支持在同一个任务中对任意多个hbase集群同时进行读写。
一、HBase集群配置
1.1 定义别名
建议将hbase集群url信息定义成别名,别名定义放到名为common.properties的配置文件中。别名的好处是一处维护到处生效,方便共用,便于记忆。
1.2 基于注解配置
1.3 基于配置文件
二、表与JavaBean映射
fire框架通过Javabean与HBase表建立的关系简化读写api:
上述代码中定义了名为Student的Javabean,该Javabean需要继承自HBaseBaseBean,并实现buildRowKey方法,这个方法中需要告诉fire框架,rowKey是如何构建的。
通过以上两步即可实现Javabean与HBase表的关系绑定。对于个性化需求,如果需要以多版本的方式进行读写,则需在类名上添加@HConfig(multiVersion = true)注解。如果Javabean中的列名与HBase中的字段名不一致,可以通过@FieldName(family = "data", value = "length1")进行单独指定,当然,列族也可以通过这个注解指定。如果不知道列族名称,则默认只有一个名为info的列族。
目前暂不支持scala语言的class以及case class,仅支持基本的字段数据类型,不支持嵌套的或者复杂的字段类型。
三、spark任务
1.1 java api
1.2 bulk api
1.3 spark api
四、flink任务
样例代码:
五、多集群读写
fire框架支持同一个任务中对任意多个hbase集群进行读写,首先要在配置文件中以keyNum进行指定要连接的所有hbase集群的zk地址:
在代码中,通过keyNum参数告诉fire这行代码连接的hbase集群是哪个。注意:api中的keyNum要与配置中的数字对应上。
六、@HBase
七、hbase-client参数
hbase-client参数,可以通过@HBase的config或以fire.hbase.conf.为前缀的参数去指定:
参数名称 | 引擎 | 含义 |
fire.hbase.batch.size | 通用 | insert的批次大小,用于限制单个task一次最多sink的记录数 |
hbase.column.family | 通用 | 用于配置列族名称,默认info |
hbase.max.retry | flink | 当插入失败后,重试多少次 |
hbase.cluster | 通用 | 所需读写的Hbase集群url或别名 |
hbase.durability | 通用 | Hbase-client中的durability |
fire.hbase.storage.level | spark | 诊断scan后数据的缓存,避免重复scan hbase |
fire.hbase.scan.partitions | Spark | 通过HBase scan后repartition的分区数 |
fire.hbase.cluster.map. | 通用 | hbase集群映射配置前缀 |
fire.hbase.table.exists.cache.enable | 通用 | 是否开启HBase表存在判断的缓存 |
fire.hbase.table.exists.cache.reload.enable | 通用 | 是否开启HBase表存在列表缓存的定时更新任务 |
fire.hbase.table.exists.cache.initialDelay | 通用 | 定时刷新缓存HBase表任务的初始延迟 |
fire.hbase.table.exists.cache.period | 通用 | 定时刷新缓存HBase表任务的执行频率 |
fire.hbase.conf. | 通用 | hbase java api 配置前缀,支持任意hbase-client的参数 |