Pyspark访问Hbase

作者:Syn良子 出处:http://www.cnblogs.com/cssdongl/p/7347167.html 转载请注明出处

记录自己最近抽空折腾虚拟机环境时用spark2.0的pyspark访问Hbase1.2时遇到的问题及解决过程.


连接准备

快速用pyspark访问Hbase中的表进行测试,代码如下(注意,其中的host和inputtable是已经定义好的主机和表名变量)

spark = SparkSession.builder.master("yarn-client").appName("statistics").getOrCreate()

hbaseconf = {"hbase.zookeeper.quorum":host,"hbase.mapreduce.inputtable":inputtable}

keyConv = "org.apache.spark.examples.pythonconverters.ImmutableBytesWritableToStringConverter"

valueConv = "org.apache.spark.examples.pythonconverters.HBaseResultToStringConverter"

hbase_rdd = spark.sparkContext.newAPIHadoopRDD(\
"org.apache.hadoop.hbase.mapreduce.TableInputFormat",\
"org.apache.hadoop.hbase.io.ImmutableBytesWritable",\
"org.apache.hadoop.hbase.client.Result",\
keyConverter=keyConv, valueConverter=valueConv, conf=hbaseconf)

hbase_rdd.count()

发现问题

执行上面的pyspark代码测试,结果报错如下图所示

pysparkClassNotFoundHbase.png

额,看着这个熟悉的异常让我莫名尴尬,ClassNotFoundException...那就是说此时spark访问hbase时依赖的一些hbase jar包没有在classpath中找到.那么将其加入classpath即可.

解决问题

找到hbase1.2根目录下lib文件夹下的所有jar包,将其拷贝到spark所在节点的自己专门存放jar包的目录下,我这里路径假设是/home/hadoop/scripts/sparkStatistics/workJars/hbaseJars,然后有二种方法将其加入spark的classpath,如下

  • 修改spark-env.sh中的SPARK_CLASSPATH,比如
    export SPARK_CLASSPATH=/home/hadoop/scripts/sparkStatistics/workJars/hbaseJars/*

或者

  • 修改spark-defaults.conf,如下
    spark.executor.extraClassPath=/home/hadoop/scripts/sparkStatistics/workJars/hbaseJars/
    spark.driver.extraClassPath=/home/hadoop/scripts/sparkStatistics/workJars/hbaseJars/

二种方式都可以,但是第一种修改spark-env.sh的方式在spark1.0之前比较推荐,之后的版本建议用第二种方式.
我用的第二种方式,修改完成后重启spark集群.测试pyspark代码,访问hbase表成功无异常.

转载于:https://www.cnblogs.com/cssdongl/p/7347167.html

要在Python中访问HBase,您需要使用HBase的Python客户端库。有两个主要的Python客户端库可供选择: 1. happybase:这是最流行的Python客户端库之一,它提供了一个简单的接口来连接和操作HBase。您可以使用pip命令来安装它: ``` pip install happybase ``` 以下是一个使用happybase库连接到HBase读取数据的示例代码: ```python import happybase # connect to HBase connection = happybase.Connection('localhost', port=9090) # select a table table = connection.table('my_table') # read data from the table for key, data in table.scan(): print(key, data) ``` 2. hbasespark:这是一个专门为Apache Spark设计的Python客户端库,它允许您在Spark中使用HBase。您可以使用pip命令来安装它: ``` pip install hbasespark ``` 以下是一个使用hbasespark库连接到HBase读取数据的示例代码: ```python from pyspark import SparkContext, SparkConf from hbasespark import HBaseContext # create a Spark context conf = SparkConf().setAppName("MyApp") sc = SparkContext(conf=conf) # create an HBaseContext hbase_host = "localhost" hbase_port = "9090" hbase_table = "my_table" hbase_context = HBaseContext(sc, {"hbase.zookeeper.quorum": hbase_host, "hbase.zookeeper.property.clientPort": hbase_port}) # read data from the table def read_data(row): table = hbase_context.table(hbase_table) data = table.get(row) return (row, data) rows = ["row1", "row2", "row3"] data = sc.parallelize(rows).map(read_data).collect() print(data) ``` 请根据您的需求选择适合您的库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值