[ https://issues.apache.org/jira/browse/HIVE-12779?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15307573#comment-15307573 ]
Oleksiy Sayankin commented on HIVE-12779: ----------------------------------------- Alina has found a workaround for this issue. *ROOT-CAUSE:* Consider method {code} protected int require (int required) throws KryoException {code} from class com.esotericsoftware.kryo.io.Input where exception happens. {code} int remaining = limit - position; if (remaining >= required) return remaining; if (required > capacity) throw new KryoException("Buffer too small: capacity: " + capacity + ", required: " + required); int count; // Try to fill the buffer. if (remaining > 0) { count = fill(buffer, limit, capacity - limit); if (count == -1) throw new KryoException("Buffer underflow."); {code} We can see that exception ("Buffer underflow.") occurs when count == -1. So let us see method fill(byte[] buffer, int offset, int count) in details: {code} if (inputStream == null) return -1; try { return inputStream.read(buffer, offset, count); } catch (IOException ex) { throw new KryoException(ex); } {code} It returns -1 either when inputStream == null or from inputStream.read(buffer, offset, count). We definitely know that inputStream can not be equal null here because of constructor: {code} public Input (InputStream inputStream) { this(4096); if (inputStream == null) throw new IllegalArgumentException("inputStream cannot be null."); this.inputStream = inputStream; } {code} >From Java docs we know that if no byte is available because the stream is at >end of file, the value -1 is returned by the method inputStream.read(buffer, >offset, count). Hence we suspect here some errors in HDFS here that causes -1 >to be a return value. Skipping usage of file system as query plan storage and >sending it via RPC directly will fix the issue. *SOLUTION:* Use {code} <property> <name>hive.rpc.query.plan</name> <value>true</value> </property> {code} in hive-site.xml as workaround. This property defines whether to send the query plan via local resource or RPC. > Buffer underflow when inserting data to table > --------------------------------------------- > > Key: HIVE-12779 > URL: https://issues.apache.org/jira/browse/HIVE-12779 > Project: Hive > Issue Type: Bug > Components: Database/Schema, SQL > Environment: CDH 5.4.9 > Reporter: Ming Hsuan Tu > Assignee: Alan Gates > > I face a buffer underflow problem when inserting data to table from hive > 1.1.0. > the block size is 128 MB and the data size is only 10MB, but it gives me 891 > mappers. > Task with the most failures(4): > ----- > Task ID: > task_1451989578563_0001_m_000008 > URL: > > http://0.0.0.0:8088/taskdetails.jsp?jobid=job_1451989578563_0001&tipid=task_1451989578563_0001_m_000008 > ----- > Diagnostic Messages for this Task: > Error: java.lang.RuntimeException: Failed to load plan: > hdfs://tpe-nn-3-1:8020/tmp/hive/alec.tu/af798488-dbf5-45da-8adb-e4f2ddde1242/hive_2016-01-05_18-34-26_864_3947114301988950007-1/-mr-10004/bb86c923-0dca-43cd-aa5d-ef575d764e06/map.xml: > org.apache.hive.com.esotericsoftware.kryo.KryoException: Buffer underflow. > at > org.apache.hadoop.hive.ql.exec.Utilities.getBaseWork(Utilities.java:450) > at > org.apache.hadoop.hive.ql.exec.Utilities.getMapWork(Utilities.java:296) > at > org.apache.hadoop.hive.ql.io.HiveInputFormat.init(HiveInputFormat.java:268) > at > org.apache.hadoop.hive.ql.io.HiveInputFormat.getRecordReader(HiveInputFormat.java:234) > at > org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getRecordReader(CombineHiveInputFormat.java:701) > at > org.apache.hadoop.mapred.MapTask$TrackedRecordReader.<init>(MapTask.java:169) > at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:432) > at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343) > at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163) > 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:1671) > at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) > Caused by: org.apache.hive.com.esotericsoftware.kryo.KryoException: Buffer > underflow. > at > org.apache.hive.com.esotericsoftware.kryo.io.Input.require(Input.java:181) > at > org.apache.hive.com.esotericsoftware.kryo.io.Input.readBoolean(Input.java:783) > at > org.apache.hive.com.esotericsoftware.kryo.serializers.UnsafeCacheFields$UnsafeBooleanField.read(UnsafeCacheFields.java:120) > at > org.apache.hive.com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:507) > at > org.apache.hive.com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:672) > at > org.apache.hadoop.hive.ql.exec.Utilities.deserializeObjectByKryo(Utilities.java:1069) > at > org.apache.hadoop.hive.ql.exec.Utilities.deserializePlan(Utilities.java:960) > at > org.apache.hadoop.hive.ql.exec.Utilities.deserializePlan(Utilities.java:974) > at > org.apache.hadoop.hive.ql.exec.Utilities.getBaseWork(Utilities.java:416) > ... 12 more > Container killed by the ApplicationMaster. > Container killed on request. Exit code is 143 > Container exited with a non-zero exit code 143 > Thank you. -- This message was sent by Atlassian JIRA (v6.3.4#6332)