sqoop学习文档(2)
【有问题或错误,请私信我将及时改正;借鉴文章标明出处,谢谢】
接我上一篇文章,sqoop学习文档(1)
三、Sqoop import
导入数据Sqoop import:将数据从关系型数据库导入大数据集群
导入工具将单个表从RDBMS(关系型数据库)导入到HDFS。表中的每一行在HDFS中均表示为单独的记录。记录可以存储为文本文件(每行一个记录),也可以二进制表示形式存储为Avro或SequenceFiles。
1.RDBMS(关系型数据库)到HDFS
(1)确定Mysql服务开启正常
(2)在Mysql中新建一张表并插入一些数据
(3)导入数据
①全部导入
参数解析:
--connect 指定JDBC连接字符串
--username 用户名
--password 密码
--table 表格阅读
--target-dir HDFS目标目录
--delete-target-dir 删除导入目标目录(如果存在)
-m ; --num-mappers 是用n个map任务并行导入
--fields-terminated-by 设置字段分隔符
②查询导入
提示:must contain '$CONDITIONS' in WHERE clause.
如果query后使用的是双引号,则$CONDITIONS前必须加转移符,防止shell识别为自己的变量。
--query “select name,sex from staff where id <=1 and \$CONDITIONS;”
参数解析:
-e;--query 导入任意SQL查询
eg:
--query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS'
--where 控制要导入的行
$CONDITIONS 传递参数,保证传入的顺序
③导入指定列
提示:columns中如果涉及到多列,用逗号分隔,分隔时不要添加空格
参数解析:
--columns 要从表中导入的列
④使用sqoop关键字筛选查询导入数据
参数解析:
--where 控制要导入的行
2.RDBMS到Hive
提示:该过程分为两步,第一步将数据导入到HDFS,第二步将导入到HDFS的数据迁移到Hive仓库,第一步默认的临时目录是/user/用户名/表名
参数解析:
--hive-import 将表导入到Hive中(如果未设置,则使用Hive的默认定界符)
--hive-overwrite 覆盖Hive表中的现有数据
--hive-table 设置导入Hive时要使用的表名
3 RDBMS到Hbase
提示:sqoop1.4.6只支持HBase1.0.1之前的版本的自动创建HBase表的功能
解决方案:
(1)手动创建HBase表
hbase> create 'hbase_company,'info'
(2)在HBase中scan这张表得到如下内容
hbase> scan ‘hbase_company’
参数解析:
--column-family 设置导入的目标列族
--split-by 该表的列用于拆分工作单位
--hbase-table 指定要用作目标而不是HDFS的Hbase表
--hbase-create-table 如果指定,请创建缺少的Hbase表
--hbase-row-key 指定将哪个输入列用作行键
四、Sqoop export
导出数据Sqoop export:将数据从大数据集群导出到关系型数据库
导出工具将一组文件从HDFS导出回RDBMS。目标表必须已经存在于数据库中。根据用户指定的定界符,读取输入文件并将其解析为一组记录。缺省操作是将它们转换为一组INSERT语句,该语句将记录注入到数据库中。在“更新模式”下,Sqoop将生成UPDATE语句来替换数据库中的现有记录,在“调用模式”下,Sqoop将为每个记录进行存储过程调用。
HIVE/HDFS到RDBMS(不支持从Hbase直接导出到Mysql)
参数解析:
--export-dir HDFS导出的源路径
--input-fields-terminated-by 设置输入字段分隔符
【有问题或错误,请私信我将及时改正;借鉴文章标明出处,谢谢】