当前位置: 首页 > news >正文

spark(2.1.0) 操作hbase(1.0.2)

一、写操作

1、spark中引入外部jar包

  1)创建/usr/software/spark_jars目录,把hbase里的lib里的以下七个jar放入/usr/software/spark_jars里:

    guava-12.0.1.jar

    hbase-common-1.0.2.jar

    hbase-protocol-1.0.2.jar

    htrace-core-3.1.0-incubating.jar

    hbase-client-1.0.2.jar

    hbase-prefix-tree-1.0.2.jar

    hbase-server-1.0.2.jar

 

  2)修改spark-default.conf文件,加入以下两行: 

    spark.executor.extraClassPath=/usr/software/spark_jars/*
    spark.driver.extraClassPath=/usr/software/spark_jars/*

2、进入hbase事先创建好表

    create 'test','f1'

2、用spark-shell进行操作hbase。

3、代码部分:

import org.apache.hadoop.hbase.{HBaseConfiguration, TableName}
import org.apache.hadoop.hbase.client.{ConnectionFactory, Put}
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.mapred.TableOutputFormat
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.mapred.JobConf
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.streaming.{Seconds, StreamingContext}

val conf = HBaseConfiguration.create()
var jobConf = new JobConf(conf)
jobConf.set("hbase.zookeeper.quorum", "localhost")
jobConf.set("zookeeper.znode.parent", "/hbase")
jobConf.set(TableOutputFormat.OUTPUT_TABLE, "test")
jobConf.setOutputFormat(classOf[TableOutputFormat])
val rdd = sc.makeRDD(Array(1)).flatMap(_ => 0 to 100000)
rdd.map(x => {
var put = new Put(Bytes.toBytes(x.toString))
put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("c1"), Bytes.toBytes(x.toString))
(new ImmutableBytesWritable, put)
}).saveAsHadoopDataset(jobConf)

 

二、读操作

1、用shell操作

import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor, TableName}  

import org.apache.hadoop.hbase.client.HBaseAdmin  

import org.apache.hadoop.hbase.mapreduce.TableInputFormat  

import org.apache.spark._  

import org.apache.hadoop.hbase.client.HTable  

import org.apache.hadoop.hbase.client.Put  

import org.apache.hadoop.hbase.util.Bytes  

import org.apache.hadoop.hbase.io.ImmutableBytesWritable  

import org.apache.hadoop.hbase.mapreduce.TableOutputFormat  

import org.apache.hadoop.mapred.JobConf  

import org.apache.hadoop.io._ 

 

val tablename = "test"

val conf = HBaseConfiguration.create()  

conf.set("hbase.zookeeper.quorum","hadoop01")

conf.set("hbase.zookeeper.property.clientPort", "2181") 

conf.set(TableInputFormat.INPUT_TABLE, tablename)

val admin = new HBaseAdmin(conf)  

if (!admin.isTableAvailable(tablename)) {  

val tableDesc = new HTableDescriptor(TableName.valueOf(tablename))  

admin.createTable(tableDesc)  

}  

val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],  

classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],

classOf[org.apache.hadoop.hbase.client.Result]) 

val count = hBaseRDD.count()

hBaseRDD.foreach{case (_,result) =>{

val rowKey = Bytes.toString(result.getRow)

val value= Bytes.toString(result.getValue("f1".getBytes,"c1".getBytes))

println("rowKey:"+rowKey+" Value:"+value)

}}  

 

转载于:https://www.cnblogs.com/runnerjack/p/7858241.html

相关文章:

  • RabbitMQ(一):Window安装RabbitMQ
  • CCF 201503-4 网络延时
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • unit 7文档练习
  • 进入Linux救援(rescue)模式的四大法门
  • Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack
  • 黑客系列-以彼之道还施彼身
  • [web前端] yarn和npm命令使用
  • 在windows上搭建镜像yum站的方法(附bat脚本)
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • Price Tag | INTERVIEW 03 | 独立开发者 Tolecen
  • GitHub上优秀的Go开源项目
  • 51CTO试一下
  • 《从零开始学Swift》学习笔记(Day 10)——运算符是“ +、-、*、/ ”吗?
  • 从7个骨架项目启动你的rails开发
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • create-react-app项目添加less配置
  • Docker 笔记(2):Dockerfile
  • Java多线程(4):使用线程池执行定时任务
  • Kibana配置logstash,报表一体化
  • laravel5.5 视图共享数据
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • MySQL数据库运维之数据恢复
  • Python学习之路13-记分
  • Spring-boot 启动时碰到的错误
  • 从输入URL到页面加载发生了什么
  • 仿天猫超市收藏抛物线动画工具库
  • 计算机在识别图像时“看到”了什么?
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 批量截取pdf文件
  • 日剧·日综资源集合(建议收藏)
  • 入口文件开始,分析Vue源码实现
  • 微信支付JSAPI,实测!终极方案
  • 学习笔记TF060:图像语音结合,看图说话
  • 自定义函数
  • PostgreSQL之连接数修改
  • 通过调用文摘列表API获取文摘
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • ###项目技术发展史
  • #{}和${}的区别是什么 -- java面试
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转载)虚函数剖析
  • .NET 设计一套高性能的弱事件机制
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET国产化改造探索(一)、VMware安装银河麒麟