Apache spark 将Spark中的拼花地板保存为非根用户

Apache spark 将Spark中的拼花地板保存为非根用户,apache-spark,pyspark,parquet,Apache Spark,Pyspark,Parquet,我以非root用户的身份运行pyspark,并尝试将数据帧保存为拼花地板 我的环境: Ubuntu 14 Spark 1.4.1 Hadoop 2.6的预构建 GlusterFS 3.7 Mesos 0.23.0 Docker 1.7.1 以user1等身份启动pyspark,并将一些数据加载到数据帧df。然后运行df.write.format(“parquet”).save(“/data/user1/wikipedia\u test.parquet”) /data是每个节点上的Gluste

我以非root用户的身份运行pyspark,并尝试将数据帧保存为拼花地板

我的环境:

  • Ubuntu 14
  • Spark 1.4.1 Hadoop 2.6的预构建
  • GlusterFS 3.7
  • Mesos 0.23.0
  • Docker 1.7.1
以user1等身份启动pyspark,并将一些数据加载到数据帧
df
。然后运行
df.write.format(“parquet”).save(“/data/user1/wikipedia\u 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::---
spark完成计算并将所有结果存储在临时文件中后,任务失败:

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
问题是临时文件是由root用户创建的,不允许驱动程序将这些文件重命名为其最终目标

user1@host:/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描述了一个可行但不适用于我们的解决方案。 因为我们需要一个真正的权限系统,不允许用户写入其他用户文件夹

另外,将
$SPARK\u USER
设置为
root
user1
无效。 顺便说一句,在以root运行pyspark时也可以这样做

我认为主要的问题是Spark奴隶总是作为root执行


有什么想法吗?

尝试检查集群中每个节点上“user1”的uid。以该用户身份登录时,可以使用“id”命令执行此操作。如果不同的计算机对同一用户使用不同的UID,则可能会出现此写入权限错误


如果一台计算机上的user1(uid 12345)创建了输出文件夹,而另一台计算机上的user1(uid 24680)则没有对该文件夹的写入权限,则可能会发生这种情况。

为了以防万一,spark master不应以root用户身份运行,而应以另一个用户身份运行。让我们说,“火花”。或者hadoop中的“纱线”。请随时更新您的发现:)@nefo_x bingo!为我工作。当我开始使用Spark作为root时,我也遇到了同样的问题,那就是创建具有不同所有者的拼花文件-用户和root。运行Spark,用户平静下来,奇怪的行为和拼花地板覆盖正在工作。