我需要在工作流的工作区中存储查询结果。为实现这一点,我使用了:
INSERT OVERWRITE LOCAL DIRECTORY '/apps/myProject/conf/oozie/workspaces/myWorkflow'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY "\n"
SELECT * FROM myTable
LIMIT 10;
但我收到错误:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/cloudera/parcels/CDH-5.8.5-1.cdh5.8.5.p0.5/jars/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/data/12/yarn/nm/filecache/294953/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
我在其他问题link1和link2中找到的解决方案是删除库,但问题是我没有权限这样做。还有另外一种方法吗?
我还想提一下,如果我设置以下路径没有问题
INSERT OVERWRITE LOCAL DIRECTORY 'tmp/user/output'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY "\n"
SELECT * FROM myTable
LIMIT 10;
答案 0 :(得分:1)
工作流用户(hadoop)在/ apps / myProject / conf / oozie / workspaces / myWorkflow目录中没有写访问权限。默认情况下,用户在/ tmp目录中具有写访问权限,因此它正在工作。您能否检查工作流程执行用户的访问权限。
SLF4J只是警告信息,不会停止工作流程执行。
要确认这一点,请为hadoop用户创建一个目录并尝试。
希望这有帮助。
-Ravi