如何将 proto3 与 Hadoop/Spark 结合使用?

2023-11-25

我有几个依赖于的 .proto 文件syntax = "proto3";。我还有一个 Maven 项目,用于构建 Hadoop/Spark 作业(Hadoop 2.7.1 和 Spark 1.5.2)。我想在 Hadoop/Spark 中生成数据,然后根据我的 proto3 文件对其进行序列化。

使用 libprotoc 3.0.0,我生成了 Java 源代码,只要我的 pom.xml 中有以下内容,这些源代码就可以在我的 Maven 项目中正常工作:

<dependency>
  <groupId>com.google.protobuf</groupId>
  <artifactId>protobuf-java</artifactId>
  <version>3.0.0-beta-1</version>
</dependency>  

现在,当我在部署到集群的作业中使用 libprotoc 生成的类时,我会遇到以下问题:

java.lang.VerifyError : class blah overrides final method mergeUnknownFields.(Lcom/google/protobuf/UnknownFieldSet;)Lcom/google/protobuf/GeneratedMessage$Builder;
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)

鉴于 Hadoop/Spark 依赖于与我的 3.0.0-beta-1 不兼容的 protobuf-java 2.5.0,类加载器失败似乎是合理的。我还注意到 protobufs(大概版本

$ jar tf target/myjar-0.1-SNAPSHOT.jar | grep protobuf | grep '/$'
org/apache/hadoop/ipc/protobuf/
org/jboss/netty/handler/codec/protobuf/
META-INF/maven/com.google.protobuf/
META-INF/maven/com.google.protobuf/protobuf-java/
org/apache/mesos/protobuf/
io/netty/handler/codec/protobuf/
com/google/protobuf/
google/protobuf/

我可以做些什么(Maven Shade?)来解决这个问题吗?

类似的问题在这里:Spark java.lang.VerifyError


事实证明,这种事情记录在这里:https://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html

只需要重新定位原始缓冲区,VerifyError 就会消失:

          <relocations>
            <relocation>
              <pattern>com.google.protobuf</pattern>
              <shadedPattern>shaded.com.google.protobuf</shadedPattern>
            </relocation>
          </relocations>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 proto3 与 Hadoop/Spark 结合使用? 的相关文章

随机推荐

  • Java 机械化

    我想知道 Java 是否有类似 Perl Python 的机制 Thanks 看一眼HtmlUnit 和Perl的很相似WWW 机械化 它还有一个 Perl 版本 名为WWW HtmlUnit 它用内联 Java将 Java 库方法公开给
  • 比较包含 NaN 的 numpy 数组

    对于我的单元测试 我想检查两个数组是否相同 简化示例 a np array 1 2 np NaN b np array 1 2 np NaN if np all a b print arrays are equal 这不起作用 因为nan
  • 在请求规范中存根身份验证

    在编写请求规范时 如何设置会话和 或存根控制器方法 我正在尝试在集成测试中消除身份验证 rspec requests 这是一个测试示例 require File dirname FILE spec helper require File d
  • XPath :选择所有后续兄弟姐妹,直到另一个兄弟姐妹

    这是我的 xml 的摘录
  • 内部类是轻量级的吗?

    是内部类比普通类更轻量级 还是说最终java编译内部类就像普通类一样 我知道java中的类本身并不都是非常轻量级的 并且它们占用了permgen内存的一部分 所以我想知道是否最好使用类似闭包的函数作为内部类 或者标准类是否也可以 内部类和匿
  • Xampp:网络浏览器不会显示本地主机页面

    我已经在 Windows7 64 位 上安装了 xampp 我想使用 PHP Apache 和 MySql Xampp控制面板上Apache服务器和MySql服务运行正常 但是当我在网络浏览器上运行本地主机时 它只显示连接 没有其他的 与以
  • 使用 Altair 制作仪表板

    我想使用优秀的 Altair 库来创建仪表板 有没有办法创建仪表板而不显示任何代码 我在这里看到一些非常好的例子 https altair viz github io case studies exploring weather html但
  • 如何在android中的两个或多个应用程序之间安全地共享数据?

    我正在为企业环境制作一个应用程序框架 其中涉及两个或多个应用程序之间共享设备内存中的数据 该数据需要存储在设备上并且仅少数应用程序可以访问 可以通过用于安装它们的证书来识别 另外 它需要存储在secure方式 以便其他第三方应用程序无法访问
  • 命名空间与类声明

    我是 C 新手 我似乎找不到任何相关信息 所以我会在这里询问 命名空间中的类是否必须声明 using System public class myprogram void main The console class does not ha
  • 如何在 Unix 中的文件每行末尾添加 100 个空格

    我有一个文件 每行应包含 200 个字符 我收到一个每行只有 100 个字符的源文件 我现在需要为每行添加 100 个额外的空格 如果空格很少 我们可以使用 sed 如下所示 sed s filename gt newfilename 既然
  • java.lang.NullPointerException(无错误消息)

    我知道我的这个问题已经被问过很多次了 我确实遵循了大部分答案 但这些答案都没有帮助我 所以这是我的问题 每当我同步我的项目时它总是失败 Gradle 控制台如下所示 执行任务 app generateDebugSources app gen
  • Python列表的滑动窗口[重复]

    这个问题在这里已经有答案了 有没有一种有效或优雅的方法来检索Python中列表的所有k大小子列表 例如 arr 2 3 5 7 11 13 我想要所有 3 元素子列表 result 2 3 5 3 5 7 5 7 11 7 11 13 我知
  • 每次循环访问 Handlebars.js 范围之外的变量

    我有一个handlebars js 模板 就像这样 externalValue
  • 为什么在 Gmail API 中搜索返回的结果与在 Gmail 网站中搜索的结果不同?

    我正在使用 gmail API 搜索用户的电子邮件 我创建了以下搜索查询 ticket after 2015 11 04 AND from me AND in trash 当我在 Gmail 的浏览器界面中运行此查询时 我收到 11 条消息
  • 无法让factory_girl在rails 3.0.5下运行,意外的tCONSTANT

    这是我的 Gemfile 配置 group development test do gem rspec rails gem factory girl gt 2 0 0 beta1 gem factory girl rails git gt
  • 在字符串末尾使用 JavaScript 的 parseInt

    我知道 parseInt myString 10 Never forget the radix 如果字符串中的第一个字符是数字 将返回一个数字 但是如果我有一个像 column5 这样的字符串并且想要将其增加到下一个 column6 我该如
  • C 中宏参数的类型检查

    是否可以对 define 宏的参数进行类型检查 例如 typedef enum REG16 A REG16 B REG16 C REG16 define read 16 reg16 read register 16u reg16 asser
  • 如何使用 Durandal 导航下拉菜单?

    我刚刚开始与 Durandal 合作 所有部分都已就位 并且正在使用热毛巾模板来加快速度 让我困惑的一件事是如何创建比按钮组更复杂的分层导航系统 这就是我想要的结果 ABCA1 B1 C1A2 B2 C2 A B 和 C 是顶级菜单 没有附
  • 提取字符串中的链接并返回对象数组

    我从服务器收到一个字符串 该字符串包含文本和链接 主要以 http https 和 www 开头 很少有不同 但如果不同也没关系 Example 简单文本 简单文本 简单文本 domain ext subdir 再次文本 文本 youban
  • 如何将 proto3 与 Hadoop/Spark 结合使用?

    我有几个依赖于的 proto 文件syntax proto3 我还有一个 Maven 项目 用于构建 Hadoop Spark 作业 Hadoop 2 7 1 和 Spark 1 5 2 我想在 Hadoop Spark 中生成数据 然后根