🎈 Hive에서 ArrayIndexOutOfBoundsException 에러 해결
하이브 운용하는데 있어 Collect_List를 사용하는 도중 Caused by: java.lang.ArrayIndexOutOfBoundsException: 1024 에러가 발생했는데
이는 collect_list 함수가 반환하려는 리스트의 크기가 제한된 크기(1024)를 초과하기 때문에 발생
이러한 경우 해결 방법은 두가지가 존재
hive.exec.reducers.max 값은 기본적으로 1이지만, 이 값을 증가시키면 리듀서의 개수가 늘어나므로 collect_list 함수가 처리하는 데이터 양이 줄어들게 됩니다.
따라서 hive.exec.reducers.max 값을 적절한 값으로 변경합니다.
<property>
<name>hive.exec.reducers.max</name>
<value>10</value> <!-- 10으로 변경 -->
<description>The maximum number of reducers that can be used for a MapReduce job</description>
</property>
이 방법을 사용하면 collect_list 함수에서 처리하는 데이터 양을 줄일 수 있습니다.
Hive는 데이터를 MapReduce 작업에 대해 기본적으로 64MB의 블록으로 분할합니다
블록 크기를 변경하여 데이터를 더 작은 블록으로 분할할 수 있습니다. 이를 위해서는 다음과 같이 hive-site.xml 파일에서 설정값을 변경
<property>
<name>hive.input.format.split.maxsize</name>
<value>67108864</value> <!-- 64MB에서 64KB로 변경 -->
<description>The maximum size for a split generated by InputFormat.getSplits().</description>
</property>