频道栏目
首页 > 网络 > 云计算 > 正文

基于HBase的冠字号查询系统1--理论部分

2016-06-06 09:03:32           
收藏   我要投稿

1. 软件版本和部署

maven:3.3.9,jdk:1.7 ,Struts2:2.3.24.1,hibernate:4.3.6,spring:4.2.5,MySQL:5.1.34,Junit:4,Myeclipse:2014;

Hadoop2.6.4,HBase1.1.2

源码下载:https://github.com/fansy1990/ssh_v3/releases

数据下载:http://download.csdn.net/detail/fansy1990/9540865 或 http://pan.baidu.com/s/1dEVeJz7

2. 背景&思路

目前针对钞票识别,一般都是使用看、摸、听、测四种方式,这里使用一种比较客观的方式类进行识别。 建设冠字号管理查询系统,以冠字号查询为手段,有效解决银行对外误付假币的问题。从源头解决伪钞问题。

本系统就是使用客观的方法来验证伪钞。本系统采用的方案是基于冠字号的,每张人民币的冠字号是唯一的,如果有一个大表可以把所有的人民币以及人民币对应的操作(在什么时间、什么地点存入或获取)记录下来,这样在进行存取时就可以根据冠字号先查询一下,看当前冠字号对应的纸币在大表中的保存的情况,这样就可以确定当前冠字号对应的纸币是否是伪钞了(这里假设在大表中的所有冠字号对应的钞票都是真钞)。

下面对应存储场景:

 

 

存/取

最近状态(表中有无)

真钞/伪钞

场景1

伪钞

场景2

真钞

场景3

有(此时没有无状态)

真钞


目前,基于传统数据库存储数据一般在千万级别(受限于查询等性能),但是如果要存储所有钞票的信息以及其被存储或获取的记录信息,那么传统数据库肯定是不能胜任的。所以本系统是基于HBase的。

3. 功能指标

? 存储万级用户信息;

? 存储百万级别钞票信息;

? 支持前端业务每秒500+实时查询请求;

? 数据存储和计算能够可扩展;

? 提供统一接口,支持前端相关查询业务;

说明: 其中前两条,万级用户信息和百万级钞票信息是根据数据确定的,这里可以根据数据以及集群的大小进行调整(如果集群够大,存储信息也可以很大);

4. 架构

\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" />

冠字号查询系统包括下面5层:

? 数据层:包括基础数据MySQL、文档、Web数据等;

? 数据处理层:主要是数据的加载,包括MR加载方式、Java API加载模式、Sqoop加载模式等;

? 数据存储层:主要是HBase存储,包括钞票的所有信息以及用户信息等;

? 数据服务层:主要是对外提供查询、存储等接口服务;

? 数据应用层:存取钞系统,在存钞时设计到伪钞识别;其他应用系统;

5. 表设计

5.1原始数据:

冠字号存储记录(冠字号,表中是否有该冠字号(0表示没有,1表示有),存储或取时间,存储或取所在银行编号,用户id):

\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" />

 

用户信息表(用户Id,名字,出生日期,性别,地址,手机号,绑定银行编号):

\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" />

 

 

5.2冠字号记录

对数据进过初步探索,发现冠字号规律如下:

AAA[A~Z][0000~9999]

AAB[A~Z][0000~9999]

如果集群有四个节点,设置region初始为4,那么三个split点为:AAAM9999,AAAZ9999,AABM9999;

假设每个用户每天进行10次操作,如果要保存100天数据,那么设置版本数为1000,则建表语句如下:

create 'records',{NAME=>'info',VERSIONS=>1000},SPLITS =>['AAAM9999','AAAZ9999','AABM9999']

表结构描述如下:

主键/列簇

字段名称

字段含义

字段值举例

备注

rowkey

-

表主键(钞票冠字号)

AAAA0000

 

timestamp

-

时间戳

1414939140000

long型(可以存储用户操作的时间)

info

-

列簇

-

who、when、where做了哪些操作

exist

是否存在

1

如果用户是存储行为,那么在行为结束后,该值为1

uid

用户ID

4113281991XXXX9919

 

bank

存取钞银行

SPDBCNSH

银行编号



5.3用户信息

对数据进过初步探索,发现用户信息规律如下:

41132819[89~92]XXXX[0000~9999]

如果集群有四个节点,设置region初始为4,那么三个split点为:4113281990XXXX0000,4113281991XXXX0000,4113281992XXXX0000;

则建表语句如下:

create 'user',{NAME=>'info'},SPLITS =>['4113281990XXXX0000','4113281991XXXX0000','4113281992XXXX0000']

表结构描述如下:

 

主键/列簇

字段名称

字段含义

字段值举例

备注

Rowkey

-

用户主键(身份证号)

4113281991XXXX9919

 

Timestamp

-

时间戳

1414939140000

long型

info

-

列簇

-

用户信息

name

用户名

JACO

 

gender

用户性别

femail

 

bank

用户注册银行

SPDBCNSH

银行编号

address

用户住址

EXX-O94-1319151759

 

 

birthday

用户出生年月

1981-10-20 09:12

 

6. 数据加载

系统在投入使用的时候,已经存在历史数据,需要把历史数据批量导入到系统中;在人民币首次发行时,也需要批量导入系统中。这里的导入直接使用MR导入。

MR设计成一个通用的数据从HDFS导入HBase的MR:

6.1 主类:

package ssh.mr;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.util.Tool;

import ssh.util.HadoopUtils;

/**
 * Job Driver驱动类
 * 
 * @author fansy
 * 
 */
public class ImportToHBase extends Configured implements Tool {
	public static final String SPLITTER = "SPLITTER";
	public static final String COLSFAMILY = "COLSFAMILY";
	public static final String DATEFORMAT = "DATEFORMAT";

	@Override
	public int run(String[] args) throws Exception {
		if (args.length != 5) {
			System.err
					.println("Usage:\n demo.job.ImportToHBase     ");
			return -1;
		}
		if (args[3] == null || args[3].length() < 1) {
			System.err.println("column family can't be null!");
			return -1;
		}
		Configuration conf = getConf();
		conf.set(SPLITTER, args[2]);
		conf.set(COLSFAMILY, args[3]);
		conf.set(DATEFORMAT, args[4]);
		TableName tableName = TableName.valueOf(args[1]);
		Path inputDir = new Path(args[0]);
		String jobName = "Import to " + tableName.getNameAsString();
		Job job = Job.getInstance(conf, jobName);
		job.setJarByClass(ImportMapper.class);
		FileInputFormat.setInputPaths(job, inputDir);
		job.setInputFormatClass(TextInputFormat.class);
		job.setMapperClass(ImportMapper.class);

		TableMapReduceUtil.initTableReducerJob(tableName.getNameAsString(),
				null, job);
		job.setNumReduceTasks(0);
		HadoopUtils.setCurrJob(job);// 设置外部静态Job
		return job.waitForCompletion(true) ? 0 : 1;
	}

}
主类的run方法中使用的是传统的MR导入HBase的代码,只是设置了额外的参数,这里主类参数意思解释如下:

input: HDFS输入数据路径;

splitter : 输入数据字段分隔符;

tableName : 表名;

: 列描述, rk代表rowkey以及rowkey所在列、ts代表timestamp及其所在列;示例数据说明原始数据,第一列为rowkey,第二列为timestamp所在列,第三列属于列簇col1,同时列名为q1,第4列属于列簇col2,同时列名为q1;

date_format : timestamp日期格式,如果列描述中没有ts那么就代表原始数据中没有timestamp,则此参数没有意义;

6.2 Mapper:

package ssh.mr;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

/**
 * Mapper类,接收HDFS数据,写入到HBase表中
 * @author fansy
 *
 */
public class ImportMapper extends Mapper{
	private static final String COMMA = ",";
	private static final String COLON=":";
	private String splitter = null;
//	private String colsStr = null;
	
	private int rkIndex =0; // rowkey 下标
	private int tsIndex =1; // timestamp下标
	private boolean hasTs = false; // 原始数据是否有timestamp
	
	private SimpleDateFormat sf = null;
	
	private ArrayList colsFamily= null;
	
	private Put put =null;

	ImmutableBytesWritable rowkey = new ImmutableBytesWritable();
	@Override
	protected void setup(Mapper.Context context)
			throws IOException, InterruptedException {
		splitter = context.getConfiguration().get(ImportToHBase.SPLITTER,",");
		String colsStr = context.getConfiguration().get(ImportToHBase.COLSFAMILY,null);
		
		sf = context.getConfiguration().get(ImportToHBase.DATEFORMAT,null)==null
				? new SimpleDateFormat("yyyy-MM-dd HH:mm")
						:new SimpleDateFormat(context.getConfiguration().get(ImportToHBase.DATEFORMAT));
		
		String[] cols = colsStr.split(COMMA, -1);
		
		colsFamily =new ArrayList<>();
		for(int i=0;i< cols.length;i++){
			if("rk".equals(cols[i])){
				rkIndex= i;
				colsFamily.add(null);
				continue;
			}
			if("ts".equals(cols[i])){
				tsIndex = i;
				colsFamily.add(null);
				hasTs = true; // 原始数据包括ts
				continue;
			}
			colsFamily.add(getCol(cols[i]));
		}
		
	}
	/**
	 * 获取 family:qualifier byte数组
	 * @param col
	 * @return
	 */
	private byte[][] getCol(String col) {
		byte[][] fam_qua = new byte[2][];
		String[] fam_quaStr = col.split(COLON, -1);
		fam_qua[0]=  Bytes.toBytes(fam_quaStr[0]);
		fam_qua[1]=  Bytes.toBytes(fam_quaStr[1]);
	
		return fam_qua;
	}

	@Override
	protected void map(LongWritable key, Text value,
			Mapper.Context context)
					throws IOException, InterruptedException {
		String[] words = value.toString().split(splitter, -1);
		
		if(words.length!=colsFamily.size()){
			System.out.println("line:"+value.toString()+" does not compatible!");
			return ;
		}
		
		rowkey.set(getRowKey(words[rkIndex]));
		
		put = getValue(words,colsFamily,rowkey.copyBytes());
		
		context.write(rowkey, put);
		
	}
	/**
	 * 获取Put值
	 * @param words
	 * @param colsFamily
	 * @param bs
	 * @return
	 */
	private Put getValue(String[] words, ArrayList colsFamily, byte[] bs) {
		Put put = new Put(bs);
		
		for(int i=0;i

Mapper是整个流程的核心,主要负责进行数据解析、并从HDFS导入到HBase表中的工作,其各个部分功能如下:

? setup():获取输入数据字段分隔符,获取列簇、列名,获取rowkey列标,获取ts格式及列标(如果没有的话,就按照插入数据的时间设置);

? map():解析、过滤并提取数据(需要的字段数据),生成Put对象,写入HBase;

 

6.3 针对records,user MR导入:

 

只需要进行拼凑参数,然后直接调用即可。

7. 实时数据加载

使用Java API来操作HBase数据库,完成实时HBase数据库更新,包括冠字号查询、存取款等功能。

上一篇:大数据架构的典型方法和方式
下一篇:TaoCloudSSAN+VMWarevSphere超融合解决方案
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站