这篇文章的内容主要围绕Linux系统怎么安装sqoop进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!
正如Sqoop的名字所示:Sqoop是一个用来将关系型数据库和Hadoop中的数据进行相互转移的工具,可以将一个关系型数据库(例如Mysql、Oracle)中的数据导入到Hadoop(例如HDFS、Hive、Hbase)中,也可以将Hadoop(例如HDFS、Hive、Hbase)中的数据导入到关系型数据库(例如Mysql、Oracle)中。如下图所示: 2、Sqoop架构 Sqoop架构: 正如上图所示:Sqoop工具接收到客户端的shell命令或者Java api命令后,通过Sqoop中的任务翻译器(Task Translator)将命令转换为对应的MapReduce任务,而后将关系型数据库和Hadoop中的数据进行相互转移,进而完成数据的拷贝。
Hadoop
关系型数据库(MySQL/Oracle)
HBase
Hive
ZooKeeper
tar -zxvf .tar.gz -C 目标目录
mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop-1.4.7
进入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 配置文件夹 路径 复制代码
cp /XXX/hive/conf/hive-site.xml /XXX/sqoop-1.4.7/conf/
修改配置文件:
vi /etc/profile
增加以下内容:
export SQOOP_HOME=sqoop安装路径
export PATH=$PATH:$SQOOP_HOME/bin
声明环境变量:
source /etc/profile
sqoop version
导入MySQL驱动到sqoop/lib下
导入Oracle驱动到sqoop/lib下
参数查看:Sqoop官网 -> documentation -> Sqoop User Guide
import 导入数据到集群
export 从集群导出数据
create-hive-table 创建hive表
import-all-tables 指定关系型数据库所有表到集群
list-databases 列出所有数据库
list-tables 列出所有数据库表
merge 合并数据
codegen 获取某张表数据生成JavaBean并打Jar包
功能: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:
功能: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:
操作命令:
sqoop list-databases --connect jdbc:mysql://bigdata01:3306/ --username root --password 密码
操作命令:
sqoop codegen --connect jdbc:mysql://bigdata01:3306/数据库名 --username root --password 密码 --table 表名 -- bindir Linux本地路径 # 指定Jar包打包路径 --class-name 类名 # 指定Java类名 --fields-terminated-by "\t"
操作命令:
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系统怎么安装sqoop”这一问题有一定的了解,快去动手实践吧,如果想了解更多相关知识点,可以关注亿速云网站!小编会继续为大家带来更好的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。