
sqoop简介:
正如Sqoop的名字所示:Sqoop是一个用来将关系型数据库和Hadoop中的数据进行相互转移的工具,可以将一个关系型数据库(例如Mysql、Oracle)中的数据导入到Hadoop(例如HDFS、Hive、Hbase)中,也可以将Hadoop(例如HDFS、Hive、Hbase)中的数据导入到关系型数据库(例如Mysql、Oracle)中。如下图所示:  2、Sqoop架构 Sqoop架构:
 2、Sqoop架构 Sqoop架构:  正如上图所示:Sqoop工具接收到客户端的shell命令或者Java api命令后,通过Sqoop中的任务翻译器(Task Translator)将命令转换为对应的MapReduce任务,而后将关系型数据库和Hadoop中的数据进行相互转移,进而完成数据的拷贝。
 正如上图所示:Sqoop工具接收到客户端的shell命令或者Java api命令后,通过Sqoop中的任务翻译器(Task Translator)将命令转换为对应的MapReduce任务,而后将关系型数据库和Hadoop中的数据进行相互转移,进而完成数据的拷贝。
sqoop-1.4.7安装配置流程
(1) Sqoop环境前提:
- 
Hadoop 
- 
关系型数据库(MySQL/Oracle) 
- 
HBase 
- 
Hive 
- 
ZooKeeper 
(2) 解压sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz安装包到目标目录下:
- 
tar -zxvf .tar.gz -C 目标目录
(3) 为后续方便,重命名Sqoop文件夹:
- 
mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop-1.4.7
(4) 修改配置文件:
- 
进入sqoop-1.4.7/conf路径,重命名配置文件: - 
mv sqoop-env-template.sh sqoop-env.sh
 
- 
- 
修改sqoop-env.sh信息:(若配置了环境变量,可通过 echo $XXXXX_HOME 查询安装位置) - 
vi sqoop-env.sh
- 
#Set path to where bin/hadoop is available export HADOOP_COMMON_HOME=Hadoop安装路径 #Set path to where hadoop-*-core.jar is available #export HADOOP_MAPRED_HOME=Hadoop安装路径 #set the path to where bin/hbase is available #export HBASE_HOME=HBase安装路径 #Set the path to where bin/hive is available #export HIVE_HOME=Hive安装路径 #Set the path for where zookeper config dir is #export ZOOCFGDIR=ZooKeeper 配置文件夹 路径 复制代码 
 
- 
(5) 关联Hive:
- 
cp /XXX/hive/conf/hive-site.xml /XXX/sqoop-1.4.7/conf/
(5) 配置环境变量:
- 
修改配置文件: - 
vi /etc/profile
 
- 
- 
增加以下内容: - 
export SQOOP_HOME=sqoop安装路径
- 
export PATH=$PATH:$SQOOP_HOME/bin
 
- 
- 
声明环境变量: - 
source /etc/profile
 
- 
(6) 启动查看版本号
- 
sqoop version
(7) 添加驱动:
- 
导入MySQL驱动到sqoop/lib下 
- 
导入Oracle驱动到sqoop/lib下 
3. Sqoop操作
(1) 常用参数:
- 
参数查看:Sqoop官网 -> documentation -> Sqoop User Guide 
- 
import导入数据到集群
- 
export从集群导出数据
- 
create-hive-table创建hive表
- 
import-all-tables指定关系型数据库所有表到集群
- 
list-databases列出所有数据库
- 
list-tables列出所有数据库表
- 
merge合并数据
- 
codegen获取某张表数据生成JavaBean并打Jar包
(2) import——Sqoop的导入操作:
- 
功能:MySQL/Oracle –> HDFS/Hive 
- 
修改MySQL访问权限: - 
update user set host='%' where host='localhost';
- 
delete from user where Host='127.0.0.1';
- 
delete from user where Host='bigdata01';
- 
delete from user where Host='::1';
- 
flush privileges;
- 
use mysql;
- 
select User, Host, Password from user;
- 
查看权限: 
- 
修改权限为所有用户都可访问: 
 
- 
- 
操作命令: - 
准备工作: 
- 
导入命令: 
- 
开启hive服务 
- 
在hive中创建好要导入的对应表 
- 
FAILED: SemanticException [Error 10072]: Database does not exist: XXXXXXXX
- 
报错原因:Sqoop没有关联Hive 
- 
解决方法: 
- 
cp /XXX/hive/conf/hive-site.xml /XXX/sqoop-1.4.7/conf/
- 
ERROR tool.ImportTool: Import failed: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://bigdata01:9000/XXXXXXXXXX already exists
- 
报错原因:hdfs中存在同名路径 
- 
解决方法: 
- 
指定新路径或者删除hdfs中原文件 
- 
ERROR tool.ImportTool: Import failed: java.io.IOException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf
- 
报错原因:hive环境变量配置缺失 
- 
解决方法:——Hadoop环境加入Hive依赖 
- 
source /etc/profile
- 
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*
- 
vi /etc/profile
- 
修改配置文件: 
- 
增加以下内容: 
- 
声明环境变量: 
- 
sqoop import --connect jdbc:mysql://bigdata01:3306/数据库名 --username root --password 密码 --table 表名 --num-mappers 1 --hive-import --fields-terminated-by "\t" --hive-overwrite --hive-table hive数据库名.表名
- 
在Hive中可以看到指定表中已传入数据信息 
- 
可能报错1: 
- 
可能报错2: 
- 
可能报错3: 
- 
导出命令: 
- 
Linux本地查看hdfs上传结果: 
- 
使用query对数据进行过滤: 
- 
直接过滤字段: 
- 
sqoop import--connect jdbc:mysql://bigdata01:3306/数据库名# 连接MySQL--username root# 用户名--password XXXXXX# 密码--table 表名# 上传至HDFS的表--target-dir /YYYYYYY# HDFS目标文件夹--num-mappers 1# 指定map运行--fields-terminated-by "\t"# 指定分隔符
- 
hdfs dfs -cat /XXXXXXX/part-m-00000
- 
sqoop import --connect jdbc:mysql://bigdata01:3306/数据库名 --username root --password XXXXXX --table 表名 --target-dir /YYYYYYY --num-mappers 1 --fields-terminated-by "\t" --query 'select * from 表名 where 条件 and $CONDITIONS'# $CONDITIONS 对mapper进行索引
- 
sqoop import --connect jdbc:mysql://bigdata01:3306/数据库名 --username root --password XXXXXX --table 表名 --target-dir /YYYYYYY --num-mappers 1 --columns 字段名
- 
本地mysql表上传至hdfs: 
- 
本地mysql表上传至hive: 
 
- 
(3) emport——Sqoop的导出操作:
- 
功能:HDFS/Hive –> MySQL/Oracle 
- 
操作命令: - 
导出命令: 
- 
sqoop emport--connect jdbc:mysql://bigdata01:3306/数据库名# 连接MySQL--username root# 用户名--password XXXXXX# 密码--table 表名# 目标mysql表--export-dir /user/hive/warehouse/YYYYYYY# hive文件夹--num-mappers 1# 指定map运行--input-fields-terminated-by "\t"# 指定分隔符
- 
hive表导出至本地mysql: 
 
- 
(4) 列出所有数据库:
- 
操作命令: - 
sqoop list-databases --connect jdbc:mysql://bigdata01:3306/ --username root --password 密码
 
- 
(5) 获取数据库表数据生成JavaBean:
- 
操作命令: - 
sqoop codegen --connect jdbc:mysql://bigdata01:3306/数据库名 --username root --password 密码 --table 表名-- bindir Linux本地路径# 指定Jar包打包路径--class-name 类名# 指定Java类名--fields-terminated-by "\t"
 
- 
(6) 合并hdfs中不同目录下的数据:
- 
操作命令: - 
sqoop merge--new-data hdfs新表路径 --onto hdfs旧表路径--target-dir /YYYYYYY# 合并后的hdfs路径--jar-file =# Linux本地Jar包路径--class-name XXXXX# Jar包的类--merge-key id# 合并依据
 
- 
- 
注意:merge操作是一个新表替代旧表的操作,如果有冲突id的话新表数据替换旧表数据,如果没有冲突则是新表数据添加到旧表的数据。 
以上就是为各位朋友分享的相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多等着你!


 
		 微信扫一扫打赏
			    	微信扫一扫打赏
			     支付宝扫一扫打赏
			    	支付宝扫一扫打赏	
			    

.png) 
		        