解决从本地文件系统上传到HDFS时的权限问题

简介:

当使用 hadoop fs -put localfile /user/xxx 时提示:

put: Permission denied: user=root, access=WRITE, inode="/user/shijin":hdfs:supergroup:drwxr-xr-x

表明:权限不够。这里涉及到两个方面的权限。一个是本地文件系统中localfile 文件的权限,一个是HDFS上 /user/xxx目录的权限。

 

先看看 /user/xxx目录的权限:drwxr-xr-x   - hdfs supergroup      表示它属于hdfs用户,组名为 supergroup

因此需要使用 sudo -u hdfs hadoop fs -put localfile /user/xxx   来指定使用 hdfs 用户来执行上传命令。参考

 

当高兴地执行sudo -u hdfs hadoop fs -put localfile /user/xxx  以为能成功上传时,又报错:
put: localfile   No such file or directory   说找不到本地文件localfile,可是用 ls 明明 能看到 localfile ,后来在一篇文章(参考)中发现发来是lcoalfile的权限问题。

因为我现在是使用hdfs用户来执行命令。而hdfs用户对 localfile 是没有相关权限的。此时,问题基本解决了,就是让hdfs 用户对 lcoalfile 有相关权限,(注意目录权限该该目录下文件权限的影响,参考:linux下文件与目录权限关系

 

一种简单的解决方法。直接把需要上传的文件复制到/tmp目录下。因为/tmp目录的权限为 rwxrwxrwx。然后执行:

sudo -u hdfs hadoop fs -put localfile /user/xxx   上传成功。

 

关于HDFS的权限问题:

HDFS文件系统的权限模型与 POSIX 模型类似

The Hadoop Distributed File System (HDFS) implements a permissions model for files and directories that shares much of the POSIX model. 
Each file and directory is associated with an owner and a group.

 

当创建文件或目录时,它的owner(所有者)是客户端进程的 user identity.

When a file or directory is created, its owner is the user identity of the client process, 
and its group is the group of the parent directory (the BSD rule).

 

访问HDFS时,需要验证:user name(用户名) 和 group list(所属的用户组)

Each client process that accesses HDFS has a two-part identity composed of the user name, and groups list. 
Whenever HDFS must do a permissions check for a file or directory ‘foo’ accessed by a client process

 

Hadoop支持两种不同的操作模型(simple 和 kerberos)从而决定 user identity,由配置选项:hadoop.security.authentication property 来决定使用哪种模型

As of Hadoop 0.22, Hadoop supports two different modes of operation to determine the user’s identity, 
specified by the hadoop.security.authentication property:

 

对于Simple模型而言,客户端进程的身份(identity) 是由提交 操作命令的那台主机所在的操作系统(的用户名)决定的。本文报的“权限不够”的错误,是在 Simple模型下出错的,至于kerberos模型,可参考官方文档:Apache Hadoop 2.7.2 HDFS 中的介绍

In this mode of operation, the identity of a client process is determined by the host operating system. 
On Unix-like systems, the user name is the equivalent of `whoami`.

 

参考链接:https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/HdfsPermissionsGuide.html


本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/,如需转载请自行联系原作者

相关文章
|
3月前
|
存储 机器学习/深度学习 弹性计算
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
|
3月前
|
存储 分布式计算 资源调度
Hadoop生态系统概览:从HDFS到Spark
【8月更文第28天】Hadoop是一个开源软件框架,用于分布式存储和处理大规模数据集。它由多个组件构成,旨在提供高可靠性、高可扩展性和成本效益的数据处理解决方案。本文将介绍Hadoop的核心组件,包括HDFS、MapReduce、YARN,并探讨它们如何与现代大数据处理工具如Spark集成。
155 0
|
6月前
|
存储 缓存 安全
阿里云EMR数据湖文件系统: 面向开源和云打造下一代 HDFS
本文作者详细地介绍了阿里云EMR数据湖文件系统JindoFS的起源、发展迭代以及性能。
72687 79
|
4月前
|
分布式计算 Hadoop
|
3月前
|
安全 数据安全/隐私保护
阿里云EMR数据湖文件系统问题之JindoFS的INode定义与HDFS有何不同
阿里云EMR数据湖文件系统问题之JindoFS的INode定义与HDFS有何不同
|
5月前
|
存储 分布式计算 Hadoop
Hadoop生态系统详解:HDFS与MapReduce编程
Apache Hadoop是大数据处理的关键,其核心包括HDFS(分布式文件系统)和MapReduce(并行计算框架)。HDFS为大数据存储提供高容错性和高吞吐量,采用主从结构,通过数据复制保证可靠性。MapReduce将任务分解为Map和Reduce阶段,适合大规模数据集的处理。通过代码示例展示了如何使用MapReduce实现Word Count功能。HDFS和MapReduce的结合,加上YARN的资源管理,构成处理和分析大数据的强大力量。了解和掌握这些基础对于有效管理大数据至关重要。【6月更文挑战第12天】
177 0
|
6月前
|
存储 分布式计算 大数据
【云计算与大数据技术】分布式协同系统Chubby锁、ZooKeeper在HDFS中的使用讲解(图文解释 超详细)
【云计算与大数据技术】分布式协同系统Chubby锁、ZooKeeper在HDFS中的使用讲解(图文解释 超详细)
173 0
|
存储 SQL XML
必须掌握的分布式文件存储系统—HDFS
HDFS(Hadoop Distributed File System)分布式文件存储系统,主要为各类分布式计算框架如Spark、MapReduce等提供海量数据存储服务,同时HBase、Hive底层存储也依赖于HDFS。HDFS提供一个统一的抽象目录树,客户端可通过路径来访问文件,如hdfs://namenode:port/dir-a/a.data。HDFS集群分为两大角色:Namenode、Datanode(非HA模式会存在Secondary Namenode)
必须掌握的分布式文件存储系统—HDFS
|
存储 分布式计算 Hadoop
大数据数据存储的分布式文件系统的HDFS的基本概念和架构的概念的Hadoop 分布式文件系统
Hadoop 分布式文件系统 (HDFS) 是一个开源的分布式文件系统,是 HttpFS 的后继者。
145 2
|
存储 分布式计算 负载均衡
Hadoop生态系统中的数据存储技术:HDFS的原理与应用
Hadoop生态系统中的数据存储技术:HDFS的原理与应用