更新时间:2024-10-24 GMT+08:00

开源sqoop-shell工具使用指导

概述

本章节适用于MRS 3.x及后续版本。

sqoop-shell是一个开源的shell工具,其所有功能都是通过执行脚本“sqoop2-shell”来实现的。

sqoop-shell工具提供了如下功能:

  • 支持创建和更新连接器
  • 支持创建和更新作业
  • 支持删除连接器和作业
  • 支持以同步或异步的方式启动作业
  • 支持停止作业
  • 支持查询作业状态
  • 支持查询作业历史执行记录
  • 支持复制连接器和作业
  • 支持创建和更新转换步骤
  • 支持指定行、列分隔符

sqoop-shell工具支持如下模式:

  • 交互模式

    通过执行不带参数的“sqoop2-shell”脚本,进入Loader特定的交互窗口,用户输入脚本后,工具会返回相应信息到交互窗口。

  • 批量模式

    通过执行“sqoop2-shell”脚本,带一个文件名作为参数,该文件中按行存储了多条命令,sqoop-shell工具将会按顺序执行文件中所有命令;或者在“sqoop2-shell”脚本后面通过“-c”参数附加一条命令,一次只执行一条命令。

sqoop-shell通过表1的命令来实现Loader各种功能。

表1 命令一览表

命令

说明

exit

表示退出交互模式。

该命令仅支持交互模式。

history

查看执行过的命令。

该命令仅支持交互模式。

help

查看工具帮助信息。

set

设置服务端属性。

show

显示服务属性和Loader所有元数据信息。

create

创建连接器和作业。

update

更新连接器和作业。

delete

删除连接器和作业。

clone

复制连接器和作业。

start

启动作业。

stop

停止作业。

status

查询作业状态。

命令参考

  • sqoop2-shell有两种获取登录认证信息的方式,第一种通过配置文件获取,具体配置项请参考开源sqoop-shell工具使用示例(SFTP - HDFS)开源sqoop-shell工具使用示例(Oracle - HBase);第二种方式则使用参数直接提供认证信息,这个方式有两种模式:密码模式和Kerberos认证模式。
  • 进入交互模式命令

    通过执行不带参数的“sqoop2-shell”脚本,进入sqoop工具窗口,逐条执行命令。

    通过读取配置文件获取认证信息:

    ./sqoop2-shell

    通过密码模式认证:

    ./sqoop2-shell -uk false -u username -p encryptedPassword

    命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。

    通过Kerberos模式认证:

    ./sqoop2-shell -uk true -k user.keytab -s userPrincipal

    系统显示如下信息:

    Welcome to sqoop client
    Use the username and password authentication mode
    Authentication success.
    Sqoop Shell: Type 'help' or '\h' for help.
    
    sqoop:000> 
  • 进入批量模式命令

    进入批量模式有两种方式:

    1.通过执行“sqoop2-shell”脚本,带一个文本文件名作为参数,该文件中按行存储了多条命令,工具会按顺序执行该文件中的所有命令。使用这种方式有个限制条件,这个sh脚本必须放到当前用户的家目录下,如:/root/batchCommand.sh。

    通过读取配置文件进行认证:

    ./sqoop2-shell /root/batchCommand.sh

    通过密码模式认证:

    ./sqoop2-shell -uk false -u username -p encryptedPassword /root/batchCommand.sh

    通过Kerberos模式认证:

    ./sqoop2-shell -uk true -k user.keytab -s userPrincipal /root/batchCommand.sh

    其中batchCommand.sh为用户自定义文本文件名称。

    2.通过执行“sqoop2-shell”脚本,在脚本后面通过“-c”参数附带一条命令,工具将执行该条命令。

    通过取配置文件进行认证:

    ./sqoop2-shell -c expression

    通过密码模式认证:

    ./sqoop2-shell -uk false -u username -p encryptedPassword -c expression

    通过Kerberos模式认证:

    ./sqoop2-shell -uk true -k user.keytab -s userPrincipal -c expression

    其中expression为附带的语句,其格式和第一种方式中的文本内语句格式一致。

  • exit命令

    该命令用于退出交互模式,仅在交互模式支持。

    示例:

    Welcome to sqoop client
    Use the username and password authentication mode
    Authentication success.
    Sqoop Shell: Type 'help' or '\h' for help.
    
    sqoop:000> exit
    10-5-211-9:/opt/hadoopclient/Loader/loader-tools-1.99.3/sqoop-shell#
  • history命令

    该命令用于查看已执行的命令,仅在交互模式支持。

    示例:

    sqoop:000> history
       0  show connector
       1  create connection -c 4
       2  show connections;
       3  show connection;
       4  show connection -a;
       5  show connections;
       6  show connection;
       7  show connection -x 53;
       8  show connection -x 52;
       9  show connection -x 2
      10  show connection -x 53;
      11  show connection
      12  show connection -x 53
      13  create job -x 53 -t import
      14  show connector
      15  create connection -c 5
      16  show connection -x 54
      17  exit
      18  show connector
      19  create connection -c 5
      20  exit
      21  show connector
      22  create connection -c 6
      23  create job -x 20 -t import
      24  start job -j 85 -s
      25  \x
      26  exit
      27  history
    sqoop:000> 
  • help命令

    该命令用于查看工具帮助信息。

    示例:

    sqoop:000> help
    For information about Sqoop, visit: http://sqoop.apache.org/docs/1.99.3/index.html
    
    Available commands:
      exit    (\x  ) Exit the shell
      history (\H  ) Display, manage and recall edit-line history
      help    (\h  ) Display this help message
      set     (\st ) Set server or option Info
      show    (\sh ) Show server, connector, framework, connection, job, submission or option Info
      create  (\cr ) Create connection or job Info
      delete  (\d  ) Delete connection or job Info
      update  (\up ) Update connection or job Info
      clone   (\cl ) Clone connection or job Info
      start   (\sta) Start job
      stop    (\stp) Stop job
      status  (\stu) Status job
    
    For help on a specific command type: help command
    
    sqoop:000> 
  • set命令

    set命令,用于设置客户端和服务端属性,支持如下属性:

    • server表示设置服务端连接属性。

      当设置了-u属性时,-h、-p、-w被会忽略。

    • option表示设置客户端属性。

      option通过键值对来赋值,例如:set option --name verbose --value true

      属性类别

      子属性

      含义

      server

      -h,--host

      服务IP地址

      -p,--port

      服务端口

      -w,--webapp

      Tomcat应用名

      -u,--url

      Sqoop服务URL

      option

      verbose

      冗余模式,表示打印更多的信息

      poll-timeout

      设置轮询超时时间

    示例:

    set option --name verbose --value false
    set server --host 10.0.0.1 --port 21351 --webapp loader
  • show命令

    该命令用于显示变量信息、存储元数据信息等。

    属性类别

    子属性

    含义

    server

    -a,--all

    显示所有server属性

    -p,--port

    显示服务端口

    -w,--webapp

    显示Tomcat应用名

    -h,--host

    显示服务的IP地址

    option

    -name

    显示指定名称的属性

    connector

    -a,--all

    显示所有连接类型信息

    -c,--cid

    显示指定ID的连接类型信息

    framework

    显示框架的元数据信息

    connection

    -a,--all

    显示所有连接属性

    -x,--xid

    显示指定ID的连接属性

    -n,--name

    显示指定名称的连接属性

    job

    -a,--all

    显示所有作业信息

    -j,--jid

    显示指定ID的作业信息

    -n,--name

    显示指定名称的作业信息

    submission

    -j,--jid

    显示指定作业的提交记录

    -d,--detail

    显示详细信息

    示例:

    show server -all
    show option --name verbose
    show connector -all
    show framework
    show connection -all
    show connection -n sftp-example
    show job -all
    show job -j 1
    show submission --jid 1
    show submission --jid 1 -d
  • create命令
    该命令用于创建连接器或作业。

    属性类别

    子属性

    含义

    connection

    -c,--cid

    指定连接器类型的ID

    -cn,--cname

    指定连接器类型的名称

    job

    -x,--xid

    指定连接器ID

    -xn,--xname

    指定连接器名称

    -t,--type

    指定作业类型

    可选值:
    • import
    • export
    • 交互模式下,根据界面的提示逐一输入属性值。

      创建连接器示例:

      create connection -c 1
      create connection -cn example

      创建作业示例:

      create job -x 1 -t import
      create job -xn job_example -t export
    • 批量模式下,需要先执行如下命令查看具体的属性,再对属性赋值。

      create job -t import -x 1 --help

      执行该命令有两种方式:

      将命令保存到文本中,并在执行sqoop-shell脚本时将该文本作为附带参数:

      ./sqoop2-shell batchCommand.sh

      使用-c参数,将需要执行的单条命令作为-c参数的输入:

      ./sqoop2-shell -c expression

      可参考本节前文关于命令执行的描述。完整的命令语句可参考如下示例。

      创建连接器示例:

      create connection -c 4 --connector-connection-sftpPassword xxxxx --connector-connection-sftpServerIp 10.0.0.1 --connector-connection-sftpServerPort 22 --connector-connection-sftpUser root--name testConnection

      创建作业示例:

      create job -t import -x 1 --connector-file-inputPath /opt/tempfile --connector-file-fileFilter * --framework-output-outputDirectory /user/loader/1 --framework-output-storageType HDFS --framework-throttling-extractorSize 120 --framework-output-fileType TEXT_FILE --connector-file-splitType FILE -queue default -priority low -name newJob
    • 批量模式下,可以使用“-c”参数附带一条语句。

      创建连接器示例:

      ./sqoop2-shell -c "create connection -c 4 --connector-connection-sftpPassword xxxxx --connector-connection-sftpServerIp 10.0.0.1 --connector-connection-sftpServerPort 22 --connector-connection-sftpUser root--name testConnection"
  • update命令

    该命令用于更新连接器或作业。

    属性类别

    子属性

    含义

    connection

    -x,--xid

    指定连接器ID

    说明:

    更新连接器一定要带上密码属性。

    job

    -j,--jid

    指定作业ID

    • 交互模式

      更新连接器示例:

      update connection --xid 1

      更新作业示例:

      update job --jid 1
    • 批量模式

      更新连接器示例:

      update connection -x 6 --connector-connection-sftpServerPort 21 - --name sfp_130--connector-connection-sftpPassword xxxx

      更新作业示例:

      示例1:

      update job -jid 1 -name sftp2hdfs --connector-file-fileFilter *.txt

      示例2:

      ./sqoop2-shell -uk true -k /opt/loader/user.keytab -s luser /opt/loader/testupdate.txt
      ./sqoop2-shell -uk true -k /opt/loader/user.keytab -s luser -c "update job --jid 24 --name oracle-hive --connector-table-sql 'SELECT * FROM range_example WHERE replace(datadt,\'-\',\'\')='20240801' and \${CONDITIONS}'"

      更新作业可以将需要更新的命令写在文件中,例如“/opt/loader/testupdate.txt”(文件名自定义),也可以以--connector-table-sql来指定,后面跟随的sqlcmd需要用“'”单引号括起来,具体操作参考“更新作业示例-示例2”。涉及的命令还有connector-table-sql,connector-table-columns,connector-table-partitionColumn,connector-table-conditions,connector-table-queryCondition等。

  • delete命令

    该命令用于删除连接器或作业。

    属性类别

    子属性

    含义

    connection

    -x,--xid

    指定连接器ID

    -n,--name

    指定连接器名称

    job

    -j,--jid

    指定作业ID

    -n,--name

    指定作业名称

    示例:

    delete connection -x 1
    delete connection --name abc
    delete job -j 1
    delete job -n qwerty
  • clone命令

    该命令用于复制连接器或作业。

    属性类别

    子属性

    含义

    connection

    -x,--xid

    指定连接器ID

    说明:

    复制连接器需要输入密码和连接器名称。

    job

    -j,--jid

    指定作业ID

    示例如下:

    clone job -j 1
  • start命令

    该命令用于启动作业。

    属性类别

    子属性

    含义

    job

    -j,--jid

    指定作业ID

    -n,--name

    指定作业名称

    -s,--synchronous

    是否同步

    异步启动作业示例:

    start job -j 1
    start job -n abc

    同步启动作业示例:

    start job -j 1 -s
    start job --name abc --synchronous
  • stop命令

    该命令用于停止作业。

    属性类别

    子属性

    含义

    job

    -j,--jid

    指定作业ID

    -n,--name

    指定作业名称

    示例:

    stop job -j 1
    stop job -n abc
  • status命令

    该命令用于查询作业状态。

    属性类别

    子属性

    含义

    job

    -j,--jid

    指定作业ID

    查询状态时,可以使用“-s”参数,只查询作业的状态枚举。

    示例:

    status job -j 1
    status job -j 1 -s

create命令扩展属性

针对HDFS与SFTP服务器或RDB进行数据交换场景,MRS在开源sqoop-shell工具的基础上对create命令属性进行扩展,以达到在创建作业时指定行、列分隔符及转换步骤的目的。

表2 create命令扩展属性

属性

说明

fields-terminated-by

默认的列分隔符。

lines-terminated-by

默认的行分隔符。

input-fields-terminated-by

输入步骤的列分隔符,当不指定时,默认等于fields-terminated-by的值。

input-lines-terminated-by

输入步骤的行分隔符,当不指定时,默认等于lines-terminated-by的值。

output-fields-terminated-by

输出步骤的列分隔符,当不指定时,默认等于fields-terminated-by的值。

output-lines-terminated-by

输出步骤的行分隔符,当不指定时,默认等于lines-terminated-by的值。

trans

指定转换步骤,值为转换步骤文件所在的路径。当指定文件的相对路径时,默认为“sqoop2-shell”脚本所在路径下的文件。当配置了该属性,其他扩展属性都被忽略。

sqoop1对接MRS服务

  1. 下载开源Sqoop,http://www.apache.org/dyn/closer.lua/sqoo:p/1.4.7
  2. 将下载好的sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz 包放入MRS集群master节点的/opt/sqoop目录下并解压。

    tar zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

  3. 进入解压完成的目录,修改配置。

    cd /opt/sqoop/sqoop-1.4.7.bin__hadoop-2.6.0/conf

    cp sqoop-env-template.sh sqoop-env.sh

    vi sqoop-env.sh

    添加配置:

    export HADOOP_COMMON_HOME=/opt/client/HDFS/hadoop

    export HADOOP_MAPRED_HOME=/opt/client/HDFS/hadoop

    export HIVE_HOME=/opt/Bigdata/MRS_1.9.X/install/FusionInsight-Hive-3.1.0/hive(请按照实际路径填写)

    export HIVE_CONF_DIR=/opt/client/Hive/config

    export HCAT_HOME=/opt/client/Hive/HCatalog

  1. 添加系统变量,将“SQOOP_HOME”添加到PATH中。

    vi /etc/profile

    添加以下信息:

    export SQOOP_HOME=/opt/sqoop/sqoop-1.4.7.bin__hadoop-2.6.0

    export PATH=$PATH:$SQOOP_HOME/bin

  2. 执行以下命令复制jline-2.12.jar文件到lib文件下。

    cp /opt/share/jline-2.12/jline-2.12.jar /opt/sqoop/sqoop-1.4.7.bin__hadoop-2.6.0/lib

  3. 执行以下命令,在文件中添加下列配置。

    vim $JAVA_HOME/jre/lib/security/java.policy

    permission javax.management.MBeanTrustPermission "register";

  4. 执行以下命令,实现sqoop1对接MRS服务。

    source /etc/profile