经过一番折腾,终于使用spark下的python连接上hbase数据库,以下是汇集了网上搜索到的资料整理的结果:
配置环境:
- 操作系统:CentOS Linux release 7.4.1708(Core)
- JAVA: 1.8.0_151
- Hadoop: 3.0.0
- Spark: 2.2.1
- Python: 3.6.4
- HBase: 1.4.1
配置步骤:
1. 进入spark安装目录:cd $SPARK_HOME
2. 进入jars目录:cd jars
3. 建立存放spark访问hbase的jar库的目录:mkdir hbase
4. 把HBase安装目录lib下的以下jar文件拷贝到步骤3建立的hbase目录中:
cp $HBASE_HOME/lib/hbase*.jar ./
cp $HBASE_HOME/lib/guava-12.0.1.jar ./
cp $HBASE_HOME/lib/htrace-core-3.1.0-incubating.jar ./
cp $HBASE_HOME/lib/protobuf-java-2.5.0.jar ./
cp $HBASE_HOME/lib/metrics-core-*.jar ./
5. 下载Spark examples包(spark-examples_2.11-1.6.0-typesafe-001.jar)并拷贝到hbase下
6. 修改$SPARK_HOME/conf/spark-env.sh
在文件最下方添加如下脚本:
export SPARK_HOME=/usr/spark/spark-2.2.1-bin-hadoop2.7
export SPARK_DIST_CLASSPATH= $SPARK_HOME/jars/hbase/*
7. 重启spark
8. 在pyspark终端下编写spark连接hbase的测试脚本:
>>>host= '127.0.0.1'
>>>inputtable= 'hbase_1102'
>>>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=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=hbaseconf)
>>>hbase_rdd.count()
>>>2
注:最终的结果2,说明能够通过spark访问到表hbase_1102有两条记录