我知道这个简单的问题,我需要这个社区在这个查询上提供一些帮助,当我用ORC格式创建PartitionTable时,当我试图从指向210列的2GB文件的非分区表中转储数据时,我看到映射器的数量是2,reducer是2。是否有增加Mapper和reducer的方法。我的假设是,我们不能像MR1.0那样设置Mapper和reducer的数量,这是基于Yarn容器大小、Mapper最小内存和最大内存等设置。有人能建议我TEz计算映射器和减速器吗。保持内存大小设置的最佳值是什么,这样我就不会遇到:Java堆空间,Java内存不足问题。我的文件大小可能会增长到100GB。请帮我一下。
您仍然可以在Yarn中设置映射器和减速器的数量。你试过了吗?如果是,请回到这里。
Yarn改变了底层的执行机制,但#mappers和#reducers描述的是作业需求,而不是作业资源的分配方式(这就是Yarn和mrv1的区别)。
传统的Map/Reduce有一个硬编码的Map和Reduce"slot"。正如你所说,Yarn使用容器,这是每个应用程序的。因此,纱线更柔韧。但在这两种情况下,#mapper和#reducers都是作业的输入。此外,在这两种情况下,映射器和减速器的实际数量可能与请求的数量不同。通常,#减速器为
- (a) 确切地说是请求的号码
- (b) 只有一个减速器-如果工作需要,例如在总订单中
对于内存设置,如果您使用带有tez的hive,以下2种设置将对您有用:
1) hive.tez.contanger.size-这是将要使用的Yarn container的大小(值以MB为单位)。
2) hive.tez.java.opts-这是用于每个任务的java选项。如果容器大小设置为1024MB,则设置java选项来表示类似"-Xmx800m"而不是"-Xmx1024m"的内容。YARN会杀死使用比指定容器大小更多内存的进程,并且考虑到java进程的内存占用通常会超过指定的Xmx值,将Xmx设置为与容器大小相同的值通常会导致问题。