目录
DataX简介
DataX是什么
DataX是阿里开发的一款离线的数据同步平台,实现异构数据源之间高效的数据同步功能,单台机器就可以操作,底层是JVM,高并发
在不使用这个工具之前,我们做数据之间的同步需要使用sqoop或者写到本地,或者写Java代码完成,做的事情是一个框架到一个框架,大概是这样的样式,其中的读取、转化、传输都需要Java代码完成
在集成了DataX之后,其中的转化由DataX自己完成,大概是这样的样式
DataX可以支持哪些数据源之间的同步
可以进入github中直接搜索datax
点进去我们可以看到datax的源码,以及支持哪些数据源
DataX如何使用
需要从什么地方取数据,就点进“读”,看需要什么样的json格式
需要从什么地方写数据,就点金“写”,看需要什么样的json格式
假设我们“读”MySQL的数据源,点进MySQL的“读”
可以看到这里给我们写了一些范例,对着修改即可,
需要“读”操作,就修改“reader”里面的内容
需要“写”操作,就修改“writer”里面的内容
举例mysqlTomysql
这里是将student库中的student表,导入一份到student库中的student2表
student表的样式:
创建一个json格式的文件
对照着github,我们可以看出我们所需要配置的json格式大致需要配置这些内容,其中"content"是一个数组,但我们一般都只填入一份即可,其中的reader是从哪里读取的数据源,writer是写入哪里的数据源
具体
json格式如下
(要事先在MySQL中创建好要传入的另一张表)
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "123456",
"column": [
"id",
"name",
"age",
"gender",
"clazz",
"last_mod"
],
"splitPk": "age",
"connection": [
{
"table": [
"student"
],
"jdbcUrl": [
"jdbc:mysql://master:3306/student"
]
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "insert",
"username": "root",
"password": "123456",
"column": [
"id",
"name",
"age",
"gender",
"clazz",
"last_mod"
],
"preSql": [
"truncate student2"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://master:3306/student?useUnicode=true&characterEncoding=utf8",
"table": [
"student2"
]
}
]
}
}
}
],
"setting": {
"speed": {
"channel": 6
}
}
}
}
在DataX的bin目录下执行该命令
可以看到数据导入到student2成功
举例mysqlTohdfs
大致过程与上面一样,需要读的是MySQL的数据源,就在“reader”中写入需要读取的MySQL数据源的样式,需要写到hdfs,就在“writer”中写入hdfs数据源的样式
(要事先在hive中创建好对应的数据库和对应的表)
具体json格式如下
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "123456",
"column": [
"id",
"name",
"age",
"gender",
"clazz",
"last_mod"
],
"splitPk": "age",
"connection": [
{
"table": [
"student"
],
"jdbcUrl": [
"jdbc:mysql://master:3306/student"
]
}
]
}
},
"writer": {
"name": "hdfswriter",
"parameter": {
"defaultFS": "hdfs://master:9000",
"fileType": "text",
"path": "/user/hive/warehouse/datax.db/students",
"fileName": "student",
"column": [
{
"name": "id",
"type": "bigint"
},
{
"name": "name",
"type": "string"
},
{
"name": "age",
"type": "INT"
},
{
"name": "gender",
"type": "string"
},
{
"name": "clazz",
"type": "string"
},
{
"name": "last_mod",
"type": "string"
}
],
"writeMode": "append",
"fieldDelimiter": ","
}
}
}
],
"setting": {
"speed": {
"channel": 6
}
}
}
}
数据传输成功
合并hdfs不同分区数据的一种方式
我们可以看到虽然上面的数据已经从MySQL导入到hdfs成功,但是会出现很多分区,我们试着将这些分区合并成一个
创建一个和上面表结构一样的表
将表中的数据直接导入即可,最后出现的分区就会从许多个变成一个
举例mysqlTohbase
具体的json格式如下
{
"job": {
"setting": {
"speed": {
"channel": 5
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "123456",
"column": [
"id",
"name",
"age",
"gender",
"clazz",
"last_mod"
],
"splitPk": "age",
"connection": [
{
"table": [
"student"
],
"jdbcUrl": [
"jdbc:mysql://master:3306/student"
]
}
]
}
},
"writer": {
"name": "hbase11xwriter",
"parameter": {
"hbaseConfig": {
"hbase.zookeeper.quorum": "master,node1,node2",
"hbase.zookeeper.property.clientPort": "2181",
"hbase.rootdir": "hdfs://master:9000/hbase",
"hbase.cluster.distributed": "true",
"zookeeper.znode.parent": "/hbase"
},
"table": "student",
"mode": "normal",
"rowkeyColumn": [
{
"index":0,
"type":"string"
}
],
"column": [
{
"index":1,
"name": "info:id",
"type": "int"
},
{
"index":2,
"name": "info:name",
"type": "string"
},
{
"index":3,
"name": "info:age",
"type": "int"
},
{
"index":4,
"name": "info:gender",
"type": "string"
},
{
"index":5,
"name": "info:clazz",
"type": "string"
},
{
"index":6,
"name": "info:last_mod",
"type": "string"
}
],
"encoding": "utf-8"
}
}
}
]
}
}
hbase中创建相应的表和格式
导入成功
再次使用phoenix创建hbase相应的视图进行查看
数据导入成功
感谢阅读,我是啊帅和和,一位大数据专业大四学生,祝你快乐。