Spark应用连接HBase报NullPointerException


Spark应用没有问题,但是提交以后一直报NullPointerException, 请仔细检查jar包,我的spark应用要连接HBase-0.98,但是classpath有HBase-0.94和protobuf-java-2.4.0a.jar的jar包

报错信息如下:

Exception in thread "main" java.lang.NullPointerException
        at com.bigdata.spark.streaming.TestOPHBase.main(TestOPHBase.java:122)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:358)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:75)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)


 

### Spark 连接 HBase 方法 为了使 Spark 能够连接并访问 HBase 数据库,需要完成一系列配置工作。具体来说,在 Spark 配置文件中添加必要的 HBase 配置项能够建立两者之间的联系[^1]。 #### 准备环境依赖 首先确保环境中已经安装了 Apache SparkHBase,并且版本兼容。接着下载 `hbase-spark` 库以及相关依赖包,这些可以通过 Maven 或者手动方式获取。将所需 JAR 文件放置于 Spark 的 `$SPARK_HOME/jars/` 目录下以便加载。 #### 修改 Spark 配置 编辑 Spark 安装目录下的 `conf/spark-defaults.conf` 文件,加入如下设置来指定 Zookeeper 地址和其他必要参数: ```properties spark.hbase.zookeeper.quorum=hmaster01,hmaster02,hmaster03 spark.hbase.zookeeper.property.clientPort=2181 ``` 以上命令指定了 ZooKeeper 服务器列表及其端口号用于定位 HBase 实例位置[^2]。 #### 编写 Scala 程序示例 下面是一个简单的 Scala 示例程序展示如何利用 DataFrame API 来读取来自 HBase 表的数据: ```scala import org.apache.hadoop.hbase.HBaseConfiguration import org.apache.hadoop.hbase.mapreduce.TableInputFormat import org.apache.spark.sql.SparkSession val spark = SparkSession.builder.appName("HBaseReadExample").getOrCreate() // 创建 HBase 配置对象 val conf = HBaseConfiguration.create() // 设置要扫描的表名 conf.set(TableInputFormat.INPUT_TABLE, "my_table") // 将 HBase 结果集映射为 RDD 并转化为 DataFrame val hbaseRDD = spark.sparkContext.newAPIHadoopRDD(conf, classOf[TableInputFormat], classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable], classOf[org.apache.hadoop.hbase.client.Result]) // 对应列族和字段名称解析逻辑... val df = hbaseRDD.map { case (_, result) => val key = Bytes.toString(result.getRow()) (key, ...) }.toDF("row_key", ...) df.show() // 显示前几条记录作为验证 ``` 此代码片段展示了怎样构建 Spark Session、初始化 HBase Configuration、执行 TableScan 操作并将结果封装成 DataFrame 方便后续处理[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值