Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法调用';hadoop jar';类的命令,该类包含Spring持久性单元_Hadoop_Spring Data - Fatal编程技术网

无法调用';hadoop jar';类的命令,该类包含Spring持久性单元

无法调用';hadoop jar';类的命令,该类包含Spring持久性单元,hadoop,spring-data,Hadoop,Spring Data,问题在于,jar文件使用springorm加载持久性配置,并基于这些配置,将文件移动到HDFS中合适的文件夹中。现在,如果我使用'java-cp'而不是'hadoopjar',它将无法复制到HDFS,导致文件系统错误 使用hadoop jar命令调用jar时(注入了spring orm),异常如下: 线程“main”org.springframework.beans.factory.BeanCreationException中出现异常:创建名为的bean时出错 'org.springframew

问题在于,jar文件使用springorm加载持久性配置,并基于这些配置,将文件移动到HDFS中合适的文件夹中。现在,如果我使用'java-cp'而不是'hadoopjar',它将无法复制到HDFS,导致文件系统错误

使用hadoop jar命令调用jar时(注入了spring orm),异常如下:

线程“main”org.springframework.beans.factory.BeanCreationException中出现异常:创建名为的bean时出错

'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' 在类路径资源[applicationContext.xml]中定义

创建类中定义的名为“entityManagerFactory”的bean时出错 路径资源[applicationContext.xml]:初始化方法的调用 失败;嵌套异常为java.lang.IllegalStateException: 名称“persistence”的持久性单元定义冲突: 文件:/home/user/Desktop/ABC/apnJar.jar, 文件:/tmp/hadoop ABC/hadoop-unjar2841422106164401019/

原因:java.lang.IllegalStateException:持久性冲突 名称“持久性”的单位定义

看起来Hadoop正在将jar文件解包到某个tmp文件夹中,这真的是必需的吗? 我们可以通过任何配置更改跳过这一步吗

欢迎对此有任何想法。

如果您使用“hadoop jar”,hadoop将运行org.apache.hadoop.util.RunJarRunJar将把jar解压到临时文件夹中(您的例子是/tmp/hadoop-ABC/hadoop-unjar28422106164401019/)并将其加载到当前的类加载器中。最后,它将调用主类来运行MapReduce应用程序


您是否在类路径中添加了jar?如果是这样,您的jar和未打包文件夹将位于类加载器中。我想这就是spring抱怨的原因。

作为一种解决方法,我从jar中提取了配置XML,并将它们放在工作目录中

这是可行的,但是在寻找合适的解决方案


因此,如果您面临类似的问题,请删除所有配置XML,并将jar仅放在已编译的类文件中。

您可以发布shell调用行,以及在作业中的何处收到此错误消息(在作业提交期间,在映射/减少任务时间时?)谢谢你的回复。jar在我执行命令的位置是可用的。在命令行中有没有不解包的选项?我找不到任何选项。你可以在这里查看RunJar的代码:你可以尝试不在类路径中添加jar。是的..有问题了…配置文件(持久性)在jar文件中也可以使用,因此,当unjar时,它也会在tmp位置创建这些元素的副本,因此,有两个同名的持久化单元,因此会发生冲突