首页 > 其他分享 >解决hive-cli客户端on spark 不能正常加载本地的native库

解决hive-cli客户端on spark 不能正常加载本地的native库

时间:2024-01-31 21:56:15浏览次数:28  
标签:java cli hadoop hive apache org spark native

问题现象

CDH版本:6.3.2
1)使用hive-cli on spark运行的时候,出现如下错误:

FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed due to: Job aborted due to stage failure: 
Aborting TaskSet 0.0 because task 0 (partition 0)
cannot run anywhere due to node and executor blacklist.
Most recent failure:
Lost task 0.1 in stage 0.0 (TID 1, syx-prod-bigdata-cdh-79-163, executor 2): java.io.IOException: java.lang.reflect.InvocationTargetException
        at org.apache.hadoop.hive.io.HiveIOExceptionHandlerChain.handleRecordReaderCreationException(HiveIOExceptionHandlerChain.java:97)
        at org.apache.hadoop.hive.io.HiveIOExceptionHandlerUtil.handleRecordReaderCreationException(HiveIOExceptionHandlerUtil.java:57)
        at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.initNextRecordReader(HadoopShimsSecure.java:271)
        at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.<init>(HadoopShimsSecure.java:217)
        at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileInputFormatShim.getRecordReader(HadoopShimsSecure.java:345)
        at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getRecordReader(CombineHiveInputFormat.java:702)
        at org.apache.spark.rdd.HadoopRDD$$anon$1.liftedTree1$1(HadoopRDD.scala:272)
        at org.apache.spark.rdd.HadoopRDD$$anon$1.<init>(HadoopRDD.scala:271)
        at org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:225)
        at org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:96)
        at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
        at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
        at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:52)
        at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
        at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
        at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:99)
        at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:55)
        at org.apache.spark.scheduler.Task.run(Task.scala:121)
        at org.apache.spark.executor.Executor$TaskRunner$$anonfun$11.apply(Executor.scala:407)
        at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1408)
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:413)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.initNextRecordReader(HadoopShimsSecure.java:257)
        ... 21 more
Caused by: java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy()Z
        at org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy(Native Method)
        at org.apache.hadoop.io.compress.SnappyCodec.checkNativeCodeLoaded(SnappyCodec.java:63)
        at org.apache.hadoop.io.compress.SnappyCodec.getDecompressorType(SnappyCodec.java:195)
        at org.apache.hadoop.io.compress.CodecPool.getDecompressor(CodecPool.java:181)
        at org.apache.hadoop.mapred.LineRecordReader.<init>(LineRecordReader.java:111)
        at org.apache.hadoop.mapred.TextInputFormat.getRecordReader(TextInputFormat.java:67)
        at org.apache.hadoop.hive.ql.io.CombineHiveRecordReader.<init>(CombineHiveRecordReader.java:68)
        ... 26 more

这块是由于hive的表最终是采用的snappy压缩,在使用spark读取数据的时候,发现不能正常解压snappy格式的数据,从上面的错误也可以看出来。初步怀疑是本地的native库没有正常加载。
2)采用beeline客户端进行提交
采用这种方式提交没问题。

由于某些客观原因,一些脚本任务还是采用的hive-cli的方式运行。

问题排查

1)这块出现问题的时候,也在网上找到了一些资料,说是修改spark-env.sh文件的如下配置:

export JAVA_LIBRARY_PATH=$JAVA_LIBRARY_PATH:$HADOOP_HOME/lib/native
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native
export SPARK_YARN_USER_ENV="JAVA_LIBRARY_PATH=$JAVA_LI:BRARY_PATH,LD_LIBRARY_PATH=$LD_LIBRARY_PATH"

通过这种方式并未能解决问题。
2)问题思考
在spark里面,对于配置,一般来说主要是spark-env.sh合spark-defaults.conf文件,除了可以定义环境变量以为,还可以在spark.defaults.conf文件定义spark.driver.extraLibraryPath 等类路径信息。按着这个思路。查看对应的spark.defaults.conf文件

cat /opt/cloudera/parcels/CDH/lib/spark/conf/spark-defaults.conf
spark.driver.extraLibraryPath=/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hadoop/lib/native
spark.executor.extraLibraryPath=/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hadoop/lib/native
spark.yarn.am.extraLibraryPath=/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hadoop/lib/native

注:上述的参数是本人已经修改过后的值。
按照这种方式修改以后,接着在hive-cli里面在运行hive sql,发现还是不行,依然出现最开始的错误。
3)会不会hive-cli 根本就没有读取到spark.defaults.conf和spark-env.sh信息???
按着这个思路,执行了下述操作:

cp /opt/cloudera/parcels/CDH/lib/spark/conf/spark-env.sh /etc/hive/conf/
cp /opt/cloudera/parcels/CDH/lib/spark/conf/spark-defaults.conf /etc/hive/conf/

通过这种方式,让hive加载指定的spark配置信息。这一步在运行sql,出现了不能创建java 虚拟机的异常了。部分异常代码如下:

Caused by: java.lang.RuntimeException: spark-submit process failed with exit code 1 and error "Error: Could not create the Java Virtual Machine.","Error: A fatal exception has occurred. Program will exit."
        at org.apache.hive.spark.client.SparkClientImpl$2.run(SparkClientImpl.java:495) ~[hive-exec-2.1.1-cdh6.3.2.jar:2.1.1-cdh6.3.2]
        ... 1 more
ERROR : FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Failed to create Spark client for Spark session 0e5cca78-2a7e-4414-b5c9-c73b41b0a2c7_0: java.lang.RuntimeException: spark-submit process failed with exit code 1 and error "Error: Could not create the Java Virtual Machine.","Error: A fatal exception has occurred. Program will exit."
Error: Error while processing statement: FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Failed to create Spark client for Spark session 0e5cca78-2a7e-4414-b5c9-c73b41b0a2c7_0: java.lang.RuntimeException: spark-submit process failed with exit code 1 and error "Error: Could not create the Java Virtual Machine.","Error: A fatal exception has occurred. Program will exit." (state=42000,code=30041)

这说明hive-cli客户端正常加载了spark的配置信息。

问题解决

注释掉/etc/hive/conf/spark-defaults.conf配置文件里面的如下信息:

#spark.master=yarn
#spark.submit.deployMode=client

关于为什么beeline客户端在执行的时候正常加载了spark的信息,但是hive-cli没有正常加载,这块就不细研究了。hive-cli本身就已经过时,正常情况下都不会使用这种方式进行提交任务。

标签:java,cli,hadoop,hive,apache,org,spark,native
From: https://www.cnblogs.com/yjt1993/p/18000206

相关文章

  • c# JS的onclick()方法参数中含有引号导致参数传递异常
    引号导致的问题主要是参数不正常的截取,因为参数中传递的引号可能会与前边包括方法名的引号对应解决这个问题的操作还是需要用到转义\,让html不解析解决方法:replace("\'","\\'")......
  • ClientBuilder https请求时忽略SSL证书。
    在chrome中连接https时,有时被告知不是私密链接,手动可以继续。用java代码进行https也遇到这种情况,可以 实现一个X509TrustManager接口,用于绕过验证,不用修改里面的方法附完整可用代码importorg.glassfish.jersey.jackson.JacksonFeature;importjavax.net.ssl.SSLContext;im......
  • Page.ClientScript.RegisterClientScriptBlock 有时在前台页面无法注册的可能原因
    原因一:前台页面缺少<formid="form1"runat="server"></form>标签。加上即可。原因二:如果一个页面顺序执行多个Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"key","jsfunction")且RegisterClientScriptBlock方法的第二个参数为脚本的Key都为......
  • 对比Spring Boot中的JdbcClient与JdbcTemplate
    本文我们一起看看SpringBoot中JdbcClient和JdbcTemplate之间的差异。以下内容使用的Java和SpringBoot版本为:Java21SpringBoot3.2.1假设我们有一个ICustomerService接口:publicinterfaceICustomerService{List<Customer>getAllCustomer();Option......
  • presto、hive使用year、month、date函数使用注意事项
    经过尝试,presto查询速度更快,于是使用presto引擎查询,直接将在hive中使用的sql拷贝到presto执行,遇到各种问题。遇到问题以下sql在hive中执行成功,变量日期是2024-01-02这样的格式但在presto中执行报错,如下:解决方法通过观察报错信息最后两行,推测很可能是因为数据类型不正确,所以......
  • client-go list性能提升
    k8sv1.19.0staging\src\k8s.io\apiserver\pkg\storage\cacher\cacher.gostaging\src\k8s.io\apiserver\pkg\storage\etcd3\api_object_versioner.go优化1:设置resourceVersion=0从kube-apiserver缓存中获取全量数据并返回。默认client-golist参数是resourceVersion=0&limit......
  • 嵌入式常用CLI(Command Line Interfaces)
    为什么需要CLI在开发过程中——从硬件原型到制造——有必要一遍又一遍地运行测试代码来验证功能或执行系统级测试。这通常可以通过单步执行调试器中的代码来完成,或者通过重复重新启动设备来导致某些事情发生。这是引起可能的启动/初始化延迟的一个缺点,需要使用调试器,并假设非开发......
  • hive中日期格式转换
    hive中日期格式转换日期时间格式大致分成时间戳和日期时间格式互转,字符串转化成日期时间格式,日期格式之间的转化1.时间戳和日期互转unix_timestamp函数,日期转时间戳当函数参数为空时,返回当前时间戳。当函数参数为空时,返回当前时间戳。selectunix_timestamp()--170660720......
  • CyclicBarrier源码阅读
    目录简介代码分析成员变量方法参考链接本人的源码阅读主要聚焦于类的使用场景,一般只在java层面进行分析,没有深入到一些native方法的实现。并且由于知识储备不完整,很可能出现疏漏甚至是谬误,欢迎指出共同学习本文基于corretto-17.0.9源码,参考本文时请打开相应的源码对照,否则你会......
  • Hive
    HiveHive基本概念Hive是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL的查询功能Hive的本质是将HQL转化成MapReduce程序Hive处理的数据存储在HDFS+Hive分析数据底层的实现是MapReduce+执行程序运行在Yarn上Hive的优缺点优点:1.操作接......