记一次大数据工程上云问题汇总以及系统排查问题思路(Error loading PartitionExpressionProxy)

工程环境概述

java 8 ;maven;jfinal 3.3;hive 1.1.0-cdh5.4.1;

由于系统上云,需要在新的环境中重新部署。系统的功能是获取hive元数据,对元数据进行分析和生命周期管理等功能。框架采用JFinal和Cron4jPlugin插件实现任务定时调度。

 

部署工程中出现的问题

在部署的过程中主要存在两方面的问题,一方面是代码需要重新更新到最新的配置,例如一些ip更新,端口更新,还有代码需要和现在线上的hiveserver2版本相适应;另一方面是服务器环境的问题,此项目特殊之处在于需要hadoop角色进行启动,用此用户来访问hive。

 

代码问题

问题一:

hive配置文件在原代码中是使用localhost:8080方式来访问服务中的文件,但是这样需要修改tomcat的配置,使系统本身能通过接口访问tomcat中的配置文件。但是通过修改tomcat server.xml 中的Host配置节点,并没有解决这个问题。

原代码:

		HiveConf.setHiveSiteLocation(new URL(hiveClientUrl));
    	HiveConf.setHiveSiteLocation(new URL("http://localhost:8080/hive-site/hive-site.xml"));

我们通过固定的文件存放路径,代替接口访问方式。

示例代码:

		String confDir = "/opt/tomcat7/data/conf/hive-site-cloudprod-dp.xml";
		URL url = new File(confDir).toURI().toURL();
		HiveConf.setHiveSiteLocation(url);
		logger.info("hiveClientUrl-------3:" + url);
    	HiveConf conf = new HiveConf();
		client = new HiveMetaStoreClient(conf);

问题二:hive获取client失败,报Error loading PartitionExpressionProxy 错误,org.apache.hadoop.hive.ql.optimizer.ppr.PartitionExpressionForMetastore class not found。通过升级jar版本并没有解决这个问题。故从类上入手,加入hive.ql路径所在的hive-exec jar包,解决这个问题。

报错日志:

17:22:08.562 [Thread-4] ERROR org.apache.hadoop.hive.metastore.RetryingHMSHandler - java.lang.RuntimeException: Error loading PartitionExpressionProxy: org.apache.hadoop.hive.ql.optimizer.ppr.PartitionExpressionForMetastore class not found
        at org.apache.hadoop.hive.metastore.ObjectStore.createExpressionProxy(ObjectStore.java:432)
        at org.apache.hadoop.hive.metastore.ObjectStore.initializeHelper(ObjectStore.java:406)
        at org.apache.hadoop.hive.metastore.ObjectStore.initialize(ObjectStore.java:340)
        at org.apache.hadoop.hive.metastore.ObjectStore.setConf(ObjectStore.java:301
        at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:73)
        at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:133)
        at org.apache.hadoop.hive.metastore.RawStoreProxy.<init>(RawStoreProxy.java:58)
        at org.apache.hadoop.hive.metastore.RawStoreProxy.getProxy(RawStoreProxy.java:67)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.newRawStoreForConf(HiveMetaStore.java:628)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMSForConf(HiveMetaStore.java:594)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMS(HiveMetaStore.java:588)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.java:655)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:431)
        at sun.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.invokeInternal(RetryingHMSHandler.java:148)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.invoke(RetryingHMSHandler.java:107)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:79)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:92)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:6891)
        at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:164)
        at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:129)
        at com.husor.core.util.HiveMetaUtils.init(HiveMetaUtils.java:72)
        at com.husor.core.util.HiveMetaUtils.getHiveClient(HiveMetaUtils.java:78)
        at com.husor.lifecyclemodel.LifeCycleExec.checkTable(LifeCycleExec.java:106)
        at com.husor.lifecyclemodel.LifeCycleExec.exec(LifeCycleExec.java:78)
        at com.husor.core.plugin.job.LifeCycle.run(LifeCycle.java:16)

 

服务器环境问题

hadoop角色拥有文件夹权限。

启动脚本

chown -R hadoop:hadoop /opt/tomcat7/ ;su -s /bin/bash -c "sh /opt/tomcat7/bin/startup.sh" hadoop;tail -f /opt/tomcat7/logs/catalina.out;

 

解决方案

问题二解决方案:

升级hive-jdbc 从1.1.0  到2.3.5.

        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>2.3.5</version>
        </dependency>

 

添加缺少的类所在的包:

        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>2.3.5</version>
        </dependency>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值