zoukankan      html  css  js  c++  java
  • 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,问题解决。

  • 相关阅读:
    bzoj1934 Vote 善意的投票 最小割(最大匹配)
    poj3417 Network 树上差分+LCA
    bzoj1076 奖励关 期望dp
    bzoj1087 互不侵犯King 状压dp+bitset
    bzoj1041 圆上的整点 数学
    bzoj 1085骑士精神 迭代深搜
    CodeForces 1043D Mysterious Crime 区间合并
    2018.12.14 浪在ACM 集训队第九次测试赛
    2018.12.9 中国石油大学第四次新生训练赛题解
    2018.12.8 中国石油大学第三次新生训练赛题解
  • 原文地址:https://www.cnblogs.com/eugene0/p/14249281.html
Copyright © 2011-2022 走看看