Spark大数据集群日常开发过程遇到的异常及解决思路汇总

原创/朱季谦

在开发Spark任务过程中,遇到过不少新人经常可能会遇到的坑,故而将这些坑都总结了下来,方便日后遇到时,可以快速定位解决,壁面耗费过多时间在查找问题之上。

一、出现java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator

在新项目上创建以下Scala代码去连接Hbase集群,用来判断Hbase是否存在某张表。

//离线Hbase
val conf: Configuration = HBaseConfiguration.create()
conf.set("hbase.zookeeper.quorum","192.168.1.200")
conf.set("hbase.zookeeper.property.clientPort","2181")
// 创建HBase连接
val connection = ConnectionFactory.createConnection(conf)
val hbaseAdmin = connection.getAdmin
val tables = Set("SYSTEM_LOG")
val synTable = TableName.valueOf(tableName)
val tableExist = hbaseAdmin.tableExists(synTable)

在测试运行时,出现了以下异常:

Exception in thread "main" org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator

检查发现是因为maven里引入的hbase-client、spark-core等众多依赖包里都含有com.google.guava包,这就会出现各个guava包冲突问题,进而导致出现 tried to access method com.google.common.base.Stopwatch.异常问题。

我们可以通过maven的maven-help插件来检查com.google.guava包冲突问题,maven-help插件的引入与使用,我在另一篇博客里有介绍过——Maven Helper插件——实现一键Maven依赖冲突问题

在maven里切换至【Dependency Analyzer】栏,在搜索框输入冲突包guava,即会出现,guava都被哪些包依赖了,当多个组件包都依赖了同一个包但又不同版本时,很容易久出现各种冲突。红色部分就是表示有冲突的依赖包版本——

image

选中对应想去除的包,右击点击Exclude即可一键exclusion。

最后,单独引入一个com.google.guava包,我的hbase是1.x版本的,引入guava-15版本的可以解决。

<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>15.0</version>
</dependency>

二、出现org.apache.hadoop.hbase.NamespaceNotFoundException: SYSTEM

在创建带有命名空间的表时,例如创建表名为SYSTEM:SYSTEM_LOG时出现以下异常——
Caused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.NamespaceNotFoundException): org.apache.hadoop.hbase.NamespaceNotFoundException: SYSTEM
at org.apache.hadoop.hbase.master.HMaster.ensureNamespaceExists(HMaster.java:2090)
at org.apache.hadoop.hbase.master.HMaster.createTable(HMaster.java:1270)
at org.apache.hadoop.hbase.master.MasterRpcServices.createTable(MasterRpcServices.java:399)
at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java:42436)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2033)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:107)
at org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:130)
at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:107)
at java.lang.Thread.run(Thread.java:748)

此时Hbase里并没有事先创建该SYSTEM命名空间,因此需要先创建一个,直接登陆Hbase服务器,通过hbase shell执行以下指令:

create_namespace   'SYSTEM'

执行成功后,如下图所示:
 

image


 

这时,再重新运行下代码,这时就没有报错了,然后通过hbase shell的list查看指令,发现已经正常创建带有命名空间的表了SYSTEM:SYSTEM_LOG 。

三、在spark的bin目录里,运行spark-shell出现异常Failed to initialize Spark session.

java.io.FileNotFoundException: File does not exist: hdfs://hadoop1:9000/spark-logs

出现的异常信息如下:
[main] ERROR org.apache.spark.repl.Main - Failed to initialize Spark session.
java.io.FileNotFoundException: File does not exist: hdfs://hadoop1:9000/spark-logs
at org.apache.hadoop.hdfs.DistributedFileSystem$22.doCall(DistributedFileSystem.java:1309)
at org.apache.hadoop.hdfs.DistributedFileSystem$22.doCall(DistributedFileSystem.java:1301)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)

这说明hdfs没有spark-logs目录。
我在hadoop主机器上运行指令hdfs dfs -mkdir /spark-logs指令后,生成了一个目录/spark-logs,再执行spark-shell,就能正常进入scala命令行界面了——

image

四、本地scala远程spark查询hive库只显示defalt库的问题

最开始,我的代码本地Scala远程连接Spark查询hive库的代码是这样写的:

    val spark = SparkSession.builder().master("spark://192.168.1.99:7077").appName("YourAppName").enableHiveSupport() // 启用对Hive的支持.getOrCreate()spark.sql("show databases").show()

这块代码执行下来,都只能查到hive的default库,其他库都找不到。

image

需要在代码里增加一行 .config("hive.metastore.uris","thrift://hadoop1:9083")就可以了

    val spark = SparkSession.builder().master("spark://192.168.1.99:7077").config("hive.metastore.uris","thrift://hadoop1:9083").appName("YourAppName").enableHiveSupport()  // 启用对Hive的支持.getOrCreate()spark.sql("show databases").show()

重新执行一遍,就能正常查到hive的所有库了——

image

四、HBase外部表映射到Hive表显示整数列为NULL

刚开始的语句是这样的——

CREATE EXTERNAL  TABLE test(ROW_KEY string,PK string,count1 int,count2 int,count3 int,count4 int,count5 int,count6 int
)STORED by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,INFO:PK,INFO:count1,INFO:count2,INFO:count3,INFO:count4,INFO:count5,INFO:count6")
TBLPROPERTIES ("hbase.table.name" = "test");

发现HIve查询整数对应的字段都为NULL——

image

后来修改成这样,Hive就能正常映射到Hbase的byte整数字段值了——

CREATE EXTERNAL  TABLE test(ROW_KEY string,PK string,count1 int,count2 int,count3 int,count4 int,count5 int,count6 int
)STORED by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,INFO:PK,INFO:count1#b,INFO:count2#b,INFO:count3#b,INFO:count4#b,INFO:count5#b,INFO:count6#b",'serialization.format'='1')
TBLPROPERTIES ("hbase.table.name" = "test");

再次查询Hive,就发现整数对应的值都有了——

image

五、RDD之foreach和foreachPartition方法日志查看

这两个方法内的日志,在driver端是看不到的,也就是说,即使你将driver执行日志>spark.log,在spark.log是看不到方法里面的日志的。

foreach和foreachPartition日志需要到Spark Web里查看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/193431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阻抗匹配电阻原理及其应用

一、匹配电阻的作用 1、阻抗匹配 当信号频率比较高&#xff0c;上升沿比较陡时&#xff0c;电子信号经过阻抗不同的地方时也会产设反射。 PCB的单线阻抗一般会设计成50Ω&#xff0c;发射端阻抗一般是17到40&#xff0c;而接收端一般是MOS管的输入&#xff0c;阻抗是比较大的…

【字符串匹配】【KMP算法】Leetcode 28 找出字符串中第一个匹配项的下标

【字符串匹配】【KMP算法】Leetcode 28 找出字符串中第一个匹配项的下标 &#xff08;1&#xff09;前缀和后缀&#xff08;2&#xff09;前缀表&#xff08;最长相同的前缀和后缀的长度&#xff09;&#xff08;3&#xff09;匹配过程示意&#xff08;4&#xff09;next数组的…

分享几个国内免费使用的 gpt 网站

可放心阅读点击&#xff0c;无邀请链接、邀请码等 今天主要分享几个个免费的GPT网站。 1、智晓星AiStar 智晓星AiStar 个人长期自用&#xff0c;界面简单&#xff0c;使用比较方便&#xff0c;支持验证码、微信登录。 对于免费用户来说&#xff0c;登录之后每天可以使用50…

系统地自学 Python

文章目录 如何系统地自学 Python1. 选择合适的 Python 版本2. 安装 Python 和必要的工具3. 学习 Python 的基础知识4. 学习 Python 的高级特性5. Python 的应用领域6. 保持良好的学习习惯 如何系统地自学 Python Python 是一种广泛使用的编程语言&#xff0c;它具有简洁、易读、…

flutter使用动态路由传参的最小案例

flutter中使用动态路由传递参数的封装案例&#xff0c;子组件页面只需要接收arguments参数即可&#xff0c;参数是一个map&#xff0c;里面包含有所需要的参数&#xff0c;类似于json。在MaterialApp中配置onGenerateRoute&#xff0c;然后动态判断传递参数&#xff1a; route…

Rust国内sparse镜像源配置

文章目录 1. 遇到问题1.1 问题现象1.2 解决办法 2. 重新设置最新 sparse源3. 更多参考资料3.1 字节源3.2 ustc 源3.3 清华源3.4 其他人的总结 1. 遇到问题 有好一阵子没有更新源和安装软件了&#xff0c; 使用ustc的源&#xff0c; 更新了好一阵子&#xff0c; 最后安装居然还出…

费解的开关

费解的开关 模拟一下开关的过程&#xff1a; 直接对第一行进行开关灯即可&#xff0c;那么第一行开关等的方案有多少个呢&#xff1f; 可以第一个想到的是5次&#xff0c;但实际上是25次&#xff0c;因为没有规定说只能开关一次吧。 那么如何获得这32种方案呢&#xff1f; 可…

十五届海峡两岸电视主持新秀大会竞赛流程

海峡两岸电视主持新秀会是两岸电视媒体共同举办的一项活动&#xff0c;旨在为两岸年轻的电视主持人提供一个展示才华的舞台&#xff0c;促进两岸文化交流和青年交流。本届新秀会是第十二届海峡两岸电视艺术节的重要活动之一。本次竞赛赛制流程如下&#xff1a; &#xff08;1&…

springboot助农管理系统

springboot助农管理系统 成品项目已经更新&#xff01;同学们可以打开链接查看&#xff01;需要定做的及时联系我&#xff01;专业团队定做&#xff01;全程包售后&#xff01; 2000套项目视频链接&#xff1a;https://pan.baidu.com/s/1N4L3zMQ9nNm8nvEVfIR2pg?pwdekjv 提…

初探Java之旅:探寻Java的奥秘

✨个人主页&#xff1a;全栈程序猿的CSDN博客 &#x1f4a8;系列专栏&#xff1a;Java从入门到精通 ✌座右铭&#xff1a;编码如诗&#xff0c;Bug似流星&#xff0c;持续追求优雅的代码&#xff0c;解决问题如同星辰般自如 在计算机编程的世界中&#xff0c;有一门被誉为“千变…

分享87个节日PPT,总有一款适合您

分享87个节日PPT&#xff0c;总有一款适合您 87个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1eUxA59uQ-hZWWpFzzDuCkQ?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

affinity好用还是ps好用?2024年最新功能解析

多年来&#xff0c;ps已经有了大量竞争对手。然而每次Photoshop都足以保持其领先地位。开源GIMP和Pixelmator都试图取代Photoshop&#xff0c;不过Photoshop对此不屑一顾。英国Serif公司研发了一款名为Affinity Photo的软件&#xff0c;声称可以叫板ps。今天我们看看有最有可能…

【CPU 架构】x86、x86_64、x64、arm64、aarch64

x86、x86_64、x64、arm64、aarch64 1.服务器分类2.CPU 架构2.1 x86 架构&#xff1a;x86、x86_64、x642.2 arm 架构&#xff1a;arm64 和 aarch64 3.发展历史 1.服务器分类 按照 CPU 体系架构来区分&#xff0c;服务器主要分为两类&#xff1a; 非 x86 服务器&#xff1a;使用…

linux下安装nginx

第一步&#xff1a;压缩包 准备压缩包&#xff0c;最好准备一个稳定的版本&#xff1a;下载地址 我这边选用的是1.24.0双版本号 第二步&#xff1a;解压 在相对应的目录下&#xff0c;执行命令&#xff1a;tar -zxvf nginx-1.18.0.tar.gz 第三步&#xff1a;配置\编译 推荐…

详解—[C++ 数据结构]—AVL树

目录 一.AVL树的概念 二、AVL树节点的定义 三、AVL树的插入 3.1插入方法 四、AVL树的旋转 1. 新节点插入较高左子树的左侧---左左&#xff1a;右单旋 2. 新节点插入较高右子树的右侧---右右&#xff1a;左单旋 3.新节点插入较高左子树的右侧---左右&#xff1a;先左单旋…

07、基于LunarLander登陆器的强化学习案例(含PYTHON工程)

07、基于LunarLander登陆器的强化学习&#xff08;含PYTHON工程&#xff09; 开始学习机器学习啦&#xff0c;已经把吴恩达的课全部刷完了&#xff0c;现在开始熟悉一下复现代码。全部工程可从最上方链接下载。 基于TENSORFLOW2.10 0、实践背景 gym的LunarLander是一个用于…

第十五届蓝桥杯模拟赛(第二期)

大家好&#xff0c;我是晴天学长&#xff0c;本次分享&#xff0c;制作不易&#xff0c;本次题解只用于学习用途&#xff0c;如果有考试需要的小伙伴请考完试再来看题解进行学习&#xff0c;需要的小伙伴可以点赞关注评论一波哦&#xff01;后续会继续更新第三期的。&#x1f4…

解决uview中uni-popup弹出层不能设置高度问题

开发场景&#xff1a;点击条件筛选按钮&#xff0c;在弹出的popup框中让用户选择条件进行筛选 但是在iphone12/13pro展示是正常&#xff0c;但是切换至其他手机型号就填充满了整个屏幕&#xff0c;需要给这个弹窗设置一个固定的高度 iphone12/13pro与其他型号手机对比 一开始…

Linux环境下 make/makefile、文件时间属性 详解!!!

1.项目自动化构建工具make/makefile 1.为什么要有make/makefile 我们先写一个简单的代码&#xff0c;然后编译生成一个可执行程序&#xff0c;下面的内容我们需要知道gcc识和编译链接的一些知识&#xff0c;不清楚的朋友们可以点这里http://t.csdnimg.cn/0QvL8 我们知道要想生…

Java 数据结构篇-用链表、数组实现队列(数组实现:循环队列)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 队列的说明 1.1 队列的几种常用操作 2.0 使用链表实现队列说明 2.1 链表实现队列 2.2 链表实现队列 - 入栈操作 2.3 链表实现队列 - 出栈操作 2.4 链表实现队列 …