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,問題解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM