基于OGG和Sqoop的TBDS接入方案系列-Sqoop与腾讯大数据套件TBDS的集成示例介绍

导语:本文为系列文章《基于OGG和Sqoop的TBDS接入方案系列》的第二篇,其余两篇文章的传送门如下:

第一篇:《基于OGG和Sqoop的TBDS接入方案系列-总体方案

第三篇:《基于OGG和Sqoop的TBDS接入方案系列-数据合并方案

本文主要讨论了如何利用Sqoop将Oracle源表接入到腾讯大数据套件TBDS中。

1.概述

Oracle里存储的结构化数据导出到Hadoop体系做离线计算是一种常见数据处置手段,此案例介绍了一个利用Sqoop将数据从Oracle离线导入到腾讯大数据套件TBDS中Hadoop和Hive组件的场景。

离线数据的导入,主要包含全量和增量数据的导入。

2.Sqoop环境部署

2.1.环境说明

本文中示例的环境配置如下表所示:

角色

数据存储服务及版本

IP

源服务器

Oracle Release 11.2.0.1

10.0.0.85

Sqoop服务器

Sqoop 1.4.5.2.2.0.0-2041

10.0.0.90

目标服务器

TBDS 4.0.3.1

10.0.0.90

2.2.Sqoop安装

Sqoop可以非常便捷地以RPM包的形式直接集成到TBDS集群环境中,安装包可以从以下链接下载到:

链接:https://share.weiyun.com/5zgpbZi 密码:danme3

将上述安装包上传到TBDS集群的Portal节点上,例如目录/tmp下。

Sqoop本质上是一个客户端性质的工具,在集群中任意节点安装Sqoop均可。为方便起见,使用以下命令安装Sqoop到Portal节点上

rpm -ivh /tmp/sqoop_2_2_0_0_2041-1.4.5.2.2.0.0-2041.el6.noarch.rpm

2.3.Sqoop配置

把/etc/sqoop/conf/下的sqoop-env-templete.sh复制一份,命名为sqoop-env.sh,修改Hadoop、MR、Hive、HBase、ZooKeeper配置路径如下(export字样部分):

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# included in all the hadoop scripts with source command
# should not be executable directly
# also should not be passed any arguments, since we need original $*
# Set Hadoop-specific environment variables here.
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/usr/hdp/2.2.0.0-2041/hadoop
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/usr/hdp/2.2.0.0-2041/hadoop
#set the path to where bin/hbase is available
export HBASE_HOME=/usr/hdp/2.2.0.0-2041/hbase
#Set the path to where bin/hive is available
export HIVE_HOME=/usr/hdp/2.2.0.0-2041/hive
#Set the path for where zookeper config dir is
export ZOOCFGDIR=/usr/hdp/2.2.0.0-2041/zookeeper/conf

2.4.验证环境

验证Sqoop是否安装成功:

sqoop version

3.基本配置

3.1.Oracle源端信息

Oracle源数据库所在节点IP为10.0.0.85,检查Oracle基本信息

su - oracle;
sqlplus sys/sysoracle++@orcl as sysdba
select name from v$database;
show parameter db_name;
select * from v$version;

3.2.JDBC驱动下载

到Oracle官方网站,下载对应版本的JDBC驱动

https://www.oracle.com/technetwork/database/application-development/jdbc/downloads/index.html

本例中使用的Oracle的版本为11.2.0.1.0,选择下载对应版本为11.2.0.4的JDBC驱动,

将OGG环境部署及数据导入示例-old文件上传到Sqoop节点,并移动到目录/usr/hdp/2.2.0.0-2041/sqoop/lib/下

3.3.源端初始数据准备

为测试方便,在Oracle源端创建用户aron,赋予DBA权限,并通过aron用户登陆Oracle,创建一张测试表aron_test_tab

su - oracle;
sqlplus sys/sysoracle++@orcl as sysdba
create user aron identified by abcd1234;
grant dba to aron;
quit
sqlplus
#以Aron登陆
drop table aron_test_tab;
create table aron_test_tab (id int, name varchar(20));
insert into aron_test_tab values (1, 'Aron');
insert into aron_test_tab values (2, 'Ben');
insert into aron_test_tab values (3, 'Cindy');
commit;
select * from aron_test_tab;

4.导入示例

4.1.身份认证

若TBDS开启了认证,需要在导入数据之前,在Sqoop节点上先导出身份认证相关的环境变量,

export hadoop_security_authentication_tbds_secureid=<secureId>
export hadoop_security_authentication_tbds_securekey=<secureKey>
export hadoop_security_authentication_tbds_username=<userName>

其中<secureId>、<secureKey>、<userName>分别为使用Sqoop工具的用户的密钥ID、密钥值和用户名,例如hdfs用户,其对应的密钥ID和密钥值可以通过以该用户登录Portal页面 -> 点击右上方用户名 -> 个人中心 -> 密钥管理中找到,

4.2.全量导入HDFS

4.2.1.执行sqoop import命令

在Sqoop节点,执行sqoop import命令导入表ARON_TEST_TAB的全量数据

sqoop import --connect jdbc:oracle:thin:@10.0.0.85:1521:ORCL --username aron --password abcd1234 --table ARON_TEST_TAB --target-dir /tmp/Aron -m 1

重要参数说明:

参数

说明

--query

SQL查询语句

--target-dir

HDFS目标目录(确保目录不存在,否则会报错,因为Sqoop在导入数据至HDFS时会自己在HDFS上创建目录)

--null-string

string类型空值的替换符(Hive中Null用\\n表示)

--null-non-string

非string类型空值的替换符

--split-by

数据切片字段(int类型,m>1时必须指定)

-m

Mapper任务数,默认为4

更多的参数,请参考Sqoop官方文档:

http://sqoop.apache.org/docs/1.4.5/SqoopUserGuide.html#_literal_sqoop_import_literal

4.2.2.验证数据

若任务成功运行,其结束后可看到以下信息:

查看HDFS对应目录和文件内容

hdfs dfs -ls /tmp

可见,3条数据已成功导入到HDFS中,其中:

  • /tmp/Aron/_SUCCESS:为空文件,标志任务成功
  • /tmp/Aron/part-m-00000:为导入数据的存储文件,存储真正的数据

4.2.3.常见错误

常见的错误如下,

1) 源表缺少主键

如果源表没有主键,需要指定-m 1参数
ERROR tool.ImportTool: Error during import: No primary key could be found for table ARON_TEST_TAB. Please specify one with --split-by or perform a sequential import with '-m 1'.

2) TBDS认证不通过

如果认证不通过,是因为没有export相应的环境变量

Caused by: java.io.IOException: failure to login

Caused by: javax.security.auth.login.LoginException: Can't find user name for tbds auths

4.3.增量导入HDFS

增量导入只要是由以下三个参数控制:

  • --check-column

用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入,和关系型数据库中的自增字段及时间戳类似.
注意:这些被指定的列的类型不能使任意字符类型,如char、varchar等类型都是不可以的,同时--check-column可以去指定多个列

  • --incremental

用来指定增量导入的模式,两种模式分别为Append和Lastmodified

  • --last-value

指定上一次导入中检查列指定字段最大值

4.3.1.--incremental 使用Append模式

该方式比较适用于源表中有一个自增型的主键列,如ID

在Oracle源表新增5条记录

在Sqoop节点,执行命令,导入新增的5条记录,因为此处id可以看做是自增的,从id > 3开始(即id=4一直到id=8的记录)

sqoop import --connect jdbc:oracle:thin:@10.0.0.85:1521:ORCL --username aron --password abcd1234 --table ARON_TEST_TAB --target-dir /tmp/Aron -m 1 --check-column id --incremental append --last-value 3

可见,增量部分的数据已成功导入到HDFS中:

  • /tmp/Aron/_SUCCESS:为空文件,标志任务成功
  • /tmp/Aron/part-m-00000:为全量导入的数据存储文件,包含3条记录
  • /tmp/Aron/part-m-00001:为增量导入的数据存储文件,包含5条记录

4.3.2.--incremental 使用Lastmodified模式

该方式适用于源表中有一个时间/日期/日期+时间类型的字段,记录当前条目插入到表中的时间。

  • --apend模式

在Oracle新建另一个源表:

sqlplus
#以Aron登陆
drop table aron_test_tab_2;
create table aron_test_tab_2 (id int, name varchar(20), last_mod timestamp DEFAULT systimestamp);
insert into aron_test_tab_2 (id, name) values (1, 'Alibaba');
insert into aron_test_tab_2 (id, name) values (2, 'Baidu');
insert into aron_test_tab_2 (id, name) values (3, 'Tencent');
insert into aron_test_tab_2 (id, name) values (4, 'SAP');
insert into aron_test_tab_2 (id, name) values (5, 'Oracle');
commit;
select * from aron_test_tab_2;

这5条记录大概插入时间为2018/08/24 16:00:00左右。

先用全量的方式导入到HDFS,记录存在文件/tmp/Aron2/part-m-00000中:

sqoop import --connect jdbc:oracle:thin:@10.0.0.85:1521:ORCL --username aron --password abcd1234 --table ARON_TEST_TAB_2 --target-dir /tmp/Aron2 -m 1

大概16:10,再新增5条记录:

sqlplus
#以Aron登陆
insert into aron_test_tab_2 (id, name) values (6, 'Microsoft');
insert into aron_test_tab_2 (id, name) values (7, 'Google');
insert into aron_test_tab_2 (id, name) values (8, 'Amazon');
insert into aron_test_tab_2 (id, name) values (9, 'Facebook');
insert into aron_test_tab_2 (id, name) values (10, 'Twitter');
commit;
select * from aron_test_tab_2;

在Sqoop节点,执行命令,导入新增的5条记录,因为新增的记录的last_mod列是大于2018/8/24 16:10:00,所以设定基准时间点为2018/8/24 16:10:00,执行以下命令导入增量数据:

注意:列的名字要大写,即不能写成last_mod,而是LAST_MOD。

sqoop import --connect jdbc:oracle:thin:@10.0.0.85:1521:ORCL --username aron --password abcd1234 --table ARON_TEST_TAB_2 --target-dir /tmp/Aron2 -m 1 --check-column LAST_MOD --incremental lastmodified --last-value "2018-08-24 16:10:00" --append

任务执行成功,查看hdfs文件,可见新记录存在另外的文件/tmp/Aron2/part-m-00001中。

  • --merge-key模式

先对源表做已有记录的更新,以及新条目的插入:

sqlplus
#以Aron登陆
update aron_test_tab_2 set name = 'Taobao' where id = 1;
update aron_test_tab_2 set name = 'AWS' where id = 8;
insert into aron_test_tab_2 (id, name) values (11, 'Yahoo');
insert into aron_test_tab_2 (id, name) values (12, 'NetCase');
commit;
select * from aron_test_tab_2;

但此时发现,last_mod列并没有更新为数据更新的最新事件,原因是表定义中该字段只定义了插入的default值,而没有定义更新时的default值。

为了方便测试,选择直接更新时间的方法:

sqlplus
#以Aron登陆
update aron_test_tab_2 set last_mod = to_timestamp('2018-08-24 16:59:00.000000','yyyy-mm-dd hh24:mi:ss.ff6') where id = 1;
update aron_test_tab_2 set last_mod = to_timestamp('2018-08-24 16:59:00.000000','yyyy-mm-dd hh24:mi:ss.ff6') where id = 8;
commit;
select * from aron_test_tab_2;

在Sqoop节点,执行命令,导入新增的5条记录,因为新增的记录的last_mod列是大于2018/8/24 16:10:00,所以设定基准时间点为2018/8/24 16:10:00:

注意:列名需要大写,且ID列需指定为表的主键

sqoop import --connect jdbc:oracle:thin:@10.0.0.85:1521:ORCL --username aron --password abcd1234 --table ARON_TEST_TAB_2 --target-dir /tmp/Aron2 -m 1 --check-column LAST_MOD --incremental lastmodified --last-value "2018-08-24 16:59:00" --merge-key ID

可见,新增的和更新的记录同步了到HDFS,而且数据文件的数目也从2个变为1个,为/tmp/Aron2/part-r-00000

4.3.3.常见错误

1) 内存不足

后台运行作业的错误为:

18/08/24 17:57:04 INFO mapreduce.Job: Task Id : attempt_1535104418263_0002_m_000002_0, Status : FAILED

Error: Java heap space

Yarn日志中的错误为:

2018-08-24 17:37:34,884 ERROR [IPC Server handler 1 on 17667] org.apache.hadoop.mapred.TaskAttemptListenerImpl: Task: attempt_1533293794501_0012_m_000000_0 - exited : Java heap space

解决办法是将MR的参数mapreduce.reduce.java.opts改大一些,默认是756m,可以改成4096m。

2) 主键不存在

错误提示检查主键是否存在

18/08/24 18:02:20 INFO mapreduce.Job: Task Id : attempt_1535104800357_0002_m_000001_1, Status : FAILED

Error: java.io.IOException: Cannot join values on null key. Did you specify a key column that exists?

可能原因是源表中id并不是主键,先修改源表的主键,添加id为主键:

sqlplus
#以Aron登陆
alter table aron_test_tab_2 add constraint mypk primary key (id);

如列名没有大写,还是会报同样的错误,将id更改为大写ID,问题解决。

sqoop import --connect jdbc:oracle:thin:@10.0.0.85:1521:ORCL --username aron --password abcd1234 --table ARON_TEST_TAB_2 --target-dir /tmp/Aron2 -m 1 --check-column LAST_MOD --incremental lastmodified --last-value "2018-08-24 16:59:00" --merge-key ID

3) 缺少--merge-key或者--append参数

若不指定--merge-key或者--append参数来运行sqoop import命令来做数据的增量导入:

sqoop import --connect jdbc:oracle:thin:@10.0.0.85:1521:ORCL --username aron --password abcd1234 --table ARON_TEST_TAB_2 --target-dir /tmp/Aron2 -m 1 --check-column LAST_MOD --incremental lastmodified --last-value "2018-08-24 16:10:00"

遇到以下错误:

18/08/24 16:21:32 ERROR tool.ImportTool: Error during import: --merge-key or --append is required when using --incremental lastmodified and the output directory exists.

解决办法是指定--append或者--merge-key其中一种方式。

4.4.全量导入Hive

4.4.1.前提条件

在执行导入数据到Hive前,需要在Sqoop节点上,先执行以下步骤:

1) 修改java.policy文件:

vim /usr/jdk64/jdk1.8.0_111/jre/lib/security/java.policy
#添加以下内容:
permission javax.management.MBeanTrustPermission "register";

否则,Sqoop导入时任务会出现以下错误:

2) 替换jar包

拷贝以下jar包到相应目录

cp  -a  /usr/hdp/2.2.0.0-2041/hive/lib/libthrift-0.9.3.jar  /usr/hdp/2.2.0.0-2041/hadoop/share/hadoop/common/lib/
mv /usr/hdp/2.2.0.0-2041/hadoop/share/hadoop/common/lib/libthrift-0.9.2.jar /usr/hdp/2.2.0.0-2041/hadoop/share/hadoop/common/lib/libthrift-0.9.2.jar-bak

注意必须将原来目录下的libthrift-0.9.2.jar重名或者移走

3) 导出身份认证信息

若TBDS开启了认证,需要在导入数据之前,在Sqoop节点上先导出用户身份认证相关的环境变量,

export hadoop_security_authentication_tbds_secureid=<secureId>
export hadoop_security_authentication_tbds_securekey=<secureKey>
export hadoop_security_authentication_tbds_username=<userName>

其中<secureId>、<secureKey>、<userName>分别为使用Sqoop工具的用户的密钥ID、密钥值和用户名,例如hive用户,其对应的密钥ID和密钥值可以通过以该用户登录Portal页面 -> 点击右上方用户名 -> 个人中心 -> 密钥管理中找到,

4.4.2.新建Hive表

在Portal库表管理界面,新建Hive表,例如

4.4.3.Oracle源表准备

准备好以下Oracle源表

sqlplus
#以aron登陆
create table aron_student_name (id int, name varchar(25));
insert into aron_student_name values (1, 'Aron');
insert into aron_student_name values (2, 'Ben');
insert into aron_student_name values (3, 'Cindy');
insert into aron_student_name values (4, 'David');
commit;
select * from aron_student_name ;

4.1.7.执行sqoop import命令

在Sqoop节点,执行sqoop import命令导入表ARON_STUDENT_NAME的全量数据,比较重要的参数是--hive-import、--hive-database和--hive-table

sqoop import --connect jdbc:oracle:thin:@10.0.0.85:1521:ORCL --username aron --password abcd1234 --table ARON_STUDENT_NAME --target-dir /tmp/Aron/hiveTmp1/ -m 1 --hive-import --hive-database testaaa --hive-table ARON_STUDENT_NAME

重要参数说明:

参数

说明

--query

SQL查询语句

--target-dir

HDFS目标目录(确保目录不存在,否则会报错,因为Sqoop在导入数据至HDFS时会自己在HDFS上创建目录)

--null-string

string类型空值的替换符(Hive中Null用\\n表示)

--null-non-string

非string类型空值的替换符

--split-by

数据切片字段(int类型,m>1时必须指定)

-m

Mapper任务数,默认为4

--hive-drop-import- delims

删除数据中包含的Hive默认分隔符(^A, ^B, \\n)

--hive-import

导入到Hive表(默认使用Hive的分隔符)

--hive-overwrite

覆盖现有Hive表的数据

--create-hive-table

是否创建Hive表,默认为false,如Hive表已存在则任务会失败

hive-table

Hive表名

hive-database

Hive数据库

更多的参数,请参考Sqoop官方文档:

http://sqoop.apache.org/docs/1.4.5/SqoopUserGuide.html

4.4.4.检查Hive表

打开TBDS数据分析页面,检查Hive表数据是否已写入:

Select * from testaaa.aron_student_name

检查临时文件目录:

hdfs dfs -ls /tmp/Aron3

4.5.增量导入Hive

4.5.1.源表数据变更

源表数据进行插入操作:

sqlplus
#以aron登陆
insert into aron_student_name values (5, 'Frank');
insert into aron_student_name values (6, 'Gay');
insert into aron_student_name values (7, 'Henry');
insert into aron_student_name values (8, 'Ivy');
commit;
select * from aron_student_name ;

4.5.2.sqoop import命令增量导入

执行以下命令,将增量导入id大于4以后的数据导入到Hive表aron_student_name

sqoop import --connect jdbc:oracle:thin:@10.0.0.85:1521:ORCL --username aron --password abcd1234 --table ARON_STUDENT_NAME --target-dir /tmp/Aron4 -m 1 --check-column id --incremental append --last-value 4 --hive-database testaaa --hive-table ARON_STUDENT_NAME --hive-import

4.4.5.检查Hive表

打开TBDS数据分析页面,检查Hive表新数据是否已写入

Select * from testaaa.aron_student_name

检查临时文件目录

hdfs dfs -ls /tmp/Aron4

4.6.以普通用户执行Sqoop任务

4.6.1.常见错误

在集群某一台节点上,切换至普通用户(非root用户),在执行Sqoop将数据从RDBMS导入到Hive表,发现能将数据导入到HDFS的临时目录,但是发现导入Hive步骤出错,而用root用户则未出现此错误,错误信息为,

2018-09-30 18:13:02,689 main ERROR FileManager (/data/var/log/hive/hiveserver2.log) java.io.FileNotFoundException: /data/var/log/hive/hiveserver2.log (Permission denied) java.io.FileNotFoundException: /data/var/log/hive/hiveserver2.log (Permission denied)

at java.io.FileOutputStream.open0(Native Method)

Caused by: java.lang.IllegalStateException: ManagerFactory [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory@3bcc8f13] unable to create manager for [/data/var/log/hive/hiveserver2.log] with data [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$FactoryData@3cb04dd[pattern=/data/var/log/hive/hiveserver2.log-%i, append=true, bufferedIO=true, bufferSize=8192, policy=CompositeTriggeringPolicy(policies=[SizeBasedTriggeringPolicy(size=10485760)]), strategy=DefaultRolloverStrategy(min=1, max=10), advertiseURI=null, layout=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%.20t] %class{36}(%L): %msg%xEx%n]]

2018-09-30 18:13:02,699 main ERROR FileManager (/data/var/log/hive/hive-metastore.log) java.io.FileNotFoundException: /data/var/log/hive/hive-metastore.log (Permission denied) java.io.FileNotFoundException: /data/var/log/hive/hive-metastore.log (Permission denied)

而相应的目录/data/var/log/hive/及其下文件权限如下:

出现问题的原因是,以普通用户执行Sqoop任务,在导入hive表过程中,由于hive client本地会生成本地日志文件,而这些文件的所有者为hive:hadoop(或其他,如root:root),生成的日志文件权限一般为644,因此普通用户不对其拥有权限。即使手动修改日志文件的权限,由于日志是滚动的,即达到一定大小之后会重新以hive用户生成,所以届时问题会复现,因此手动修改日志文件不是治本之法。

4.6.2.Workaround

Workaround是以root用户去执行sqoop任务,但是如果要配置工作流shell任务,则无法使用root用户,因为工作流任务被调度时,Lhotse Runner会根据任务执行的portal用户,尝试新建(若已存在就略过)一个同名的OS用户去执行sqoop任务,所以无法绕开。

4.6.3.以普通用户执行Sqoop任务

若要以一普通用户执行sqoop任务,可借助sudo命令来让普通用户暂时切换至hive用户来执行sqoop任务,此时需要按以下步骤进行配置,

1) 修改sudoers文件

在执行sqoop任务的结点上,以root用户修改/etc/sudoers文件,修改的命令是

visudo

2) 添加sudo权限

在类似vim编辑模式下,在末尾添加一行,其中aron是执行sqoop任务时普通用户(普通OS用户,或工作流根据Portal用户创建的同名OS用户)的名字,根据实际情况更改

aron ALL=(hive) NOPASSWD:SETENV: /usr/bin/sqoop
:wq

注意,其中,

  • hive为目录/data/var/log/hive的所有者,假如该目录非hive用户所有,如root,则修改为root用户,即aron ALL=(root) NOPASSWD:SETENV:/usr/bin/sqoop;
  • NOPASSWD表示免密切换用户;
  • SETENV允许用户保留环境变量,配合后面sudo -E选项使用,否则会有sudo: sorry, you are not allowed to preserve the environment错误;

保存,退出。

参考:

sudo命令相关参考:

http://man.linuxde.net/sudo

环境变量错误参考:

https://superuser.com/questions/636283/how-to-allow-user-to-preserve-environment-with-sudo

3) 切换至普通用户

切换到一个普通的用户

su - <user>

例如:

su - aron

4) 导出身份认证信息

执行sqoop命令前,同样需要导出认证相关环境变量,此处为portal一普通用户的密钥即可,例如:

export hadoop_security_authentication_tbds_secureid=XIlAllhPPReZzezxwsGPC8bZDzBG2MS7n61l
export hadoop_security_authentication_tbds_securekey=0sg2geeLPQjrdnS6nH3aAjZWgLsFXfbB
export hadoop_security_authentication_tbds_username=aron

按以下格式,来执行sqoop导入任务。

sudo -E -u <user> sqoop import …

注意,其中:

  • -E选项是为了保留之前导出的认证相关命令,否则会有认证失败的错误信息;<user>用户与visudo编辑时的代理用户一致(hive、root等)

例如:

sudo -E -u hive sqoop import --connect jdbc:oracle:thin:@10.0.0.85:1521:ORCL --username aron --password abcd1234 --table BG_NAME --target-dir /tmp/bg_name -m 1 --hive-import --hive-database testaaa --hive-table BG_NAME

此时任务即可顺利运行。

4.6.4.配置工作流任务

在配置Sqoop脚本工作流任务前,注意需要在Lhotse_runner所在节点上,部署好Sqoop环境以及做好相关配置工作,才能开展以下配置。

其中Sqoop任务脚本编写示例如下:

#!/bin/bash
currentTimestamp=$(date '+%Y%m%d-%H%M%S')
# currentUser=$(whoami)
# echo 'Current OS user is '$currentUser > /tmp/Aron/sqoopOut-$currentTimestamp.txt
export hadoop_security_authentication_tbds_secureid=dpMqlk3UQptkYyaJ4ITqrxcKp6TLsExQ2Mu2
export hadoop_security_authentication_tbds_securekey=pIkUqeBXbJFeitvFnT73LJbPenhNRZgR
export hadoop_security_authentication_tbds_username=aron
sudo -E -u root sqoop import --connect jdbc:oracle:thin:@10.0.0.85:1521:ORCL --username aron --password abcd1234 --table BG_NAME --target-dir /tmp/bg_name_$currentTimestamp -m 1 --hive-import --hive-overwrite --hive-database testaaa --hive-table BG_NAME >> /tmp/Aron/sqoopOut-$currentTimestamp.txt 2>&1

注意:需要根据实际业务需求修改脚本内容。

之后运行工作流任务成功。

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
基于OGG和Sqoop的TBDS接入方案系列-Sqoop与腾讯大数据套件TBDS的集成示例介绍
Oracle里存储的结构化数据导出到Hadoop体系做离线计算是一种常见数据处置手段,此案例介绍了一个利用Sqoop将数据从Oracle离线导入到腾讯大数据套件...
<<上一篇
下一篇>>