我想创建一个Oozie工作流,该工作流将使用MapReduceIndexerTool获取我的数据并对其进行索引。我已经使用Shell操作使其工作,该操作调用我的脚本来执行以下命令:
hadoop jar /opt/cloudera/parcels/CDH/lib/solr/contrib/mr/search-mr-*-job.jar
org.apache.solr.hadoop.MapReduceIndexerTool
-D 'mapred.child.java.opts=-Xmx500m'
--morphline-file morphline.conf
--output-dir hdfs://cloudera1:8020/user/nicolas/outdir
--verbose --go-live --zk-host cloudera2:2181/solr
--collection Test_Collection hdfs:///user/nicolas/indir
它会找到所需的所有文件和目录,工作流将成功完成。但是,我想添加我的自定义Morphlines命令来修改一些数据。我一直在遵循kitesdk指南来做这件事。我将代码打包到一个jar中,并将其上传到hdfs://cloudera1:8020/user/nicolas/custom-command.jar通过色调文件浏览器。我还更新了morphline.conf,以便导入我的包并使用我的命令。如果我只是在工作流程中包含该文件,则会出现以下错误:
Error: org.kitesdk.morphline.api.MorphlineCompilationException: No command builder registered for name: tweakData ...
我假设MapReduceIndexerTool在查找我的jar时遇到了问题。因此,我决定在脚本中添加--libjars参数:
hadoop jar /opt/cloudera/parcels/CDH/lib/solr/contrib/mr/search-mr-*-job.jar
org.apache.solr.hadoop.MapReduceIndexerTool
--libjars hdfs://cloudera1:8020/user/nicolas/custom-command.jar ...
当我这样做时,会出现一个不同的错误:
WARN org.apache.hadoop.security.UserGroupInformation - PriviledgedActionException
as:yarn (auth:SIMPLE) cause:java.io.FileNotFoundException: File does not exist:
hdfs://cloudera1:8020/tmp/hadoop-yarn/mapred/staging/yarn1033647717/.staging/job_local1033647717_0001/libjars/custom-command.jar
TD;DR如何包含自定义Morphlines命令的jar,以便Oozie/YARN找到它?
您可以将jar添加到oozie-wf HDFS目录的lib子目录中,也可以在oozie-shell操作中将jar添加到标记中。
--libjars需要本地文件系统上的文件(而不是HDFS文件)。