Sqoop导入数据(mysql---->>hive)

目录

  • 数据传输流程
  • 脚本
  • 报错和异常说明
    • [1. Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf](#1. Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf)
    • [2. 数据导入hive后显示NULL](#2. 数据导入hive后显示NULL)

数据传输流程

mysql---->>hdfs---->>hive

数据从mysql表中取出,放到hdfs上(由target-dir指定目录),所有数据转移完成后,将hdfs上传数据到hive表的对于目录下,并将该目录删除

脚本

bash 复制代码
import
--connect
jdbc:mysql://127.0.0.1:3306/sqoop
--username
root
--password
password
--as-textfile
--target-dir
/sqoop/student4
--delete-target-dir
--num-mappers
1
--bindir 
/opt/module/sqoop/lib
--table
student
--columns
id,name
--fields-terminated-by
,
--hive-import
--hive-table
student

报错和异常说明

1. Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf

原因 :缺少hive的配置文件
解决方案:将hive目录下的hive-common-3.1.2.jar移动到sqoop的lib目录下

2. 数据导入hive后显示NULL

原因 :建hive表是设定的分割符不恰当,跟从mysql导入过来的数据的分隔符不一样,所以导致hive切分不了数据,于是查询为空,但是这个过程,不属于导入失败,所以导入脚本正常运行。

导入流程:mysql---->>hdfs---->>hive
解决方案 :

首先检查mysql内部的数据是否正确导入到hdfs中

一般而言,mysql中的数据切分是','

检查hdfs中的数据情况(执行以下代码)
sqoop脚本student

bash 复制代码
import
--connect
jdbc:mysql://127.0.0.1:3306/sqoop
--username
root
--password
password
--as-textfile
--target-dir
/sqoop/student3
--delete-target-dir
--num-mappers
1
--bindir 
/opt/module/sqoop/lib
--table
student
--columns
id,name
--fields-terminated-by
,

脚本执行代码

bash 复制代码
sqoop --options-file sqoop_student.txt

检查生成的hdfs文件

bash 复制代码
 hdfs dfs -cat /sqoop/student3/part-m-00000

分析

hdfs中,数据以','进行分割,因此hdfs---->>hive中也需要设定','作为分隔符

hive数据库创建
数据库创建脚本

设定','作为分割符

bash 复制代码
create table student
(
    id   string,
    name string
)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;

检查数据库情况

bash 复制代码
show create table student;


完整的导入脚本mysql---->>hdfs---->>hive

bash 复制代码
import
--connect
jdbc:mysql://127.0.0.1:3306/sqoop
--username
root
--password
password
--as-textfile
--target-dir
/sqoop/student4
--delete-target-dir
--num-mappers
1
--bindir 
/opt/module/sqoop/lib
--table
student
--columns
id,name
--fields-terminated-by
,
--hive-import
--hive-table
student

总结

可以修改分隔符为其他的形式'\t' '\001'都可以,但是需要保证hdfs和hive中的分隔符统一

相关推荐
微微%13 小时前
mysql的安装和使用
数据库·mysql·mysql8安装
十年程序梦17 小时前
2026最新国内省市区县表,mysql表格
mysql
Random Glow18 小时前
二级索引与回表:一次回表到底多贵
数据库·mysql·性能优化·innodb·索引
sunburn-20 小时前
数据库聚合查询完整教程:从基础函数到实战统计
java·数据库·mysql·数据库开发
father_122721 小时前
【ambari管理下hdp2.6.5升级hive1.2.1-2.1.0-2.3.3】
hive·hadoop·ambari
❀͜͡傀儡师21 小时前
MySQL REST Service 认证鉴权体系与 MySQL 26.10.0 内置化演进
数据库·mysql·adb
数据库小学妹1 天前
MySQL binlog格式怎么选?ROW、STATEMENT、MIXED的区别与坑
数据库·mysql·binlog·主从复制·数据一致性
花间相见1 天前
【计算基础|MySQL18】Buffer Pool 与内存管理
后端·sql·mysql
杨云龙UP1 天前
生产实战:Keepalived + Nginx + MySQL 双向复制高可用架构部署与原理详解
运维·数据库·mysql·nginx·架构·keepalived·高可用架构
为思念酝酿的痛1 天前
MySQL的基本查询
数据库·mysql