mapreduce和hbase关系(mapreduce和hbase关系 正确的是)

本篇文章给大家谈谈mapreduce和hbase关系,以及mapreduce和hbase关系 正确的是对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

hadoop和mapreduce是一种什么关系?

hadoop是google的云计算系统的开源实现,谷歌集群系统主要包括三个部分:分布式文件系统GFS,分布式并行闹洞计算模型map/慎虚reduce,以及分布式数据库Bigtable,hadoop也实现了这三个,GFS对应HDFS,hadoop的map/reduce对应谷歌的map/reduce模型,宽弯燃Hbase对应Bigtable。

也就是map/reduce是谷歌提出的一种云计算模型,hadoop用java开源实现了

[img]

hive,impala,kfk,hbase,mitaka的关系是怎样的

hbase在三者中更注重的是存储,它实现了类似mysql的double write机制,但是它是一种NoSQL的数据库,并且是可以支持列式存储的,算是比较大的一个内存Hash表。hbase也采用了类似mysql中的mvcc的思想通过时间戳来做版本控制。

hbase是在hdfs基础之上的,可以算是数据友仿老的一种组织方式,是一种基于hadoop的分布式数据库大谈系统。从数据库的角度来说,与mysql处在同一个层次,都是基于文件系统之上的管理数据的一种方法。

hbase作为面向列的数据库,支持按列读取和行读取,并解决了关系型数据库的分表的一些需求,如:关系型数据库中有些表的列重复数据太多了,需好升要重新建表来存重复列的数据,减少表的大小。

hive和impala则更偏向于查询分析,impala需要依赖hive的元数据,它们都有自己的查询分析引擎,只是impala是纯查询分析引擎。

hive 本身并不执行任务的分析过程,而是推给了mapreduce,这点与impala大不同,hive本身提供了数据的格式化输出功能,但是hive转换的mr可能不是最高效的,调优方式有限,很多复杂的算法没有办法表达,毕竟sql的语义表达能力有限。

hive与impala在查询分析这部分,hive明显的支持程度要比impala高,提供了很多内部函数,并且支持UDAF,UDF的方式

从数据库特性角度来看,hive与hbase的对比,hive不能修改数据,只能追加的方式,hbase允许增加和删除数据,hive不支持索引,impala和hive都是没有存储引擎的,hbase算是有自己的存储引擎。

在使用层面上来看,hive在使用上更像数据库,它提供非常丰富的系统函数,各种数据的操作,hbase在这方面就不太像一般的关系型数据库,它还是一个key-val的NoSQL,这方面的操作支持很有限,impala在这方面也是比较弱。

在计算模型层面上来看,hive是通过MR来计算的,这是一个偏向挪动数据到mr的计算节点来计算的模型,而impala则更多的是移动计算需求到DN上来做,数据不用动,最后变成了本地的磁盘IO。

hbase依赖什么提供消息通信机制

HBase依赖Zookeeper提供消息通信机制斗做。与FUJITSU Cliq等商用大数据产品不同,HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统。

HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处陵销数理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据。

扩展资料

HBase是Apache的Hadoop项目的子项目,其文件均存储在HDFS上。HBase依赖于Hadoop,因此其计算也依赖Hadoop的Mapreduce。根据Zookeeper的特性,最少是3个,既满足奇数的要求,又满足集群的要求。

在hbase中每当有memstore数据flush到磁盘之后,就形成一个storefile,当storeFile的数量达到一定程度后,就需要将 storefile 文件来进行 compaction 操尺首作。

Hbase与HDFS是个什么关系

他们的关系是:hbase是一个内存数据库,而hdfs是一个存储空间;是物品和房子的关系。

hdfs只是一个存储空间,他的完整名字是分布式文件系州旅并统。从名字可知他的作用了。

hbase是一个内存数据库,简单点说hbase把表啊什么的存镇肆在hdfs上。

Hbase与HDFS的性质和属性。

1、Hbase是Hadoop database,即Hadoop数据库。它是一个适合于非结构化数据存储的数据库,HBase基于列的而不是基于行的模式。

HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据。

2、HDFS是GFS的一种实现,他的完整名字是分布式文件系统,类似于FAT32,NTFS,是一种文件格式册迹,是底层的。

Hive与Hbase的数据一般都存储在HDFS上。Hadoop HDFS为他们提供了高可靠性的底层存储支持。

如何用MapReduce程序操作hbase

先看一个标准的hbase作为数据读取源和输出目标的样例:

Configuration conf = HBaseConfiguration.create();

Job job = new Job(conf, "job name ");

job.setJarByClass(test.class);

Scan scan = new Scan();

TableMapReduceUtil.initTableMapperJob(inputTable, scan, mapper.class, Writable.class, Writable.class, job);

TableMapReduceUtil.initTableReducerJob(outputTable, reducer.class, job);

job.waitForCompletion(true);

和普通的mr程序不同的是,不再用job.setMapperClass()和job.setReducerClass()来设置mapper和reducer,而用TableMapReduceUtil的initTableMapperJob和initTableReducerJob方法来实现。此处的TableMapReduceUtil是hadoop.hbase.mapreduce包中的,而不是hadoop.hbase.mapred包中的。

数据输入源是hbase的inputTable表,执行mapper.class进行map过程,输出的key/value类型是 ImmutableBytesWritable和Put类型,最后一个参数是作业对象。需要指出的是需要声明一个前丛扫描读入对象scan,进行表扫描读取数据用,其中scan可以配置参数。

数据槐歼输出目标是hbase的outputTable表,输出执行的reduce过程是reducer.class类,操作的作业目标是job。与map比缺少输出类型的标注,因为他们不是必要的,看过源代码就知道mapreduce的TableRecordWriter中write(key,value) 方法中,key值是没有用到的,value只能是Put或者Delete两种类型,write方法会自行判断并不用用户指明。

mapper类从hbase读取数据,所以输入的

public class mapper extends TableMapperKEYOUT, VALUEOUT {

public void map(Writable key, Writable value, Context context)

throws IOException, InterruptedException {

//mapper逻辑

context.write(key, value);

}

}

mapper继承的是TableMapper类,后边跟的两个泛型参数指定mapper输出的数据类型,该类型必须继承自Writable类,例如可能用到的put和delete就可以。需要注意的是要和initTableMapperJob 方法指定的数据类型一致。该过程会自动从指定hbase表内一行一行读取数据进行处理。

reducer类将数据写入hbase,所以输出的

public class reducer extends TableReducerKEYIN, VALUEIN, KEYOUT {

public void reduce(Text key, IterableVALUEIN values, Context context)

throws IOException, InterruptedException {

//reducer逻辑

context.write(null, put or delete);

}

}

reducer继承的是TableReducer类,后边指定三个泛型参数,前两个必须对应map过程的输出key/value类型,第三个是 The type of the output key,write的时候可以把key写成IntWritable什么的都行,它是不必要的。这样reducer输出的数据会自动插入outputTable指定的表内。

TableMapper和TableReducer的本质就是为了简化一下书写代码,因为传入的4个泛型参数里都会有固定的参数类型,所以铅悔冲是Mapper和Reducer的简化版本,本质他们没有任何区别。源码如下:

public abstract class TableMapperKEYOUT, VALUEOUT

extends MapperImmutableBytesWritable, Result, KEYOUT, VALUEOUT {

}

public abstract class TableReducerKEYIN, VALUEIN, KEYOUT

extends ReducerKEYIN, VALUEIN, KEYOUT, Writable {

}

封装了一层确实方便多了,但也多了很多局限性,就不能在map里写hbase吗?

我他么试了一下午,约5个小时,就想在map里读hdfs写hbase,莫名其妙的各种问题,逻辑上应该没有错,跟着别人的文章做的。最后还是通过IdentityTableReducer这个类实现了,what's a fucking afternoon!

官方对IdentityTableReducer的说明是:Convenience class that simply writes all values (which must be Put or Delete instances) passed to it out to the configured HBase table.

这是一个工具类,将map输出的value(只能是Put或Delete)pass给HBase。看例子:

import java.io.IOException;

import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Job;

import org.apache.hadoop.mapreduce.Mapper;

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import org.apache.hadoop.util.GenericOptionsParser;

import org.apache.hadoop.hbase.HBaseConfiguration;

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

import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;

import org.apache.hadoop.hbase.mapreduce.IdentityTableReducer;

public class WordCount

{

public static class TokenizerMapper

extends MapperObject, Text, Text, Put

{

private Text word = new Text();

public void map(Object key, Text value, Context context)

throws IOException, InterruptedException

{

StringTokenizer itr = new StringTokenizer(value.toString());

while (itr.hasMoreTokens())

{

word.set(itr.nextToken());

Put putrow = new Put(word.toString().getBytes());

putrow.add("info".getBytes(), "name".getBytes(),"iamvalue".getBytes());

context.write(word, putrow);

}

}

}

public static void main(String[] args) throws Exception

{

Configuration conf = HBaseConfiguration.create();

String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();

Job job = new Job(conf, "hdfs to hbase");

job.setJarByClass(WordCount.class);

job.setMapperClass(TokenizerMapper.class);

job.setMapOutputKeyClass(Text.class);

job.setMapOutputValueClass(Put.class);//important

FileInputFormat.addInputPath(job, new Path(otherArgs[0]));

TableMapReduceUtil.initTableReducerJob("test", IdentityTableReducer.class, job);

job.setNumReduceTasks(0);

System.exit(job.waitForCompletion(true) ? 0 : 1);

}

}

无论是什么方法吧,总算可以运行了!

MapReduce和HBase结合,似乎是这样一种框架:map读HBase,reduce写HBase。使用IdentityTableReducer就是处于这样一种框架之内。

运行操作HBase的MapReduce程序的第2种方式:HADOOP_CLASSPATH的设置

在我《HBase操作》一文中提到了运行操作HBase的MapReduce程序的两种方式,现在说明下另一种方式。

打开hadoop/etc/hadoop/hadoop-env.sh,在设置HADOOP_CLASSPATH的后面添加下面的语句,即将hbase的jar包导入:

for f in /home/laxe/apple/hbase/lib/*.jar; do

if [ "$HADOOP_CLASSPATH" ]; then

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$f

else

export HADOOP_CLASSPATH=$f

fi

done

然后就可以用最初的运行MapReduce的方式来运行了。

Hbase与HDFS是什么关系?

HDFS是GFS的一种实现,他的完整名字是分布式文件漏槐系统,类似于FAT32,NTFS,是一种文件格式,是底层的,Hadoop HDFS为HBase提供了高携顷可靠性的底层存储支持。

HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作返隐友为其文件存储系统。

扩展资料:

Hadoop 中各模块的作用: 

1、Hadoop HDFS为HBase提供了高可靠性的底层存储支持。

2、Hadoop MapReduce为HBase提供了高性能的计算能力。

3、Zookeeper为HBase提供了稳定服务和failover机制。

4、Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变得非常简单。

5、Sqoop则为HBase提供了方便的RDBMS(关系型数据库)数据导入功能,使得传统数据库数据向HBase中迁移变得非常方便。

参考资料来源:百度百科-HBase

关于mapreduce和hbase关系和mapreduce和hbase关系 正确的是的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表