- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们有一个 Scalding 作业,我想使用版本标签 4.2.0 在 AWS Elastic MapReduce 上运行它。
此作业在 AMI 2.4.2 上成功运行。当我们将它升级到 AMI 3.7.0 时,我们遇到了由不兼容的 jar 引起的 java.lang.VerifyError
。我们的项目使用 1.5 版的 commons-codec 库,但早期的不兼容版本随 AMI 一起提供。同样,我们的项目使用 Scala 2.10,但 AMI 附带 2.11 版。我们通过添加引导脚本来删除所有匹配 commons-codec-1.[234].jar
或 scala-library-2.11.*.jar
的文件来解决这个问题集群。
现在我们又要升级到 4.2.0,再次得到一个 VerifyError:
```Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at com.twitter.scalding.Job$.apply(Job.scala:47) at com.twitter.scalding.Tool.getJob(Tool.scala:48) at com.twitter.scalding.Tool.run(Tool.scala:68) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) at com.snowplowanalytics.snowplow.enrich.hadoop.JobRunner$.main(JobRunner.scala:33) at com.snowplowanalytics.snowplow.enrich.hadoop.JobRunner.main(JobRunner.scala) 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.hadoop.util.RunJar.run(RunJar.java:221) at org.apache.hadoop.util.RunJar.main(RunJar.java:136)Caused by: java.lang.VerifyError: Bad type on operand stackException Details: Location: com/snowplowanalytics/snowplow/enrich/common/utils/ConversionUtils$.decodeBase64Url(Ljava/lang/String;Ljava/lang/String;)Lscalaz/Validation; @5: invokevirtual Reason: Type 'org/apache/commons/codec/binary/Base64' (current frame, stack[0]) is not assignable to 'org/apache/commons/codec/binary/BaseNCodec' Current Frame: bci: @5 flags: { } locals: { 'com/snowplowanalytics/snowplow/enrich/common/utils/ConversionUtils$', 'java/lang/String', 'java/lang/String' } stack: { 'org/apache/commons/codec/binary/Base64', 'java/lang/String' } Bytecode: 0000000: 2ab7 008a 2cb6 0090 3a04 bb00 5459 1904 0000010: b200 96b7 0099 3a05 b200 9e19 05b9 00a4 0000020: 0200 b900 aa01 00a7 003e 4eb2 009e bb00 0000030: ac59 b200 4112 aeb6 00b1 b700 b4b2 0041 0000040: 06bd 0004 5903 2b53 5904 2c53 5905 2db6 0000050: 00b9 53b6 00bf b900 c502 00b9 00a4 0200 0000060: b900 c801 00b0 Exception Handler Table: bci [0, 42] => handler: 42 Stackmap Table: same_locals_1_stack_item_frame(@42,Object[#182]) same_locals_1_stack_item_frame(@101,Object[#206]) at com.snowplowanalytics.snowplow.enrich.hadoop.EtlJobConfig$.com$snowplowanalytics$snowplow$enrich$hadoop$EtlJobConfig$$base64ToJsonNode(EtlJobConfig.scala:224) at com.snowplowanalytics.snowplow.enrich.hadoop.EtlJobConfig$.loadConfigAndFilesToCache(EtlJobConfig.scala:126) at com.snowplowanalytics.snowplow.enrich.hadoop.EtlJob.(EtlJob.scala:139) ... 16 more```
Exploring which jars remain on the cluster following the purge:
$ sudo find / -name "*scala-*"
/usr/share/aws/emr/emrfs/cli/lib/scala-library-2.10.5.jar
/usr/share/aws/emr/emrfs/cli/lib/scala-reflect-2.10.4.jar
/usr/share/aws/emr/emrfs/cli/lib/scala-logging-api_2.10-2.1.2.jar
/usr/share/aws/emr/emrfs/cli/lib/nscala-time_2.10-1.2.0.jar
/usr/share/aws/emr/emrfs/cli/lib/scala-logging-slf4j_2.10-2.1.2.jar
$ sudo find / -name "*commons-codec*"
/usr/share/aws/emr/node-provisioner/lib/commons-codec-1.9.jar
/usr/share/aws/emr/emr-metrics/lib/commons-codec-1.6.jar
/usr/share/aws/emr/emr-metrics-client/lib/commons-codec-1.6.jar
/usr/share/aws/emr/emrfs/lib/commons-codec-1.9.jar
/usr/share/aws/emr/hadoop-state-pusher/lib/commons-codec-1.8.jar
/usr/lib/hbase/lib/commons-codec-1.7.jar
/usr/lib/mahout/lib/commons-codec-1.7.jar
AMI 4.1.0 也会出现同样的错误。导致此问题的 3.7.0 和 4.x.x 之间发生了什么变化,我该如何解决?
最佳答案
最后我在引导步骤中添加了以下逻辑:
wget 'http://central.maven.org/maven2/commons-codec/commons-codec/1.5/commons-codec-1.5.jar'
sudo mkdir -p /usr/lib/hadoop/lib
sudo cp commons-codec-1.5.jar /usr/lib/hadoop/lib/remedial-commons-codec-1.5.jar
rm commons-codec-1.5.jar
这将从 Maven 下载正确版本的 jar,并将其放在失败作业步骤的类路径的开头,它优先于其他版本的 jar。
是否有更清洁的解决方案?
关于java - EMR 版本 4.2.0 上的 Scalding 作业因 VerifyError 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33870107/
当我确定源数据在 S3 中并且处理的结果将存储在 S3 中时,是否可以使用主节点和一组任务(从属)节点(没有核心节点)构建 AWS EMR。 基本上,问题是“当 EMR 将在 S3 中处理数据时,需要
我正在使用 aws .net sdk 向 EMR 运行 s3distcp 作业,以使用 --groupBy arg 连接文件夹中的所有文件。但是无论我尝试过什么“groupBy”arg,它总是失败,或
我刚刚建立了一个内置 Spark、JupyterHub 等的 EMR 集群。我可以通过 http://master_hostname:9443/hub/login 访问 Jupyter Noteboo
我正在 S3 上运行一个超过 500 个文档的示例 hadoop 作业,在本地运行时需要 <15 分钟才能完成。然而,当我尝试在 EMR 上运行相同的作业时,需要两个多小时,但仍然没有完成缩减步骤,因
是否可以将 Presto 解释器添加到 AWS EMR 4.3 上的 Zeppelin,如果可以,有人可以发布说明吗?我在 EMR 上运行 Presto-Sandbox 和 Zeppelin-Sand
AWS Stepfunctions 最近添加了 EMR 集成,这很酷,但我找不到将变量从步骤函数传递到 addstep 参数的方法。例如,我想将“$.dayid”变量传递给“Parameters”>“
例如,我有两个Hive作业,其中一个作业的输出用作第二个作业的参数/变量。我可以在终端上成功运行以下命令,以在EMR集群的主节点上获得结果。 [hadoop@ip-10-6-131-223 ~]$ h
我有一个非常初学者的问题。我刚刚阅读了一些有关 Amazon EMR 的文档。在我注册之前,我只是想询问一下如何在其中使用 R。 我有一个 R 模块,它调用其他几个模块,然后,在它完成运行之前,将几个
我在从运行 Spark 的 AWS EMR 集群连接到另一个运行 presto 的 AWS EMR 集群时遇到问题。 用 python 编写的代码是: jdbcDF = spark.read \
我正在努力解决这个问题,但无法弄清楚为什么 我有一个要部署在 AWS 私有(private)子网中的 EMR 集群。 我检查了文档 here . 根据以上内容,我明白了以下几点: 一个。对于我的 EM
我有一个 EMR 集群 response = emr_client.run_job_flow( Name="Test dashboards", ReleaseLabel='emr-6.
我在使用 hadoop 时使用了 MultipleInputs 。因为我有多个映射器分配给不同的输入。我想知道 EMR 是否也支持它。 在hadoop中我是这样操作的。这些是我的不同文件的映射器。在这
我是 PySpark 和 EMR 的新手。 我试图通过 Jupyter notebook 访问在 EMR 集群上运行的 Spark,但遇到了错误。 我正在使用以下代码生成 SparkSession:
我正在尝试将我的 Glue 目录连接到 EMR 中的 Presto 和 Hive。在 presto-cli 中运行查询时,我收到 NullPointerException 而相同的查询在 hive-c
我正在使用 MRJob 在 Amazon 的 EMR 上运行一个迭代的 hadoop 程序。 当我不使用“--pool-emr-job-flows”选项时,一切正常(但速度很慢)。当我使用这个选项时,
我有一个 DynamoDB 表,我需要连接到 EMR Spark SQL 以在该表上运行查询。我得到了带有发布标签 emr-4.6.0 和 Spark 1.6.1 的 EMR Spark Cluste
我的团队在 AWS 中工作,我们有 python 脚本,可以将文件从 S3 存储桶移动到 EC2 实例。我想用我们正在使用的脚本作为序言,它在直接从 ec2 实例运行时有效,并且仅在作为 EMR 步骤
我有 Airflow 作业,它们在 EMR 集群上运行良好。我需要的是,假设我有 4 个 Airflow 作业需要 EMR 集群,假设 20 分钟才能完成任务。为什么我们不能在 DAG 运行时创建一个
我正在 AWS 中创建一个数据管道来运行 Pig 任务。但是我的 Pig 任务需要 EMR 中的附加文件。在创建集群之后和运行 pig tasked 之前,我如何告诉 Data Pipeline 将文
如何在 EMR 上设置 Spark Thrift 服务器?我正在尝试使用 Spark Thrift 服务器与 EMR 建立 JDBC/ODBC 连接。例如 直线> !connect jdbc:hive
我是一名优秀的程序员,十分优秀!