总结/朱季谦

一、出现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都被哪些包依赖了,当多个组件包都依赖了同一个包但又不同版本时,很容易久出现各种冲突。红色部分就是表示有冲突的依赖包版本——

选中对应想去除的包,右击点击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'

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

这时,再重新运行下代码,这时就没有报错了,然后通过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命令行界面了——

四、本地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库,其他库都找不到。

需要在代码里增加一行 .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的所有库了——

四、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——

后来修改成这样,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,就发现整数对应的值都有了——

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

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

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

Spark大数据集群日常开发过程遇到的异常及解决思路汇总的更多相关文章

  1. Docker搭建大数据集群 Hadoop Spark HBase Hive Zookeeper Scala

    Docker搭建大数据集群 给出一个完全分布式hadoop+spark集群搭建完整文档,从环境准备(包括机器名,ip映射步骤,ssh免密,Java等)开始,包括zookeeper,hadoop,hiv ...

  2. CDH版本大数据集群下搭建Hue(hadoop-2.6.0-cdh5.5.4.gz + hue-3.9.0-cdh5.5.4.tar.gz)(博主推荐)

    不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...

  3. 基于Docker搭建大数据集群(六)Hive搭建

    基于Docker搭建大数据集群(六)Hive搭建 前言 之前搭建的都是1.x版本,这次搭建的是hive3.1.2版本的..还是有一点细节不一样的 Hive现在解析引擎可以选择spark,我是用spar ...

  4. centos7 ambari2.6.1.5+hdp2.6.4.0 大数据集群安装部署

    前言 本文是讲如何在centos7(64位) 安装ambari+hdp,如果在装有原生hadoop等集群的机器上安装,需要先将集群服务停掉,然后将不需要的环境变量注释掉即可,如果不注释掉,后面虽然可以 ...

  5. 全网最详细的大数据集群环境下多个不同版本的Cloudera Hue之间的界面对比(图文详解)

    不多说,直接上干货! 为什么要写这么一篇博文呢? 是因为啊,对于Hue不同版本之间,其实,差异还是相对来说有点大的,具体,大家在使用的时候亲身体会就知道了,比如一些提示和界面. 安装Hue后的一些功能 ...

  6. 全网最详细的大数据集群环境下如何正确安装并配置多个不同版本的Cloudera Hue(图文详解)

    不多说,直接上干货! 为什么要写这么一篇博文呢? 是因为啊,对于Hue不同版本之间,其实,差异还是相对来说有点大的,具体,大家在使用的时候亲身体会就知道了,比如一些提示和界面. 全网最详细的大数据集群 ...

  7. Ubuntu14.04下Ambari安装搭建部署大数据集群(图文分五大步详解)(博主强烈推荐)

    不多说,直接上干货! 写在前面的话 (1) 最近一段时间,因担任我团队实验室的大数据环境集群真实物理机器工作,至此,本人秉持负责.认真和细心的态度,先分别在虚拟机上模拟搭建ambari(基于CentO ...

  8. Ubuntu14.04下Cloudera安装搭建部署大数据集群(图文分五大步详解)(博主强烈推荐)(在线或离线)

    第一步: Cloudera Manager安装之Cloudera Manager安装前准备(Ubuntu14.04)(一) 第二步: Cloudera Manager安装之时间服务器和时间客户端(Ub ...

  9. 关于在真实物理机器上用cloudermanger或ambari搭建大数据集群注意事项总结、经验和感悟心得(图文详解)

    写在前面的话 (1) 最近一段时间,因担任我团队实验室的大数据环境集群真实物理机器工作,至此,本人秉持负责.认真和细心的态度,先分别在虚拟机上模拟搭建ambari(基于CentOS6.5版本)和clo ...

  10. Linux- AWS之EC2大数据集群定时开关机

    众所周知,云计算就是在计算你的钱,每当ec2开起来就要开始计费.当用户购买了一个庞大的与服务器做一个集群,尤其是用来做大数据集群,这些服务器的配置相当高,每台服务器所需要的费用不菲.其实在很多时候没能 ...

随机推荐

  1. createRange表示文档中的一个范围——用于js判断文字添加省略号情况

    document.createRange() 是 JavaScript 中的一个方法,用于创建一个 Range 对象,表示文档中的一个范围.Range 对象通常用于选择文档中的一部分内容,然后对其进行 ...

  2. MySQL优化方向

    MySQL优化手段 数据库设计层面 范式设计 减少数据冗余 提高数据一致性 索引策略 选择合适的索引类型 (BTREE, HASH) 覆盖索引 索引选择性 表结构优化 使用合适的数据类型 避免使用NU ...

  3. C#.Net筑基-模式匹配汇总

    01.模式匹配概述 从C#7开始支持的 模式匹配 语法(糖,挺甜),可非常灵活的对数据进行条件匹配和提取,经过多个版本的完善,已经非常强大了. C# 支持多种模式,包括声明.类型.常量.关系.属性.列 ...

  4. IPv6 — 移动性

    目录 文章目录 目录 前文列表 IPv6 的移动性 移动操作 路由优化 前文列表 <IPv6 - 网际协议第 6 版> <IPv6 - 地址格式与寻址模式> <IPv6 ...

  5. LLM实战:LLM微调加速神器-Unsloth + Qwen1.5

    1. 背景 上一篇介绍了基于训练加速框架Unsloth,微调训练Llama3的显卡资源占用及训练时间对比. 近期Unsloth新增了Qwen1.5的模型适配,因此本qiang~马不停蹄地又进行了一次实 ...

  6. 利用FileReader进行二进制文件传输

    一.读取本地二进制文件,上传(数据库文件为例) 二进制文件读取的时候应当直接读取成字节数组,以免在调试时造成误解.比如数据库文件里面的有些字段是utf8编码,因此,采用utf-8编码读出来也能看到一些 ...

  7. Istio(六):Istio弹性(超时&重试)和故障注入

    目录 一.模块概览 二.系统环境 三.弹性(超时&重试) 3.1 弹性 四.故障注入 4.1 故障注入 五.实战:观察错误注入 5.1 在 Grafana.Zipkin 和 Kiali 中观察 ...

  8. HTML——input之单选按钮

    在 HTML 中,把 <input> 标签的 type 属性设置为 radio 可以表示单选按钮.具体语法格式如下: <input type="radio" /& ...

  9. NOIP模拟96

    T1 树上排列 解题思路 是一个一眼切的题目... 看到题目第一眼就是 Deepinc 学长讲的可重集,无序 Hash . 直接套上一颗线段树再加上树剖, \(nlog^2n\) 直接过,好像也可以树 ...

  10. 数据结构之栈(Java,C语言的实现)以及相关习题巩固

    目录 栈 概念以及代码实现 例题 232. 用栈实现队列 1614. 括号的最大嵌套深度 234. 回文链表 1614. 括号的最大嵌套深度 LCR 123. 图书整理 I 206. 反转链表 402 ...