Hadoop 将参数传递给MapReduce程序

Hadoop 将参数传递给MapReduce程序,hadoop,mapreduce,Hadoop,Mapreduce,我需要将一些参数传递给映射程序。这些参数的值需要从数据库中获取,并且这些值是动态的。我知道如何使用配置API传递参数。如果我编写JDBC代码从驱动程序或客户端的数据库中检索这些值,然后将这些值设置为配置API,那么该代码将执行多少次。驱动程序代码将在hadoop框架识别的每个数据节点上分发和执行,以运行MR程序 执行此操作的最佳方法是什么?是将在每台机器上执行驱动程序代码。 我建议在map reduce程序之外获取数据,然后将其作为参数传递 假设您要执行一个脚本,那么您只需从数据库中获取变量中的

我需要将一些参数传递给映射程序。这些参数的值需要从数据库中获取,并且这些值是动态的。我知道如何使用配置API传递参数。如果我编写JDBC代码从驱动程序或客户端的数据库中检索这些值,然后将这些值设置为配置API,那么该代码将执行多少次。驱动程序代码将在hadoop框架识别的每个数据节点上分发和执行,以运行MR程序


执行此操作的最佳方法是什么?

是将在每台机器上执行驱动程序代码。 我建议在map reduce程序之外获取数据,然后将其作为参数传递

假设您要执行一个脚本,那么您只需从数据库中获取变量中的数据,然后将该变量传递给hadoop作业


我认为这将完成您的工作。

如果您需要的数据很大(超过几千字节),配置可能不合适。更好的替代方法是使用Sqoop将这些数据从数据库提取到HDF。然后使用hadoop distribute cache,这样在map或reduce代码中,您就可以在不传入任何参数的情况下获取这些数据。

您可以从驱动程序代码中的DB中检索值。每个作业只执行一次驱动程序代码。

同意。如果我在ToolRunner运行方法中有jdbc代码呢。我的客户端或驱动程序可以实现工具接口,在ToolRunner运行方法中,我可以获取此数据。是的,您也可以实现数据库连接,在ToolRunner方法中获取数据,然后将其存储在变量中。驱动程序代码不会多次执行。每个作业驱动程序代码只执行一次。