mysql hdfs_Datax3.0 测试 mysql 到HDFS

本文简单介绍mysql-->hdfs的数据交换任务

1-首先mysql建立表CREATE TABLE `user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`username` varchar(50) NOT NULL,

`telephone` varchar(30) DEFAULT NULL,

`mail` varchar(50) DEFAULT NULL,

`password` varchar(32) DEFAULT NULL,

`remark` varchar(1000) DEFAULT NULL,

`status` int(11) NOT NULL,

`operator` varchar(50) NOT NULL,

`operate_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,

`operate_ip` varchar(20) NOT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `idx_username` (`username`) USING BTREE,

UNIQUE KEY `idx_mail` (`mail`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

2-导入测试数据

3-建立hive表,获取到hdfscreate table mysql_to_hive

(

id int,

username string,

telephone string,

mail string

)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

STORED AS TEXTFILE;

4-获取HDFS存储地址show create table mysql_to_hive;

LOCATION

'hdfs://hadoop001:8020/user/hive/warehouse/mysql_to_hive'

5- 查看HDFS下面是否有文件hadoop fs  -ls /user/hive/warehouse/mysql_to_hive

没有文件

6-执行datax数据交换任务

注意:hdfswriter写入时的字段分隔符,**需要用户保证与创建的Hive表的字段分隔符一致,否则无法在Hive表中查到数据

配置文件:{

"job": {

"setting": {

"speed": {

"channel":1

}

},

"content": [

{

"reader": {

"name": "mysqlreader",

"parameter": {

"username": "root",

"password": "root123",

"connection": [

{

"querySql": [

"select id,username,telephone,mail from user;"

],

"jdbcUrl": [

"jdbc:mysql://localhost:3306/datax"

]

}

]

}

},

"writer": {

"name": "hdfswriter",

"parameter": {

"defaultFS": "hdfs://hadoop001:8020",

"fileType": "TEXT",

"path": "/user/hive/warehouse/mysql_to_hive",

"fileName": "mysql_to_hive",

"column": [

{

"name": "id",

"type": "STRING"

},

{

"name": "username",

"type": "STRING"

},

{

"name": "telephone",

"type": "STRING"

},

{

"name": "mail",

"type": "STRING"

}

],

"writeMode": "append",

"fieldDelimiter": "\t",

"compress": "NONE"

}

}

}

]

}

}

执行:python bin/datax.py ../../data/dataxJob/mysql_to_hive.json

7-检查执行结果hadoop fs  -ls /user/hive/warehouse/mysql_to_hive

-rw-r--r--   3 root supergroup         52 2018-11-05 06:01 /user/hive/warehouse/mysql_to_hive/mysql_to_hive__17a8a8d2_45ff_4412_8625_5a8eecf910e6

去hive表查询数据:

select * from mysql_to_hive;

...数据展示

8-扩展:

是否通过修改 配置参数 可以在hdfs目录下面产生多个hdfs文件?

首先  我们可以 把mysql reader的配置进行修改

"querySql": [

"select id,username,telephone,mail from user;",

"select id,username,telephone,mail from user;"

]

修改为多个sql,此时,就会触发两个task任务。

根据:

setting": {

"speed": {

"channel":1

}

}

可以计算出  产生一个taskGroup,里面包含两个任务,并发执行

可以看到,多了两个文件hadoop fs  -ls /user/hive/warehouse/mysql_to_hive

Found 3 items

-rw-r--r--   3 root supergroup         52 2018-11-05 06:01 /user/hive/warehouse/mysql_to_hive/mysql_to_hive__17a8a8d2_45ff_4412_8625_5a8eecf910e6

-rw-r--r--   3 root supergroup         52 2018-11-05 06:10 /user/hive/warehouse/mysql_to_hive/mysql_to_hive__331eeb4c_4685_4a26_ad16_87e9ee431acb

-rw-r--r--   3 root supergroup         52 2018-11-05 06:10 /user/hive/warehouse/mysql_to_hive/mysql_to_hive__a5f89603_90f8_4f5c_a684_fa518f4787de

当然:通过调整core.json  中的

taskGroup": {

"channel": 5

}

也可以调整任务的并发

比如我们这样调整:job.json

setting": {

"speed": {

"channel":2

}

}core.json

taskGroup": {

"channel": 1

}

此时有两条sql,也没有任何限速处理,

此时,会 产生两个taskGroup,每个taskGroup里面有一个任务。

注意HDFS小文件过多是不合适的,会对NameNode造成过大的压力!!!

9-hive内部表 和外部表

内部表数据由Hive自身管理,外部表数据由HDFS管理;

内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;

删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;

对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值