如何在Hue里面使用Sqoop的options-file

如何在Hue里面使用Sqoop的options-file
项目里面用Hue的workflow 来做Sqoop抽取作业,因为数据库密码会在日志里面明文显示的问题,因此要找到一个方法来解决明文显示的问题。
在这里采用sqoop 中–options-file选项来解决密码明文显示的问题,但是在workflow中使用hue时碰到Unable to read options file的问题

 ERROR org.apache.sqoop.Sqoop  - Error while expanding arguments
java.lang.Exception: Unable to read options file: /user/hue/oozie/workspaces/hue-oozie-1498288877.39/ods_conf
    at org.apache.sqoop.util.OptionsFileUtil.expandArguments(OptionsFileUtil.java:102)
    at com.cloudera.sqoop.util.OptionsFileUtil.expandArguments(OptionsFileUtil.java:33)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:199)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
    at org.apache.sqoop.Sqoop.main(Sqoop.java:236)
    at org.apache.oozie.action.hadoop.SqoopMain.runSqoopJob(SqoopMain.java:197)
    at org.apache.oozie.action.hadoop.SqoopMain.run(SqoopMain.java:177)
    at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:49)
    at org.apache.oozie.action.hadoop.SqoopMain.main(SqoopMain.java:46)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:236)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
    at org.apache.hadoop.mapred.LocalContainerLauncher$EventHandler.runSubtask(LocalContainerLauncher.java:388)
    at org.apache.hadoop.mapred.LocalContainerLauncher$EventHandler.runTask(LocalContainerLauncher.java:302)
    at org.apache.hadoop.mapred.LocalContainerLauncher$EventHandler.access$200(LocalContainerLauncher.java:187)
    at org.apache.hadoop.mapred.LocalContainerLauncher$EventHandler$1.run(LocalContainerLauncher.java:230)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.FileNotFoundException: /user/hue/oozie/workspaces/hue-oozie-1498288877.39/ods_conf (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:146)
    at java.io.FileReader.<init>(FileReader.java:72)
    at org.apache.sqoop.util.OptionsFileUtil.expandArguments(OptionsFileUtil.java:70)
    ... 25 more

结合网上的资料,要解决该问题,需要在workflow生成的xml文档中添加几项内容:

<arg>--options-file</arg>
<arg>${optionFile}</arg>
<file>/user/appman/ods_conf#ods_conf</file>

同时在 job.properties文件中添加变量值:

option File=ods_conf

但是手动去修改hdfs上的workflow.xml文件后 ,再次去调用作业发现xml被覆盖掉,问题依旧存在,因此只有从前台的界面将这几个参数传进去。
经过多次实验后,终于找到从前台传进这些参数的方法,后面就不再细说,直接上操作流程:
1、添加Sqoop参数,–options-file 以及一个变量名${optionFile}用来后续将文件名传入,
这里写图片描述
2、添加配置文件,点击文件,选择正确的配置文件,点击确定。
这里写图片描述
3、添加变量值,点击作业的配置,在变量区域增加optionFile变量,并赋值,赋给该变量的值需为配置文件的文件名
这里写图片描述
这里写图片描述
然后保存运行,作业能够顺利执行通过,达到预期的结果。

参考链接:https://stackoverflow.com/questions/28567815/oozie-sqoop-optionsfile-gives-file-not-found-exception
https://community.cloudera.com/t5/Web-UI-Hue-Beeswax/Hue-Sqoop-through-Oozie-Passing-Parameter-values/td-p/47108

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值