学习sqoop二:sqoop导出hadoop数据到mysql和sqoop的job任务

1.sqoop导出hadoop数据到mysql

前提: 将数据从Hadoop生态体系导出到RDBMS数据库导出前,目标表必须存在于目标数据库中。
export有三种模式:

1.1 默认操作是从将文件中的数据使用INSERT语句插入到表中。
  • 观察要导入的hdfs数据
    在这里插入图片描述
    我们可以看到分隔符为SOH,对应编码表就是’\001’
    在这里插入图片描述
  • 在mysql的user库中创建目标表
use `user`
CREATE TABLE `user_info` (
  `uid` int(10) NOT NULL,
  `sex` varchar(2) NOT NULL,
  `career` varchar(3) NOT NULL,
  `education` varchar(3) NOT NULL,
  `marriage` varchar(2) NOT NULL,
  `usertype` varchar(3) NOT NULL,
  `birthday` varchar(10) NOT NULL,
  `province` varchar(3) NOT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 执行导入命令
注意: 默认是逗号作为切割符
bin/sqoop export \
--connect jdbc:mysql://node03:3306/user \
--username root \
--password 123456 \
--table user_info \
--input-fields-terminated-by '\001' \
--export-dir /user/hive/warehouse/test.db/user_info/*
  • 相关配置参数
--input-fields-terminated-by '\t'  
	指定文件中的分隔符
	
--columns 
	选择列并控制它们的排序。当导出数据文件和目标表字段列顺序完全一致的时候可以不写。否则以逗号为间隔选择和排列各个列。没有被包含在–columns后面列名或字段要么具备默认值,要么就允许插入空值。否则数据库会拒绝接受sqoop导出的数据,导致Sqoop作业失败
	
--export-dir 
	导出目录,在执行导出的时候,必须指定这个参数,同时需要具备--table或--call参数两者之一,--table是指的导出数据库当中对应的表,

--call
	是指的某个存储过程。
--input-null-string --input-null-non-string
	在进行导入的时候, 如果RDBMS的表中有null的数据, 在导入的hdfs后, 
			如果是字符串类型字段的: null转换为 "null" 
			如果是数字类型的字段的: null 转换为 空值
		在进行导出的时候, 如果--input-null-string 会将  字符串 "null" 转换到 RDNMS中 空值
						  如果 --input-null-non-string 会将 空值  转换为 空值
		解决方案: 在表数据中有空值情况下使用
			--input-null-string "\\N" --input-null-non-string "\\N"
1.2 更新模式:Sqoop将生成UPDATE替换数据库中现有记录的语句。
bin/sqoop export \
--connect jdbc:mysql://node01:3306/user \
--username root \
--password 123456 \
--table user_info \
--export-dir /user/hive/warehouse/test.db/user_info/* \
--update-key id \
--update-mode updateonly

常见属性:
   --update-key : 更新标识,即根据某个字段进行更新
   
   --updatemod : 更新的模式 
   	取值: 
   		updateonly :  只管更新, 不管新增
   		allowinsert:  有更新执行更新, 有新增执行新增
   	
注意 :
   只会将修改的数据进行, 对于新增数据,不做任何操作
   只管更新, 不管新增
1.3 调用模式:Sqoop将为每条记录创建一个存储过程调用。
 bin/sqoop export \
--connect jdbc:mysql://node01:3306/user \
--username root \
--password 123456 \
--table user_info \
--export-dir /user/hive/warehouse/test.db/user_info/* \
--update-key id \
--update-mode allowinsert

2.Sqoop的job任务

  • 以下是将mysql的test数据库导入hive中的作业。
bin/sqoop job --create testjob --import-all-tables \
--connect jdbc:mysql://node03:3306/test \
--hive-overwrite \
--username root \
--password 123456 \
--hive-import \
--hive-database test;
  • 验证job
bin/sqoop job --list
  • 检查job
bin/sqoop job --show testjob
  • 执行job
bin/sqoop job --exec testjob
  • 扩展一个免密执行job
#第一步在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规定的密码文件放在HDFS上,且文件权限必须是400
#第三步编写sqoop作业使用--password-file参数,如果是--password会出现警告
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值