Spark 读写Hbase

启动

zookeeper----》hadoop----》hbase

创建hbase表student

create 'student' ,'info'

添加数据

put 'student' ,'1' ,'info:name','James'

put 'student' ,'1' ,'info:age','23'

put 'student' ,'1' ,'info:gender','F'

put 'student' ,'2' ,'info:name','Smith'

put 'student' ,'2' ,'info:age','24'

put 'student' ,'2' ,'info:gender','M'

根据rowkey查询一条记录

get 'student','1'

读取hbase数据,在mycode目录下创建SparkOperateHBase.py文件,添加如下代码

#!/usr/bin/env python3

from pyspark import SparkConf,SparkContext

conf = SparkConf().setMaster('local').setAppName("ReadHBase")
sc = SparkContext(conf = conf)
host = 'localhost'
table = 'student'
conf = {"hbase.zookeeper.quorum": host,"hbase.mapreduce.inputtable": table}
keyConv = "org.apache.spark.examples.pythonconverters.ImmutableBytesWritableToStringConverter"
valueConv="org.apache.spark.examples.pythonconverters,HBaseResultToStringConverter"
hbase_rdd=sc.newAPIHadoopRDD("org.apache.hadoop.hbase.mapreduce.TableInputFormat","org.apache.hadoop.hbase.io.ImmutableBytesWritable","org.apache.hadoop.hbase.client.Result",keyConverter=keyConv,valueConverter=valueConv,conf=conf)
count=hbase_rdd.count()
hbase_rdd.cache()
output=hbase_rdd.collect()
for(k,v) in output:
        print(k,v)

运行程序

./spark-submit /usr/local/software/spark/mycode/SparkOperateHBase.py

把spark读取hbase的支持jar包导入spark的jars目录下 

cp /usr/local/software/hbase/hbase-2.4.9/lib/hbase*.jar   /usr/local/software/spark/spark-3.0.3-bin-hadoop2.7/tars

再次运行

缺少把HBase数据转换成python可读数据的jar包 

在spark jars目录下新建hbase目录

mkdir hbase

下载转换包到spark   的jars/hbase目录下

wget https://repo.typesafe.com/typesafe/maven-releases/org/apache/spark/spark-examples_2.11/1.6.0-typesafe-001/spark-examples_2.11-1.6.0-typesafe-001.jar

配置spark-env.sh

export SPARK_DIST_CLASSPATH=$(/usr/local/software/hadoop/hadoop-3.3.0/bin/hadoop classpath):$(/usr/local/software/hbase/hbase-2.4.9/bin/hbase classpath):/usr/local/software/spark/spark-3.0.3-bin-hadoop2.7/jars/hbase/*

再次运行

启动HBase

再次运行

 

 读取成功!

写入

在spark/mycode目录下新建文件SparkWriteHBase.py,代码如下:

#!/usr/bin/env python3

from pyspark import SparkConf,SparkContext

conf = SparkConf().setMaster('local').setAppName("WriteHBase")
sc = SparkContext(conf = conf)
host = 'localhost'

table = 'student'
keyConv = "org.apache.spark.examples.pythonconverters.StringToImmutableBytesWritableConverter"
valueConv="org.apache.spark.examples.pythonconverters.StringListToPutConverter"
conf = {"hbase.zookeeper.quorum": host,"hbase.mapred.outputtable": table,"mapreduce.outputformat.class":"org.apache.hadoop.hbase.mapreduce.TableOutputFormat","mapreduce.job.output.key.class":"org.apache.hadoop.hbase.io.ImmutableBytesWritable","mapreduce.job.output.value.class":"org.apache.hadoop.io.Writable"}

rawData=['3,info,name,Rongcheng','3,info,gender,M','3,info,age,26','4,info,name,Guanhua','4,info,gender,M','4,info,age,27']
sc.parallelize(rawData).map(lambda x: (x[0],x.split(','))).saveAsNewAPIHadoopDataset(conf=conf,keyConverter=keyConv,valueConverter=valueConv)

执行程序,报如下错误:

这里是因为上面导入的spark-examples_2.11-1.6.0-typesafe-001.jar与当前的hbase版本兼容,因为hbase2.x之后的版本Put类中的add()方法被调整成了addColumn(),导致调用时找不到对应的方法。

这个需要自行下载Spark的1.6版本的源码,修改后重新编译打包

 替换原来的spark-examples_2.11-1.6.0-typesafe-001.jar即可

继续执行程序,

然后进入hbase shell界面,

[hadoop@master bin]$ ./hbase shell

scan 'student' 会看到数据3,4会被写入。

hbase:002:0> scan 'student'
ROW                         COLUMN+CELL                                                                 
 1                          column=info:age, timestamp=2022-03-24T21:57:49.420, value=23                
 1                          column=info:gender, timestamp=2022-03-24T21:57:39.878, value=F              
 1                          column=info:name, timestamp=2022-03-24T21:57:20.047, value=Xueqian          
 2                          column=info:age, timestamp=2022-03-24T21:58:23.296, value=24                
 2                          column=info:gender, timestamp=2022-03-24T21:58:40.337, value=M              
 2                          column=info:name, timestamp=2022-03-24T21:58:10.985, value=Weiliang         
 3                          column=info:age, timestamp=2022-03-26T21:39:28.041, value=26                
 3                          column=info:gender, timestamp=2022-03-26T21:39:28.041, value=M              
 3                          column=info:name, timestamp=2022-03-26T21:39:28.041, value=Rongcheng        
 4                          column=info:age, timestamp=2022-03-26T21:39:28.041, value=27                
 4                          column=info:gender, timestamp=2022-03-26T21:39:28.041, value=M              
 4                          column=info:name, timestamp=2022-03-26T21:39:28.041, value=Guanhua          
4 row(s)

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 要在Spark读写HBase,你需要进行以下几个步骤。首先,你需要在simple.sbt配置文件中指定HBase的版本号,包括hbase-client、hbase-common和hbase-server的版本号。你可以通过在Linux系统中打开终端并导航到HBase安装目录,然后使用命令"cd /usr/local/hbase"和"ls"来查找这些版本号。\[1\] 接下来,你需要创建一个Python文件,比如SparkOperateHBase.py,然后在文件中添加读取HBase数据的代码。你需要导入必要的库,设置Spark的配置,指定HBase的主机和表名,以及配置HBase的相关参数。然后,你可以使用Spark的newAPIHadoopRDD方法来读取HBase数据,并对数据进行操作。最后,你可以将结果打印出来。\[2\] 最后,你需要将支持HBase的jar包导入Spark的jars目录下。你可以使用命令"cp /usr/local/software/hbase/hbase-2.4.9/lib/hbase*.jar /usr/local/software/spark/spark-3.0.3-bin-hadoop2.7/jars"来完成这个步骤。\[3\] 这样,你就可以在Spark读写HBase数据了。 #### 引用[.reference_title] - *1* [大数据-05-Spark读写HBase数据](https://blog.csdn.net/weixin_33670713/article/details/85983819)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Spark 读写Hbase](https://blog.csdn.net/jinxing_000/article/details/123706938)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值