Datax读取Hive数据写入到Mysql,并传递日期参数

Datax读取Hive数据写入到Mysql,并传递日期参数

Hive数据的导入导出,一直是在大数据离线批处理任务中必要的操作。不过之前使用Sqoop的可能要占大多数,而在近些年,阿里开源了一款数据导入导出的工具,也就是Datax。Datax是基于python以及json配置文件,对指定的数据进行导入导出,可以指定多种数据源和数据目的地,使用起来也是非常方便。

下面将以一个例子来介绍一下Datax读取Hive数据写入Mysql的配置以及流程:

Datax json配置文件

{
    
    
    "job": {
    
    
        "setting": {
    
    
            "speed": {
    
    
                "channel": 1
            }
        },
        "content": [
            {
    
    
                "reader": {
    
    
                    "name": "hdfsreader",
                    "parameter": {
    
    
                    // 读取hive数据的地址,也就是hdfs存储文件的地址,${day},是外部执行命令传入的日期
                        "path": "/user/hive/warehouse/test.db/device_orc/time=${day}",
                        "defaultFS": "hdfs://bigdata01:9000",
                        // 下面是hive中具体的字段索引以及类型,也可以自定义value的输出,比如像下面的时间
                        "column": [
                               {
    
    
                                "index": 0,
                                "type": "string"
                               },
                               {
    
    
                                 "index": 1,
                                 "type": "string"
                               },
                               {
    
    
                                 "index": 2,
                                 "type": "long"
                               },
                               {
    
    
                                 "type": "string",
                                 "value": "${day}"
                               }
                        ],
                        // 这里是hdfs存储数据的分隔符
                        "fieldDelimiter":",",
                        // 文件类型,默认是text类型
                        "fileType": "orc"
                    }
                },
                "writer": {
    
    
                    "name": "mysqlwriter",
                    "parameter": {
    
    
                        "writeMode": "insert",
                        "username": "root",
                        "password" : "ddbes2020",
                        "column" : [
                            "company_id",
                            "device_mark",
                            "num",
                            "day"
                        ],"session" : [
                            "set session sql_mode=ANSI"
                        ],"preSql" : [
                        // 预处理sql,可以在每次执行前,先做一次清理,防止数据的重复写入,导致冗余
                            "delete from device_data where day='${day}'"
                        ],"connection":[
                            {
    
    
                                "jdbcUrl" : "jdbc:mysql://bigdata01:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&allowMultiQueries=true",
                                "table":[
                                    "device_data"
                                ]
                            }
                        ]
                    }
                }
            }
        ]
    }
}

Datax job执行命令

python ../bin/datax.py test.json -p -Dday=(date -d 'yesterday' "+%Y-%m-%d")

通过-p来进行传入参数的指定,-D是规范写法,day是需要传入的参数名称,和json文件中${day}相对应,后面的参数取的是昨天的日期,如:2020-07-19。这样每次导出的数据都是昨天数据计算的结果,可以通过crontab做定时任务,也可以使用oozie去做定时任务。

猜你喜欢

转载自blog.csdn.net/wFitting/article/details/107467099