SQOOP

本文介绍了使用 SQOOP 进行数据迁移的方法,包括 MySQL 和 HDFS 之间的数据导入导出过程。涵盖 SQOOP 的安装配置、常用命令及参数详解,如 --hive-import、--append 等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQOOP是用于对数据进行导入导出的。
    (1)把MySQL、Oracle等数据库中的数据导入到HDFS、Hive、HBase中

    (2)把HDFS、Hive、HBase中的数据导出到MySQL、Oracle等数据库中


SQOOP安装
1.加压:tar -zxvf sqoop-1.4.3.bin__hadoop-1.0.0.tar.gz 重命名
2.设置环境变量:
export SQOOP_HOME=/usr/local/sqoop
export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PIG_HOME/bin:$HIVE_HOME/bin:$SQOOP_HOME/bin:$PATH
3.执行sqoop命令进入sqoop
   将mysql驱动复制到sqoop/lib/目录下
   cp mysql-connector-java-5.1.10.jar /usr/local/sqoop/lib/



1.把数据从mysql导入到hdfs(默认是/user/<username>)中

sqoop import --connect jdbc:mysql://hadoop0:3306/hive  --username root --password admin --table TBLS --fields-terminated-by '\t' 

默认情况下,如果字段内容为null,就显示null值







sqoop import --connect jdbc:mysql://xxc:3306/hive  --username root --password xxc --table TBLS --fields-terminated-by '\t'  --null-string '**'

--null-string '**',就表示把null值用**替代,注意不能用--,因为是关键字  


   

-m 1是指定只有一个map执行任务,这样输出结果就不会有多个part-m-*****了    sqoop在导入的时候默认会启动4个map任务并行执行导入,这样可以加快执行速度



--append表示追加,继续在目录(这里是默认的/user/<username>)下

否则会出异常,文件夹已存在ERROR tool.ImportTool: ERROR tool.ImportTool: Encountered IOException running import job: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory TBLS already exists 

sqoop import --connect jdbc:mysql://xxc:3306/hive  --username root --password xxc --table TBLS --fields-terminated-by '\t'  --null-string '**'  -m 1--append 


--hive-import表示导入到hive目录下
sqoop import --connect jdbc:mysql://hadoop0:3306/hive  --username root --password admin--table TBLS --fields-terminated-by '\t'  --null-string '**'  -m 1 --append  --hive-import


hive在hdfs中的默认位置是/user/hive/warehouse,是由配置文件hive-conf.xml中属性hive.metastore.warehouse.dir决定的。


例如导入表A数据到HDFS中,而且表A数据是在增加的,并且已经将表A数据导入过HDFS中,现在不想将表A数据再次全部导入HDFS中,而是将增加的部分导入HDFS中。

--check-column 'TBL_ID'  表示按照这个列来进行检查,如果这个列的数据增加了,就把增加部分的数据导入到HDFS中   
--last-value 6   如何晓得哪些数据是新增部分呢?这个是设置TBL_ID  上一次最后一行的值为6

--incremental  append  表示只将新增的数据追加进去
sqoop import --connect jdbc:mysql://xxc:3306/hive  --username root --password xxc --table TBLS --fields-terminated-by '\t'  --null-string '**'  -m 1 --append  --hive-import  --check-column 'TBL_ID' --incremental append --last-value 6


2.把数据从hdfs导出到mysql中  

--table ids  表示导出的表名   --export-dir '/ids'表示导出哪个目录   注意:这个导出是可以重复执行的。
sqoop export --connect jdbc:mysql://xxc:3306/hive  --username root --password xxc --table ids --fields-terminated-by '\t' --export-dir '/ids'


3.设置为作业,运行作业
sqoop job --create myjob -- import --connect jdbc:mysql://xxc:3306/hive  --username root --password xxc --table TBLS --fields-terminated-by '\t'  --null-string '**'  -m 1 --append  --hive-import  
  用sqoop job list查看创建了哪些作业
  运行作业  sqoop job -exec myjob  但是发现运行后需要手动输入数据库密码
  将sqoop下conf下的sqoop-site.xml文件中下面这段代码的注释去掉,表示保存密码
   <!--
  <property>
    <name>sqoop.metastore.client.record.password</name>
    <value>true</value>
    <description>If true, allow saved passwords in the metastore.
    </description>
  </property>
  -->
  sqoop job --delete myjob  删除作业
4. 导入导出的事务是以Mapper任务为单位。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值