开源sqoop-shell工具使用示例(Oracle - HBase)
操作场景
本文将以“从Oracle导入数据到HBase”的作业为例,介绍如何分别在交互模式和批量模式下使用sqoop-shell工具进行创建和启动Loader作业。
本章节适用于MRS 3.x及后续版本。
前提条件
已安装并配置Loader客户端,具体操作请参见使用命令行运行Loader作业。
交互模式示例
- 使用安装客户端的用户登录Loader客户端所在节点。
- 执行以下命令,进入sqoop-shell工具的“conf”目录。例如,Loader客户端安装目录为“/opt/client/Loader/”。
cd /opt/client/Loader/loader-tools-1.99.3/sqoop-shell/conf
- 执行以下命令,配置认证信息。
vi client.properties
server.url=10.0.0.1:21351 # simple or kerberos authentication.type=simple # true or false use.keytab=true authentication.user= authentication.password= client.principal=oracle/hadoop@<系统域名> # keytab file client.keytab.file=./conf/login/oracle.keytab
登录FusionInsight Manager,选择“系统 > 权限 > 域和互信”,“本端域”参数即为当前系统域名。
表1 配置参数说明 配置参数
说明
示例
server.url
Loader服务的浮动IP地址和端口(21351)。
为了兼容性,此处支持配置多个IP地址和端口,并以“,”进行分隔。其中第一个必须是Loader服务的浮动IP地址和端口(21351),其余的可根据业务需求配置。
10.0.0.1:21351
authentication.type
登录认证的方式。
- “kerberos”,表示使用安全模式,进行Kerberos认证。Kerberos认证提供两种认证方式:密码和keytab文件。
- “simple”,表示使用普通模式,不进行Kerberos认证。
kerberos
authentication.user
普通模式或者使用密码认证方式时,登录使用的用户。
keytab登录方式,则不需要设置该参数。
bar
authentication.password
使用密码认证方式时,登录使用的用户密码。
普通模式或者keytab登录方式,则不需要设置该参数。
用户需要对密码加密,加密方法:
- 进入“encrypt_tool”所在目录。例如,Loader客户端安装目录为“/opt/hadoopclient/Loader”,则执行如下命令。
cd /opt/hadoopclient/Loader/loader-tools-1.99.3
- 执行以下命令,对非加密密码进行加密。
得到加密后的密文,作为“authentication.password”的取值。
说明:非加密密码中含有特殊字符时需要转义。例如,$符号属于特殊字符,可使用单引号进行转义;非加密密码中含有单引号时可用双引号进行转义,非加密密码中含有双引号应使用反斜杠\进行转义。可参考Shell的转义字符规则。
命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。
-
use.keytab
是否使用keytab方式登录。
- true,表示使用keytab文件登录
- false,表示使用密码登录。
true
client.principal
使用keytab认证方式时,访问Loader服务的用户规则。
普通模式或者密码登录方式,则不需要设置该参数。
loader/hadoop
client.keytab.file
使用keytab认证方式登录时,使用的keytab文件所在目录。
普通模式或者密码登录方式,则不需要设置该参数。
/opt/client/conf/loader.keytab
- 执行以下命令,进入交互模式。
source /opt/client/bigdata_env
cd /opt/client/Loader/loader-tools-1.99.3/sqoop-shell
./sqoop2-shell
上述命令通过读取配置文件获取认证信息。
也可以直接通过密码或者Kerberos认证。
使用密码进行认证:
./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>
- 执行以下命令,查看当前连接器对应的ID。
show connector
显示如下信息:
| Id | Name | Version | Class | +----+----------------------------+----------------+----------------------------------------------------------------------+ | 1 | generic-jdbc-connector | 2.0.7-SNAPSHOT | org.apache.sqoop.connector.jdbc.GenericJdbcConnector | | 2 | ftp-connector | 2.0.5-SNAPSHOT | org.apache.sqoop.connector.ftp.FtpConnector | | 3 | hdfs-connector | 2.0.5-SNAPSHOT | org.apache.sqoop.connector.hdfs.HdfsConnector | | 4 | oracle-connector | 2.0.1-SNAPSHOT | org.apache.sqoop.connector.oracle.OracleConnector | | 5 | mysql-fastpath-connector | 2.0.1-SNAPSHOT | org.apache.sqoop.connector.mysql.MySqlConnector | | 6 | sftp-connector | 2.0.6-SNAPSHOT | org.apache.sqoop.connector.sftp.SftpConnector | | 7 | oracle-partition-connector | 2.0.6-SNAPSHOT | org.apache.sqoop.connector.oracle.partition.OraclePartitionConnector | +----+----------------------------+----------------+----------------------------------------------------------------------+
根据如上信息,可知oracle连接器类型ID为4。
- 执行如下命令,创建连接器,根据提示输入具体的连接器信息。
create connection -c 连接器类型ID
例如,连接器类型的ID为4,则执行如下命令:
create connection -c 4
sqoop:000> create connection -c 4 Creating connection for connector with id 4 Please fill following values to create new connection object Name: oracle14 Oracle connection configuration JDBC connection string: jdbc:oracle:thin:@189.120.84.106:1521:orcl Username: oracledba Password: ********** JDBC connection properties: There are currently 0 values in the map: entry# New connection was successfully created with validation status FINE and persistent id 3 sqoop:000>
根据如上信息,可知连接器ID为3。
- 根据连接器ID,执行如下命令,创建作业。
create job -x 连接器ID -t import --trans job-config目录的绝对路径/oracle-hbase.json
例如,连接器ID为3,则执行如下命令:
create job -x 3 -t import --trans /opt/hadoopclient/Loader/loader-tools-1.99.3/loader-tool/job-config/oracle-hbase.json
显示如下信息:
sqoop:000> create job -x 3 -t import --trans /opt/hadoopclient/Loader/loader-tools-1.99.3/loader-tool/job-config/oracle-to-hbase.json Creating job for connection with id 3 Please fill following values to create new job object Name: run Database target Table name: test Columns: Conditions: Data split method: 0 : ROWID 1 : PARTITION Choose: Table Partitions: Data split allocation method: 0 : ROUNDROBIN 1 : SEQUENTIAL 2 : RANDOM Choose: JDBC fetch size: Output configuration Storage type: 0 : HDFS 1 : HBASE_BULKLOAD 2 : HBASE_PUTLIST 3 : HIVE 4 : SPARK Choose: 1 HBase instance: HBase Clear data before import : false Throttling resources Extractors: 10 Extractor size: New job was successfully created with validation status FINE and persistent id 7 sqoop:000>
根据如信息,而知作业ID为7。
- 执行以下命令,启动作业。
start job -j 作业ID -s
例如,作业ID为7,则执行如下命令:
start job -j 7 -s
显示
信息,则说明作业启动成功。Submission details Job ID: 7 Server URL: https://10.0.0.0:21351/loader/ Created by: admintest Creation date: 2019-12-04 16:37:34 CST Lastly updated by: admintest 2019-12-04 16:37:34 CST: BOOTING - Progress is not available 2019-12-04 16:37:42 CST: BOOTING - 0.00 % 2019-12-04 16:37:42 CST: BOOTING - 0.00 % 2019-12-04 16:37:57 CST: RUNNING - 0.00 % 2019-12-04 16:38:12 CST: RUNNING - 45.00 % 2019-12-04 16:38:12 CST: RUNNING - 45.00 % 2019-12-04 16:38:27 CST: SUCCEEDED
批量模式示例
- 使用安装客户端的用户登录Loader客户端所在节点。
- 执行以下命令,进入sqoop-shell工具的“conf”目录。例如,Loader客户端安装目录为“/opt/client/Loader/”。
cd /opt/client/Loader/loader-tools-1.99.3/sqoop-shell/conf
- 执行以下命令,配置认证信息。
vi client.properties
server.url=10.0.0.1:21351 # simple or kerberos authentication.type=simple # true or false use.keytab=true authentication.user= authentication.password= client.principal=hdfs/hadoop.<系统域名>@<系统域名> # keytab file client.keytab.file=./conf/login/hdfs.keytab
表2 配置参数说明 配置参数
说明
示例
server.url
Loader服务的浮动IP地址和端口(21351)。
为了兼容性,此处支持配置多个IP地址和端口,并以“,”进行分隔。其中第一个必须是Loader服务的浮动IP地址和端口(21351),其余的可根据业务需求配置。
10.0.0.1:21351
authentication.type
登录认证的方式。
- “kerberos”,表示使用安全模式,进行Kerberos认证。Kerberos认证提供两种认证方式:密码和keytab文件。
- “simple”,表示使用普通模式,不进行Kerberos认证。
kerberos
authentication.user
普通模式或者使用密码认证方式时,登录使用的用户。
keytab登录方式,则不需要设置该参数。
bar
authentication.password
使用密码认证方式时,登录使用的用户密码。
普通模式或者keytab登录方式,则不需要设置该参数。
用户需要对密码加密,加密方法:
- 进入“encrypt_tool”所在目录。例如,Loader客户端安装目录为“/opt/hadoopclient/Loader”,则执行如下命令。
cd /opt/hadoopclient/Loader/loader-tools-1.99.3
- 执行以下命令,对非加密密码进行加密。
得到加密后的密文,作为“authentication.password”的取值。
说明:非加密密码中含有特殊字符时需要转义。例如,$符号属于特殊字符,可使用单引号进行转义-;非加密密码中含有单引号时可用双引号进行转义,非加密密码中含有双引号应使用反斜杠\进行转义。可参考Shell的转义字符规则。
-
use.keytab
是否使用keytab方式登录。
- true,表示使用keytab文件登录。
- false,表示使用密码登录。
true
client.principal
使用keytab认证方式时,访问Loader服务的用户规则。
普通模式或者密码登录方式,则不需要设置该参数。
loader/hadoop
client.keytab.file
使用keytab认证方式登录时,使用的keytab文件所在目录。
普通模式或者密码登录方式,则不需要设置该参数。
/opt/client/conf/loader.keytab
- 执行以下命令,进入“sqoop2-shell”脚本所在目录,并在该目录下创建一个文本文件,例如“batchCommand.sh”。
cd /opt/client/Loader/loader-tools-1.99.3/sqoop-shell
vi batchCommand.sh
“batchCommand.sh”样例如下:
//查看参数 create connection -c 4 --help //创建连接器 create connection -c 4 -name oracle-connection --connector-connection-oracleServerIp 10.0.0.1 --connector-connection-oracleServerPort 22 --connector-connection-oracleUser root --connector-connection-oraclePassword xxxxx //创建作业 create job -t import -x 3 --connector-file-inputPath /opt/tempfile --connector-file-fileFilter * --framework-output-outputDirectory /user/loader/1 --framework-output-storageType HBase --framework-throttling-extractorSize 120 --framework-output-fileType TEXT_FILE --connector-file-splitType FILE -name test //启动作业 start job -j 7 -s
其中xxxxx为连接器密码。
- 执行如下命令,sqoop-shell工具将依次执行上述命令。
./sqoop2-shell batchCommand.sh
也可以直接在命令里附带认证信息。
使用密码认证:
./sqoop2-shell -uk false -u username -p encryptedPassword batchCommand.sh
使用Kerberos认证:
./sqoop2-shell -uk true -k user.keytab -s userPrincipal batchCommand.sh
显示“SUCCEEDED”信息,则说明作业启动成功。
Welcome to sqoop client Use the username and password authentication mode Authentication success. sqoop:000> create connection -c 4 --help usage: Show connection viparameters: --connector-connection-oraclePassword <arg> --connector-connection-oracleServerIp <arg> --connector-connection-oracleServerPort <arg> --connector-connection-oracleUser <arg> --framework-security-maxConnections <arg> --name <arg> ===> FINE sqoop:000> create connection -c 4 -name oracle-connection --connector-connection-oracleServerIp 10.0.0.1 --connector-connection-oracleServerPort 22 --connector-connection-oracleUser root --connector-connection-oraclePassword xxxxx Creating connection for connector with id 4 New connection was successfully created with validation status FINE and persistent id 3 ===> FINE sqoop:000> create job -t import -x 3 --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 -name test Creating job for connection with id 3 New job was successfully created with validation status FINE and persistent id 7 ===> FINE Submission details Job ID: 7 Server URL: https://10.0.0.0:21351/loader/ Created by: admintest Creation date: 2019-12-04 16:37:34 CST Lastly updated by: admintest 2019-12-04 16:37:34 CST: BOOTING - Progress is not available 2019-12-04 16:37:42 CST: BOOTING - 0.00 % 2019-12-04 16:37:42 CST: BOOTING - 0.00 % 2019-12-04 16:37:57 CST: RUNNING - 0.00 % 2019-12-04 16:38:12 CST: RUNNING - 45.00 % 2019-12-04 16:38:12 CST: RUNNING - 45.00 % 2019-12-04 16:38:27 CST: SUCCEEDED
- 批处理模式下,使用-c参数附带一条命令,sqoop-shell可以一次只执行附带的这一条命令。
执行如下命令将创建连接器。
./sqoop2-shell -c "create connection -c 4 -name oracle-connection --connector-connection-oracleServerIp 10.0.0.1 --connector-connection-oracleServerPort 22 --connector-connection-oracleUser root --connector-connection-oraclePassword xxxxx"
可以在命令里直接附带认证信息。
使用密码认证:
./sqoop2-shell -uk false -u username -p encryptedPassword -c "create connection -c 4 -name oracle-connection --connector-connection-oracleerverIp 10.0.0.1 --connector-connection-oracleServerPort 22 --connector-connection-oracleUser root --connector-connection-oraclePassword xxxxx"
使用Kerberos认证:
./sqoop2-shell -uk true -k user.keytab -s userPrincipal -c "create connection -c 4 -name oracle-connection --connector-connection-oracleServerIp 10.0.0.1 --connector-connection-oracleServerPort 22 --connector-connection-oracleUser root --connector-connection-oraclePassword xxxxx"
显示“FINE”信息,则说明连接创建成功。
Welcome to sqoop client Use the username and password authentication mode Authentication success. sqoop:000> create connection -c 4 -name oracle-connection --connector-connection-oracleServerIp 10.0.0.1 --connector-connection-oracleServerPort 22 --connector-connection-oracleUser root --connector-connection-oraclePassword xxxxx Creating connection for connector with id 4 New connection was successfully created with validation status FINE and persistent id 3 ===> FINE