Sqoop从关系型数据库(mysql)往Hive上导入数据,从Hive导出数据到mysql数据库

前提(配置环境)

一、/opt/sofware/sqoop/sqoop/conf 目录下 nano ./sqoop-env.sh (sqoop-env.sh 是由 cp ./sqoop-env-template.sh ./sqoop-env.sh 复制过来的)

设置 HBASE_HOME和HIVE_HOME的路径
在这里插入图片描述

二、将两个jar包放到sqoop的lib目录下

在这里插入图片描述

一、Sqoop从关系型数据库(mysql)往Hive上导入数据

指令 导入数据还可以到诶

./sqoop import --connect jdbc:mysql://node132:3306/company --username root --password root --table staff --delete-target-dir --num-mappers 1 --fields-terminated-by "\t" --hive-import --create-hive-table --hive-table staff

二、从Hive导出数据到mysql数据库

因为hive是基于hdfs存储数据的,所以从hive往mysql上导出数据,就相当于从hdfs上往mysql导出数据,导出数据之前需要先在mysql上建好对应的表(字段也设置好)

指令

./sqoop export --connect jdbc:mysql://node132:3306/company --username root --password root --table xss --export-dir /s/part-m-00000 --num-mappers 2 --fields-terminated-by "\t"

三、导入到hive时报错

3.1、错误:Cannot run program “hive”: error=2, No such file or directory

解决方法:
简单说就是当前节点上没有hive所以报错,需要在已经安装hive的节点上执行sqoop指令
链接:https://blog.csdn.net/u012630060/article/details/68483513

3.2、报错:hive表名命名不规范

在这里插入图片描述
报错原因:hive起的表名中带有横线(不符合命名规则)
./sqoop import --connect jdbc:mysql://node132:3306/xss --table sc --username root --password root --num-mappers 1 --delete-target-dir --fields-terminated-by “/t” --hive-import --create-hive-table --hive-table sqoo-pppp
解决方法:去掉横线或者改成下划线

3.3Output directory hdfs://192.168.100.45:9000/user/root/tb_movie already exists

报错: ERROR tool.ImportTool: Import failed: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://192.168.100.45:9000/user/root/tb_movie already exists
解决方法:
说明:表明此时在HDFS上已存了一个临时导入目录,可以先将其删除,然后再执行导入。或者,在导入命令中加入–delete-target-dir参数,即在导入到hdfs前先将目标目录删除。

./sqoop import --connect jdbc:mysql://node132:3306/company --username root --password root --table staff --delete-target-dir --num-mappers 1 --fields-terminated-by "\t" --hive-import --create-hive-table --hive-table staff
发布了50 篇原创文章 · 获赞 30 · 访问量 7043

猜你喜欢

转载自blog.csdn.net/qq_44472134/article/details/104178514