• sqoop命令参数参考说明及案例示例


    目录

    一、概念

    二、特征

    三、常用命令示例

    四、实战案例示例

    1.全量导入(将数据从mysql导入到HDFS指定目录)

    2.全量导入(将数据从mysql导入到已有的hive表)

    3.全量导入(将数据从mysql导入到hive,hive表不存在,导入时自动创建hive表)

    4.批量全库导入(将mysql全库数据批量导入到hive)

    5.增量导入-append模式(将mysql数据增量导入hadoop)

    6.增量导入-lastmodified模式(将mysql时间列大于等于阈值的数据增量导入HDFS)

    7.全量导出(将hdfs全量导出到mysql表)


    一、概念

    Sqoop是一款开源的etl工具,主要用于在Hadoop(Hive)与传统数据库(mysql、postgresql...)间进行数据的传递,可以将关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导出到关系型数据库中。

    二、特征

    Sqoop是专为大数据批量传输而设计,能够分割数据集并创建map task任务来处理每个区块。

    三、常用命令示例

    1. sqoop-list-databases 列出服务器上存在的数据库清单
    2. sqoop-list-tables 列出服务器上存在的数据表清单
    3. sqoop-job 用来生成一个sqoop的任务,生成后,该任务并不执行,除非使用命令执行该任务。
    4. sqoop import 从RDBMS导入到HDFS
    5. sqoop export 从HDFS导出到RDBMS
    6. --connect jdbc:mysql://ip:port/db_name 连接mysql数据库
    7. --username username 数据库用户名
    8. --password password 数据库密码
    9. --table table_name 源头数据表
    10. --target-dir /user/hive/warehouse/... 指定导入的目录,若不指定就会导入默认的HDFS存储路径
    11. --delete-target-dir HDFS地址如果存在的话删除,一般都是用在全量导入,增量导入的时候加该参数会报错
    12. --num-mappers 1 maptask数量
    13. -m 3 (使用3个mapper任务,即进程,并发导入。一般RDBMS的导出速度控制在60~80MB/s,每个 map 任务的处理速度5~10MB/s 估算所需并发map数。)
    14. --split-by id (根据id字段来切分工作单元实现哈希分片,从而将不同分片的数据分发到不同 map 任务上去跑,避免数据倾斜。)
    15. --autoreset-to-one-mapper 如果表没有主键,导入时使用一个mapper执行
    16. --input-null-string '\\N' 空值转换
    17. --input-null-non-string '\\N' 非空字符串替换
    18. --fields-terminated-by "\t" 字符串分割
    19. --query 'select * from test_table where id>10 and $CONDITIONS' ($CONDITIONS必须要加上就相当于一个配置参数,sql语句用单引号,用了SQL查询就不能加参数--table
    20. -hive-home <dir> 重写$HIVE_HOME
    21. -hive-import 插入数据到hive当中,使用hive的默认分隔符
    22. -hive-overwrite 重写插入
    23. -create-hive-table 建表,如果表已经存在,该操作会报错
    24. -hive-table <table-name> 设置到hive当中的表名
    25. -hive-drop-import-delims 导入到hive时删除 \n, \r, and \0001
    26. -hive-delims-replacement 导入到hive时用自定义的字符替换掉 \n, \r, and \0001
    27. -hive-partition-key hive分区的key
    28. -hive-partition-value <v> hive分区的值
    29. -map-column-hive <map> 类型匹配,sql类型对应到hive类型
    30. --direct 是为了利用某些数据库本身提供的快速导入导出数据的工具,比如mysql的mysqldump
    31. --direct-split-size 在使用上面direct直接导入的基础上,对导入的流按字节数分块,特别是使用直连模式从PostgreSQL导入数据的时候,可以将一个到达设定大小的文件分为几个独立的文件。
    32. --columns <列名> 指定列
    33. --z, -–compress 打开压缩功能
    34. --compression-codec < c > 使用Hadoop的压缩,默认为gzip压缩
    35. --fetch-size < n > 从数据库一次性读入的记录数
    36. --append 将数据追加到hdfs中已经存在的dataset中。使用该参数,sqoop将把数据先导入到一个临时目录中,然后重新给文件命名到一个正式的目录中,以避免和该目录中已存在的文件重名。
    37. --as-avrodatafile 导入数据格式为avro
    38. --as-sequencefile 导入数据格式为sqeuqncefile
    39. --as-textfile 导入数据格式为textfile
    40. --as-parquetfile 导入数据格式为parquet
    41. 详细内容可以参考Sqoop用户手册(英文版):
    42. http://archive.cloudera.com/cdh/3/sqoop/SqoopUserGuide.html

    四、实战案例示例

    1.全量导入(将数据从mysql导入到HDFS指定目录)

    1. # 全量导入(将数据从mysql导入到HDFS指定目录)
    2. sqoop import --connect jdbc:mysql://ip:prot/db \
    3. --username username --password password \
    4. --query 'select * from mysql_table_name where $CONDITIONS' \
    5. --target-dir /user/hive/warehouse/... \
    6. --delete-target-dir \
    7. --fields-terminated-by '\t' \
    8. --hive-drop-import-delims \
    9. --null-string '\\N' \
    10. --null-non-string '\\N' \
    11. --split-by id \
    12. -m 1

     

    2.全量导入(将数据从mysql导入到已有的hive表)

    1. # 全量导入(将数据从mysql导入到已有的hive表)
    2. sqoop import --connect jdbc:mysql://ip:prot/db \
    3. --username username --password password \
    4. --table mysql_table_name \
    5. --hive-import \
    6. --hive-database hive_db_name \
    7. --hive-table hive_table_name \
    8. --fields-terminated-by '\t' \
    9. --hive-overwrite \
    10. --null-string '\\N' \
    11. --null-non-string '\\N' \
    12. --split-by id \
    13. -m 1

    3.全量导入(将数据从mysql导入到hive,hive表不存在,导入时自动创建hive表)

    1. # 全量导入(将数据从mysql导入到hive,hive表不存在,导入时自动创建hive表)
    2. sqoop import --connect jdbc:mysql://ip:prot/db \
    3. --username username --password password \
    4. --table mysql_table_name \
    5. --hive-import \
    6. --hive-database hive_db_name \
    7. --create-hive-table \
    8. --hive-table hive_table_name \
    9. --fields-terminated-by '\t' \
    10. --null-string '\\N' \
    11. --null-non-string '\\N' \
    12. --split-by id \
    13. -m 1
    14. #--hive-table hive_table_name
    15. #该参数不添加时默认hive建表表名与mysql表名一致

    4.批量全库导入(将mysql全库数据批量导入到hive)

    1. # 全库导入(将mysql全库数据批量导入到hive)
    2. sqoop import-all-tables
    3. --connect jdbc:mysql://ip:prot/db \
    4. --username username --password password \
    5. --hive-database hive_db_name \
    6. --create-hive-table \
    7. --hive-import \
    8. --hive-overwrite \
    9. --fields-terminated-by '\t' \
    10. --exclude-tables 'drop_table' \
    11. --autoreset-to-one-mapper \
    12. --as-textfile
    13. #--exclude-tables 'drop_table' \
    14. # (此参数可以 exclude掉不需要import的表(多个表逗号分隔))

    5.增量导入-append模式(将mysql数据增量导入hadoop)

    1. #增量导入-append模式(将mysql数据增量导入hive表)
    2. sqoop import jdbc:mysql://ip:prot/db \
    3. --username username --password password \
    4. --table mysql_table_name \
    5. --hive-import \
    6. --hive-database hive_db_name \
    7. --hive-table hive_table_name \
    8. --hive-drop-import-delims \
    9. --fields-terminated-by '\t' \
    10. --null-string '\\N' \
    11. --null-non-string '\\N' \
    12. --incremental append \
    13. --check-column column_name \
    14. --last-value 10 \
    15. --split-by column_name \
    16. -m 1
    17. #增量导入-append模式(将mysql数据增量导入hdfs)
    18. sqoop import jdbc:mysql://ip:prot/db \
    19. --username username --password password \
    20. --table mysql_table_name \
    21. --target-dir /user/hive/warehouse/hive_db_name.db/hive_table_name \
    22. --incremental append \
    23. --check-column column_name \
    24. --last-value 10 \
    25. --split-by column_name \
    26. -m 1
    27. #--incremental append 基于递增列的增量导入(将递增列大于阈值的所有数据导入hadoop)
    28. #--check-column column_name 递增列
    29. #--last-value 数字 阈值

    6.增量导入-lastmodified模式(将mysql时间列大于等于阈值的数据增量导入HDFS)

    1. #增量导入-lastmodified模式(将mysql时间列大于等于阈值的数据增量导入HDFS)
    2. #lastmodified模式不支持直接导入Hive表,但是可以使用导入HDFS的方法,--target-dir设置成Hive table在HDFS中的关联位置即可)
    3. sqoop import --connect jdbc:mysql://ip:prot/db \
    4. --username username --password password \
    5. --table mysql_table_name \
    6. --target-dir /user/hive/warehouse/hive_db_name.db/hive_table_name \
    7. --null-string '\\N' \
    8. --null-non-string '\\N' \
    9. --split-by id \
    10. -m 1 \
    11. --fields-terminated-by '\t' \
    12. --hive-drop-import-delims \
    13. --incremental lastmodified \
    14. --check-column time_column_name \
    15. --last-value '2022-09-09 10:00:01'
    16. #--incremental lastmodified 基于时间列的增量导入(将时间列大于阈值的所有数据导入hdfs)
    17. #--check-column time_column_name 时间列
    18. #--last-value 时间 阈值

    7.全量导出(将hdfs全量导出到mysql表)

    1. #全量导出(将hdfs全量导出到mysql表)
    2. sqoop export --jdbc:mysql://ip:prot/db \
    3. --username username --password password \
    4. --table mysql_table_name \
    5. --columns column1,column2,column3
    6. --export-dir /user/hive/warehouse//hive_db_name.db/hive_table_name \
    7. --input-fields-terminated-by '\001' \
    8. --input-null-string '\\N' \
    9. --input-null-non-string '\\N'

  • 相关阅读:
    Java 创建线程的方法
    链表的注意事项
    邮件群发软件
    软件架构设计(十) 架构评估(复审)-方法论
    ​软考-高级-系统架构设计师教程(清华第2版)【第2章 计算机系统基础知识-思维导图】​
    精讲stable diffusion的controlNet插件
    轻量封装WebGPU渲染系统示例<16>- 使用GPU Compute计算(源码)
    python专属的Remote Produce Call框架:rpyc
    神奇的卡尔曼滤波,行人追踪的福音
    网络安全(黑客)自学
  • 原文地址:https://blog.csdn.net/chimchim66/article/details/126853568