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

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写入数据

[plain]  view plain   copy
  1. package com.test  
  2.   
  3. import org.apache.hadoop.hbase.HBaseConfiguration  
  4. import org.apache.hadoop.hbase.client.Put  
  5. import org.apache.hadoop.hbase.io.ImmutableBytesWritable  
  6. import org.apache.hadoop.hbase.mapred.TableOutputFormat  
  7. import org.apache.hadoop.hbase.util.Bytes  
  8. import org.apache.hadoop.mapred.JobConf  
  9. import org.apache.spark.SparkConf  
  10. import org.apache.spark.SparkContext  
  11. import org.apache.spark.rdd.RDD.rddToPairRDDFunctions  
  12.   
  13. object TestHBase {  
  14.   
  15.   def main(args: Array[String]): Unit = {  
  16.     val sparkConf = new SparkConf().setAppName("HBaseTest").setMaster("local")  
  17.     val sc = new SparkContext(sparkConf)  
  18.   
  19.     val conf = HBaseConfiguration.create()  
  20.     //设置zooKeeper集群地址,也可以通过将hbase-site.xml导入classpath,但是建议在程序里这样设置  
  21.     conf.set("hbase.zookeeper.quorum","slave1,slave2,slave3")  
  22.     //设置zookeeper连接端口,默认2181  
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
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() } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值