博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DataX3.0实现Mysql数据传递至HDFS与Hive
阅读量:6590 次
发布时间:2019-06-24

本文共 4939 字,大约阅读时间需要 16 分钟。

hot3.png

1、需要在hive中先行建立数据库和要写入的表。

CREATE TABLE datax   (id  BIGINT,   test1  VARCHAR(25),   test2  INT,   test3  INT) ROW FORMAT DELIMITED   FIELDS TERMINATED BY '\t'   STORED AS TEXTFILE;

2、配置mysql写入hdfs的作业配置文件,json格式。

{    "job": {        "content": [            {                "reader": {                    "name": "mysqlreader",                    "parameter": {                        "column": [                            "*"                        ],                        "connection": [                            {                                "jdbcUrl": [                                    "jdbc:mysql://192.xxx.x.x(数据库地址):3306(数据库端口)/data(数据库名称)"                                ],                                "table": [                                    "tb_sensorstate"                                ]                            }                        ],                        "password": "hivedb",                        "username": "xxxxx"                    }                },                "writer": {                    "name": "hdfswriter",                    "parameter": {                        "column": [                            {                                "name": "id",                                "type": "BIGINT"                            },                            {                                "name": "test1",                                "type": "VARCHAR"                            },                            {                                "name": "test2",                                "type": "INT"                            },                            {                                "name": "test3",                                "type": "INT"                            }                        ],                        "compress": "gzip",                        "defaultFS": "hdfs://192.xxx.x.xxx(HDFS地址):9000(HDFS端口)",                        "fieldDelimiter": "\t",                        "fileName": "dataxtest",                        "fileType": "text",                        "path": "/usr/local/hadoop/hive/warehouse/datax(hive仓库地址)",                        "writeMode": "append"                    }                }            }        ],        "setting": {            "speed": {                "channel": "2"            }        }    }}

3、运行job作业:

   命令:python datax.py ../job/mysqlreader-hdfswriter.json

4、运行成功结果:

Job配置项信息可以参看从git上下载的源码文件中的指定插件文件夹下的doc文件夹中的插件说明。

本例中:

   1、mysqlreader中的column配置项中以[“*”]代替所有要从mysql指定表中读取的行。运行时:

 您的配置文件中的列配置存在一定的风险. 因为您未配置读取数据库表的列,当您的表字段个数、类型有变动时,可能影响任务正确性甚至会运行出错。请检查您的配置并作出修改。

实际应用中应该依据实际情况配置相应的字段名和类型。

  2、本例配置项说明

{    "job": {        "content": [            {                "reader": {                    "name": "插件名",                    "parameter": {                        "column": [                            要读取的数据库表中的列的字段名和类型。                        ],                        "connection": [                            {                                "jdbcUrl": [                                    "需要读取的mysql数据库地址"                                ],                                "table": [                                    "需要读取的表名"                                ]                            }                        ],                        "password": "数据库连接密码",                        "username": "数据库连接用户名"                    }                },                "writer": {                    "name": "插件名",                    "parameter": {                        "column": [                           要写入的数据库表中的列的字段名和类型。                        ],                        "compress": "压缩格式",                        "defaultFS": "HDFS的IP和端口",                        "fieldDelimiter": "hive先行建表的时候使用的分隔符",                        "fileName": "写入HDFS时的文件名前缀",                        "fileType": "文件格式",                        "path": "hadoop上hive仓库的地址",                        "writeMode": "append"//append,写入前不做任何处理,DataX hdfswriter直接使用filename写入,并保证文件名不冲突。                    }                }            }        ],        "setting": {            "speed": {                "channel": "2"//应该是设置并发传输通道数,但是datax的用户指导中未见详细说明。            }        }    }}

追加写入

Mysqlreader 中读取更新数据可以配置where或querysql配置项。

以下引用官方文档:

* **where***   描述:筛选条件,MysqlReader根据指定的column、table、where条件拼接SQL,并根据这个SQL进行数据抽取。例如在做测试时,可以将where条件指定为limit 10;在实际业务场景中,往往会选择当天的数据进行同步,可以将where条件指定为gmt_create > $bizdate 。
。where条件可以有效地进行业务增量同步。如果不填写where语句,包括不提供where的key或者value,DataX均视作同步全量数据。* 必选:否
* 默认值:无

例:

"where":[     "id>22"   ]

再job中加入where项,即可实现id大于22的数据更新。

以下引用官方文档:

* **querySql*** 描述:在有些业务场景下,where这一配置项不足以描述所筛选的条件,用户可以通过该配置型来自定义筛选SQL。当用户配置了这一项之后,DataX系统就会忽略table,column这些配置型,直接使用这个配置项的内容对数据进行筛选,例如需要进行多表join后同步数据,使用select a,b from table_a join table_b on table_a.id = table_b.id 
当用户配置querySql时,MysqlReader直接忽略table、column、where条件的配置,querySql优先级大于table、column、where选项。* 必选:否
* 默认值:无

 

转载于:https://my.oschina.net/u/2478308/blog/757583

你可能感兴趣的文章
设计模式--Builder模式
查看>>
spring data for mongo
查看>>
开启 URL 重写
查看>>
Journey源码分析二:整体启动流程
查看>>
Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
查看>>
七、MySQL中的字符集 - 系统的撸一遍MySQL
查看>>
centos7的php5.4竟然不支持原生的mysql
查看>>
使用IntelliJ IDEA开发SpringMVC网站(四)用户管理
查看>>
Maven依赖Scope标签用法
查看>>
堆排序的原理
查看>>
ajax加载数据到页面无法打印的解决办法
查看>>
js 验证中文
查看>>
MySQL给查询结果添加一表表示行号或名次(1)
查看>>
Linux下运行java DES AES加解密
查看>>
DataNode 运行状况
查看>>
jsp中为什么有时out.write不能写,为什么?
查看>>
在Mac中如何通过命令对NTFS磁盘格式化
查看>>
Parallels中使用加密狗读取文件出现错误
查看>>
使用jquery 动态操作添加/删除tr td
查看>>
有什么办法让Beyond Compare以网页形式显示文件
查看>>