sqoop数据迁移工具

版权声明:该版权归博主个人所有,在非商用的前提下可自由使用,转载请注明出处. https://blog.csdn.net/qq_24696571/article/details/86483104

sqoop

sqoop发行了2个版本,在同一个hadoop集群中不兼容,常用sqoop1的版本:
sqoop1: 1.4.x
sqoop2: 1.99.x版本
相同产品: 阿里DataX

架构

在这里插入图片描述

  • 客户端直接接入hadoop,通过任务调度生成mapreduce任务.
  • 可以对hadoop集群和数据库进行相互的导入导出

sqoop安装部署

基于
hadoop2.x
MapReduce
hive
mysql
hbase

  • 下载安装包, 并解压 (sqoop安装在hive客户端的服务器节点上)
    在这里插入图片描述
  • 配置局部环境变量
    在这里插入图片描述
  • 添加数据库驱动包到sqoop解压问价的lib目录下
    在这里插入图片描述
  • 将sqoop解压文件夹的conf目录下的sqoop-env-template.sh模板文件更名为sqoop-env.sh
    在这里插入图片描述
  • 注释代码,修改sqoop解压文件夹下的bin目录下的配置configure-sqoop,去掉HBase、HCatalog、Accumulo等未安装服务相关内容,已经安装可以不用注释
if [ ! -d "${HBASE_HOME}" ]; then
  echo "Warning: $HBASE_HOME does not exist! HBase imports will fail."
  echo 'Please set $HBASE_HOME to the root of your HBase installation.'
fi

if [ ! -d "${HCAT_HOME}" ]; then
  echo "Warning: $HCAT_HOME does not exist! HCatalog jobs will fail."
  echo 'Please set $HCAT_HOME to the root of your HCatalog installation.'
fi

if [ ! -d "${ACCUMULO_HOME}" ]; then
  echo "Warning: $ACCUMULO_HOME does not exist! Accumulo imports will fail."
  echo 'Please set $ACCUMULO_HOME to the root of your Accumulo installation.'
fi

在这里插入图片描述

  • 测试
    sqoop version
  1. 启动mysql
  2. 连接数据库:sqoop list-databases -connect jdbc:mysql://[mysql服务器节点ip地址别名]:3306/ -username [数据库用户名] -password [数据库密码], list-databases:查看数据库.
    例子,查看数据库:sqoop list-databases -connect jdbc:mysql://node01:3306/ -username root -password 123456
    例子,查看mysql数据库中的表:sqoop list-tables -connect jdbc:mysql://node01:3306/mysql -username root -password 123456

sqoop参数

在这里插入图片描述

  • 导入参数
    在这里插入图片描述
  • 导出参数
    在这里插入图片描述

数据迁入

在这里插入图片描述

-1. mysql数据库迁移到HDFS

  • 创建脚本 , 集群名称:/hadoop-2.6.5/etc/hadoop/hdfs-site.xml文件中有设置
    在这里插入图片描述- 执行脚本或者直接将脚本内容在Linux下一行执行
sqoop 
import 
--connect jdbc:mysql://node01:3306/sqoop 
--username root 
--password 123456 
--table stu 
-m1 
-target
-dir hdfs://Credi/my02

-2. mysql数据库迁移到Hive

2.1导入到配置地址
  • 启动hive
  • 执行一下命名或脚本,
  • hive-import会去找hive环境变量:/apache-hive-1.2.1-bin/conf/hive-site.xml文件下配置的数据存放路径,数据会自动存放在该路径下
  • 如果执行前没有启动hive, 找不到环境变量,数据会被存到usr/root本地目录下,并报错
    ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive exited with status 1
sqoop
import 
--connect jdbc:mysql://node01:3306/sqoop
--username root
--password 123456
--table stu
-m1 
--hive-import 

//hive-import会去找have环境变量:apache-hive-1.2.1-bin/conf/hive-site.xml文件下配置的数据存放路径,数据会自动存放在该路径下

2.2 导入到指定地址
  • 将数据导入hive数据库目录下的stu表中,但此时该表无法使用
sqoop
import 
--connect jdbc:mysql://node01:3306/sqoop
--username root
--password 123456
--table stu
-m1 
-target-dir hdfs://Credi/user/hive_local/warehouse/stu
  • 设计好表结构,手动创建stu表,之后数据会自动导入.

-3. mysql数据库迁移到Hbase

数据导出

-1.从hdfs导出到mysql

  • 在mysql建立一张空表
  • 执行sqoop命令或脚本
sqoop 
export 
--connect jdbc:mysql://node01:3306/sqoop 
--username root 
--password 123456 
--table stu 
--export-dir /my02/part-m-00000
  • 注意:导入hdfs的数据文件分隔符是’,’ , 导入hive的数据文件分隔符是隐藏分隔符

-2.从hive导出到mysql

  • 从hive导出唯一的区别是,hive表的数据分隔符是隐藏分隔符
  • 执行如下命令
sqoop 
export 
--connect 
jdbc:mysql://node01:3306/sqoop 
--username root 
--password 123456 
--table stu 
--export-dir /user/hive_local/warehouse2/stu/part-m-00000
--input-fields-terminated-by '\001'

猜你喜欢

转载自blog.csdn.net/qq_24696571/article/details/86483104