2015-07-31 2 views
1

Я запускаю 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.

Любые идеи?

+0

на всякий случай, искровой мастер не должен работать как корень, а скорее как другой пользователь. скажем, «искра». или «пряжа» в случае хауопа. не стесняйтесь обновлять проблему своими выводами :) –

ответ

0

Попробуйте проверить uid 'user1' на каждом узле вашего кластера. Вы можете сделать это с помощью команды «id» при регистрации в качестве этого пользователя. Если разные компьютеры используют разные uids для одного и того же пользователя, вы можете получить эту ошибку разрешений на запись.

Это может произойти, если user1 (uid 12345) на одной машине создает выходные папки, которые user1 (uid 24680) на другой машине не имеют доступа на запись.

Смежные вопросы