2016-11-28 48 views
0

该场景是我需要处理一个文件(Input),并且对于每个需要检查输入文件中某些字段是否与存储在Hadoop集群中的字段匹配的记录。在MRJob中连接HIVE

我们正在考虑使用MRJob来处理输入文件,并使用HIVE从hadoop集群中获取数据。我想知道是否可以将MREob模块内部的HIVE连接起来。如果是这样怎么办?

如果不是什么将是完成我的要求的理想方法。

我是Hadoop,MRJob和Hive的新手。

请提供一些建议。 “

回答

0

”与存储在Hadoop集群中的字段匹配“。 - >你的意思是你需要搜索这个文件中的字段是否也存在?

大约需要扫描多少个文件?

一个解决方案是加载HBase表中的每个项目和输入文件中的每个记录,从表中“GET”记录。如果GET成功,那么记录存在于HDFS的其他地方,否则它不会。您需要每个HBase记录的唯一标识符,并且输入文件中也应该存在相同的标识符。

您也可以连接到Hive,但架构需要是刚性的,以便您的所有HDFS文件都能够加载到单个Hive表中。 HBase并不关心列(只有ColumnFamilies需要)。 MapReduce和Hive的另一个缺点是与HBase(接近实时)相比,速度会很低。

希望这会有所帮助。

+0

是的。例 我的输入文件是这样 输入文件: 名称,ADD1,ADD2,邮编, 马克,31楂,XXX,WF1 5XY 我需要检查是否字段“ADD1”的价值输入文件中名称为“Mark”的“31 Maybush”与群集中的数据名称相同。 – user1703319

+0

所有文件的模式是否完全相同?如果是,那么你可以创建一个Hive表,并将你拥有的所有数百/数千个文件加载到新的Hive表中。然后,您可以连接到从MapReduce运行Hive查询。您的Hive查询将如下所示:SELECT * FROM huge_hive_table WHERE add1 = '31 Maybush'AND name ='Mark';当然,当读取每个输入文件行时,您需要动态更改31 Maybush和Mark。 – AkashNegi

+0

上述方法的问题在于Hive中的每个查询都有一个MR作业,因此我们正在比较每一行,因此MR作业将针对输入文件中的每一行运行。如果你有2000行然后2000个MR作业进行比较。 – AkashNegi