首页 存档 技术 查看内容

大数据跟我学系列五 | Sqoop 1.4.6 导入实战 (RDB含MySQL和Oracle)

2018-3-30 13:00 |来自: 互联网 494 0

摘要: Sqoop-1.4.6使用手册-v1.0-import部分 安装使用 Sqoop-1.4.6.jar JDBC包 导入 导入新数据 导入更新数据 导入数据表的子集 保存上次导入的值 增量导入总结 Oracle MySQL 导入全部表 空值处理 Oracle MySQL 从RDB ...

Sqoop-1.4.6使用手册-v1.0-import部分

  1. 安装使用

    1. Sqoop-1.4.6.jar

    2. JDBC包

  2. 导入

    1. 导入新数据

    2. 导入更新数据

    3. 导入数据表的子集

    4. 保存上次导入的值

    5. 增量导入总结

    6. Oracle

    7. MySQL

    8. 导入全部表

    9. 空值处理

    10. Oracle

    11. MySQL

    12. 从RDB导入数据至HDFS

    13. 从RDB导入数据至Hive

    14. 增量导入

  3. 密码保护

  4. 压缩

  5. 关于版本

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:@//myoracle:1521/pdbORCL --username DM -password 123456 --table PUB_DATE_D --warehouse-dir /user/nanyue/oracletest -m 1

此时会在/user/nanyue/下生成目录为oracletest的目录,且表中的数据均在这个目录下,字段之间以逗号(,)作为分隔符。


2. MySQL

如果不指定目录,默认文件导入到/user/nanyue下,指定目录用warehouse-dir或target-dir

sqoop import --connect jdbc:mysql://mysql:3306/taobao --username root --password 123456 --table we --warehouse-dir /mytargetdir -m 1

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
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部