DataX/hbase094xwriter/doc/hbase094xwriter.md
2018-01-31 16:24:49 +08:00

357 lines
9.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Hbase094XWriter & Hbase11XWriter 插件文档
___
## 1 快速介绍
HbaseWriter 插件实现了从向Hbase中写取数据。在底层实现上HbaseWriter 通过 HBase 的 Java 客户端连接远程 HBase 服务,并通过 put 方式写入Hbase。
### 1.1支持功能
1、目前HbaseWriter支持的Hbase版本有Hbase0.94.x和Hbase1.1.x。
* 若您的hbase版本为Hbase0.94.xwriter端的插件请选择hbase094xwriter
```
"writer": {
"name": "hbase094xwriter"
}
```
* 若您的hbase版本为Hbase1.1.xwriter端的插件请选择hbase11xwriter,即:
```
"writer": {
"name": "hbase11xwriter"
}
```
2、目前HbaseWriter支持源端多个字段拼接作为hbase 表的 rowkey具体配置参考rowkeyColumn配置
3、写入hbase的时间戳版本支持用当前时间作为版本指定源端列作为版本指定一个时间 三种方式作为版本;
4、HbaseWriter中有一个必填配置项是hbaseConfig需要你联系 HBase PE将hbase-site.xml 中与连接 HBase 相关的配置项提取出来,以 json 格式填入同时可以补充更多HBase client的配置来优化与服务器的交互。
hbase-site.xml的配置内容如下
```
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://ip:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>***</value>
</property>
</configuration>
```
转换后的json为
```
"hbaseConfig": {
"hbase.rootdir": "hdfs: //ip: 9000/hbase",
"hbase.cluster.distributed": "true",
"hbase.zookeeper.quorum": "***"
}
```
### 1.2 限制
1、目前只支持源端为横表写入不支持竖表源端读出的为四元组: rowKeyfamily:qualifiertimestampvalue模式的数据写入本期目标主要是替换DataX2中的habsewriter下次迭代考虑支持。
2、目前不支持写入hbase前清空表数据若需要清空数据请联系HBase PE
## 2 实现原理
简而言之HbaseWriter 通过 HBase 的 Java 客户端,通过 HTable, Put等 API将从上游Reader读取的数据写入HBase你hbase11xwriter与hbase094xwriter的主要不同在于API的调用不同Hbase1.1.x废弃了很多Hbase0.94.x的api。
## 3 功能说明
### 3.1 配置样例
* 配置一个从本地写入hbase1.1.x的作业
```
{
"job": {
"setting": {
"speed": {
"channel": 5
}
},
"content": [
{
"reader": {
"name": "txtfilereader",
"parameter": {
"path": "/Users/shf/workplace/datax_test/hbase11xwriter/txt/normal.txt",
"charset": "UTF-8",
"column": [
{
"index": 0,
"type": "String"
},
{
"index": 1,
"type": "string"
},
{
"index": 2,
"type": "string"
},
{
"index": 3,
"type": "string"
},
{
"index": 4,
"type": "string"
},
{
"index": 5,
"type": "string"
},
{
"index": 6,
"type": "string"
}
],
"fieldDelimiter": ","
}
},
"writer": {
"name": "hbase11xwriter",
"parameter": {
"hbaseConfig": {
"hbase.rootdir": "hdfs: //ip: 9000/hbase",
"hbase.cluster.distributed": "true",
"hbase.zookeeper.quorum": "***"
},
"table": "writer",
"mode": "normal",
"rowkeyColumn": [
{
"index":0,
"type":"string"
},
{
"index":-1,
"type":"string",
"value":"_"
}
],
"column": [
{
"index":1,
"name": "cf1:q1",
"type": "string"
},
{
"index":2,
"name": "cf1:q2",
"type": "string"
},
{
"index":3,
"name": "cf1:q3",
"type": "string"
},
{
"index":4,
"name": "cf2:q1",
"type": "string"
},
{
"index":5,
"name": "cf2:q2",
"type": "string"
},
{
"index":6,
"name": "cf2:q3",
"type": "string"
}
],
"versionColumn":{
"index": -1,
"value":"123456789"
},
"encoding": "utf-8"
}
}
}
]
}
}
```
### 3.2 参数说明
* **hbaseConfig**
* 描述每个HBase集群提供给DataX客户端连接的配置信息存放在hbase-site.xml请联系你的HBase PE提供配置信息并转换为JSON格式。同时可以补充更多HBase client的配置设置scan的cache、batch来优化与服务器的交互。
* 必选:是 <br />
* 默认值:无 <br />
* **mode**
* 描述写hbase的模式目前只支持normal 模式,后续考虑动态列模式<br />
* 必选:是 <br />
* 默认值:无 <br />
* **table**
* 描述:要写的 hbase 表名(大小写敏感) <br />
* 必选:是 <br />
* 默认值:无 <br />
* **encoding**
* 描述编码方式UTF-8 或是 GBK用于 String 转 HBase byte[]时的编码 <br />
* 必选:否 <br />
* 默认值UTF-8 <br />
* **column**
* 描述要写入的hbase字段。index指定该列对应reader端column的索引从0开始name指定hbase表中的列必须为 列族:列名 的格式type指定写入数据类型用于转换HBase byte[]。配置格式如下:
```
"column": [
{
"index":1,
"name": "cf1:q1",
"type": "string"
},
{
"index":2,
"name": "cf1:q2",
"type": "string"
}
```
* 必选:是<br />
* 默认值:无 <br />
* **rowkeyColumn**
* 描述要写入的hbase的rowkey列。index指定该列对应reader端column的索引从0开始若为常量index为1type指定写入数据类型用于转换HBase byte[]value配置常量常作为多个字段的拼接符。hbasewriter会将rowkeyColumn中所有列按照配置顺序进行拼接作为写入hbase的rowkey不能全为常量。配置格式如下
```
"rowkeyColumn": [
{
"index":0,
"type":"string"
},
{
"index":-1,
"type":"string",
"value":"_"
}
]
```
* 必选:是<br />
* 默认值:无 <br />
* **versionColumn**
* 描述指定写入hbase的时间戳。支持当前时间、指定时间列指定时间三者选一。若不配置表示用当前时间。index指定对应reader端column的索引从0开始需保证能转换为long,若是Date类型会尝试用yyyy-MM-dd HH:mm:ss和yyyy-MM-dd HH:mm:ss SSS去解析若为指定时间index为1value指定时间的值,long值。配置格式如下
```
"versionColumn":{
"index":1
}
```
或者
```
"versionColumn":{
"index":1,
"value":123456789
}
```
* 必选:否<br />
* 默认值:无 <br />
* **nullMode**
* 描述读取的null值时如何处理。支持两种方式1skip表示不向hbase写这列2empty写入HConstants.EMPTY_BYTE_ARRAY即new byte [0] <br />
* 必选:否<br />
* 默认值skip<br />
* **walFlag**
* 描述在HBae client向集群中的RegionServer提交数据时Put/Delete操作首先会先写WALWrite Ahead Log日志即HLog一个RegionServer上的所有Region共享一个HLog只有当WAL日志写成功后再接着写MemStore然后客户端被通知提交数据成功如果写WAL日志失败客户端则被通知提交失败。关闭false放弃写WAL日志从而提高数据写入的性能。<br />
* 必选:否<br />
* 默认值false<br />
* **writeBufferSize**
* 描述设置HBae client的写buffer大小单位字节。配合autoflush使用。autoflush开启true表示Hbase client在写的时候有一条put就执行一次更新关闭false表示Hbase client在写的时候只有当put填满客户端写缓存时才实际向HBase服务端发起写请求<br />
* 必选:否<br />
* 默认值8M<br />
### 3.3 HBase支持的列类型
* BOOLEAN
* SHORT
* INT
* LONG
* FLOAT
* DOUBLE
* STRING
请注意:
* `除上述罗列字段类型外,其他类型均不支持`
## 4 性能报告
## 5 约束限制
## 6 FAQ
***