这听起来可能是个愚蠢的问题。我可能会编写一个MR代码,它可以将输入和输出作为HDFS的位置,然后我真的不需要担心hadoop/先生的并行计算能力(如果我错了,请纠正我)。
但是,如果我的输入不是HDFS位置,比如我将一个mongodb://localhost:27017/mongo_hadoop.messages数据作为输入--运行映射器和减法器,并将数据存储回mongodb,那么HDFS将如何进入画面。我的意思是,如何确保1GB或任何大小的大文件首先在HDFS上分发,然后在其上执行并行计算?是这个直接URI不会分发数据吗?我需要接受BSON文件,将它加载到HDFS上,然后将HDFS路径作为MR的输入,或者框架本身就足够聪明了?
如果上面的问题太愚蠢或者根本没有任何意义,我很抱歉。我对大数据非常陌生,但非常兴奋地投入到这个领域。
谢谢。
发布于 2014-10-24 05:18:01
对不起,我对MongoDb不太确定。
如果您只想知道,如果我们使用数据源是一个表,那么当MapRed使用HBase时,这就是我的答案。
我们将使用TableInputFormat在MapRed作业中使用Hbase表。
来自http://hbase.apache.org/book.html#hbase.mapreduce.classpath
7.7.图-任务拆分7.7.1。默认的HBase MapReduce拆分器
当TableInputFormat用于在MapReduce作业中获取HBase表时,它的拆分器将为表的每个区域创建一个映射任务。因此,如果表中有100个区域,则不管扫描中选择了多少列族,都会有100个映射任务。
7.7.2.自定义分离器
有关那些对实现自定义拆分器感兴趣的人,请参见TableInputFormatBase中的方法TableInputFormatBase。这就是地图任务分配的逻辑所在。
https://stackoverflow.com/questions/26519657
复制相似问题