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

160 lines
4.5 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.

# HBase11xsqlwriter插件文档
## 1. 快速介绍
HBase11xsqlwriter实现了向hbase中的SQL表(phoenix)批量导入数据的功能。Phoenix因为对rowkey做了数据编码所以直接使用HBaseAPI进行写入会面临手工数据转换的问题麻烦且易错。本插件提供了单间的SQL表的数据导入方式。
在底层实现上通过Phoenix的JDBC驱动执行UPSERT语句向hbase写入数据。
### 1.1 支持的功能
* 支持带索引的表的数据导入,可以同步更新所有的索引表
### 1.2 限制
* 仅支持1.x系列的hbase
* 仅支持通过phoenix创建的表不支持原生HBase表
* 不支持带时间戳的数据导入
## 2. 实现原理
通过Phoenix的JDBC驱动执行UPSERT语句向表中批量写入数据。因为使用上层接口所以可以同步更新索引表。
## 3. 配置说明
### 3.1 配置样例
```json
{
"job": {
"entry": {
"jvm": "-Xms2048m -Xmx2048m"
},
"content": [
{
"reader": {
"name": "txtfilereader",
"parameter": {
"path": "/Users/shf/workplace/datax_test/hbase11xsqlwriter/txt/normal.txt",
"charset": "UTF-8",
"column": [
{
"index": 0,
"type": "String"
},
{
"index": 1,
"type": "string"
},
{
"index": 2,
"type": "string"
},
{
"index": 3,
"type": "string"
}
],
"fieldDelimiter": ","
}
},
"writer": {
"name": "hbase11xsqlwriter",
"parameter": {
"batchSize": "256",
"column": [
"UID",
"TS",
"EVENTID",
"CONTENT"
],
"hbaseConfig": {
"hbase.zookeeper.quorum": "目标hbase集群的ZK服务器地址向PE咨询",
"zookeeper.znode.parent": "目标hbase集群的znode向PE咨询"
},
"nullMode": "skip",
"table": "目标hbase表名大小写有关"
}
}
}
],
"setting": {
"speed": {
"channel": 5
}
}
}
}
```
### 3.2 参数说明
* **name**
* 描述:插件名字,必须是`hbase11xsqlwriter`
* 必选:是
* 默认值:无
* **table**
* 描述要导入的表名大小写敏感通常phoenix表都是**大写**表名
* 必选:是
* 默认值:无
* **column**
* 描述列名大小写敏感通常phoenix的列名都是**大写**。
* 需要注意列的顺序必须与reader输出的列的顺序一一对应。
* 不需要填写数据类型会自动从phoenix获取列的元数据
* 必选:是
* 默认值:无
* **hbaseConfig**
* 描述hbase集群地址zk为必填项格式ip1,ip2,ip3注意多个IP之间使用英文的逗号分隔。znode是可选的默认值是/hbase
* 必选:是
* 默认值:无
* **batchSize**
* 描述:批量写入的最大行数
* 必选:否
* 默认值256
* **nullMode**
* 描述读取到的列值为null时如何处理。目前有两种方式
* skip跳过这一列即不插入这一列(如果该行的这一列之前已经存在,则会被删除)
* empty插入空值值类型的空值是0varchar的空值是空字符串
* 必选:否
* 默认值skip
## 4. 性能报告
## 5. 约束限制
writer中的列的定义顺序必须与reader的列顺序匹配。reader中的列顺序定义了输出的每一行中列的组织顺序。而writer的列顺序定义的是在收到的数据中writer期待的列的顺序。例如
reader的列顺序是 c1, c2, c3, c4
writer的列顺序是 x1, x2, x3, x4
则reader输出的列c1就会赋值给writer的列x1。如果writer的列顺序是x1, x2, x4, x3则c3会赋值给x4c4会赋值给x3.
## 6. FAQ
1. 并发开多少合适?速度慢时增加并发有用吗?
数据导入进程默认JVM的堆大小是2GB并发(channel数)是通过多线程实现的开过多的线程有时并不能提高导入速度反而可能因为过于频繁的GC导致性能下降。一般建议并发数(channel)为5-10.
2. batchSize设置多少比较合适
默认是256但应根据每行的大小来计算最合适的batchSize。通常一次操作的数据量在2MB-4MB左右用这个值除以行大小即可得到batchSize。