G C Ошибка при загрузке в таблицу Hive - PullRequest
0 голосов
/ 15 апреля 2020

У нас есть таблица кустов с именем orders , разделенная на столбцы odate и source . Это паркетная таблица и данные, вставленные с помощью Spark.

Первая часть задания вставляет данные в таблицу заказов, а затем получает счетчик данных, вставленных для проверки согласованности.

Мы неожиданно столкнулись с G C проблема с накладными расходами в нашем задании etl при вставке данных в таблицу. Хотя данные загружаются успешно, но общее задание завершается с ошибкой Код не изменился.

Сообщение об ошибке:

Exception in thread "dispatcher-event-loop-20" java.lang.OutOfMemoryError: GC overhead limit exceeded
    at scala.runtime.ObjectRef.create(ObjectRef.java:22)
    at org.apache.spark.rpc.netty.Inbox.process(Inbox.scala:88)
    at org.apache.spark.rpc.netty.Dispatcher$MessageLoop.run(Dispatcher.scala:216)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
    at java.util.Arrays.copyOf(Arrays.java:3332)
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448)
    at java.lang.StringBuffer.append(StringBuffer.java:270)
    at java.net.URI.appendSchemeSpecificPart(URI.java:1911)
    at java.net.URI.toString(URI.java:1941)
    at java.net.URI.<init>(URI.java:742)
    at org.apache.hadoop.fs.Path.initialize(Path.java:203)
    at org.apache.hadoop.fs.Path.<init>(Path.java:172)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$$anonfun$org$apache$spark$sql$execution$datasources$InMemoryFileIndex$$bulkListLeafFiles$3$$anonfun$7.apply(InMemoryFileIndex.scala:235)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$$anonfun$org$apache$spark$sql$execution$datasources$InMemoryFileIndex$$bulkListLeafFiles$3$$anonfun$7.apply(InMemoryFileIndex.scala:228)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.mutable.ArraySeq.foreach(ArraySeq.scala:74)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.AbstractTraversable.map(Traversable.scala:104)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$$anonfun$org$apache$spark$sql$execution$datasources$InMemoryFileIndex$$bulkListLeafFiles$3.apply(InMemoryFileIndex.scala:228)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$$anonfun$org$apache$spark$sql$execution$datasources$InMemoryFileIndex$$bulkListLeafFiles$3.apply(InMemoryFileIndex.scala:227)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
    at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:186)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$.org$apache$spark$sql$execution$datasources$InMemoryFileIndex$$bulkListLeafFiles(InMemoryFileIndex.scala:227)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex.listLeafFiles(InMemoryFileIndex.scala:124)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex.refresh0(InMemoryFileIndex.scala:90)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex.<init>(InMemoryFileIndex.scala:66)
    at org.apache.spark.sql.execution.datasources.PrunedInMemoryFileIndex.<init>(CatalogFileIndex.scala:118)
    at org.apache.spark.sql.execution.datasources.CatalogFileIndex.filterPartitions(CatalogFileIndex.scala:84)
    at org.apache.spark.sql.execution.datasources.CatalogFileIndex.listFiles(CatalogFileIndex.scala:59)
    at org.apache.spark.sql.hive.HiveMetastoreCatalog.org$apache$spark$sql$hive$HiveMetastoreCatalog$$inferIfNeeded(HiveMetastoreCatalog.scala:245)
20/04/15 06:18:43 ERROR yarn.Client: Failed to contact YARN for application application_1586409691508_102620.
java.lang.reflect.UndeclaredThrowableException
    at com.sun.proxy.$Proxy16.getApplicationReport(Unknown Source)
    at org.apache.hadoop.yarn.client.api.impl.YarnClientImpl.getApplicationReport(YarnClientImpl.java:408)
    at org.apache.spark.deploy.yarn.Client.getApplicationReport(Client.scala:321)
    at org.apache.spark.deploy.yarn.Client.monitorApplication(Client.scala:1040)
    at org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend$MonitorThread.run(YarnClientSchedulerBackend.scala:105)
Caused by: java.lang.InterruptedException: sleep interrupted
    at java.lang.Thread.sleep(Native Method)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:161)
    ... 5 more
20/04/15 06:18:43 ERROR cluster.YarnClientSchedulerBackend: Yarn application has already exited with state FAILED!

Недавно мы go узнали, что мы генерируем большое количество файлов при вставке данных в таблицы. Каждая загрузка создает 200 файлов паркета (значение по умолчанию для кадра данных) в своем последующем расположении. Мы работаем над сжатием файлов для полной таблицы.

Является ли эта проблема причиной внезапных накладных расходов G C в таблице заказов? Есть ли другой фактор, который может способствовать этой ошибке?

Любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ: Я только что попытался выбрать 10 строк в таблице в спарк, это сбой с той же проблемой G C.

val df = spark.sql(select * from orders limit 10)
println("Count : "+df.count)
...