티스토리 뷰
[Hive] java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row
무중력인간 2016. 2. 3. 22:00Hive에서 테이블에 데이터 Insert 시, 이런 에러가 발생한다면....
Error: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row {"stdr_year":"2014","ctprvn_nm":"경기도","sido_cd":"41","signgu_nm":"고양시","signgu_cd":"41280","prpos_area_lclas_nm":"주거지역","prpos_area_lclas_cd":"UQA100","prpos_area_mlsfc_nm":"전용주거","prpos_area_mlsfc_cd":"UQA110","prpos_area_sclas_nm":"제1종전용주거","prpos_area_sclas_cd":"UQA111","measrmt_rate":50,"cpcty_rate":100}
at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:172)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row {"stdr_year":"2014","ctprvn_nm":"경기도","sido_cd":"41","signgu_nm":"고양시","signgu_cd":"41280","prpos_area_lclas_nm":"주거지역","prpos_area_lclas_cd":"UQA100","prpos_area_mlsfc_nm":"전용주거","prpos_area_mlsfc_cd":"UQA110","prpos_area_sclas_nm":"제1종전용주거","prpos_area_sclas_cd":"UQA111","measrmt_rate":50,"cpcty_rate":100}
at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:545)
at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:163)
... 8 more
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Unexpected exception: invalid shape type
at org.apache.hadoop.hive.ql.exec.MapJoinOperator.process(MapJoinOperator.java:426)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:838)
at org.apache.hadoop.hive.ql.exec.SelectOperator.process(SelectOperator.java:88)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:838)
at org.apache.hadoop.hive.ql.exec.FilterOperator.process(FilterOperator.java:122)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:838)
at org.apache.hadoop.hive.ql.exec.TableScanOperator.process(TableScanOperator.java:97)
at org.apache.hadoop.hive.ql.exec.MapOperator$MapOpCtx.forward(MapOperator.java:164)
at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:535)
... 9 more
insert 할 데이터에 null이 들어가 있지는 않은지 점검해봐야 한다.
원래 Hive는 데이터가 없을 경우 null을 insert하지만.. 컬럼 타입이 binary일 경우 반드시 데이터가 있어야 하는 제약이 있다. (그런 것 같다. ㅡㅡ)
고로 반드시 binary타입의 컬럼에는 null값이 없어야 저런 에러가 발생하지 않는다는 점!
또 하나 주의할 점은,
저 위의 에러 메시지에 나와있는 데이터를 찾아서 binary 타입이 null인지 찾아봤자 소용이 없다는 것.
저 위의 에러 메시지는 그냥 에러가 났다고 알려주는 정도...라고 생각하면 된다.
일일히 null인 데이터가 어디에 있는지 찾아봐야 한다..
이것 때문에 개고생 생고생 날고생 다했다. 쉣쉣쉣!!!