1.RDBMS到HDFS
Sqoop把关系型数据库(这里以mysql为例)的数据导入到HDFS中,主要分为两步
/*得到元数据(mysql数据库中的数据)
/*提交map
这样流程就很清晰了,首先连接到mysql数据库得到表中的数据,然后进行map任务即可
1)先在mysql中创建一张表 create table ys.test(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255));
2)全部导入
bin/sqoop import \ –connect jdbc:mysql://172.17.0.5:3306/ys \ –username root \ –password root \ –table test \ –target-dir /user/company \ –delete-target-dir \ –num-mappers 1 \ –fields-terminated-by “\t”
参数说明:
–target-dir :指定导入数据到hdfs的位置
–delete-target-dir : 如果导入数据到hdfs的位置目录已存在,则删除
–num-mappers :指定mapper任务的个数,默认是有4个
–fields-terminated-by “\t” : 指定导入数据到hdfs时每一列数据的分隔符,mysql数据导入到hdfs中默认的列分隔符是“,”,默认的行分隔符是"\n"
Sqoop导入数据到HDFS具体执行流程:
/*将命令自动生成相应的java类
/*将java代码编译成jar包
/*执行jar包
/*执行mapreduce(对import来说,只运行map任务)
3)查询导入 bin/sqoop import \ –connect jdbc:mysql://172.17.0.5:3306/ys \ –username root \ –password root \ –target-dir /user/test \ –delete-target-dir \ –num-mappers 1 \ –fields-terminated-by “\t” \ –query ‘select name,sex from test where id <=1 and $CONDITIONS;’
注意: 局部导入数据使用的是–query参数,不能与–table参数一起使用,where语句后面必须跟$CONDITIONS,–query后边如果是双引号,$CONDITIONS必须加\,避免shell识别为自己的变量,如果是多个mapper任务的话,还需要加入–split-by参数来指定分割的字段名称,$CONDITIONS就是标记当前mapper从哪个数据段开始读
4)导入指定列 bin/sqoop import \ –connect jdbc:mysql://172.17.0.5:3306/ys \ –username root \ –password root \ –target-dir /user/test \ –delete-target-dir \ –num-mappers 1 \ –fields-terminated-by “\t” \ –columns id,sex \ –table test
5)使用Sqoop关键字筛选查询导入数据
bin/sqoop import \ –connect jdbc:mysql://172.17.0.5:3306/ys \ –username root \ –password root \ –target-dir /user/test \ –delete-target-dir \ –num-mappers 1 \ –fields-terminated-by “\t” \ –table test \ –where “id=1”
注意: 在 Sqoop 中可以使用 sqoop import -D property.name=property.value 这样的方式加入执行任务的参数,多个参数用空格隔开
2.RDBMS到Hive bin/sqoop import \ –connect jdbc:mysql://172.17.0.6:3306/ys \ –username root \ –password root \ –table test \ –num-mappers 1 \ –hive-import \ –fields-terminated-by “\t” \ –hive-overwrite \ –hive-table test_hive
注意: 该过程分为两步,第一步将数据导入到 HDFS,第二步将导入到 HDFS 的数据迁移到 Hive 仓库 第一步默认的临时目录是/user/root/表名
最后修改于 2018-07-16

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。