1、datax的介绍
DataX是阿里巴巴开源的一个异构数据源离线同步工具,可以实现包括关系型数据库(如MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。它致力于解决数据孤岛问题,帮助企业更好地管理和利用数据资产。
2、datax和sqoop的区别
DataX和Sqoop都是数据迁移工具,但是它们在处理机制、使用场景以及支持的数据源方面存在显著的区别。Sqoop是Apache开源的一个用于在Hadoop和关系型数据库之间进行大量数据传输的工具,它采用的是MapReduce计算框架,可以在多个节点上同时进行数据的导入导出操作,提供了良好的并发性和容错性。而DataX是阿里巴巴开源的一个异构数据源离线同步工具,它可以在运行DataX的单机上完成数据的抽取和加载,速度相较于Sqoop会慢一些。
DataX有强大的灵活性,它可以实现关系型数据库与hadoop组件、关系型数据库之间以及hadoop组件之间的数据迁移。
DataX无法实现分布式部署,但它可以在传输过程中进行数据过滤,并可以统计传输数据的信息。
DataX中的数据导入导出,是并行执行的,并且是基于内存的,所以比较快!
3、datax的安装
下载链接:https://pan.baidu.com/s/1fDweCVmGHwNtaAdanl52GA?pwd=xa33
1、上传 /opt/software
2、解压 tar -zxvf /opt/software/datax.tar.gz -C /opt/
3、修改/etc/profile
配置环境变量:
export DATAX_HOME=/opt/datax
export PATH=$PATH:$DATAX_HOME/bin
4、刷新环境变量source /etc/profile
4、测试datax
4.1、官方自带demo
在datax/job/job.json
1、修改如下的地方
第一个地方代表数据生成的数量
第二个地方代表是否在控制台进行打印
2、运行
datax.py /opt/datax/job/job.json
4.2、读取mysql的数据,将数据展示在控制台上。
ps:连接mysql需要在datax的lib中添加mysql的连接器
在job 文件夹 创建一个文件 mysql2stream.json ,代码如下,运行方式同上
{ "job": { "setting": { "speed": { "channel":1 } }, "content": [ { "reader": { "name": "mysqlreader", "parameter": { "username": "root", "password": "123456", "connection": [ { "querySql": [ "要查询的sql语句;" ], "jdbcUrl": [ "jdbc:mysql://主机名:3306/sqoop" ] } ] } }, "writer": { "name": "streamwriter", "parameter": { "print": true, "encoding": "UTF-8" } } } ] } }
4.3、读取hdfs的数据
同样在job下创建readhdfs.json
{
"job": {
"setting": {
"speed": {
"channel": 3
}
},
"content": [
{
"reader": {
"name": "hdfsreader",
"parameter": {
"path": "/home/a.txt",
"defaultFS": "hdfs://bigdata01:9820",
"column": [ "*" ],
"fileType": "text"
}
},
"writer": {
"name": "streamwriter",
"parameter": {
"print": true
}
}
}
]
}
}
4.4、将数据导入到hdfs上
ps:hdfs上的路径必须提前创建好
{
"job": {
"setting": {
"speed": {
"channel": 3
}
},
"content": [
{
"reader": {
"name": "streamreader",
"parameter": {
"column": [
{"value": "9870", "type": "long" },
{"value": "SHAWN", "type": "string"},
{"value": "BOSS", "type": "string"},
{"value": "1999-01-01", "type": "string"},
{"value": "99999", "type": "long"}
],
"sliceRecordCount": 10
}
},
"writer": {
"name": "hdfswriter",
"parameter": {
"defaultFS": "hdfs://bigdata01:9820",
"path": "/datax/emp",
"fileName": "emp",
"column": [
{"name": "empno", "type": "string"},
{"name": "ename", "type": "string"},
{"name": "job", "type": "string"},
{"name": "hiredate", "type": "string"},
{"name": "sal", "type": "double"}
],
"fileType": "text",
"writeMode": "append",
"fieldDelimiter": "\t"
}
}
}
]
}
}
4.5、将mysql的数据导入到hive中
需要在hive中创建与mysql对于的表(注意字段)
{
"job": {
"setting": {
"speed": {
"channel": 3
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"writeMode": "insert",
"username": "root",
"password": "123456",
"column": [
"id",
"area_code",
"province_name",
"iso"
],
"splitPk": "id",
"connection": [
{
"table": [
"base_area"
],
"jdbcUrl": [
"jdbc:mysql://bigdata01:3306/sqoop"
]
}
]
}
},
"writer": {
"name": "hdfswriter",
"parameter": {
"defaultFS": "hdfs://bigdata01:9820",
"fileType": "text",
"path": "/data/nshop/ods/ods_01_base_area/",
"fileName": "base_area_txt",
"column": [
{
"name": "id",
"type": "int"
},
{
"name": "area_code",
"type": "string"
},
{
"name": "province_name",
"type": "string"
},
{
"name": "iso",
"type": "string"
}
],
"writeMode": "append",
"fieldDelimiter": ","
}
}
}
]
}
}