sqoop数据的导入和导出

本文介绍了如何使用Sqoop工具将MySQL数据库中的数据导入到HDFS,以及如何从HDFS导出数据回MySQL。包括连接配置、导入命令详解、导出操作等。

 

1、将mysql驱动拷贝到sqoop的lib中

 

2、测试sqoop与mysql的连接

[root@centos1 bin]#  sqoop list-databases --connect jdbc:mysql://192.168.1.100:3306/ --username root --password root

 

3、从mysql导入到hdfs

sqoop ##sqoop命令
import ##表示导入
--connect jdbc:mysql://ip:3306/sqoop ##告诉jdbc,连接mysql的url
--username sqoop ##连接mysql的用户名
--password sqoop ##连接mysql的密码
--table test ##从mysql导出的表名称
--fields-terminated-by '\t' ##指定输出文件中的行的字段分隔符
-m 1 ##复制过程使用1个map作业

#一条完整的命令
sqoop import --connect jdbc:mysql://192.168.1.100/test --username root --password root --table test --fields-terminated-by ':' -m 1
#数据库中的数据导入到HDFS上
sqoop import --connect jdbc:mysql://192.168.1.10:3306/test --username root --password 123  --table trade_detail --columns 'id, account, income, expenses'
#指定输出路径、指定数据分隔符
sqoop import --connect jdbc:mysql://192.168.1.10:3306/test --username root --password 123  --table trade_detail --target-dir '/sqoop/td' --fields-terminated-by '\t'
#指定Map数量 -m
sqoop import --connect jdbc:mysql://192.168.1.10:3306/test --username root --password 123  --table trade_detail --target-dir '/sqoop/td1' --fields-terminated-by '\t' -m 2 
#增加where条件, 注意:条件必须用引号引起来
sqoop import --connect jdbc:mysql://192.168.1.10:3306/test --username root --password 123  --table trade_detail --where 'id>3' --target-dir '/sqoop/td2' 
#增加query语句(使用 \ 将语句换行)
sqoop import --connect jdbc:mysql://192.168.1.10:3306/test --username root --password 123 \
--query 'SELECT * FROM trade_detail where id > 2 AND $CONDITIONS' --split-by trade_detail.id --target-dir '/sqoop/td3'

 注意:如果使用--query这个命令的时候,需要注意的是where后面的参数,AND $CONDITIONS这个参数必须加上,而且存在单引号与双引号的区别,如果--query后面使用的是双引号,那么需要在$CONDITIONS前加上\即\$CONDITIONS,如果设置map数量为1个时即-m 1,不用加上--split-by ${tablename.column},否则需要加上

 

3、将hdfs上的数据导入到mysql

[root@centos1 bin]# sqoop export --connect jdbc:mysql://192.168.1.100:3306/test --username root --password root --export-dir '/td3' --table td_bak -m 1 --fields-terminated-by ','

 

4、配置mysql远程连接

GRANT ALL PRIVILEGES ON itcast.* TO 'root'@'192.168.1.201' IDENTIFIED BY '123' WITH GRANT OPTION;
	FLUSH PRIVILEGES; 
	
	GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
	FLUSH PRIVILEGES
	

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

### Hadoop中Sqoop数据导入导出的相关报告与使用指南 #### 一、Sqoop简介及其作用 Sqoop是一种用于在关系型数据库(RDBMS)Hadoop生态系统之间高效传输大量数据的工具。其核心功能在于将数据从传统的关系型数据库迁移到Hadoop分布式文件系统(HDFS),或者反之亦然[^3]。 #### 二、Sqoop的工作机制 Sqoop通过将用户的导入导出命令转化为MapReduce程序来完成数据传输任务。在此过程中,主要涉及对`InputFormat``OutputFormat`类别的自定义实现。值得注意的是,在大多数情况下,Sqoop仅利用Map阶段而省略了Reduce阶段,以此提高效率并减少不必要的资源消耗[^5]。 #### 三、数据导入操作详解 ##### (1)基本概念 数据导入是指将外部关系型数据库中的表数据加载到HDFS上的过程。这一过程可以按需配置多种参数以满足不同的业务需求[^1]。 ##### (2)常用选项说明 - `--connect`: 指定JDBC连接字符串。 - `--username/--password`: 提供访问目标数据库所需的认证信息。 - `--table`: 明确要迁移的具体表格名称。 - `--target-dir`: 设置HDFS目录路径作为最终存储位置。 示例代码如下所示: ```bash sqoop import \ --connect jdbc:mysql://localhost/testdb \ --username root \ --password secret \ --table employees \ --target-dir /user/hdfs/sqoop_imported_data ``` ##### (3)高级特性支持 除了基础的功能外,还支持诸如增量导入等功能,允许只同步新增加的部分记录而非整个表的内容[^4]。 #### 四、数据导出操作解析 相对应地,数据导出则是指把已经存在于HDFS内的数据写回到指定的关系型数据库里去的操作模式[^2]。 同样存在一些重要的标志位可供调整优化性能表现: - `-m`, 或者完整的形式为`--num-mappers`:控制并发度大小,默认值通常设为四; - `--export-dir`: 声明待转移出去的数据所在的确切地址; 举例如下: ```bash sqoop export \ --connect jdbc:mysql://localhost/target_db \ --username admin \ --password passw0rd \ --table destination_table \ --export-dir /path/to/export/data \ --input-fields-terminated-by ',' \ --lines-terminated-by '\n' ``` #### 五、注意事项及最佳实践建议 为了确保顺利完成每一次的数据交换活动,请务必遵循以下几点提示事项: - 验证网络连通状况良好无误; - 测试所使用的驱动版本兼容性正常运作; - 考虑设置合理的分区策略降低单次作业规模提升整体吞吐量水平等等[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值