在 Oozie 中编辑 YARN 的类路径
Edit YARN's classpath in Oozie
我正在尝试通过 Oozie 运行 一个 hadoop 作业。该作业将数据上传到 AWS 中的 DynamoDB。因此,我使用 AmazonDynamoDBClient
。我在减速器中得到以下异常:
2016-06-14 10:30:52,997 FATAL [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z
at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:458)
at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:379)
at com.amazonaws.util.json.Jackson.<clinit>(Jackson.java:32)
at com.amazonaws.internal.config.InternalConfig.loadfrom(InternalConfig.java:233)
at com.amazonaws.internal.config.InternalConfig.load(InternalConfig.java:251)
at com.amazonaws.internal.config.InternalConfig$Factory.<clinit>(InternalConfig.java:308)
at com.amazonaws.util.VersionInfoUtils.userAgent(VersionInfoUtils.java:139)
at com.amazonaws.util.VersionInfoUtils.initializeUserAgent(VersionInfoUtils.java:134)
at com.amazonaws.util.VersionInfoUtils.getUserAgent(VersionInfoUtils.java:95)
at com.amazonaws.ClientConfiguration.<clinit>(ClientConfiguration.java:42)
at com.amazonaws.PredefinedClientConfigurations.dynamoDefault(PredefinedClientConfigurations.java:38)
at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.<init>(AmazonDynamoDBClient.java:292)
at com.mypackage.UploadDataToDynamoDBMR$DataUploaderReducer.setup(UploadDataToDynamoDBMR.java:396)
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:168)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:627)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:389)
at org.apache.hadoop.mapred.YarnChild.run(YarnChild.java:163)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
我使用了一个 fat jar,它打包了所有依赖项并将 jar 复制到 Oozie 的 lib
目录。
我还在 pom 中使用依赖管理来更快地将 xml jackson 依赖固定到 2.4.1(由 AWS dynamodb SDK 使用)。然而,当执行发生在 reducer 上时,某种其他版本的 fasterxml jackson 首先出现在类路径中(我相信是这样)。
我还从 dynamodb 和 aws sdks 中排除了对 jackson 的依赖。
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-dynamodb</artifactId>
<version>1.10.11</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>1.10.11</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
如何确保我的 jar 是映射器和缩减器类路径中的第一个?我尝试了关于 this page 的建议,并将以下 属性 添加到作业的配置 xml:
<property>
<name>oozie.launcher.mapreduce.user.classpath.first</name>
<value>true</value>
</property>
但这并没有帮助。
有什么建议吗?
您是否已将 jar 复制到 lib 旁边的 lib 文件夹中 workflow.xml 或复制到 sharelib 中?
检查您的 Hadoop 发行版使用的 Jackson 版本,并尝试在所有地方使用该版本的 Jackson。此外,可能值得检查类路径上是否没有其他 Jackson 罐子。
从异常看来,Hadoop 试图调用一个方法:
com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering
这个方法是在 Jackson version 2.3 中引入的,所以可能某个地方有更旧版本的 Jackson。
我正在尝试通过 Oozie 运行 一个 hadoop 作业。该作业将数据上传到 AWS 中的 DynamoDB。因此,我使用 AmazonDynamoDBClient
。我在减速器中得到以下异常:
2016-06-14 10:30:52,997 FATAL [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z
at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:458)
at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:379)
at com.amazonaws.util.json.Jackson.<clinit>(Jackson.java:32)
at com.amazonaws.internal.config.InternalConfig.loadfrom(InternalConfig.java:233)
at com.amazonaws.internal.config.InternalConfig.load(InternalConfig.java:251)
at com.amazonaws.internal.config.InternalConfig$Factory.<clinit>(InternalConfig.java:308)
at com.amazonaws.util.VersionInfoUtils.userAgent(VersionInfoUtils.java:139)
at com.amazonaws.util.VersionInfoUtils.initializeUserAgent(VersionInfoUtils.java:134)
at com.amazonaws.util.VersionInfoUtils.getUserAgent(VersionInfoUtils.java:95)
at com.amazonaws.ClientConfiguration.<clinit>(ClientConfiguration.java:42)
at com.amazonaws.PredefinedClientConfigurations.dynamoDefault(PredefinedClientConfigurations.java:38)
at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.<init>(AmazonDynamoDBClient.java:292)
at com.mypackage.UploadDataToDynamoDBMR$DataUploaderReducer.setup(UploadDataToDynamoDBMR.java:396)
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:168)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:627)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:389)
at org.apache.hadoop.mapred.YarnChild.run(YarnChild.java:163)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
我使用了一个 fat jar,它打包了所有依赖项并将 jar 复制到 Oozie 的 lib
目录。
我还在 pom 中使用依赖管理来更快地将 xml jackson 依赖固定到 2.4.1(由 AWS dynamodb SDK 使用)。然而,当执行发生在 reducer 上时,某种其他版本的 fasterxml jackson 首先出现在类路径中(我相信是这样)。
我还从 dynamodb 和 aws sdks 中排除了对 jackson 的依赖。
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-dynamodb</artifactId>
<version>1.10.11</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>1.10.11</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
如何确保我的 jar 是映射器和缩减器类路径中的第一个?我尝试了关于 this page 的建议,并将以下 属性 添加到作业的配置 xml:
<property>
<name>oozie.launcher.mapreduce.user.classpath.first</name>
<value>true</value>
</property>
但这并没有帮助。
有什么建议吗?
您是否已将 jar 复制到 lib 旁边的 lib 文件夹中 workflow.xml 或复制到 sharelib 中?
检查您的 Hadoop 发行版使用的 Jackson 版本,并尝试在所有地方使用该版本的 Jackson。此外,可能值得检查类路径上是否没有其他 Jackson 罐子。 从异常看来,Hadoop 试图调用一个方法:
com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering
这个方法是在 Jackson version 2.3 中引入的,所以可能某个地方有更旧版本的 Jackson。