结合Hadoop MapReduce和数据库查询



在处理一些大型HDFS文件之前,我正在运行的某个作业需要从数据库(MySQL,尽管这并不相关)收集一些元数据。这些元数据将添加到文件中的数据中,并传递到稍后的映射/合并/减少阶段。

我想知道这个查询的"正确"位置可能在哪里。我需要元数据在映射器开始时可用,但把它放在那里似乎是多余的,因为每个映射器都会执行相同的查询。如何(如果有的话)执行一次此查询并在所有映射器之间共享其结果?是否有一种通用的方法在执行任务的所有节点之间共享数据(而不是将数据写入HDFS)?谢谢

您可以将MYSql查询放在主函数中,查询结果可以存储在字符串中。然后,您可以将变量设置为Hadoop作业配置对象。所有映射程序都可以访问Configuration对象中设置的变量

你的主课是这样的
JobConf conf = new JobConf(Driver.class);
String metainfo = <You metadata Info goes here>;
conf.set("metadata",metainfo);



因此,在Map Class中,您可以访问元数据值,如下所示

publi class Map(...){

String sMetaInfo="";

public void configure(JobConf job) {

sMetaInfo= job.get("metadata"); // Getting the metadata value from Job Configureation Object

}
public void map(....){

// Map Function
}

}

如果您有cloudera分发版,我会使用swamp。我通常用java中的级联进行编程,对于数据库源代码,使用dbmigrate作为源代码"抽头",使dbs成为一流的公民。当将pks与dbmigrate一起使用时,性能已经足够了。

相关内容

  • 没有找到相关文章

最新更新