使用sqoop将hive数据库导入至mysql

这篇具有很好参考价值的文章主要介绍了使用sqoop将hive数据库导入至mysql。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:本文由实现此博客过程中遇到的问题及解决办法整理而成。博客:淘宝双11数据分析与预测课程案例-步骤三:将数据从Hive导入到MySQL_厦大数据库实验室

操作前准备

数据

数据放在/usr/local/data/comment.csv

使用sqoop将hive数据库导入至mysql

数据来源于:Amazon Reviews: Unlocked Mobile Phones | Kaggle

大数据开发环境

软件 版本
hadoop 2.7
mysql 5.7
hive 2.1.0
sqoop 1.4.6

未知hive2.1.0和sqoop1.4.7是否有兼容性问题,推荐使用sqoop1.4.6

数据预处理

删除第一行表头

# 1d表示删除第1行,同理,3d表示删除第3行,nd表示删除第n行
cd /usr/local/data
sed -i '1d' comment.csv
head -n 5 comment.csv

查看是否存在多余字符或空行

使用vim查看文件内容以及是否有多余的无关符号。虽然编辑器gedit也可查看文件内容,但是不能显示所有字符,故推荐使用vim

  • 若每行行尾存在字符^M,可能出现的原因是:该文件在导入Linux系统前在Windows系统下编辑过

    解决办法:通过字符替换,将^M换掉

    具体操作:利用vim打开文件,然后输入vim命令%s/^M$//g,进行全文件查找替换。

    注意:^M不是键盘中的符号直接输入,而是使用快捷键,^使用ctrl+v来输入,M使用ctrl+m来输入

导入过程

启动hadoop

cd /usr/local/java/hadoop/hadoop-2.7.1
./sbin/start-dfs.sh

在HDFS中创建目录

hadoop fs -ls /
hadoop fs -mkdir -p /data/amazon

将文件上传至HDFS中

hadoop fs -put /usr/local/data/comment.csv /data/amazon

查看文件内容

hadoop fs -cat /data/amazon/comment.csv | head -5

启动mysql

service mysql start

启动hive

cd /usr/local/java/hive-2.1.0
./bin/hive

选择amazon数据库

hive> use amazon;

创建hive外部表

# 用 /data/amazon 创建 amazon数据库中 goods 表
hive> CREATE EXTERNAL TABLE amazon.goods(product_name STRING,brand_name STRING,price INT,rating INT,reviews STRING,votes INT) COMMENT 'Welcome to shandong. Now create amazon!' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION '/data/amazon';

ROW FORMAT DELIMITED FIELDS TERMINATED BY ',':以,结尾的行格式分隔字段

分隔符号的选择:在HDFS(localhost:hdfs:50070)中下载文件,使用vim查看文件分隔符以及是否有多余无关符号

查询hive表中的数据

hive>  select * from goods limit 10;
hive>  exit;

hive数据库中表行尾$

查看文件分隔符

hive -e "select * from amazon.goods limit 10" >> res
head -n 2 res | cat -A

以下为输出结果,分隔符号为^I

"""CLEAR CLEAN ESN"" Sprint EPIC 4G Galaxy SPH-D700*FRONT CAMERA*ANDROID*SLIDER*QWERTY KEYBOARD*TOUCH SCREEN"^ISamsung^I199^I4^I"nice phone^INULL$
"""CLEAR CLEAN ESN"" Sprint EPIC 4G Galaxy SPH-D700*FRONT CAMERA*ANDROID*SLIDER*QWERTY KEYBOARD*TOUCH SCREEN"^ISamsung^I199^I5^IVery pleased^I0$

创建临时表 inner_goods

Hive会自动在HDFS文件系统(/hive/warehouse/amazon.db/inner_goods)中创建对应的数据文件

hive> create table amazon.inner_goods(product_name STRING,brand_name STRING,price INT,rating INT,reviews STRING,votes INT) COMMENT 'Welcome to shandong. Now create inner table inner_goods ' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;

将amazon外部表中的数据插入到 inner_goods

hive> INSERT OVERWRITE TABLE amazon.inner_goods select * from amazon.goods;

查看插入命令是否成功执行

hive> select * from inner_goods limit 10;

登录mysql

mysql -u root -p
mysql> show databases; #显示所有数据库
mysql> create database amazon; #创建dbtaobao数据库
mysql> use amazon; #使用数据库

查看数据库的编码

mysql> show variables like "char%";

设置| character_set_server | utf8

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
在[mysqld]下添加一行character_set_server=utf8
重启MySQL服务。service mysql restart
登陆MySQL,并查看MySQL目前设置的编码。show variables like "char%";

在amazon数据库中创建表amazon

mysql> CREATE TABLE `amazon`.`amazon` (`product_name` varchar (1500), `brand_name` varchar(300), `price` float, `rating` int, `reviews` varchar(20000), `votes` int) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> exit;

Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 65,535.

实际操作中发现VARCHAR最大限制21845个字符

# 导入数据
cd /usr/local/java/sqoop-1.4.6
bin/sqoop export --connect jdbc:mysql://localhost:3306/amazon --username your_username --password your_password --table amazon --export-dir '/hive/warehouse/amazon.db/inner_goods' --fields-terminated-by ',' --input-null-non-string '\\N';

# jdbc:mysql://localhost:3306/amazon  amazon为mysql的数据库名
# --username your_username --password sdufewsp 登录mysql的用户名和密码
# --table amazon 从amazon表中导出数据到sqoop
# --export-dir '/hive/warehouse/amazon.db/inner_goods' HDFS中的导出目录
# --fields-terminated-by ',' 分隔符
# --input-null-non-string 忽略表数据中的空值
java.lang.RuntimeException: Can't parse input data: '\N',For input string: "\N"

主要是因为hive 中的表数据为空导致的,添加一个参数忽略空:--input-null-non-string '\\N'

下载mysql-workbench

通过Mysql Workbrench可视化查看表内容

sudo apt-get install mysql-workbench

报错反思

  1. 在遇到报错时,没能保留过程,导致报错解决后,无法对比反思报错原因

  2. 解决报错时,需要找到报错的核心部分,如:caused by……error


参考文章:
【SQOOP】 sqoop java.lang.RuntimeException: Can‘t parse input data: ‘\N‘,For input string: “\N“_Zsigner的博客-CSDN博客

Sqoop工具从hive导出数据到MySQL踩坑记 - 简书 (jianshu.com)

Linux系统中文件行末尾出现^M的原因及解决办法 - WayneLiu123 - 博客园 (cnblogs.com)文章来源地址https://www.toymoban.com/news/detail-446110.html

到了这里,关于使用sqoop将hive数据库导入至mysql的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Sqoop】MySQL表导入Hive

    用 Sqoop 将 MySQL 指定数据库指定的表导入Hive 的指定数据库

    2024年02月03日
    浏览(41)
  • 基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)

    Hive介绍: Hive是建立在Hadoop之上的数据仓库基础架构,它提供了类似于SQL的语言(HQL),可以对大规模数据集进行查询和分析。通过Hive,我们可以在分布式存储系统中进行复杂的数据处理和分析。 Sqoop简介: Sqoop是一个用于在Apache Hadoop和关系型数据库之间传输数据的工具。

    2024年04月13日
    浏览(43)
  • Linux 使用bash创建MYSQL数据库并导入数据库文件

    主要是杠一下的数据库123-456.sql,这个神经病一样,试了很多写法

    2024年01月22日
    浏览(67)
  • sqoop(DataX)-MySQL导入HIVE时间格问题

    用公司的大数据平台(DataX)导数,已经开发上线一个多月的一批报表,突然有同事说有个报表数据不准。出在时间字段上。 分析: 1、先看了原数据MySQL字段类型为datetime,目标字段为timestamp类型; 2、经发现所有时间的差距都是8小时,怀疑是因为时区转换的原因; 3、对比其他

    2024年02月02日
    浏览(49)
  • 大数据之使用Spark增量抽取MySQL的数据到Hive数据库(1)

    前言 题目: 一、读题分析 二、处理过程 1.采用SparkSQL使用max函数找到最大的日期然后转换成时间类型在变成字符串 2.这里提供除了SQL方法外的另一种过滤不满足条件的方法 三、重难点分析 总结  本题来源于全国职业技能大赛之大数据技术赛项 电商 赛题-离线数据处理-抽取

    2024年02月08日
    浏览(51)
  • 大数据之使用Spark全量抽取MySQL的数据到Hive数据库

    前言 一、读题分析 二、使用步骤 1.导入配置文件到pom.xml 2.代码部分 三、重难点分析 总结 本题来源于全国职业技能大赛之大数据技术赛项赛题-离线数据处理-数据抽取(其他暂不透露) 题目:编写Scala代码,使用Spark将MySQL的shtd_industry库中表EnvironmentData,ChangeRecord,BaseMach

    2024年02月11日
    浏览(47)
  • 使用sqoop从Hive导出数据到MySQL

    1、启动hadoop:start-all.sh。 2、启动mysql:support-files/mysql.server start。 3、启动hive:hive。 4、在hive中创建表。 (学生信息:学号xh,姓名xm)xsxx: create table bigdata03.xsxx ( xh String, xm String ) row format delimited fields terminated by \\\',\\\'stored as textfile; (课程信息:课程号kch,学号xh,课程名称

    2024年02月11日
    浏览(53)
  • Sqoop【实践 01】Sqoop1最新版 MySQL与HDFS\Hive\HBase 核心导入导出案例分享+多个WRAN及Exception问题处理(一篇即可学会在日常工作中使用Sqoop)

    1️⃣ 查看所有命令【 sqoop help 】 2️⃣ 查看某条命令的具体使用方法【 sqoop help COMMAND 】 查询MySQL所有数据库,通常用于 Sqoop 与 MySQL 连通测试: 【具体参数可以使用 sqoop help list-databases 查看】实例: 结果: 【2个】WARN处理: 查询指定数据库中所有数据表,这里要注意一下

    2024年03月18日
    浏览(49)
  • 如何使用python实现简单爬取网页数据并导入MySQL中的数据库

    前言:要使用 Python 爬取网页数据并将数据导入 MySQL 数据库,您需要使用 Requests 库进行网页抓取,使用 BeautifulSoup 库对抓取到的 HTML 进行解析,并使用 PyMySQL 库与 MySQL 进行交互。 以下是一个简单的示例: 1.  安装所需库: ``` ``` 2.  导入所需库: ``` ``` 3.  建立数据库连接:

    2024年02月04日
    浏览(53)
  • Sqoop数据导入到Hive表的最佳实践

    将数据从关系型数据库导入到Hive表是大数据领域中的常见任务之一,Sqoop是一个强大的工具,可以帮助实现这一目标。本文将提供Sqoop数据导入到Hive表的最佳实践,包括详细的步骤、示例代码和最佳建议,以确保数据导入过程的高效性和可维护性。 Sqoop是一个开源工具,用于

    2024年01月23日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包