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

  1. Datax最重要的两个组件,一是Reader负责读取数据源,二是Writer负责写数据目的地。在datax的plugin目录下,会有着reader和writer两个目录,在reader目录下的文件夹,代表datax可以与对应的数据库组件建立连接,从而读取数据,其实datax对应的reader文件夹下都是对应的jdbc连接jar包。而writer目录下,则是可以进行写入的数据库组件。
    在这里插入图片描述
    在这里插入图片描述
  2. 创建hbase表:
# 测试表,只创建一个列族
create 'datax','info'
  1. 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"
          }
        }
      }
    ]
  }
}

  1. 同步140万数据测试一下:
    可以看到,从clickhouse同步140万条数据到hbase只需要20秒,可以说是非常之快的。
    在这里插入图片描述

4.使用datax将本地文件导入Hbase

  1. 本地文件准备:
# 新建测试文件:
touch test.txt
vi test.txt
# 写入测试数据
a b b
c d f
  1. hbase建表准备:
create 'hbase','cf1'
  1. 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"
  1. 运行:
python datax.py ../job/hbase.json 

在这里插入图片描述
查看hbase的写入情况:
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐