ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

通过Hue+Oozie调用sqoop1的一些坑

2019-09-07 18:55:59  阅读:514  来源: 互联网

标签:Hue workflow sqoop oozie Oozie sqoop1 sqoop2


一、前言

平台:CDH 5.13.0

公司在客户那边有个项目需要部署cloudera平台,部署的时候,在这个版本的cdh中,除了基本组件,还选了sqoop2作为数据传输工具,希望能在Oozie中通过工作流调用sqoop。

 

二、问题与解决

1. hue界面找不到sqoop2的action

如下图所示,无论在Editor还是在workflow的操作界面,只有sqoop1的操作,没有sqoop2的。

微信截图_20190907181111

然后在博客中找到了原因:

Oozie 自带 sqoop、hive 等常用组件,比如执行sqoop脚本命令时,并不是你主机里或者CDH里的的sqoop,而是 HDFS 下 Oozie 里的 sqoop 在起作用,这也是为什么 总是报 Could not load db driver class 的原因了,因为根本不是同一个sqoop。[1]

也搜索到了sqoop1和sqoop2的区别:https://blog.csdn.net/Gamer_gyt/article/details/55225700

然而我们只需要简单的工具,能够从关系型数据库中导入数据而已,所以思路转为调用sqoop1进行数据导入。

 

2. 无法导入db驱动的类

“Could not load db driver class”,这句估计是出现次数最多的报错了,这个报错搞了一天,所以要一步步来(以下操作在安装oozie的主机进行操作):

我的需求是从sqlserver导入数据,所以需要从微软的官网下载驱动:https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-2017 ,我选择是6.0的版本,解压后,获得sqljdbc42.jar

 

3. 本地执行sqoop命令

将sqljdbc42.jar放入/var/lib/sqoop/目录,然后将用户和组改为sqoop。

ssh登录主机,我是用root执行命令:

sqoop import --connect 'jdbc:sqlserver://{IP}:{Port};username={UserName};password={Paswd};database={Dbname}' --table table_name --target-dir "/user/root/sqoop_dir" -m 1

如果能够正常执行,并且在hdfs上发现/user/root/sqoop_dir 目录中有正确的数据,证明sqoop命令和驱动都是正常的。

4. 通过hue定义workflow

首先,将sqljdbc42.jar包,复制到hdfs中的目录:/user/oozie/share/lib/lib_{timestamp}/sqoop/ 其中timestamp因人而异;

然后,将owner和group都改成oozie;

最后,在cloudera界面重启oozie组件;

做完这些之后,新建一个workflow,如下图所示:

image

编辑内容填入sqoop语句,注意,网上有人说这里不能带sqoop命令了,也就是直接以import开头,但是我执行之后,发现用完整的命令是可以执行的。

有个坑是,刚开始字符串用单引号,会报错,改成双引号后就可以运行了,执行结果如下:

image

image

但是如果我讲sqoop语句,写在shell script中,然后通过workflow去运行,还是会报找不到类的错误,这个暂时还没解决。

 

三、参考

1. Hue + Oozie + Sqoop 使用

(完)

标签:Hue,workflow,sqoop,oozie,Oozie,sqoop1,sqoop2
来源: https://www.cnblogs.com/harrymore/p/11482281.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有