Я запускаю pyspark как пользователь без root и пытаюсь сохранить dataframe как паркет.Сохранение паркета в Spark как пользователь не root
Моя среда:
- Ubuntu 14
- Спарк 1.4.1 prebuild для Hadoop 2,6
- GlusterFS 3,7
- Mesos 0.23.0
- Docker 1.7.1
Начало pyspark как напр. , user1 и загрузить некоторые данные в dataframe df
. Затем запустите df.write.format("parquet").save("/data/user1/wikipedia_test.parquet")
/data
- это GlusterFS voulme на каждом узле.
/data/user1
разрешения:
# owner: user1
# group: user1
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:other::---
После искры делается с расчетом, и все результаты хранятся во временных файлах, то failes задачи:
java.io.IOException:
Failed to rename DeprecatedRawLocalFileStatus{
path=file:/data/user1/wikipedia_test.parquet/_temporary/0/task_201507312025_0004_m_000024/part-r-00024-215e6e02-553e-434f-a2ae-e46836d39274.gz.parquet;
isDirectory=false;
length=2081649;
replication=1;
blocksize=33554432;
modification_time=1438374352000;
access_time=0;
owner=;
group=;
permission=rw-rw-rw-;
isSymlink=false
}
to file:/data/user1/wikipedia_test.parquet/part-r-00024-215e6e02-553e-434f-a2ae-e46836d39274.gz.parquet
Проблема в том, что временные файлы создаются корневой и драйверу не разрешено переименовывать эти файлы в конечный пункт назначения.
[email protected]:/data/user1/wikipedia_test.parquet/_temporary/0/task_201507312105_0006_m_000000$ ll
total 2741
drwxr-xr-x 2 root root 169 Jul 31 21:05 ./
drwxr-xr-x 62 root root 20480 Jul 31 21:06 ../
-rw-r--r-- 1 root root 2763432 Jul 31 21:05 part-r-00000-bbb1e377-5294-450c-9b87-648b68ec80c5.gz.parquet
-rw-r--r-- 1 root root 21600 Jul 31 21:05 .part-r-00000-bbb1e377-5294-450c-9b87-648b68ec80c5.gz.parquet.crc
Tomasz описал обходной путь в https://www.mail-archive.com/[email protected]/msg28820.html, который работает, но не применим для нас. Поскольку нам нужна реальная система разрешений, в которой пользователям не разрешается писать в другие папки пользователей.
Дополнительная настройка $SPARK_USER
либо root
, либо user1
не имеет эффекта. Кстати, во время работы pyspark работает root.
Я думаю, что основная проблема заключается в том, что Spark-slaves всегда выполняются как root.
Любые идеи?
на всякий случай, искровой мастер не должен работать как корень, а скорее как другой пользователь. скажем, «искра». или «пряжа» в случае хауопа. не стесняйтесь обновлять проблему своими выводами :) –