我需要传递一些参数给map程序。这些参数的值需要从数据库中获取,并且这些值是动态的。我知道如何使用配置API传递参数。如果我编写JDBC代码从驱动程序或客户机中的数据库检索这些值,然后将这些值设置为配置API,那么该代码将执行多少次?驱动程序代码将在hadoop框架标识的每个数据节点上分发和执行以运行MR程序?
是驱动程序代码将在每台机器上执行。我建议在map-reduce程序之外获取数据,然后作为参数传递。
假设你有一个脚本要执行,然后你只需要从数据库中获取一个变量的数据,然后将该变量传递给hadoop作业。
我想这对你的工作有帮助。
如果需要的数据很大(超过几千字节),Configuration可能不适合。一个更好的选择是使用Sqoop从数据库中获取这些数据到HDFS。然后使用hadoop分发缓存,这样在您的map或reduce代码中,您可以直接获得这些数据,而不需要任何参数传入。
您可以在驱动程序代码中从DB检索值。驱动程序代码每个Job只执行一次。