1.首先在Hbase中建立一张表,名字为student

参考 Hbase学习笔记——基本CRUD操作

一个cell的值,取决于Row,Column family,Column Qualifier和Timestamp

Hbase表结构

2.往Hbase中写入数据,写入的时候,需要写family和column

build.sbt

  1. libraryDependencies ++= Seq(
  2. "org.apache.spark" %% "spark-core" % "2.1.0",
  3. "mysql" % "mysql-connector-java" % "5.1.31",
  4. "org.apache.spark" %% "spark-sql" % "2.1.0",
  5. "org.apache.hbase" % "hbase-common" % "1.3.0",
  6. "org.apache.hbase" % "hbase-client" % "1.3.0",
  7. "org.apache.hbase" % "hbase-server" % "1.3.0",
  8. "org.apache.hbase" % "hbase" % "1.2.1"
  9. )

在hbaseshell中写数据的时候,写的是String,但是在idea中写代码的话,如果写的是int类型的,就会出现\x00...的情况

  1. import org.apache.spark.{SparkConf, SparkContext}
  2. import org.apache.spark.sql._
  3. import java.util.Properties
  4.  
  5. import com.google.common.collect.Lists
  6. import org.apache.spark.sql.types.{ArrayType, StringType, StructField, StructType}
  7. import org.apache.hadoop.hbase.HBaseConfiguration
  8. import org.apache.hadoop.hbase.client.{Get, Put, Result, Scan}
  9. import org.apache.hadoop.hbase.io.ImmutableBytesWritable
  10. import org.apache.hadoop.hbase.mapred.TableOutputFormat
  11. import org.apache.hadoop.hbase.mapreduce.TableInputFormat
  12. import org.apache.hadoop.hbase.util.Bytes
  13. import org.apache.hadoop.mapred.JobConf
  14.  
  15. /**
  16. * Created by mi on 17-4-11.
  17. */
  18.  
  19. case class resultset(name: String,
  20. info: String,
  21. summary: String)
  22.  
  23. case class IntroItem(name: String, value: String)
  24.  
  25. case class BaikeLocation(name: String,
  26. url: String = "",
  27. info: Seq[IntroItem] = Seq(),
  28. summary: Option[String] = None)
  29.  
  30. case class MewBaikeLocation(name: String,
  31. url: String = "",
  32. info: Option[String] = None,
  33. summary: Option[String] = None)
  34.  
  35. object MysqlOpt {
  36.  
  37. def main(args: Array[String]): Unit = {
  38.  
  39. // 本地模式运行,便于测试
  40. val conf = new SparkConf().setAppName("WordCount").setMaster("local")
  41. // 创建 spark context
  42. val sc = new SparkContext(conf)
  43. val sqlContext = new SQLContext(sc)
  44. import sqlContext.implicits._
  45.  
  46. //定义数据库和表信息
  47. val url = "jdbc:mysql://localhost:3306/baidubaike?useUnicode=true&characterEncoding=UTF-8"
  48. val table = "baike_pages"
  49.  
  50. // 读取Hbase文件,在hbase的/usr/local/hbase/conf/hbase-site.xml中写的地址
  51. val hbasePath = "file:///usr/local/hbase/hbase-tmp"
  52.  
  53. // 创建hbase configuration
  54. val hBaseConf = HBaseConfiguration.create()
  55. hBaseConf.set(TableInputFormat.INPUT_TABLE, "student")
  56.  
  57. // 初始化jobconf,TableOutputFormat必须是org.apache.hadoop.hbase.mapred包下的!
  58. val jobConf = new JobConf(hBaseConf)
  59. jobConf.setOutputFormat(classOf[TableOutputFormat])
  60. jobConf.set(TableOutputFormat.OUTPUT_TABLE, "student")
  61.  
  62. val indataRDD = sc.makeRDD(Array("1,99,98","2,97,96","3,95,94"))
  63.  
  64. val rdd = indataRDD.map(_.split(',')).map{arr=>{
  65. /*一个Put对象就是一行记录,在构造方法中指定主键
  66. * 所有插入的数据必须用org.apache.hadoop.hbase.util.Bytes.toBytes方法转换
  67. * Put.add方法接收三个参数:列族,列名,数据
  68. */
  69. val put = new Put(Bytes.toBytes(arr(0)))
  70. put.add(Bytes.toBytes("course"),Bytes.toBytes("math"),Bytes.toBytes(arr(1)))
  71. put.add(Bytes.toBytes("course"),Bytes.toBytes("english"),Bytes.toBytes(arr(2)))
  72. //转化成RDD[(ImmutableBytesWritable,Put)]类型才能调用saveAsHadoopDataset
  73. (new ImmutableBytesWritable, put)
  74. }}
  75.  
  76. rdd.saveAsHadoopDataset(jobConf)
  77.  
  78. sc.stop()
  79.  
  80. }
  81.  
  82. }

3.从Hbase中读取数据

  1. import org.apache.spark.{SparkConf, SparkContext}
  2. import org.apache.spark.sql._
  3. import java.util.Properties
  4.  
  5. import com.google.common.collect.Lists
  6. import org.apache.spark.sql.types.{ArrayType, StringType, StructField, StructType}
  7. import org.apache.hadoop.hbase.HBaseConfiguration
  8. import org.apache.hadoop.hbase.client.{Get, Put, Result, Scan}
  9. import org.apache.hadoop.hbase.io.ImmutableBytesWritable
  10. import org.apache.hadoop.hbase.mapred.TableOutputFormat
  11. import org.apache.hadoop.hbase.mapreduce.TableInputFormat
  12. import org.apache.hadoop.hbase.util.Bytes
  13. import org.apache.hadoop.mapred.JobConf
  14.  
  15. /**
  16. * Created by mi on 17-4-11.
  17. */
  18.  
  19. case class resultset(name: String,
  20. info: String,
  21. summary: String)
  22.  
  23. case class IntroItem(name: String, value: String)
  24.  
  25. case class BaikeLocation(name: String,
  26. url: String = "",
  27. info: Seq[IntroItem] = Seq(),
  28. summary: Option[String] = None)
  29.  
  30. case class MewBaikeLocation(name: String,
  31. url: String = "",
  32. info: Option[String] = None,
  33. summary: Option[String] = None)
  34.  
  35. object MysqlOpt {
  36.  
  37. def main(args: Array[String]): Unit = {
  38.  
  39. // 本地模式运行,便于测试
  40. val conf = new SparkConf().setAppName("WordCount").setMaster("local")
  41. // 创建 spark context
  42. val sc = new SparkContext(conf)
  43. val sqlContext = new SQLContext(sc)
  44. import sqlContext.implicits._
  45.  
  46. //定义数据库和表信息
  47. val url = "jdbc:mysql://localhost:3306/baidubaike?useUnicode=true&characterEncoding=UTF-8"
  48. val table = "baike_pages"
  49.  
  50. // 读取Hbase文件,在hbase的/usr/local/hbase/conf/hbase-site.xml中写的地址
  51. val hbasePath = "file:///usr/local/hbase/hbase-tmp"
  52.  
  53. // 创建hbase configuration
  54. val hBaseConf = HBaseConfiguration.create()
  55. hBaseConf.set(TableInputFormat.INPUT_TABLE, "student")
  56.  
  57. // 从数据源获取数据并转化成rdd
  58. val hBaseRDD = sc.newAPIHadoopRDD(hBaseConf, classOf[TableInputFormat], classOf[ImmutableBytesWritable], classOf[Result])
  59.  
  60. println(hBaseRDD.count())
  61.  
  62. // 将数据映射为表 也就是将 RDD转化为 dataframe schema
  63. hBaseRDD.foreach{case (_,result) =>{
  64. //获取行键
  65. val key = Bytes.toString(result.getRow)
  66. //通过列族和列名获取列
  67. val math = Bytes.toString(result.getValue("course".getBytes,"math".getBytes))
  68. println("Row key:"+key+" Math:"+math)
  69. }}
  70.  
  71. sc.stop()
  72.  
  73. }
  74.  
  75. }

输出

  1. Row key: Math:99
  2. Row key: Math:97
  3. Row key: Math:95
  4. Row key:1 Math:99
  5. Row key:1000 Math:99
  6. Row key:2 Math:97
  7. Row key:3 Math:95

Spark学习笔记——读写Hbase的更多相关文章

  1. Spark学习笔记——读写HDFS

    使用Spark读写HDFS中的parquet文件 文件夹中的parquet文件 build.sbt文件 name := "spark-hbase" version := " ...

  2. Spark学习笔记——读写MySQL

    1.使用Spark读取MySQL中某个表中的信息 build.sbt文件 name := "spark-hbase" version := "1.0" scal ...

  3. spark学习笔记总结-spark入门资料精化

    Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用. ...

  4. Spark学习笔记之SparkRDD

    Spark学习笔记之SparkRDD 一.   基本概念 RDD(resilient distributed datasets)弹性分布式数据集. 来自于两方面 ①   内存集合和外部存储系统 ②   ...

  5. Spark学习笔记2(spark所需环境配置

    Spark学习笔记2 配置spark所需环境 1.首先先把本地的maven的压缩包解压到本地文件夹中,安装好本地的maven客户端程序,版本没有什么要求 不需要最新版的maven客户端. 解压完成之后 ...

  6. Spark学习笔记3(IDEA编写scala代码并打包上传集群运行)

    Spark学习笔记3 IDEA编写scala代码并打包上传集群运行 我们在IDEA上的maven项目已经搭建完成了,现在可以写一个简单的spark代码并且打成jar包 上传至集群,来检验一下我们的sp ...

  7. Spark学习笔记-GraphX-1

    Spark学习笔记-GraphX-1 标签: SparkGraphGraphX图计算 2014-09-29 13:04 2339人阅读 评论(0) 收藏 举报  分类: Spark(8)  版权声明: ...

  8. Hadoop学习笔记之HBase Shell语法练习

    Hadoop学习笔记之HBase Shell语法练习 作者:hugengyong 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令 ...

  9. HBase学习笔记之HBase的安装和配置

    HBase学习笔记之HBase的安装和配置 我是为了调研和验证hbase的bulkload功能,才安装hbase,学习hbase的.为了快速的验证bulkload功能,我安装了一个节点的hadoop集 ...

随机推荐

  1. 使用 P6Spy 来格式化 SQL 语句,支持 Hibernate 和 iBATIS

    事情起因 在处理一个查询小功能的时候,自认为 SQL 语句和传参均正确,然而查询结果无匹配数据,在查看 Hibernate 自带 SQL 语句输出的时候带着问好感觉有点不爽,特别是想复制 SQL 语句 ...

  2. 20172319 2018.10.19《Java程序设计教程》第7周课堂实践(补写博客)

    20172319 2018.10.19 <Java程序设计教程>第7周课堂实践 课程:<程序设计与数据结构> 班级:1723 学生:唐才铭 学号:20172319 指导老师:王 ...

  3. java.net.SocketException四大异常解决方案

    java.net.SocketException如何才能更好的使用呢?这个就需要我们先要了解有关这个语言的相关问题.希望大家有所帮助.那么我们就来看看有关java.net.SocketExceptio ...

  4. android:Button控件

    Button 是程序用于和用户进行交互的一个重要控件,相信你对这个控件已经是非常熟悉 了,因为我们在上一章用了太多次 Button.它可配置的属性和 TextView 是差不多的,我们 可以在 act ...

  5. ERROR: While executing gem … (Gem::RemoteFetcher::FetchError)

    原文地址:https://www.zfanw.com/blog/error-while-executing-gem-gem-remote-fetch-error.html 我对命令行下安装 gem 包 ...

  6. asp.net mvc流程图4.6以前

  7. windows Server 2008 R2 开关机取消登录时要按Ctrl+Alt+Delete组合键登录的方法

    1.点桌面任务栏的“开始-->运行”在弹出的窗口中输入gpedit.msc . 2.找到如下图所示的位置 右键属性进行设置如下

  8. Mac下安装Mysql以及修改Mysql密码

    1.安装Mysql 安装有2种办法,一种是下载mysql安装文件,慢慢安装,另一种就是下载xmpp,里面自带mysql,就像是安装普通的mac软件一样,安装完毕,就有了mysql了. 方法一,官网下载 ...

  9. 浅谈压缩感知(二十):OMP与压缩感知

    主要内容: OMP在稀疏分解与压缩感知中的异同 压缩感知通过OMP重构信号的唯一性 一.OMP在稀疏分解与压缩感知中的异同 .稀疏分解要解决的问题是在冗余字典(超完备字典)A中选出k列,用这k列的线性 ...

  10. 【转】iPhone X

    iPhone X 在 CIIA 第一期报告中,我剖析了 iPhone 从诞生以来就存在的,以及后来产生的一些设计问题.昨天在苹果店里玩了一下 iPhone X,发现它不但继承了以往的 iPhone 的 ...