• Sqoop数据导入操作


    Sqoop——数据导入

    Sqoop,一个用于Hadoop和结构化数据存储之间进行高效传输大批量数据的工具:

    将数据从关系型数据库管理系统导入到Hadoop系统中

    将数据从Hadoop系统中抽取并导出到关系型数据库。

    Sqoop简介以及使用
    Sqoop底层实现原理

    Sqoop的核心设计思想是利用Map Reduce加快数据传输速度。

    特点
    • 优点:可以将跨平台的数据进行整合;
    • 缺点:不灵活。

    Sqoop的重要关键词

    • import:从关系型数据库到Hadoop;
    • export:从Hadoop到关系型数据库。
    Sqoop命令执行
    常见命令执行参数

    通过Sqoop加不同参数可以执行导入导出,通过sqoop help可以产看常见的命令行

    在这里插入图片描述

    Sqoop运行的时候不需要启动后台进程,直接执行Sqoop命令加参数即可。

    查看数据库
    sqoop list-databases \
    --connect jdbc:mysql://localhost:3306 \
    --username root \
    --password 123456;
    
    • 1
    • 2
    • 3
    • 4
    通过文件传递参数

    文件 config.conf

    list-databases 
    --connect 
    jdbc:mysql://localhost:3306 
    --username 
    root
    --password
    123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    命令:

    sqoop --options-file config.conf
    
    • 1
    Import
    连接数据库
    sqoop import \
    --connect jdbc:mysql://database.example.com/databaseName \
    --username xxxx \
    --password xxxxxx;
    #指定用户名和密码来连接数据库
    sqoop import \
    --connect jdbc:mysql://localhost:3306/mysql \
    --username root \
    --password 123456;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    查看所有表
    sqoop list-tables \ 
    --connect jdbc:mysql://localhost:3306/mysql \
    --username root \
    --password 123456;
    
    • 1
    • 2
    • 3
    • 4
    将数据导入HDFS
    指定表导入

    数据在Linux下的Mysql数据

    在本地MySql数据库中新建一个testdb数据库,建表test表并写入数据

    使用--table参数可以指定具体的表导入到HDFS,譬如用 --table test,默认情况下是全部字段导入,如下:

    sqoop import \
    --connect jdbc:mysql://localhost:3306/testdb \
    --username root \
    --password 123456 \
    --table test \
    --target-dir hdfs://localhost:9820/sqoopdata/test1 \
    --delete-target-dir
    #将localhost改为IP地址
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    使用hdfs的命令查询结构

    hdfs dfs -cat /sqoopdata/test1/par*
    
    • 1
    指定列导入

    想要导入某几列,可以使用--columns,如下:

    sqoop import \
    --connect jdbc:mysql://localhost:3306/testdb \
    --username root \
    --password 123456 \
    --table test \
    --columns 'id,name' \
    --target-dir hdfs://localhost:9820/sqoopdata/test2 \
    --delete-target-dir
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    指定条件导入

    在导入表的时候,也可以通过指定where条件来导入,具体参数使用 --where,譬如要导入的记录,可以用下面参数:

    sqoop import \
    --connect jdbc:mysql://localhost:3306/testdb \
    --username root \
    --password 123456 \
    --table test \
    --columns 'id,name' \
    --where 'id=01' \
    --target-dir hdfs://localhost:9820/sqoopdata/test2 \
    --delete-target-dir
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    指定sql导入

    Sqoop可以通过自定义的sql来进行导入,通过--query 参数来进行导入,这样就最大化的用到了Sql的灵活性.如下:

    sqoop import --connect jdbc:mysql://localhost:3306/testdb \
    --username root --password 123456 \
    --query 'select id,name,age from test WHERE id=01 and $CONDITIONS' \
    --target-dir hdfs://localhost:9820/sqoopdata/test2 \
    --delete-target-dir \
    --split-by id \
    -m 1
    #表没有主键,使用--split-by指定执行split的字段
    #表没有主键,需要指定map task的个数为1才能执行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在通过--query来导入数据时,必须要指定--target-dir

    将数据导入到Hive

    示例代码:

    sqoop import --connect jdbc:mysql://localhost:3306/testdb \
    --username root \
    --password 123456 \
    --table test \
    --hive-import \
    --hive-overwrite \
    --hive-table "test3" \
    --hive-database Testdb \
    -m 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    导入填充空值数据
    sqoop import --connect jdbc:mysql://localhost:3306/testdb \
    --username root --password 123456 \
    --table test \
    --delete-target-dir \
    --target-dir hdfs://localhost:9820/sqoopdata/test \
    --null-string '\\N' \
    --null-non-string '0'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    关键参数
    -null-string '\\N'  ## 遇到空字符串会填充\N字符
    --null-non-string '0' # 遇到空数字会填充0
    
    • 1
    • 2
  • 相关阅读:
    realme手机配什么蓝牙耳机?realme蓝牙耳机推荐
    Java基础(六)
    Docker镜像制作
    没有Kubernetes怎么玩Dapr?
    【FME实战教程】003:FME读取地理空间数据(矢量、栅格、点云、三维模型、数据库、地理服务)大全
    『手撕Vue-CLI』获取下载目录
    Linux Kernel 之四 移植过程详解、STM32F769I-EVAL 开发板适配
    2023云计算发展
    CKA考试笔记,仅做个人学习使用
    Github每日精选(第10期):终端操作录制工具asciinema
  • 原文地址:https://blog.csdn.net/Mr_Ren_0_1/article/details/126563262