sqoop导出hive到mysql_Sqoop导出Hive数据到Mysql

1 需求描述

Hql统计出热搜关键词,使用Sqoop将结果从Hive导出到Mysql,其中关键字是中文,需要注意建表语句和Sqoop导出参数的设置。这里记录整个导出过程及遇到问题如何排查解决。

2 Sqoop导出Hive数据到Mysql

2.1 Mysql建表

create table if not exists keyword_seach(

dt varchar(30) not null,

keyword varchar(255) not null,

count varchar(30) not null

)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

这里需要特别注意,Hive结果表results中keyword是中文,建表语句需要添加CHARSET=utf8mb4 COLLATE=utf8mb4_bin,否则报错Incorrect string value: '\xF0\xA4\xA3\xB3\xE5\xB0...' for column 'keyword' at row 39。

2.2 Sqoop导出脚本

sqoop_export.sh

#!/bin/bash

sudo -uhdfs sqoop export \

--connect \

"jdbc:mysql://IP:3306/database?useUnicode=true&characterEncoding=utf8" \

--username 'database' \

--password 'password' \

--table keyword_seach \

--export-dir /user/hive/warehouse/database1.db/results \

--num-mappers 1 \

--input-fields-terminated-by '\001' \

--input-null-string '\\N' \

--input-null-non-string '\\N'

导出数据包括中文,需要添加useUnicode=true&characterEncoding=utf8。

2.3 执行Sqoop脚本

这里主要记录执行脚本过程中的报错及排查,第一次执行后报错权限不够

//查看权限

sudo -uhdfs hadoop fs -ls /tmp

//修改权限

sudo -uhdfs hadoop fs -chown -R root:root /tmp

第二次执行报错发现mysql表设置了主键,Sqoop向mysql导数据,主键冲突导致的,这篇博客给出了解决办法跳转。

第三次执行报错,记录一下过程。

(1) 查看日志

找到application_XXXXX,开始排查错误

yarn logs -applicationId application_1593700350483_58776 //执行 查日志

(2)解决问题

查看日志后,发现如下报错

Caused by: java.io.IOException: java.sql.SQLException: Incorrect string value: '\xF0\xA4\xA3\xB3\xE5\xB0...' for column 'keyword' at row 39

at org.apache.sqoop.mapreduce.AsyncSqlRecordWriter.write(AsyncSqlRecordWriter.java:233)

at org.apache.sqoop.mapreduce.AsyncSqlRecordWriter.write(AsyncSqlRecordWriter.java:46)

at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.write(MapTask.java:670)

at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:89)

at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:112)

at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:89)

... 10 more

从日志发现就是上面反复提到的建表语句中文问题,建表语句增加CHARSET=utf8mb4 COLLATE=utf8mb4_bin,Sqoop增加添加useUnicode=true&characterEncoding=utf8,问题解决。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值