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,问题解决。

  • 相关阅读:
    The Mac Application Environment 不及格的程序员
    Xcode Plugin: Change Code In Running App Without Restart 不及格的程序员
    The property delegate of CALayer cause Crash. 不及格的程序员
    nil localizedTitle in SKProduct 不及格的程序员
    InApp Purchase 不及格的程序员
    Safari Web Content Guide 不及格的程序员
    在Mac OS X Lion 安装 XCode 3.2 不及格的程序员
    illustrate ARC with graphs 不及格的程序员
    Viewing iPhoneOptimized PNGs 不及格的程序员
    What is the dSYM? 不及格的程序员
  • 原文地址:https://www.cnblogs.com/eugene0/p/14249281.html
Copyright © 2011-2022 走看看