Sqoop-1.4.6使用手册-v1.0-import部分
安装使用
Sqoop-1.4.6.jar
JDBC包
导入
导入新数据
导入更新数据
导入数据表的子集
保存上次导入的值
增量导入总结
Oracle
MySQL
导入全部表
空值处理
Oracle
MySQL
从RDB导入数据至HDFS
从RDB导入数据至Hive
增量导入
密码保护
压缩
关于版本
Sqoop是Hadoop与其他关系型数据库之间进行数据抽取、转换的一座坚固的桥梁,可以在关系型数据库以及Hadoop生态系统支持的数据存储方式(HDFS、Hive、HBase)之间进行导入和导出操作。
注意几点
1. 密码安全(第3节)
2. incremental append模式不支持hive导入至hive
3. Sqoop命令中的表名及字段名等是大小写敏感的
1. 安装使用
解压Sqoop二进制包并配置好环境变量
1. sqoop-1.4.6.jar
第一步先将sqoop jar包拷贝至Hadoop的mapreduce目录下:
cp $SQOOP_HOME/sqoop-1.4.6.jar $HADOOP/share/hadoop/mapreduce/
2. JDBC jar包
第二步将Oracle和MySQL分别需要用到的jar包拷贝至$SQOOP_HOME/lib下
cp ojdbc6.jar $SQOOP_HOME/lib/
cp mysql-connector-java-5.1.38-bin.jar $SQOOP_HOME/lib/
2. 导入
1. 从RDB导入表数据至HDFS
1. Oracle
从Oracle数据库的Schema为pdbORCL中导入表PUB_DATE_D
sqoop import --connect jdbc:oracle:thin:@15211234561
此时会在/user/nanyue/下生成目录为oracletest的目录,且表中的数据均在这个目录下,字段之间以逗号(,)作为分隔符。
2. MySQL
如果不指定目录,默认文件导入到/user/nanyue下,指定目录用warehouse-dir或target-dir
sqoop import --connect jdbc:mysql:33061234561
3. 从RDB导入表数据至Hive
1. Oracle
从Oracle中导入表数据至Hive中的default数据库,并直接创建该表(即原本此表结构在hive中是不存在的)
sqoop import --connect jdbc:oracle:thin:@//myoracle:1521/pdbORCL --username DM -password 123456 --table PUB_DATE_D --hive-import --hive-database default --create-hive-table -m 1
通过这种方式导入的数据在hive中生成的数据内容(HDFS文件)以hive中的默认分隔符进行字段分隔;
2. MySQL
当表在Hive不存在时,添加create-hive-table则在指定数据库中添加同名表
sqoop import --connect jdbc:mysql://mysql:3306/taobao --username root --password 123456 --table we --hive-import --hive-database default --create-hive-table -m 1
3. 导入全部表
如果要导入某一个数据库的所有表,可以直接执行一次命令即可,如下:
sqoop import-all-tables --connect jdbc:oracle:thin:@//myoracle:1521/pdbORCL --username DM --password-file sqoop.pwd --hive-import --hive-database oracle -m 1
如果在导入所有表中的绝大多数表,则可以用参数exclude-tables排除不需要导入的表(多表以逗号分隔)即可。
4. 空值的处理
默认情况下,如果RDB中存在空值,则导入时用字符串常量null(小写)代替所有空值。此种处理方式并不符合大多数的空值处理要求。而Sqoop提供了2个参数以供处理空值:
其中null-string用于处理数据库中文本类型的字段,null-non-string用于处理非文本类型的字段
sqoop import --connect jdbc:oracle:thin:@//myoracle:1521/pdbORCL --username DM --password-file sqoop.pwd --table PUB_DATE_D --where "QUARTER_NAME