更新时间:2024-10-22 GMT+08:00
分享

BulkLoad工具配置文件说明

配置自定义的组合rowkey

使用BulkLoad工具批量导入HBase数据时,支持用户自定义组合rowkey。BulkLoad组合rowkey即通过一些规则将多个列名经过一些自定义处理,组合生成新的rowkey。

列的名称不能包含特殊字符,只能由字母、数字和下划线组成。

关于组合rowkey在“configuration.xml”文件中的配置如下所示,该样例中定义组合rowkey为列“SMS_ID”、“SMS_NAME”的取第二个字符开始的三个字符以及“SMS_SERAIL”的反转(各部分用'_'连接)。

 <columns> 
                         <column index="1" type="int">SMS_ID</column> 
                         <column index="2" type="string">SMS_NAME</column> 
                         <column index="3" type="string">SMS_ADDRESS</column> 
                 </columns> 

                 <rowkey> 
                        SMS_ID+'_'+substring(SMS_NAME,1,4)+'_'+reverse(SMS_ADDRESS)
                 </rowkey>     
表1 rowkey字段处理函数

函数原型

描述

示例

format(data,"DataType")

格式化字符串数据。

例如,format(data,"0.000")是指将数据按照"0.000"格式输出。

converse(data,"yyyy-MM-dd","yyyyMMdd")

转化日期格式。

例如,converse(data,"yyyy-MM-dd","yyyyMMdd")是指将日期格式从"yyyy-MM-dd"转化为"yyyyMMdd"。

rand

随机一个整数,只支持int类型。

replace(data,"A","B")

数据替换。

例如,replace(data,"A","B")是指将A用B替换。

reverse(data)

将字符串反转。

例如,reverse(ABC)将"ABC"反转成"CBA"。

substring(data,Length1,Length2), or substring(data,Length3)

截取字符串。

例如,substring(data,1,5), or substring(data,3)是指将data字符串进行截取[1,5)或[3,data.length)。

to_number("data")

将字符串转化成数值型,支持返回Long类型。

例如,to_number("123")是指将"123"转化为123,注意当前data必须为数值。

配置自定义rowkey实现

使用BulkLoad工具批量导入HBase数据时,支持用户自定义的组合rowkey实现。用户可编写rowkey实现代码,导入时根据该代码逻辑进行组合rowkey导入。

配置自定义rowkey实现步骤如下:

  1. 用户编写自定义rowkey的实现类,需要继承接口,该接口所在的Jar包路径为“客户端安装目/HBase/hbase/lib/hbase-it-bulk-load-*.jar”:

    [com.huawei.hadoop.hbase.tools.bulkload.RowkeyHandlerInterface],

    实现接口中方法:

    byte[] getRowkeyBytes(String[] colsValues, RegulationDomain regulation)

    其中:

    • 传入参数“colsValues”为原始数据中的一行数据集合,每个元素为一列。
    • 传入参数“regulation”为配置导入文件信息(一般情况下并不需要使用)。

  2. 将该实现类与其依赖包同时打包成Jar文件,保存到HBase客户端所在节点的任意位置并确保执行命令的用户具有读取和执行该Jar包的权限。
  3. 在执行导入命令时,增加两个参数配置项:

    -Dimport.rowkey.jar="第二步中Jar包的全路径"

    -Dimport.rowkey.class="用户实现类的全类名"

配置自定义组合字段

BulkLoad支持自定义组合字段,把多个列通过追加的方式即多个列串到一块组合成一个列。

列的名称不能包含特殊字符,只能由字母、数字和下划线组成。

关于组合字段H_COMBINE_1的定义如下所示,该样例中H_COMBINE_1由字段“SMS_ADDRESS”、“SMS_SNAME”构成。

<!-- Define composite columns --> 
                         <composite family="f2">
                                 <!-- 定义拼接字段的类名,且该类必须在客户应用中不存在 --> 
                                 <qualifier class="com.huawei.H_COMBINE_1">H_COMBINE_1</qualifier> 
                                 <columns> 
                                         <column>SMS_ADDRESS</column> 
                                         <column>SMS_NAME</column> 
                                 </columns> 
                         </composite>

指定字段数据类型

HBase BulkLoad支持读取原生态数据文件,把数据文件的每个字段映射为HBase定义的字段,并对该字段的数据类型做定义。

您可以在“configuration.xml”文件中定义多个方式来批量导入数据。

列的名称不能包含特殊字符,只能由字母、数字和下划线组成。

指定字段数据类型的配置如下所示,该样例中对“SMS_ID”、“SMS_NAME”、“SMS_ADDRESS”列指定数据类型。

                <columns> 
                         <column index="1" type="int">SMS_ID</column> 
                         <column index="2" type="string">SMS_NAME</column> 
                         <column index="3" type="string">SMS_ADDRESS</column> 
                 </columns>

支持的数据类型有:short、int、long、float、double、boolean和string。

定义不适用的数据行

BulkLoad支持定义不适用数据行的功能,不适用数据行不会存储到HBase中,这些数据会被保存到指定的文件中。

您可以在“configuration.xml”文件中定义多个方式来批量导入数据。

列的名称不能包含特殊字符,只能由字母、数字和下划线组成。

定义不适用的行,配置样例如下所示,即SMS_ID < 7000 && SMS_NAME == 'HBase':

<!-- Define bad line filter rule --> 
<badlines>SMS_ID &lt; 7000 &amp;&amp; SMS_NAME == 'HBase'</badlines>

针对“<badlines>”标签中的算符和对应的参数类型如表2所示。

表2 算符和对应的参数类型

算符类型

参数类型

&&

对应的参数类型应为布尔型。

&

对应的参数类型应为整数。

|

对应的参数类型应为整数。

^

对应的参数类型应为整数。

/

对应的参数类型应为数字。

==

对应的参数类型应为字符串。

>=

对应的参数类型应为数字。

>

对应的参数类型应为数字。

<<

对应的参数类型应为整数。

<=

对应的参数类型应为数字。

<

对应的参数类型应为数字。

%

对应的参数类型应为数字。

*

对应的参数类型应为数字。

!=

对应的参数类型应为字符串。

||

对应的参数类型应为布尔型。

+

对应的参数类型应为数字和字符串。

>>

对应的参数类型应为整数。

-

对应的参数类型应为字符串。

>>>

对应的参数类型应为整数。

相关文档