这听起来可能是个愚蠢的问题。我可能会编写一个MR代码,它可以将输入和输出作为HDFS的位置,然后我真的不需要担心hadoop/先生的并行计算能力(如果我错了,请纠正我)。
但是,如果我的输入不是HDFS位置,比如我将一个mongodb://localhost:27017/mongo_hadoop.messages数据作为输入--运行映射器和减法器,并将数据存储回mongodb,那么HDFS将如何进入画面。我的意思是,如何确保1GB或任何大小的大文件首先在HDFS上分发,然后在其上执行并行计算?是这个直接URI不会分发数据吗?我需要接受BSON文件,将它加载到HDFS上,然后将HDFS路径作为MR的输入,或者框架本身就足够聪明了?
如果上面的问题太愚蠢或者根本没有任何意义,我很抱歉。我对大数据非常陌生,但非常兴奋地投入到这个领域。
谢谢。
发布于 2014-10-24 05:28:41
您正在描述DBInputFormat。这是一种从外部数据库读取拆分的输入格式。HDFS只涉及设置作业,而不涉及实际输入。还有一个DBOutputFormat。对于像DBInputFormat这样的输入,分裂是合乎逻辑的,例如。关键范围。
请阅读使用Apache访问数据库以获得详细解释。
发布于 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。这就是地图任务分配的逻辑所在。
发布于 2014-12-01 03:27:38
这是个好问题,不傻。
1.
"mongodb://localhost:27017/mongo_hadoop.messages和运行我的映射器和还原器,并将数据存储回mongodb,HDFS将如何进入画面。“
在这种情况下,您不必考虑hdfs。你不需要做任何与hdf相关的事情。就像用每个线程编写一个多线程应用程序一样,将数据写入mongodb。
事实上,hdfs是独立于map减少的,而map减少也是独立于hdfs的。所以,你可以把它们分开使用,也可以一起使用,作为你的愿望。
2.如果您想要输入/输出db以映射减少,则表示考虑DBInputFormat,但这是另一个问题。
现在,hadoop DBInputFormat只支持JDBC。我不确定是否有一些mongodb版本的DBInputFormat。也许你可以自己搜索或者实现它。
https://stackoverflow.com/questions/26519657
复制相似问题