Ошибка сегментации, когда график R сценарий с воздушным потоком - PullRequest
1 голос
/ 19 сентября 2019

Я использую Airflow (контейнер Docker) для запуска сценария R.Я получаю следующую ошибку.

[2019-09-19 07:03:26,500] {{bash_operator.py:127}} INFO -  *** caught segfault ***
[2019-09-19 07:03:26,500] {{bash_operator.py:127}} INFO - address 0x55cf00000000, cause 'memory not mapped'
[2019-09-19 07:03:26,501] {{bash_operator.py:127}} INFO - 
[2019-09-19 07:03:26,501] {{bash_operator.py:127}} INFO - Traceback:
[2019-09-19 07:03:26,501] {{bash_operator.py:127}} INFO -  1: is.data.frame(x)
[2019-09-19 07:03:26,502] {{bash_operator.py:127}} INFO -  2: FUN(X[[i]], ...)
[2019-09-19 07:03:26,502] {{bash_operator.py:127}} INFO -  3: lapply(.x, .f, ...)
[2019-09-19 07:03:26,502] {{bash_operator.py:127}} INFO -  4: map(result, subset_rows, i)
[2019-09-19 07:03:26,502] {{bash_operator.py:127}} INFO -  5: `[.tbl_df`(x, ind, , drop = FALSE)
[2019-09-19 07:03:26,503] {{bash_operator.py:127}} INFO -  6: x[ind, , drop = FALSE]
[2019-09-19 07:03:26,503] {{bash_operator.py:127}} INFO -  7: FUN(X[[i]], ...)
[2019-09-19 07:03:26,504] {{bash_operator.py:127}} INFO -  8: lapply(split(x = seq_len(nrow(x)), f = f, drop = drop, ...),     function(ind) x[ind, , drop = FALSE])
[2019-09-19 07:03:26,505] {{bash_operator.py:127}} INFO -  9: split.data.frame(es6, (0:(nrow(es6) - 1)%/%50))
[2019-09-19 07:03:26,505] {{bash_operator.py:127}} INFO - 10: split(es6, (0:(nrow(es6) - 1)%/%50))
[2019-09-19 07:03:26,506] {{bash_operator.py:127}} INFO - An irrecoverable exception occurred. R is aborting now ...
[2019-09-19 07:03:27,087] {{bash_operator.py:127}} INFO - /tmp/airflowtmpuj8lcw3e/web_etl_bf_10_days7wpo7bvb: line 1:  1140 Segmentation fault      (core dumped) Rscript /usr/local/airflow/dags/scripts/r/etl_web_api_by_create_time.R -d "2019-09-05 00:00:00+00:00"
[2019-09-19 07:03:27,088] {{bash_operator.py:131}} INFO - Command exited with return code 139

Код с ошибкой split(es6, (0:(nrow(es6) - 1)%/%50)).Фрейм данных es6 имеет около 1096 строк и 20 столбцов.

Я не могу воспроизвести ошибку, когда-нибудь она была успешной, а в другой раз - с Airflow.(И код работает, когда я запускаю его через Rstudio Sever.)

Я подозреваю, что причиной может быть недостаток памяти в моем сервере.Мой сервер Linux имеет 8 ГБ памяти в общей сложности.Когда я проверяю память во время выполнения задачи, у нее доступно около 1700 МБ (с помощью команды free -m).

Я искал в Интернете, и кто-то предположил, что такая ошибка может быть вызвана ошибкой функции,то есть split.

Редактировать:

После изменения на split(as.data.frame(es6), (0:(nrow(es6)-1) %/% 50)).Новый журнал:

[2019-09-19 09:17:22,652] {{bash_operator.py:127}} INFO -  *** caught segfault ***
[2019-09-19 09:17:22,652] {{bash_operator.py:127}} INFO - address 0x55f600000000, cause 'memory not mapped'
[2019-09-19 09:17:22,652] {{bash_operator.py:127}} INFO - 
[2019-09-19 09:17:22,652] {{bash_operator.py:127}} INFO - Traceback:
[2019-09-19 09:17:22,652] {{bash_operator.py:127}} INFO -  1: dim(xj)
[2019-09-19 09:17:22,653] {{bash_operator.py:127}} INFO -  2: `[.data.frame`(x, ind, , drop = FALSE)
[2019-09-19 09:17:22,653] {{bash_operator.py:127}} INFO -  3: x[ind, , drop = FALSE]
[2019-09-19 09:17:22,653] {{bash_operator.py:127}} INFO -  4: FUN(X[[i]], ...)
[2019-09-19 09:17:22,653] {{bash_operator.py:127}} INFO -  5: lapply(split(x = seq_len(nrow(x)), f = f, drop = drop, ...),     function(ind) x[ind, , drop = FALSE])
[2019-09-19 09:17:22,653] {{bash_operator.py:127}} INFO -  6: split.data.frame(as.data.frame(es6), (0:(nrow(es6) - 1)%/%50))
[2019-09-19 09:17:22,653] {{bash_operator.py:127}} INFO -  7: split(as.data.frame(es6), (0:(nrow(es6) - 1)%/%50))
[2019-09-19 09:17:22,653] {{bash_operator.py:127}} INFO - An irrecoverable exception occurred. R is aborting now ...
[2019-09-19 09:17:23,179] {{bash_operator.py:127}} INFO - /tmp/airflowtmp9jy2rurg/web_etl_bf_7_days4x9d7xqz: line 1:  1220 Segmentation fault      (core dumped) Rscript /usr/local/airflow/dags/scripts/r/etl_web_api_by_create_time.R -d "2019-09-10 00:00:00+00:00"
[2019-09-19 09:17:23,179] {{bash_operator.py:131}} INFO - Command exited with return code 139
...