Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hadoop上RAM的理解问题_Java_Hadoop_Hive - Fatal编程技术网

Java Hadoop上RAM的理解问题

Java Hadoop上RAM的理解问题,java,hadoop,hive,Java,Hadoop,Hive,有时我们会遇到Java堆空间错误,然后增加JVM RAM限制(Xmx值)。 我有两个问题,请回答: 1) 更改Xmx值后,如何知道集群中应该有多少映射器和还原器?我的意思是,如果我有一个32G内存的节点,并且有Xmx值,例如到5G,这是否意味着我只能使用6个映射和减缩器(5*6=30G) 2) 为什么会这样?我试着读了这个论坛,但没有找到答案。如果我对读取大量数据的hive进行查询,我知道作业设置以及从MFS读取数据的映射器数量。每个数据块都会被映射到内存。为什么我需要增加Xmx,hive不能将

有时我们会遇到Java堆空间错误,然后增加JVM RAM限制(Xmx值)。 我有两个问题,请回答:

1) 更改Xmx值后,如何知道集群中应该有多少映射器和还原器?我的意思是,如果我有一个32G内存的节点,并且有Xmx值,例如到5G,这是否意味着我只能使用6个映射和减缩器(5*6=30G)

2) 为什么会这样?我试着读了这个论坛,但没有找到答案。如果我对读取大量数据的hive进行查询,我知道作业设置以及从MFS读取数据的映射器数量。每个数据块都会被映射到内存。为什么我需要增加Xmx,hive不能将数据拆分成更多的映射器吗?假设我有1000个映射器的工作,我遇到了堆空间问题,难道hive不能给我2000个映射器,它就能解决这个问题(每个映射占用更少的内存,因为它使用更少的数据)


谢谢

你能发布你正在运行的代码吗?通常,堆空间错误是由于人们在内存中积累了大量数据集(列表、集合或映射)造成的。如果要写入,它是两个大表的联接。但为什么每个映射程序都要将如此多的数据输入RAM?hadoop不能将其拆分为更多映射器吗?什么类型的联接/您预期联接的基数是什么(1:1、1:M或M:M)。您可以发布代码/配置单元语句吗?这是一个查询:select*from DB1.Table1 i join DB2.Table2 c on i.X=c.X limit 100;您还需要什么详细信息?谢谢