如何在运行sqoop导入和导出时找到最佳Map器数量?

dzhpxtsq  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(601)

我使用的是sqoop1.4.2版本和oracle数据库。
运行sqoop命令时。例如:

./sqoop import                               \
    --fs <name node>                         \
    --jt <job tracker>                       \
    --connect <JDBC string>                  \
    --username <user> --password <password>  \
    --table <table> --split-by <cool column> \
    --target-dir <where>                     \
    --verbose --m 2

我们可以指定——m——我们希望sqoop运行多少个并行任务(它们也可能同时访问数据库)。相同的选项可用于./sqoop export<…>
是否有一些启发式方法(可能基于数据的大小)来帮助猜测要使用的最佳任务数?
谢谢您!

dffbzjpn

dffbzjpn1#

在“hadoop:最终指南”中,他们解释说,在每个tasktracker上设置maximum map/reduce任务时,请考虑处理器及其核心来定义集群的任务数,因此我将对此应用相同的逻辑,并查看可以在处理器上运行的进程数(计算超线程数,cores)并将--m的值设置为-1(为导出过程中可能弹出的其他任务保留一个打开的值),但这仅适用于拥有大型数据集并希望及时完成导出的情况。
如果没有大的数据集,请记住输出的值为--m文件数,因此如果要导出一个100行的表,则可能需要将--m设置为1,以便将所有数据本地化到一个文件中。

ar5n3qh5

ar5n3qh52#

这是从o'reilly media的ApacheSqoop食谱中摘取的,似乎是最符合逻辑的答案。
Map器的最佳数量取决于许多变量:您需要考虑数据库类型、用于数据库服务器的硬件以及对数据库需要服务的其他请求的影响。没有适用于所有场景的最佳Map器数。相反,我们鼓励您尝试为您的环境和用例找到最佳的并行度。最好从少量的Map绘制者开始,慢慢增加,而不是从大量的Map绘制者开始,一路向下。

相关问题