功能1: 今天到现在为止 实战课程的访问量

yyyyMMdd    courseID

使用数据库来进行存储我们的统计结果
Spark Streaming把统计结果写入到数据库里面
可视化前端根据: yyyyMMdd courseId 把数据库里面的统计结果展示出来 选择什么数据库作为统计结果的存储呢?
RDBMS: MySQL、Oracle...
day courseId click_count
20171111 1 10
20171111 2 10 下一个批次数据进来以后:
20171111 + 1 ==> click_count + 下一个批次的统计结果 NoSQL: HBase、Redis...
HBase: 一个API就能搞定,非常方便
20171111 + 1 ==> click_count + 下一个批次的统计结果
本次课程为什么要选择HBase的一个原因所在 前置要求:
启动HDFS
启动ZK
启动HBase HBase表设计
创建表
create 'imooc_course_clickcount' , 'info'
Rowkey设计
day_courseId

如何使用Scala来操作HBase数据库呢?

定义: case clas
CourseClickCount.scala

package com.imooc.domain

/**
* 实战课程点击数
* @param day_course 对应的就是HBase中的rowkey,20171111_1
* @param click_count 对应的20171111_1的访问总数
*/
case class CourseClickCount(day_course: String, click_count: Int)

CourseClickCountDAO.scala

package com.imooc.dao

import com.imooc.domain.CourseClickCount
import scala.collection.mutable.ListBuffer /**
* 实战课程点击数数据访问层
*/
object CourseClickCountDAO { // 定义HBase的表名,列族,列名
val tableName = "imooc_course_clickcount"
val cf = "info"
val qualifer = "click_count" /**
* 保存数据到HBase
* @param list CourseClickCount集合
* 要实现sava这个方法,就需要HBase的工具类,暂时写
*/
def save(list: ListBuffer[CourseClickCount]): Unit = { } /**
* 根据rowkey查询值
* @param day_course
* @return
*/
def count(day_course: String):Long = {
0l
}
}

私有模式(单例模式)已构建完毕

HBaseUtils.scala
1.基本的私有构造方法

package com.imooc.utils;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import java.io.IOException; /**
* HBase操作工具类
*/
public class HBase2Utils { HBaseAdmin admin = null;
Configuration configuration = null; /**
*私有构造方法
*/
private HBase2Utils() {
// 加载HBase的配置文件 zookeeper rootdir
configuration = new Configuration();
configuration.set("hbase.zookeeper.quorum", "Master:2181");
configuration.set("hbase.rootdir", "hdfs://Master:8020/hbase"); try {
admin = new HBaseAdmin(configuration);
} catch (IOException e) {
e.printStackTrace();
}
} // Java单例模式
private static HBase2Utils instance = null; // synchronized 线程同步, 避免线程安全问题
public static synchronized HBase2Utils getInstance() {
if (instance == null) {
instance = new HBase2Utils();
}
return instance;
}
}

2.自定义的getTable方法及测试

    // 获取表名,获取后,进行测试
public HTable getTable(String tableName) { HTable table = null; try {
table = new HTable(configuration, tableName);
} catch (IOException e) {
e.printStackTrace();
} return table;
} // getTable方法的测试
public static void main(String[] args) { HTable table = HBase2Utils.getInstance().getTable("imooc_course_clickcount");
System.out.println(table.getName().getNameAsString());
}

运行测试代码,看控制台输出,没有输出,取hbase中查看表内数据 list desc scan
table
rowkey
columnfamily column value


3.自定义的put方法及测试

/**
* 添加一条记录到HBase表
* @param tableName 表名
* @param rowkey 表的rowkey
* @param cf 表的列族columnfamily
* @param column 表的列
* @param value 表的值
*/
public void put(String tableName, String rowkey, String cf, String column, String value) {
HTable table = getTable(tableName);
Put put = new Put(rowkey.getBytes());
put.add(cf.getBytes(), column.getBytes(), value.getBytes()); try {
table.put(put);
} catch (IOException e) {
e.printStackTrace();
}
} // put方法的测试
public static void main(String[] args) { // put中需要传入的参数: String tableName, String rowkey, String cf, String column, String value
String tableName = "imooc_course_clickcount";
String rowkey = "20171111_88";
String cf = "info";
String column = "click_count"; //访问量的key
String value = "10"; // 访问量value HBase2Utils.getInstance().put(tableName,rowkey,cf,column,value); }

运行测试代码,看控制台输出,没有输出,取hbase中查看表内数据 list desc scan
table
rowkey
columnfamily column value
scan "imooc_course_clickcount", 看是否有数据添加



功能一: 数据库访问DAO层方法定义的更多相关文章

  1. MyBatis框架的XML数据访问Dao层接口的组合使用

    MyBatis 的前生为Apache的开源项目iBatis.其优势在于灵活,几乎可以替代JDBC,同时提供了编程接口.目前MyBatis的数据访问Dao层不需要实现类,也不需要像JDBC那样拼接Hql ...

  2. PDO是一个“数据库访问抽象层”

    PDO是一个"数据库访问抽象层",作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力:与ADODB和MDB2相比,PDO更高 ...

  3. MyBatis dao层 方法传参

    MyBatis dao层 方法传参有三种方法. 1. 以下标的方法获取参数. <update id="insertSuccessKilled">       INSER ...

  4. ssm项目dao层方法异常:org.apache.ibatis.binding.BindingException: Invalid bound statement

    在IntelliJ IDEA中用ssm框架搭建了一个demo项目,在执行到dao层方法时抛出这个异常: org.apache.ibatis.binding.BindingException: Inva ...

  5. 通过Oracle数据库访问控制功能的方法(Database access control)

    修改sqlnet.ora文件中的IP列表后都需要重启监听才能生效.(原文是: Any changes to the values requires the TNS listener to be sto ...

  6. SSM实战——秒杀系统之DAO层实体定义、接口设计、mybatis映射文件编写、整合Spring与Mybatis

    一:DAO实体编码 1:首先,在src目录下,新建org.myseckill.entity包,用于存放实体类: 2:实体类设计 根据前面创建的数据库表以及映射关系,创建实体类. 表一:秒杀商品表 对应 ...

  7. dao层方法中的@Param说明

    1.采用@Param的方法可有多个参数 public void abc(@Param("userName") String name,@Param("password&q ...

  8. [转]JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分

    首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操 ...

  9. 033医疗项目-模块三:药品供应商目录模块——供货商药品目录t添加查询功能----------Dao层和Service层和Action层和调试

    什么叫做供货商药品目录t添加查询功能?就是说我们前面的博客里面不是说供货商登录后看到了自己供应的药品了么如下: 现在供货商想要往里面添加别的药品,那么这个药品的来源就是卫生局提供的那个Ypxx表(药品 ...

随机推荐

  1. mysql启动参数 skip-grant-tables

    非常有用的mysql启动参数—— --skip-grant-tables. 顾名思义,就是在启动mysql时不启动grant-tables,授权表.有什么用呢?当然是忘记管理员密码后有用. 在mysq ...

  2. web图形方案比较html5、GML、SVG、VML

    GML.SVG和VML都是基于XML的可用来描述矢量图形的标记语言,都是XML词表,它们的语法并不难理解,但它们都有各自不同的用途和特点,下面简单介绍一下. GML(Geography Markup  ...

  3. MinDos--操作系统

    MinDos--操作系统 总结 : 本次实现的是功能是为 (1)自行定义系统提示符 (2)自定义命令集(8-10个) (3)用户输入HELP以查找命令的帮助 (4)列出命令的功能,区分内部还是外部命令 ...

  4. Java 设计模式系列(十八)备忘录模式(Memento)

    Java 设计模式系列(十八)备忘录模式(Memento) 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式.备忘录对象是一个用来存储另外一个对象内部状态 ...

  5. 查看linux服务器状态常用命令

    最近发现大数据技术的一些部署.高可用.集群等和网站的负载均衡.自动化运维.灾备等其实有很多知识都是重合的,要学好linux运维相关,在大数据的研究上也会有所提高.既然工作需要去系统的去学习linux运 ...

  6. platform总线驱动代码分析

    /************************************************************************/ Linux内核版本:2.6.35.7 运行平台:三 ...

  7. InstaGAN: Instance-Aware Image-to-Image Translation

  8. .NET基础 (09)常用集合和泛型

    常用集合和泛型1 int[]是引用类型还是值类型2 数组之间如何进行转换3 解释泛型的基本原理4 什么是泛型的主要约束和次要约束 常用集合和泛型1 int[]是引用类型还是值类型 数组类型是一族类型, ...

  9. ZOJ1648 Circuit Board 2017-04-18 20:31 34人阅读 评论(0) 收藏

    Circuit Board Time Limit: 2 Seconds      Memory Limit: 65536 KB On the circuit board, there are lots ...

  10. ZSTU4269 买iphone 2017-03-22 14:31 73人阅读 评论(0) 收藏

    4269: 买iphone Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 1710  Solved: 316 Description 自从上次仓鼠中了 ...