Hive 1.2 Metastore 服务在配置为 S3 存储而不是 HDFS 后无法启动

2023-12-02

我有一个处于独立模式的 Apache Spark Cluster(2.2.0)。到目前为止,我们正在使用 HDFS 来存储 parquet 文件。我正在使用 Apache Hive 1.2 的 Hive Metastore 服务通过 Thriftserver 通过 JDBC 访问 Spark。

现在我想使用S3对象存储而不是HDFS。我已将以下配置添加到 hive-site.xml 中:

<property>
  <name>fs.s3a.access.key</name>
  <value>access_key</value>
  <description>Profitbricks Access Key</description>
</property>
<property>
  <name>fs.s3a.secret.key</name>
  <value>secret_key</value>
  <description>Profitbricks Secret Key</description>
</property>
<property>
  <name>fs.s3a.endpoint</name>
  <value>s3-de-central.profitbricks.com</value>
  <description>ProfitBricks S3 Object Storage Endpoint</description>
</property>
<property>
  <name>fs.s3a.endpoint.http.port</name>
  <value>80</value>
  <description>ProfitBricks S3 Object Storage Endpoint HTTP Port</description>
</property>
<property>
  <name>fs.s3a.endpoint.https.port</name>
  <value>443</value>
  <description>ProfitBricks S3 Object Storage Endpoint HTTPS Port</description>
</property>
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>s3a://dev.spark.my_bucket/parquet/</value>
  <description>Profitbricks S3 Object Storage Hive Warehouse Location</description>
</property>

我的 hive 元存储位于 MySQL 5.7 数据库中。我已将以下 jar 文件添加到 Hive lib 文件夹中:

  • aws-java-sdk-1.7.4.jar
  • hadoop-aws-2.7.3.jar

我删除了 MySQL 上旧的 hive 元存储架构,然后使用以下命令启动元存储服务:hive --service metastore &我收到以下错误:

java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
        at com.amazonaws.util.json.Jackson.<clinit>(Jackson.java:27)
        at com.amazonaws.internal.config.InternalConfig.loadfrom(InternalConfig.java:182)
        at com.amazonaws.internal.config.InternalConfig.load(InternalConfig.java:199)
        at com.amazonaws.internal.config.InternalConfig$Factory.<clinit>(InternalConfig.java:232)
        at com.amazonaws.ServiceNameFactory.getServiceName(ServiceNameFactory.java:34)
        at com.amazonaws.AmazonWebServiceClient.computeServiceName(AmazonWebServiceClient.java:703)
        at com.amazonaws.AmazonWebServiceClient.getServiceNameIntern(AmazonWebServiceClient.java:676)
        at com.amazonaws.AmazonWebServiceClient.computeSignerByURI(AmazonWebServiceClient.java:278)
        at com.amazonaws.AmazonWebServiceClient.setEndpoint(AmazonWebServiceClient.java:160)
        at com.amazonaws.services.s3.AmazonS3Client.setEndpoint(AmazonS3Client.java:475)
        at com.amazonaws.services.s3.AmazonS3Client.init(AmazonS3Client.java:447)
        at com.amazonaws.services.s3.AmazonS3Client.<init>(AmazonS3Client.java:391)
        at com.amazonaws.services.s3.AmazonS3Client.<init>(AmazonS3Client.java:371)
        at org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:235)
        at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2811)
        at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:100)
        at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2848)
        at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2830)
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:389)
        at org.apache.hadoop.fs.Path.getFileSystem(Path.java:356)
        at org.apache.hadoop.hive.metastore.Warehouse.getFs(Warehouse.java:104)
        at org.apache.hadoop.hive.metastore.Warehouse.getDnsPath(Warehouse.java:140)
        at org.apache.hadoop.hive.metastore.Warehouse.getDnsPath(Warehouse.java:146)
        at org.apache.hadoop.hive.metastore.Warehouse.getWhRoot(Warehouse.java:159)
        at org.apache.hadoop.hive.metastore.Warehouse.getDefaultDatabasePath(Warehouse.java:177)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB_core(HiveMetaStore.java:601)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.java:620)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:461)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:66)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:72)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:5762)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:5757)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.startMetaStore(HiveMetaStore.java:5990)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.main(HiveMetaStore.java:5915)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:234)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:148)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

缺少的类属于 Jackson 库,然后我复制了位于我的 Spark-2.2.0-bin-hadoop2.7/jars/ 文件夹中的 Jackson-*.jar,其中:

  • Jackson-annotations-2.6.5.jar
  • 杰克逊核心-2.6.5.jar
  • jackson-core-asl-1.9.13.jar
  • 杰克逊-databind-2.6.5.jar
  • 杰克逊-jaxrs-1.9.13.jar
  • 杰克逊-mapper-asl-1.9.13.jar
  • 杰克逊模块参数-2.6.5.jar
  • 杰克逊模块-scala_2.11-2.6.5.jar
  • 杰克逊-xc-1.9.13.jar

但后来我收到以下错误:

2018-01-05 17:51:00,819 ERROR [main]: metastore.HiveMetaStore (HiveMetaStore.java:main(5920)) - Metastore Thrift Server threw an exception...
java.lang.NumberFormatException: For input string: "100M"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        at java.lang.Long.parseLong(Long.java:589)
        at java.lang.Long.parseLong(Long.java:631)
        at org.apache.hadoop.conf.Configuration.getLong(Configuration.java:1319)
        at org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:248)
        at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2811)
        at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:100)
        at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2848)
        at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2830)
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:389)
        at org.apache.hadoop.fs.Path.getFileSystem(Path.java:356)
        at org.apache.hadoop.hive.metastore.Warehouse.getFs(Warehouse.java:104)
        at org.apache.hadoop.hive.metastore.Warehouse.getDnsPath(Warehouse.java:140)
        at org.apache.hadoop.hive.metastore.Warehouse.getDnsPath(Warehouse.java:146)
        at org.apache.hadoop.hive.metastore.Warehouse.getWhRoot(Warehouse.java:159)
        at org.apache.hadoop.hive.metastore.Warehouse.getDefaultDatabasePath(Warehouse.java:177)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB_core(HiveMetaStore.java:601)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.java:620)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:461)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:66)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:72)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:5762)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:5757)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.startMetaStore(HiveMetaStore.java:5990)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.main(HiveMetaStore.java:5915)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:234)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:148)

我认为这里的错误与某些 jar 版本不兼容有关,但我无法找到正确的版本。

有人可以帮我吗?


  1. 您绝对不能混合 Hadoop-common、hadoop-aws、aws-s3-sdk 和 jackson 版本,否则您将看到堆栈跟踪。
  2. 而且它是全开源的,因此如果您在本地 D/L 所有源 JAR,您的 IDE 将帮助您找到导致堆栈跟踪的原因。这就是我们大家所做的。这并不神奇,现代 IDE(intellij IDEA)甚至具有特殊的堆栈调试功能。

这个的出现是因为它的价值fs.s3a.multipart.size在hadoop-common中设置/core-default.xml资源为100M,其中包含HADOOP-13680范围解析处理数字如“100M”而不是 104857600 。该堆栈跟踪显示“Hadoop 2.8+ 配置”

您可以尝试将配置中的属性设置为该数值,但这是一个警告信号,表明 JAR 的版本不同步,并且您可能只会在其他内容中断之前再获取几行。

修复:确保hadoop-common.jar and hadoop-aws.jar是同步的。看起来你已经把 jackson 和 aws 排好了队,尽管 jackson 足够复杂,你永远不能认为这是理所当然的。

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

Hive 1.2 Metastore 服务在配置为 S3 存储而不是 HDFS 后无法启动 的相关文章

随机推荐

  • 如何保存所有通过 javascript 添加的内联表单?

    我在保存内联表单时遇到问题 它确实保存默认表单 但每当我添加新的内联表单时 它都不会保存 我缺少什么 谁能告诉我错误吗 谢谢 模型 py class Student models Model name models CharField ma
  • 如何在 Java 中使用 HttpSession 跟踪登录尝试?

    我有一个无框架的网络应用程序 我需要实现一种简单的方法来使用会话检查不成功的登录 如果用户尝试使用不正确的用户名 密码组合登录 3 次 他们将有 20 分钟的超时时间 然后才能再次尝试登录 目前我仅在用户成功登录系统时设置用户会话 但是 似
  • 在 GO 中捕获重复组

    我正在尝试创建一个可以解析由大写单词后跟零个或多个封装在双引号中的参数组成的字符串的函数 例如 以下每一行 COPY filename one filename two REMOVE filename LIST x y z DISCONNE
  • 升级到 Grails 1.3.3 后,Grails 依赖注入不再起作用

    项目设置是Flex 3 BlazeDS Spring Flex Integration Grails 当从我的 Flex 客户端调用服务方法时 我的服务类中的依赖注入在 Grails 1 2 1 中工作得很好 当我昨天使用常规的 grail
  • 使用 jQuery 将表行从一个表复制到另一个表

    当选中该行中的复选框时 我需要能够使用 jQuery 将一行从一个表复制到另一个表 我尝试使用 clone 方法但这有非常奇怪的行为 尽管 jQuery 专门针对第二个表中的行 但当复制到第一个表时 它仍然可以成为目标 所以要么clone
  • 为什么临时借用是合法的?

    来自 C 我很惊讶这段代码在 Rust 中是有效的 let x mut String new x push str Hello 在 C 中 您无法获取临时值的地址 并且临时值的寿命不会比它出现的表达式的寿命长 临时在 Rust 中存在多久
  • 从arm汇编函数返回浮点到objective-c

    我编写了一个汇编函数 它可以在 iPhone 4 32 位代码 和 iPhone 6s 64 位代码 上正常运行 我从 Objective C 中的调用函数传入四个浮点数 这是我用于 4 个浮点数的结构 下面是该函数的原型 正如我的 Obj
  • 如何手动下载/降级 Android 模拟器

    我上周更新了 Android Studio 及其组件 但我一直面临模拟器的麻烦 更新之前一切都很好 现在我只想拿回我的旧模拟器 搜索后我发现了这个答案here 手动下载的链接就像http dl google com android repo
  • 对 epp 模板使用 puppet hash

    我在 erb 模板中有下一个代码 proxy cache path keys zone levels max size inactive 如何将其移植为 epp 模板 我发现这方面的信息很少 请帮忙 您可以按照以下方法执行此操作 显示
  • 使用短代码在任何地方显示 WooCommerce 优惠券输入字段

    我有一个小项目 需要将 Woocommerce 优惠券字段插入任何页面 但这对我来说似乎很复杂 我在谷歌上搜索了这方面的内容 但没有任何关于这方面的资源 找到了有关插入字段的代码 将以下代码插入到文本块中 div class redeem
  • 使用 jquery post 将字典数据传递给控制器​​字符串方法

    我的 Jquery 代码如下 btnExec live click function var data1 lorem ipsum var data2 lorem ipsum var data3 lorem ipsum var dict ne
  • 在 C# 中合并两个 xml 文件,不添加也不删除任何内容(给出的示例)

    假设我有一个如下所示的 xml 文件
  • PHP DOM 和单引号

    有没有办法告诉 DOMDocument 对属性使用单引号而不是双引号 不 DOMDocument 是一个面向数据的 XML 访问 API 它可以按照自己的意愿序列化文档 没有 gt save 标志http www php net manua
  • 在可移动设备/可移动存储上使用FolderBrowserDialog

    我正在开发一个简单的复制工具来从数码相机复制文件 我已经编写了文件复制代码 一切都连接良好 我遇到的问题似乎与FolderBrowserDialog 有关 在Vista中 我还没有检查XP 我可以浏览到相机上的目录 但是 FolderBro
  • 使用 JPA 或数据库内部进行级联删除/更新?

    性能是关键 是在数据库内部级联删除 更新更好还是让 Hibernate JPA 来处理它更好 如果级联位于 DBMS 内部 这会影响查询数据的能力吗 如果这很重要的话 我正在使用 HSQLDB 在级联更新的情况下 如果数据库中有外键约束 则
  • 我可以从 dacpac 生成部署脚本吗

    我有一个 dacpac 文件 该文件由 MSBuild 调用并发布到 QA 数据库以进行测试 此发布失败 我从他们那里得到的错误是一条通用的 发生错误 消息 我希望能够从 dacpac 生成部署脚本并浏览它以查看问题发生的位置 并希望教他们
  • 在 Visual Studio 中启用 SSL - 不提示安装证书

    我正在尝试按照这篇文章中的说明进行操作 http www codeproject com Tips 766918 Visual Studio Use HTTPS SSL On Web Application Pro 系统没有提示我消息 您想
  • JavaScript 日期比较不等于[重复]

    这个问题在这里已经有答案了 我尝试寻找有类似问题的人 但没有找到任何东西 我在 JavaScript 中有两个日期 都设置为相同的值 相等测试在 上失败 但 gt 和 下面是我正在使用的代码 var startDate new Date 2
  • 安全性:有没有办法使用对 char[] 的直接引用而不是字符串?

    前言 这可能是一个巨大的菜鸟错误 我团队中的所有开发人员都对 Java 101 有点模糊 所以如果我们不担心任何事情 请告诉我 具体来说 担心在 permgen 中缓存的字符串文字 我们有一个简单的登录页面 基本上如下所示 支持 Bean
  • Hive 1.2 Metastore 服务在配置为 S3 存储而不是 HDFS 后无法启动

    我有一个处于独立模式的 Apache Spark Cluster 2 2 0 到目前为止 我们正在使用 HDFS 来存储 parquet 文件 我正在使用 Apache Hive 1 2 的 Hive Metastore 服务通过 Thri