zoukankan      html  css  js  c++  java
  • 报错java.lang.NoSuchFieldError: METASTORE_CLIENT_SOCKET_LIFETIME升级报错Required field 'client_protocol' is unset! 终级解决方案

    一、问题描述

     最近碰到一个令人郁闷的问题,因为客户的CDH版本比较低,hive1.1.0版本,而我们现在使用的spark版本都比较近搞,这样就会造成,如果我使用hive1.1.0版本就会报错:

    java.lang.NoSuchFieldError: METASTORE_CLIENT_SOCKET_LIFETIME

     网上查询之后,原因是高版本的hive-exc1.2.1驱动中有这个字段,但是hive1.1.0版本中没有,二者对不上,建议将hive驱动版本升级到1.1.0;而我将版本升级到hive1.2.1之后,就会报错:

    Required field 'client_protocol' is unset!”

     网上查询之后,说是hive客户端驱动版本和hive服务器版本不一致;需要将驱动版本设置成hive1.1.0,郁闷中...

     二、问题解决

      经同事提醒,这个版本不一致,是否可以CDH平台的版本验证参数关闭,于是乎,讲过查询版本验证参数为:hive.metastore.schema.verification。再查看CDH平台中此参数设置,发现原来默认的false被改成了true;将该参数恢复默认。spark调试通过。

    三、补充一些hive的参数配置

    关于MetaStore:metastore是个独立的关系数据库,用来持久化schema和系统元数据。

    hive.metastore.local:控制hive是否连接一个远程metastore服务器还是开启一个本地客户端jvm,默认是true,Hive0.10已经取消了该配置项;

    javax.jdo.option.ConnectionURL:JDBC连接字符串,默认jdbc:derby:;databaseName=metastore_db;create=true;

    javax.jdo.option.ConnectionDriverName:JDBC的driver,默认org.apache.derby.jdbc.EmbeddedDriver

    javax.jdo.PersisteneManagerFactoryClass:实现JDO PersistenceManagerFactory的类名,默认org.datanucleus.jdo.JDOPersistenceManagerFactory;

    javax.jdo.option.DetachAllOnCommit:事务提交后detach所有提交的对象,默认是true;

    javax.jdo.option.NonTransactionalRead:是否允许非事务的读,默认是true;

    javax.jdo.option.ConnectionUserName:username,默认APP;

    javax.jdo.option.ConnectionPassword:password,默认mine;

    javax.jdo.option.Multithreaded:是否支持并发访问metastore,默认是true;

    datanucleus.connectionPoolingType:使用连接池来访问JDBC metastore,默认是DBCP;

    datanucleus.validateTables:检查是否存在表的schema,默认是false;

    datanucleus.validateColumns:检查是否存在列的schema,默认false;

    datanucleus.validateConstraints:检查是否存在constraint的schema,默认false;

    datanucleus.stroeManagerType:元数据存储类型,默认rdbms;

    datanucleus.autoCreateSchema:在不存在时是否自动创建必要的schema,默认是true;

    datanucleus.aotuStartMechanismMode:如果元数据表不正确,抛出异常,默认是checked;

    datanucleus.transactionIsolation:默认的事务隔离级别,默认是read-committed;

    datanucleus.cache.level2:使用二级缓存,默认是false;

    datanucleus.cache.level2.type:二级缓存的类型,有两种,SOFT:软引用,WEAK:弱引用,默认是SOFT;

    datanucleus.identifierFactory:id工厂生产表和列名的名字,默认是datanucleus;

    datanucleus.plugin.pluginRegistryBundleCheck:当plugin被发现并且重复时的行为,默认是LOG;

    hive.metastroe.warehouse.dir:数据仓库的位置,默认是/user/hive/warehouse;

    hive.metastore.execute.setugi:非安全模式,设置为true会令metastore以客户端的用户和组权限执行DFS操作,默认是false,这个属性需要服务端和客户端同时设置;

    hive.metastore.event.listeners:metastore的事件监听器列表,逗号隔开,默认是空;

    hive.metastore.partition.inherit.table.properties:当新建分区时自动继承的key列表,默认是空;

    hive.metastore.end.function.listeners:metastore函数执行结束时的监听器列表,默认是空;

    hive.metastore.event.expiry.duration:事件表中事件的过期时间,默认是0;

    hive.metastore.event.clean.freq:metastore中清理过期事件的定时器的运行周期,默认是0;

    hive.metastore.connect.retries:创建metastore连接时的重试次数,默认是5;

    hive.metastore.client.connect.retry.delay:客户端在连续的重试连接等待的时间,默认1;

    hive.metastore.client.socket.timeout:客户端socket超时时间,默认20秒;

    hive.metastore.rawstore.impl:原始metastore的存储实现类,默认是org.apache.hadoop.hive.metastore.ObjectStore;

    hive.metastore.batch.retrieve.max:在一个batch获取中,能从metastore里取出的最大记录数,默认是300;

    hive.metastore.ds.connection.url.hook:查找JDO连接url时hook的名字,默认是javax.jdo.option.ConnectionURL;

    hive.metastore.ds.retry.attempts:当出现连接错误时重试连接的次数,默认是1次;

    hive.metastore.ds.retry.interval:metastore重试连接的间隔时间,默认1000毫秒;

    hive.metastore.server.min.threads:在thrift服务池中最小的工作线程数,默认是200;

    hive.metastore.server.max.threads:最大线程数,默认是100000;

    hive.metastore.server.tcp.keepalive:metastore的server是否开启长连接,长连可以预防半连接的积累,默认是true;

    hive.metastore.sasl.enabled:metastore thrift接口的安全策略,开启则用SASL加密接口,客户端必须要用Kerberos机制鉴权,默认是不开启false;

    hive.metastore.kerberos.keytab.file:在开启sasl后kerberos的keytab文件存放路径,默认是空;

    hive.metastore.kerberos.principal:kerberos的principal,_HOST部分会动态替换,默认是hive-metastore/_HOST@EXAMPLE.COM

    hive.metastore.cache.pinobjtypes:在cache中支持的metastore的对象类型,由逗号分隔,默认是Table,StorageDescriptor,SerDeInfo,Partition,Database,Type,FieldSchema,Order;

    hive.metastore.authorization.storage.checks:在做类似drop partition操作时,metastore是否要认证权限,默认是false;

    hive.metastore.schema.verification:强制metastore的schema一致性,开启的话会校验在metastore中存储的信息的版本和hive的jar包中的版本一致性,并且关闭自动schema迁移,用户必须手动的升级hive并且迁移schema,关闭的话只会在版本不一致时给出警告,默认是false不开启;

     
  • 相关阅读:
    SpringBoot页面访问处理
    体验SpringBoot
    体验SpringBoot
    Scala基础
    修改容器配置使其永久生效
    [徐培成系列实战课程]docker篇
    v1.0.2-2017.04.26
    修改容器的hosts文件
    配置spark集群
    配置docker容器上ssh无密登录
  • 原文地址:https://www.cnblogs.com/chhyan-dream/p/13425344.html
Copyright © 2011-2022 走看看