开源sqoop-shell工具使用指导
概述
sqoop-shell是一个Loader的shell工具,其所有功能都是通过执行脚本“sqoop2-shell”来实现的。
sqoop-shell工具提供了如下功能:
- 支持创建和更新连接器
- 支持创建和更新作业
- 支持删除连接器和作业
- 支持以同步或异步的方式启动作业
- 支持停止作业
- 支持查询作业状态
- 支持查询作业历史执行记录
- 支持复制连接器和作业
- 支持创建和更新转换步骤
- 支持指定行、列分隔符
sqoop-shell工具支持如下模式:
- 交互模式
通过执行不带参数的“sqoop2-shell”脚本,进入Loader特定的交互窗口,用户输入脚本后,工具会返回相应信息到交互窗口。
- 批量模式
通过执行“sqoop2-shell”脚本,带一个文件名作为参数,该文件中按行存储了多条命令,sqoop-shell工具将会按顺序执行文件中所有命令;或者在“sqoop2-shell”脚本后面通过“-c”参数附加一条命令,一次只执行一条命令。
sqoop-shell通过表1的命令来实现Loader各种功能。
命令参考
- 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命令
- 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
- server表示设置服务端连接属性。
- 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命令属性进行扩展,以达到在创建作业时指定行、列分隔符及转换步骤的目的。
属性 |
说明 |
---|---|
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服务
- 下载开源Sqoop,http://www.apache.org/dyn/closer.lua/sqoo:p/1.4.7。
- 将下载好的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
- 进入解压完成的目录,修改配置。
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
- 添加系统变量,将“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
- 执行以下命令复制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
- 执行以下命令,在文件中添加下列配置。
vim $JAVA_HOME/jre/lib/security/java.policy
permission javax.management.MBeanTrustPermission "register";
- 执行以下命令,实现sqoop1对接MRS服务。
source /etc/profile