Google 云计算平台的关键技术分别是GFS、MapReduce 和BigT albe, Hadoop 是与Google 云平台关键技术的开源实现, 其中, Hadoop MapReduce 也是一种典型的并行开源云计算模型.此章节讲述利用MapReduce和BigTable原理实现半结构化数据的完全差异比较。
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。
关键伪代码如下:
public class CompletelyCompare {
int version=0;//存储数据的版本号
int keyspositon[]=getPosition();
private final static IntWritable insert = new IntWritable(1);
private final static IntWritable update= new IntWritable(2);
public static class Map extends Mapper {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line[] = value.toString().split('\n');// 将文本分解为若干行
if(version==0){
for(int i=0;i
String[] data=line.split();//将此行的数据由字符串转化为数组
String[] keys=getkeys(data,keyspositon);//获得行的关键字
saveLine(domd5(value),domd5(keys),data);// 存储的HBASE,以Md5值作为关键字
context.write(new Text(value), insert);// 输出到reduce工作流
}
}
else{
for(int i=0;i
String[] data=line.split();//将此行的数据由字符串转化为数组
String[] keys=getkeys(data,keyspositon);//获得行的关键字
String totalMd5=domd5(date);
String keyMd5=domd5(keys);
if(!checkExist(totalMd5)){//如果全局md5值不存在,则进一步检验主键的md5值
if(checkExist(keyMd5)){
updateLine(totalMd5,line)//如果主键md5的值存在,在为更新操作
context.write(new Text(value), update)
}
else{//否则为插入操作
saveline(totalMd5,keyMd5,line)
context.write(new Text(value), insert)}
}
}
}
}
public static class Reduce extends Reducer {
public void reduce(Text key, Iterable values, Context context)
throws IOException, InterruptedException {
StringBuffer result=new StringBuffer();
for (IntWritable val : values) {//根据key值遍历所有由map工作发布过来的数据
result.append(val.get());}
context.write(key, new Text(result));//输出数据,由ETL系统调用
}
}
}
