欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Sqoop详解

程序员文章站 2024-02-29 10:54:46
...
  1. Sqoop介绍
    Sqoop是在hadoop和数据库之间传输大量数据的工具
    原理:将导入导出命令翻译成MR成功徐来实现,在翻译出的MR中主要是对inputformat和outputformat进行定制。

  2. 安装与配置
    1)解压安装 (这里以sqoop1.4.7为例)
    2)修改配置文件
    重命名文件mv sqoop-env-template.sh sqoop-env.sh
    修改 sqoop-env.sh
    export HADOOP_COMMON_HOME=/home/admin/modules/hadoop-2.7.2 export HADOOP_MAPRED_HOME=/home/admin/modules/hadoop-2.7.2 export HIVE_HOME=/home/admin/modules/apache-hive-1.2.2-bin
    3)拷贝jdbc驱动
    拷贝 jdbc 驱动到 sqoop 的 lib 目录下
    4)验证sqoop
    bin/sqoop version 出现Sqoop 1.4.7(警告可以暂时忽略)算成功
    5)测试sqoop是否能连接数据库
    bin/sqoop list-databases --connect jdbc://mysql://mysqlName:3306/ --username root --password 123456

  3. sqoop的使用案例
    1)导入数据
    在sqoop中导入是指从非大数据集群(RDMS)向大数据集群(HDFS,HIVE,HBASE)中传入数据,即使用import关键字
    (1)RDMS到HDFS

    第一步:在mysql中新建一张表,并插入一些数据
    $ mysql -uroot -p123456
    mysql> create database company;
    mysql> create table company.staff(id int(4) primary key not null auto_increment, name
    varchar(255), sex varchar(255));
    mysql> insert into company.staff(name, sex) values('Thomas', 'Male');
    mysql> insert into company.staff(name, sex) values('Catalina', 'FeMale');
    第二步:导入数据
    (1)全部导入
    bin/sqoop import \
    --connect jdbc:mysql://hadoop01:3306/company \
    --username root \
    --password 123456 \
    --table staff \
    --target-dir /user/company \
    --delete-target-dir \
    --num-mappers 1\
    --fields-terminated-by "\t"
    (2)查询导入
    bin/sqoop import \
    --connect jdbc:mysql://hadoop01:33-6/company \
    --username root \
    --password 123456 \
    --target-dir /hadoop/testdata/company \
    --delete-target-dir \
    --num-mappers 1\
    --fields-terminated-by "\t" \
    --query 'select name,sex from staff where id <= 1 and $CONDITIONS;'
    提示1:必须在where后面加‘$CONDITIONS’,如果query后使用的是双引号,则$CONDITIONS前必须加转义符。
    提示2:--query选项不能同时与--table选项使用
    (3)导入指定列
    bin/sqoop import \
    --connect jdbc:mysql://hadoop01:3306/company \
    --username root \
    --password 123456 \
    --target-dir /hadoop/textdata/company \
    --delete-target-dir \
    --num-mappers 1\
    --fields-terminated-by "\t"
    --columns id,sex \
    --table staff
    提示:columns中如果有多列要用逗号分隔,中间不要添加空格
    (4)使用sqoop关键字筛选查询导入数据where
     bin/sqoop import \
    --connect jdbc:mysql://linux01:3306/company \
    --username root \
    --password 123456 \
    --target-dir /user/company \
    --delete-target-dir \
    --num-mappers 1 \
    --fields-terminated-by "\t" \
    --table staff \
    --where "id=1"
    提示:sqoop可以使用sqoop import -D property.name=property.value这样的方式加入执行任务的参数,多个参数用空格隔开。
    

    (2)RDBMS到HIVE

     bin/sqoop import \
    --connect jdbc:mysql://linux01:3306/company \
    --username root \
    --password 123456 \
    --table staff \
    --num-mappers 1 \
    --hive-import \
    --fields-terminated-by "\t" \
    --hive-overwrite \
    --hive-table staff_hive
    提示:该过程分为两步,第一步是将数据导入到HDFS,第二步将导入到hdfs的数据迁移到hive仓库,第一步默认的临时目录是/user/admin/表名
    

    2)导出数据
    在sqoop中,导出是指从hdfs、hive、hbase向RDBMS中传输数据使用export
    (1)hive/hdfs 到RDBMS

    bin/sqoop export \
    --connect jdbc:mysql://hadoop01:3306/company \
    --username root \
    --password 123456 \
    --table staff \
    --num-mappers 1 \
    --export-dir /hive/warehouse/staff_hive \
    --input-fields-terminated-by "\t"
    提示:msyql中表不存在不会自动创建
    

    3)脚本打包
    使用过opt格式的文件打包sqoop命令,然后执行

    (1)创建一个.opt文件
    touch opt/job_hdfs2drdbms.opt
    (2)编写sqoop脚本
    export
    --connect
    jdbc:mysql://hadoop01:3306/company
    --username
    root
    --password
    123456
    --table
    staff
    --num-mappers
    1
    --export-dir
    /hive/warehouse/staff_hive
    --input-fields-terminated-by
    "\t"
    (3)执行脚本
    bin/sqoop --options-file opt/job_hdfs2rdbms.opt
    
  4. sqoop的常用命令和参数
    1)常用命令列举
    import ImportTool 将数据导入到集群
    export ExportTool 将集群数据导出
    codegen CodeGenTool 获取数据库中某张表数据生成java并打包jar
    create-hive-table CreateHiveTableTool 创建hive表
    eval EvalSqlToop 查看SQL执行结果
    import-all-tables ImportAllTablesTool 导出某个数据库下所有表到hdfs
    job JobTool 生成一个个sqoop的任务
    list-databases 列出所有数据库名
    list-tables 列出某个数据库下所有表
    merge 将hdfs中不同目录下面的数据合在一起,并存放在指定目录中
    metastore 记录sqoopjob的元数据信息
    2)命令&参数详解
    公用参数,就是大多数命令都支持的参数
    (1)公用参数:数据库连接
    –connect、–connection-manager指定要使用的连接管理类
    –driver jdbc的driver class
    –password --username连接数据库的用户名和密码
    –verbose 在控制台打印出详细信息
    (2)公用参数:import
    –enclosed-by 给字段值前后加上指定的值
    –escaped-by 对字段中的双引号加转义符
    –fields-terminated-by设定某个字段是以扫描符号作为结束,默认是逗号
    –lines-terminated-by设定每行之间的分隔符,默认是"\n"
    (3)公用参数export
    –input-enclosed-by 对字段值前后加上指定字符
    –input-dscaped-by 对含有转义符的字段做转义处理
    –input-fields-terminated-by字段自建的分隔符
    –input-lines-terminated-by行之间的分隔符
    (4)公用参数 hive
    –hive-delims-replacement 用自定义的字符串替换掉数据中的\r\n等字符
    –hive-drop-import-delims 再导入数据到hive时,去掉数据中\r\n等字符
    –map-column-hive 生成hive表时,可以更改生成字段的数据类型给
    –hive-partition-key创建分区,后面直接跟分区名,分区字段默认string
    –hive-partition-value导入数据时,指定某个分区的值
    –hive-home hive的安装目录,可以覆盖之前的默认配置的目录
    –hive-import将数据从关系数据库中导入hive表中
    –hive-overwrite 覆盖掉hive表中已经存在的数据
    –create-hive-table默认是false,如果目标存在,创建任务失败
    –hive-table 后面接要创建的hive表,默认使用过Mysql的表名
    –table指定关系数据库的表名

相关标签: sqoop