sqoop框架原理及基本操作

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhongwen7710/article/details/40032265

1、Sqoop是什么

Sqoop:SQL-to-Hadoop

传统数据库与Hadoop间数据同步工具

利用Mapreduce分布式批处理,加快了数据传输速度,保证了容错性

2、Sqoop1架构


sqoop1 import原理:
从传统数据库获取元数据信息(schema、table、field、field type),把导入功能转换为只有Map的Mapreduce作业,在mapreduce中有很多map,每个map读一片数据,进而并行的完成数据的拷贝。
sqoop1 export原理:
获取导出表的schema、meta信息,和Hadoop中的字段match;多个map only作业同时运行,完成hdfs中数据导出到关系型数据库中。

3、sqoop1常用用法

 1)sqoop import toHDFS:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. sqoop import \    
  2. --connect jdbc:mysql://mysql.example.com/sqoop \    
  3. --username sqoop \    
  4. --password sqoop \    
  5. --table cities    
  6. --where "country = 'USA'"    
  7. --target-dir /etl/input/cities    
  8. --warehouse-dir /etl/input/    
  9. --num-mappers 10    
  10. --null-string '\\N' \    
  11. --null-non-string '\\N'    
  12. --incremental append \     
  13. --check-column id \     
  14. --last-value 1  
说明:
--connnect: 指定JDBC URL
--username/password:mysql数据库的用户名
--table:要读取的数据库表
--where:导入数据的过滤条件
--target-dir:HDFS中导入表的存放目录
--warehouse-dir:指定表存放的父目录,只需要指定一次,下次存放时会在该目录下自动以该表名命名
--num-mappers:并发的map数
--null-string:null值时,HDFS存储为N
--null-non-string:非字符类型的字段为空时,存储为N
--incremental append或lastmodified:自动增量方式
--check-column
--last-value:上一次导入的最后一个值

2) sqoop import to Hbase
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. bin/sqoop import  \  
  2. --connect "jdbc:mysql://localhost/mytest"  \  
  3. --username "root"  \  
  4. --password "aaa"  \  
  5. --table "student"  \  
  6. --hbase-create-table  \  
  7. --hbase-table student  \  
  8. --column-family info  \  
  9. --hbase-row-key id  
3)sqoop export
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. sqoop export \   
  2. --connect jdbc:mysql://mysql.example.com/sqoop \   
  3. --username sqoop \   
  4. --password sqoop \   
  5. --table cities \   
  6. --export-dir cities \  
  7. --input-fields-terminated-by "\001"   
  8. --columns id,name  
  9. --batch  
  10. -Dsqoop.export.records.per.statement=10  //批量更新,每隔10条提交一次  
  11. --staging-table staging_cities  //先把数据导入到这个临时表staging_cities,确定所有导入成功后,一次性重命名为正确的表,保证原子性  
  12. --update-key id  
  13. --update-mode allowinsert  

4、Sqoop1存在的问题

基于命令行的操作方式易于出错,且不安全;
数据传输和数据格式是紧耦合的,这使得connector无法支持所有数据格式;
安全密钥是暴露出来的,非常不安全
Sqoop安装需要root权限
Connector必须符合JDBC模型,并使用通用的JDBC词汇

5、常用注意点:

密码保护方法:1)加参数-P,执行时要求终端输入
2)参数--password-file my-sqoop-password,指定密码文件的路径,密码防到文件,文件只读,只有自己可读的

非文本导入,比如图片、视频等,使用--as-sequencefile以sequencefile保存到HDFS上
也可以保存成avrodatafile格式,--as-avrodatafile

6、参考

展开阅读全文

没有更多推荐了,返回首页