Sqoop 学习笔记

  • Sqoop 学习笔记
    • 1. 简介
    • 2. 安装
    • 3. 数据导入(import)
      • 3.1 指令参数解析
      • 3.2 从MySQL导入至HDFS
      • 3.3 从MySQL导入至Hive
    • 4. 数据导出(export)
      • 4.1 指令参数解析
      • 4.2 从HDFS导出至MySQL
    • 5. Job
      • 5.1 创建Job
      • 5.2 查看所有Job
      • 5.3 查看一个Job详情
      • 5.4 执行Job
      • 5.5 删除Job

Sqoop 学习笔记

  • Sqoop官网

1. 简介

Sqoop是一种用于在Hadoop和结构化数据存储(如关系数据库)之间高效传输批量数据的工具。

2. 安装

  1. 解压sqoop安装包
  2. 在conf中,复制sqoop-env-template.sh并重命名为sqoop-env.sh。配置HADOOP_COMMON_HOME, HADOOP_MAPRED_HOME, HBASE_HOME, HIVE_HOME,其中Hadoop是必须配置的,其余的有需要时可以再配。
  3. 将MySQL的JDBC包复制到lib目录下
  4. 测试是否安装成功
bin/sqoop list-databases \
--connect jdbc:mysql://localhost:3306 \
--username root \
--password root

3. 数据导入(import)

3.1 指令参数解析

bin/sqoop import <参数>

  • Common arguments:
    • --connect : 指定JDBC连接URI
    • --connection-manager : 自定连接manager
    • --connection-param-file : 数据库连接参数配置文件
    • --driver : 驱动名
    • --hadoop-home : Hadoop安装目录
    • --hadoop-mapred-home : MR安装目录
    • --password : 数据库密码
    • --username : 数据库用户名
    • --verbose: 打印更多的信息
  • Import control arguments:
    • --append: 追加模式,不删除原数据
    • --columns : 导入数据库的列名
    • --delete-target-dir: 删除指定的导入存放目录
    • --direct: Use direct import fast path
    • --direct-split-size : 在direct模式下,每n个字节分为一个切片
    • -e,--query : 导入SQL语句的查询结果
    • --fetch-size : 设置查询行数
    • -m,--num-mappers : 设置mapper任务数量
    • --mapreduce-job-name : 设置MR任务名称
    • --table : 指定表名
    • --target-dir : 指定导入HDFS路径
    • --warehouse-dir : HDFS parent for table destination
    • --where : where设置查询条件
  • Incremental import arguments:
    • --check-column : 根据某列设置值进行增量导入
    • --incremental : 设置增量导入模式 ‘append’ 或 ‘lastmodified’
    • --last-value : check-column 从哪个值之后开始导入
  • Output line formatting arguments:
    • --enclosed-by : Sets a required field enclosing character
    • --escaped-by : Sets the escape character
    • --fields-terminated-by : 字段分隔符
    • --lines-terminated-by : 行分隔符
    • --mysql-delimiters: Uses MySQL’s default delimiter set: fields: , lines: \n escaped-by: \ optionally-enclosed-by: ‘
    • --optionally-enclosed-by : Sets a field enclosing character
  • Input parsing arguments:
    • --input-enclosed-by : Sets a required field encloser
    • --input-escaped-by : Sets the input escape character
    • --input-fields-terminated-by : Sets the input field separator
    • --input-lines-terminated-by : Sets the input end-of-line char
    • --input-optionally-enclosed-by : Sets a field enclosing character
  • Hive arguments:
    • --create-hive-table: 创建hive表
    • --hive-database : 指定导入的hive数据库
    • --hive-home : 指定Hive的安装目录
    • --hive-import: 向Hive中导入数据
    • --hive-overwrite: 覆写Hive表中的内容
    • --hive-partition-key : 指定分区Key
    • --hive-partition-value : 指定分区value
    • --hive-table : 指定导入的Hive表
  • HBase arguments:
    • --column-family : Sets the target column family for the import
    • --hbase-bulkload: Enables HBase bulk loading
    • --hbase-create-table: If specified, create missing HBase tables
    • --hbase-row-key : Specifies which input column to use as the row key
    • --hbase-table : Import to in HBase

3.2 从MySQL导入至HDFS

  • 普通导入
###########################################
## 表结构: to_hdfs(id int, name varchar(20))
###########################################
bin/sqoop import \
--connect jdbc:mysql://hh1:3306/play \
--username hive \
--password 123456 \
--table to_hdfs
  • 指定导入路径
bin/sqoop import \
--connect jdbc:mysql://hh1:3306/play \
--username hive \
--password 123456 \
--table to_hdfs \
--target-dir /sqoop/test1
  • 指定Mapper任务数和字段分隔符
bin/sqoop import \
-connect jdbc:mysql://hh1:3306/play \
-username hive \
-password 123456 \
--direct \
--table to_hdfs \
--delete-target-dir \
--target-dir /sqoop/test1 \
--num-mappers 1 \
--fields-terminated-by '\t'
  • 数据增量导入
bin/sqoop import \
-connect jdbc:mysql://hh1:3306/play \
-username hive \
-password 123456 \
--direct \
--table to_hdfs \
--target-dir /sqoop/test1 \
--num-mappers 1 \
--fields-terminated-by '\t' \
--check-column id \
--incremental append \
--last-value 7

3.3 从MySQL导入至Hive

bin/sqoop import \
-connect jdbc:mysql://hh1:3306/play \
-username hive \
-password 123456 \
--table to_hdfs \
--fields-terminated-by '\t' \
--lines-terminated-by '\n' \
--hive-import \
--hive-database sqoop \
--create-hive-table \
--hive-table test1 \
--num-mappers 1

4. 数据导出(export)

4.1 指令参数解析

bin/sqoop export <参数>

  • Common arguments: 同import参数
  • Export control arguments:
    • --batch: 表示以批处理模式执行的底层语句
    • --columns : 导出的数据库字段
    • --direct: Use direct export fast path
    • --export-dir : 导出到指定的HDFS目录
    • -m,--num-mappers : 设置mapper任务数量
    • --mapreduce-job-name : 设置MR任务名称
    • --table : 导出的表名称
    • --update-key : Update records by specified key column
    • --update-mode : Specifies how updates are performed when new rows are found with non-matching keys in database
    • --staging-table : Intermediate staging table
    • --clear-staging-table: Indicates that any data in staging table can be deleted
  • Input parsing arguments:
    • --input-enclosed-by : Sets a required field encloser
    • --input-escaped-by : Sets the input escape character
    • --input-fields-terminated-by : Sets the input field separator
    • --input-lines-terminated-by : Sets the input end-of-line char
    • --input-optionally-enclosed-by : Sets a field enclosing character
  • Output line formatting arguments:
    • --enclosed-by : Sets a required field enclosing character
    • --escaped-by : Sets the escape character
    • --fields-terminated-by : Sets the field separator character
    • --lines-terminated-by : Sets the end-of-line character
    • --mysql-delimiters: Uses MySQL’s default delimiter set: fields: , lines: \n escaped-by: \ optionally-enclosed-by: ‘
    • --optionally-enclosed-by : Sets a field enclosing character

4.2 从HDFS导出至MySQL

  • 全表数据导入
###########################################
## 表结构: to_mysql(id int, name varchar(20))
###########################################
bin/sqoop export \
-connect jdbc:mysql://hh1:3306/play \
-username hive \
-password 123456 \
--table to_inc \
--columns id,name \
--export-dir /sqoop/test1 \
--fields-terminated-by '\t' \
--lines-terminated-by '\n' \
--num-mappers 1
  • 指定列导入
###################################################################
## 表结构: to_inc(no int auto_increatment, id int, name varchar(20))
###################################################################
bin/sqoop export \
-connect jdbc:mysql://hh1:3306/play \
-username hive \
-password 123456 \
--table to_inc \
--columns id,name \
--export-dir /sqoop/test1 \
--fields-terminated-by '\t' \
--lines-terminated-by '\n' \
--num-mappers 1

5. Job

5.1 创建Job

  • 指令:bin/sqoop job --create
  • 示例:创建一个数据增量导入job
bin/sqoop job \
--create import_data1 \
-- \
import \
--onnect jdbc:mysql://hh1:3306/play \
--username hive \
--password 123456 \
--direct \
--table to_hdfs \
--target-dir /sqoop/test1 \
--num-mappers 1 \
--fields-terminated-by '\t' \
--check-column id \
--incremental append \
--last-value 7

5.2 查看所有Job

bin/sqoop job --list

5.3 查看一个Job详情

bin/sqoop job --show 

5.4 执行Job

bin/sqoop job --exec 

5.5 删除Job

bin/sqoop job --delete 

你可能感兴趣的:(大数据)