datax将clickhouse数据导入Hbase数据库,详细教程
1.datax介绍:DataX 在大数据量下的同步数据非常之快。DataX 是阿里开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。2.安装下载:# 下载wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.co
·
1.datax介绍:
DataX 是阿里开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。而且DataX是一个单进程多线程的ETL工具,解压后配置好任务的json文件即可使用。即使是单节点部署,Datax在大数据量下的同步数据依然飞快。
2.安装下载:
# 下载
wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
# 解压缩,即可完成安装
tar -zxvf datax.tar.gz
3.使用datax将clickhouse数据导入hbase
- Datax最重要的两个组件,一是Reader负责读取数据源,二是Writer负责写数据目的地。在datax的plugin目录下,会有着reader和writer两个目录,在reader目录下的文件夹,代表datax可以与对应的数据库组件建立连接,从而读取数据,其实datax对应的reader文件夹下都是对应的jdbc连接jar包。而writer目录下,则是可以进行写入的数据库组件。
- 创建hbase表:
# 测试表,只创建一个列族
create 'datax','info'
- datax的json配置文件编写:
{
"job": {
"setting": {
"speed": {
"channel": 5
}
},
"content": [
{
"reader": {
"name": "clickhousereader",
"parameter": {
"connection": [
{
#查询clickhouse的语句,本次查询两个字段,date1作为rowkey,date2作为hbase的info列族的q1列的值
"querySql": ["select date1, date2 from ods_test_date_all"],
"jdbcUrl": [
"jdbc:clickhouse://clickhouse:8123/default?socket_timeout=7200000"
]
}
],
"column": [
{
"index": 0,
"type": "String"
},
{
"index": 1,
"type": "string"
}
],
"encoding": "utf-8",
"username": "root",
"password": "root"
}
},
"writer": {
"name": "hbase11xwriter",
"parameter": {
"hbaseConfig": {
"hbase.zookeeper.quorum": "hadoop1:2181,hadoop2:2181,hadoop3:2181"
},
"table": "datax1",
"mode": "normal",
"rowkeyColumn": [ # 选择那个字段作为rowkey
{
"index":0, #下标0,也就是clickhosue查询语句的第一个字段
"type":"string"
}
],
"column": [ # 定义列族的值
{
"index":1, #下标1,也就是clickhosue查询语句的第二个字段
"name": "info:q1",
"type": "string"
}
],
"versionColumn":{
"index": -1,
"value":"123456789"
},
"encoding": "utf-8"
}
}
}
]
}
}
- 同步140万数据测试一下:
可以看到,从clickhouse同步140万条数据到hbase只需要20秒,可以说是非常之快的。
4.使用datax将本地文件导入Hbase
- 本地文件准备:
# 新建测试文件:
touch test.txt
vi test.txt
# 写入测试数据
a b b
c d f
- hbase建表准备:
create 'hbase','cf1'
- datax的json配置文件编写:
{
"job": {
"setting": {
"speed": {
"channel": 5
}
},
"content": [
{
"reader": {
"name": "txtfilereader",
"parameter": {
"path": "/data1/test.txt",
"charset": "UTF-8",
"column": [
{
"index": 0,
"type": "String"
},
{
"index": 1,
"type": "string"
},
{
"index": 2,
"type": "string"
}
],
"fieldDelimiter": " "
}
},
"writer": {
"name": "hbase11xwriter",
"parameter": {
"hbaseConfig": {
"hbase.zookeeper.quorum": "hadoop1:2181,hadoop2:2181,hadoop3:2181"
},
"table": "hbase",
"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"
}
],
"versionColumn":{
"index": -1,
"value":"123456789"
},
"encoding": "utf-8"
}
}
}
]
}
}
如果连接zk报错:Code:[Hbasewriter-12], Description:[获取hbase BufferedMutator 时出错.]
这是没有声明zk的根路径导致,可以添加zk配置:
"hbase.cluster.distributed":true,
"zookeeper.znode.parent":"/hbase-unsecure"
- 运行:
python datax.py ../job/hbase.json
查看hbase的写入情况:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)