• 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: 'xF0xA4xA3xB3xE5xB0...' 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 '01' 
    --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: 'xF0xA4xA3xB3xE5xB0...' 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,问题解决。

  • 相关阅读:
    2019-1-17 水晶报表自动补空行及格线(无分组版)
    通过ssh证书远程登录
    kali linux下不能以root权限运行vlc的解决办法
    SSH服务:packet_write_wait: Connection to 67.218.143.160 port 22: Broken pipe错误处理
    python系列--函数--递归函数
    python虚拟环境安装pyqt5
    docker API接口service update错误记录 error while removing network:…
    docker service create api参数
    docker api参数文档
    docker 集群
  • 原文地址:https://www.cnblogs.com/eugene0/p/14249281.html
Copyright © 2020-2023  润新知