良许Linux教程网 干货合集 Linux下安装并使用sqoop

Linux下安装并使用sqoop

sqoop它是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

image-20211128223234444

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的话新表数据替换旧表数据,如果没有冲突则是新表数据添加到旧表的数据。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

img
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部