当我们使用Hadoop连接到MYSQL之类的RDBMS时,通常会从数据库获得一条记录到用户定义的类中,该类扩展了DBWritable和Writable。如果我们的SQL查询生成N条记录作为输出,则将记录读取到用户定义的类中的操作完成了N次。有没有一种方法可以让我同时将更多的记录数放入映射器中,而不是每次获取1条记录?
最佳答案
如果我对您的理解正确,那么您会认为Hadoop在后台导致了N SELECT
语句。那是不对的。如您在 DBInputFormat
's source中所见,它基于Hadoop认为合适的内容创建了大块的行。
显然,每个映射器都必须执行一个查询来获取一些数据以进行处理,并且它可能会重复执行,但这仍然与表中的行数相差甚远。
但是,如果性能下降,最好将数据转储到HDFS / Hive中并从那里进行处理。
关于database - DBInputFormat多记录处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15745018/