您的位置:首页 > 产品设计 > UI/UE

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

2017-06-26 17:52 375 查看
如何在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
9ae7
.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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hue-Sqoop options-fi