spark将数据写入hbase以及从hbase读取数据

本文详细介绍了如何使用Spark的saveAsHadoopDataset和saveAsNewAPIHadoopDataset方法将RDD写入HBase,以及如何从HBase读取数据并转化为RDD。在操作中,需要注意依赖项的配置,包括特定版本的Java、Scala、Zookeeper、Hadoop、Spark和HBase。同时,文章提到了通过设置HBaseConfiguration连接到Zookeeper集群,并建议在HBase shell中预先创建表。
摘要由CSDN通过智能技术生成

本文将介绍

1、spark如何利用saveAsHadoopDataset和saveAsNewAPIHadoopDataset将RDD写入hbase

2、spark从hbase中读取数据并转化为RDD

操作方式为在eclipse本地运行spark连接到远程的hbase。

java版本:1.7.0

scala版本:2.10.4

zookeeper版本:3.4.5(禁用了hbase自带zookeeper,选择自己部署的)

hadoop版本:2.4.1

spark版本:1.6.1

hbase版本:1.2.3

集群:centos6.5_x64

将RDD写入hbase

注意点:

依赖:

将lib目录下的hadoop开头jar包、hbase开头jar包添加至classpath

此外还有lib目录下的:zookeeper-3.4.6.jar、metrics-core-2.2.0.jar(缺少会提示hbase RpcRetryingCaller: Call exception不断尝试重连hbase,不报错)、htrace-core-3.1.0-incubating.jar、guava-12.0.1.jar

$SPARK_HOME/lib目录下的 spark-assembly-1.6.1-hadoop2.4.0.jar

不同的package中可能会有相同名称的类,不要导错

连接集群:

spark应用需要连接到zookeeper集群,然后借助zookeeper访问hbase。一般可以通过两种方式连接到zookeeper:

第一种是将hbase-site.xml文件加入classpath

第二种是在HBaseConfiguration实例中设置

如果不设置,默认连接的是localhost:2181会报错:connection refused 

本文使用的是第二种方式。

hbase创建表:

虽然可以在spark应用中创建hbase表,但是不建议这样做,最好在hbase shell中创建表,spark写或读数据

使用saveAsHadoopDataset写入数据

package com.test

import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.Put
import org.apache.hadoop.hbase.io.I
Spark可以通过HiveContext来读取Hive数据,然后通过HBase API将数据写入HBase。具体步骤如下: 1. 创建SparkConf和SparkContext对象。 2. 创建HiveContext对象,通过HiveContext对象读取Hive数据。 3. 将Hive数据转换为RDD。 4. 创建HBaseConfiguration对象,设置HBase相关配置。 5. 创建HBase表,如果表已经存在,则不需要创建。 6. 将RDD中的数据写入HBase表中。 示例代码如下: ``` import org.apache.hadoop.hbase.{HBaseConfiguration, TableName} import org.apache.hadoop.hbase.client.{ConnectionFactory, Put} import org.apache.hadoop.hbase.util.Bytes import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.sql.hive.HiveContext object SparkHiveToHBase { def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setAppName("SparkHiveToHBase") val sc = new SparkContext(sparkConf) val hiveContext = new HiveContext(sc) // 读取Hive数据 val df = hiveContext.sql("SELECT * FROM my_table") // 将DataFrame转换为RDD val rdd = df.rdd // 创建HBaseConfiguration对象 val hbaseConf = HBaseConfiguration.create() // 设置HBase相关配置 hbaseConf.set("hbase.zookeeper.quorum", "localhost") hbaseConf.set("hbase.zookeeper.property.clientPort", "2181") // 创建HBase表 val tableName = TableName.valueOf("my_table") val connection = ConnectionFactory.createConnection(hbaseConf) val admin = connection.getAdmin if (!admin.tableExists(tableName)) { val tableDesc = new HTableDescriptor(tableName) tableDesc.addFamily(new HColumnDescriptor("cf".getBytes)) admin.createTable(tableDesc) } // 将RDD中的数据写入HBase表中 rdd.foreachPartition(partition => { val connection = ConnectionFactory.createConnection(hbaseConf) val table = connection.getTable(tableName) partition.foreach(row => { val put = new Put(Bytes.toBytes(row.getString())) put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col1"), Bytes.toBytes(row.getString(1))) put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col2"), Bytes.toBytes(row.getString(2))) table.put(put) }) table.close() connection.close() }) sc.stop() } } ```
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值