sqoopでOutOfMemoryError

HDP2.1環境でMySQLに対してsqoop importしたら以下のようなOutOfMemoryErrorが出た。

2014-07-29 15:58:15,994 FATAL [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.OutOfMemoryError: GC overhead limit exceeded
	at com.mysql.jdbc.MysqlIO.nextRowFast(MysqlIO.java:1649)
	at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1426)
	at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2924)
	at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:477)
	at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2619)
	at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1788)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2209)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2625)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)
	at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2283)
	at org.apache.sqoop.mapreduce.db.DBRecordReader.executeQuery(DBRecordReader.java:111)
	at org.apache.sqoop.mapreduce.db.DBRecordReader.nextKeyValue(DBRecordReader.java:235)
	at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:533)
	at org.apache.hadoop.mapreduce.task.MapContextImpl.nextKeyValue(MapContextImpl.java:80)
	at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.nextKeyValue(WrappedMapper.java:91)
	at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
	at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64)
	at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
	at org.apache.hadoop.mapred.MapTask.run(MapTask.java:340)
	at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:167)
	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:1557)
	at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)

yarnジョブのCPU使用率が1700%とかになっててloadも高い状態になってた。

パラレルにGCしてないから負荷が高いのかと思ってUseConcMarkSweepGCつけると負荷自体は下がるんだけどそれでもダメで、mapreduce.map.memory.mbやmapreduce.map.java.optsを上げたりしたんだけど結局だめだった。
jstatするとEとかOが100になっていてずっとGCがんばっている感じ。jstackやjmapはうまくいかなかった。

そんなわけでJDBCは諦めてsqoopのダイレクトモード使ったらうまくいった。

sqoopだったのでそういうオプションがあってよかったけど、普通のhiveジョブで同じようになったらどうすればいいんだろうなあ。