O Datax lê os dados do Hive e os grava no Mysql e passa os parâmetros de data
A importação e exportação de dados do Hive sempre foi uma operação necessária em tarefas de processamento em lote off-line de big data. No entanto, o Sqoop pode ser usado na maioria antes e, nos últimos anos, Ali abriu o código de uma ferramenta de importação e exportação de dados, chamada Datax. Datax é baseado em arquivos de configuração python e json. Ele importa e exporta dados especificados e pode especificar várias fontes de dados e destinos de dados. Também é muito conveniente de usar.
A seguir, usaremos um exemplo para introduzir a configuração e o processo de leitura de dados do Hive pelo Datax e sua gravação no Mysql:
Arquivo de configuração 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"
]
}
]
}
}
}
]
}
}
Comando de execução de tarefa Datax
python ../bin/datax.py test.json -p -Dday=(date -d 'yesterday' "+%Y-%m-%d")
Use -p para especificar os parâmetros de entrada, -D é o método de escrita padrão, day é o nome do parâmetro que precisa ser passado e corresponde a ${day} no arquivo json, e os seguintes parâmetros levam a data de ontem , como: 2020 -07-19. Dessa forma, os dados exportados a cada vez são o resultado do cálculo dos dados de ontem. Você pode usar o crontab para fazer tarefas agendadas ou usar oozie para fazer tarefas agendadas.