java修改hdfs上文件权限问题

public static void main(String[] args) {
Configuration conf=new Configuration();
Path dstPath = new Path("hdfs://namenode:9000/process/startall.txt");
try {
FileSystem hdfs = dstPath.getFileSystem(conf);
hdfs.setPermission(dstPath, new FsPermission((short) 775));
System.out.println("done");
hdfs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
用以上代码修改hdfs上指定文件的权限为775,运行后报错
org.apache.hadoop.security.AccessControlException: Permission denied

请问如何解决,或者说还有什么方法可以修改hdfs上文件的权限,谢谢。。

看来你是开启了HDFS的权限检查功能,这样你访问HDFS,NameNode都会检查访问用户的权限的。

你现在想要修改/process/startall.txt文件的权限,那process目录以及startall.txt的有效用户、有效组以及其权限是什么呢?


假设process目录与startall.txt原始的有效用户和有效组分别为root和supergroup,原始权限为750的话,你若在自己电脑运行上述程序,它会自动获取当前计算机的登录用户,假设为wyc,去访问HDFS,很显然,你的程序连process目录都进不去的。

此外,想要更改一个目录或文件的权限,当前用户则必须是有效用户或超级用户才可以。

想要解决的话,嘿嘿, 如果你设置的hadoop.security.authentication property,也就是认证方式为simple的话(默认就是simple),那还可以钻该认证方式的空子,运行程序是伪装成有效用户或者超级用户即可。

此外,有一行代码需要修改一下,我在实验后发现设置权限那一行有误,如下:

//hdfs.setPermission(dstPath, new FsPermission((short) 775));
hdfs.setPermission(dstPath, new FsPermission("755"));

温馨提示:内容为网友见解,仅供参考
无其他回答

java修改hdfs上文件权限问题
看来你是开启了HDFS的权限检查功能,这样你访问HDFS,NameNode都会检查访问用户的权限的。你现在想要修改\/process\/startall.txt文件的权限,那process目录以及startall.txt的有效用户、有效组以及其权限是什么呢?假设process目录与startall.txt原始的有效用户和有效组分别为root和supergroup,原始权限为750的话...

修修改hdfs上的文件所属用户、所属组等读写执行控制权限
hadoop fs -chmod [-R] 755 URI#改变用户访问权限 hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]#修改文件的所有者 hadoop fs -copyToLocal URI localdst#拷贝hdfs文件到本地 hadoop fs -cp URI [URI …] <dest>#拷贝hdfs文件到其它目录 hadoop fs -du URI [URI …]#显示目录...

用java遍历hadoop分布式文件系统中某个目录下的全部文件,我的hadoop是...
你访问的是本地文件系统而非hdfs , 因为Configuration默认的是在core-default.xml中的属性fs.default.name默认值是file:\/\/\/,表示本地文件系统。在我们new Configuration();时会默认加载core-default.xml文件,所以根据这个文件的fs.default.name值使用了本地文件系统。解决方法:一般安装hadoop时都是修改...

使用Java API操作HDFS时,_方法用于获取文件列表?
\/\/ 定义 HDFS 连接配置 Configuration conf = new Configuration();\/\/ 获取 HDFS FileSystem 对象 FileSystem fs = FileSystem.get(conf);\/\/ 定义要列举文件的目录 Path dirPath = new Path("\/user\/hadoop");\/\/ 获取文件列表 RemoteIterator<LocatedFileStatus> fileIter = fs.listFiles(dirPath, ...

java api 连接HDFS出现报错
HDFS是Hadoop生态系统的根基,也是Hadoop生态系统中的重要一员,大部分时候,我们都会使用Linux shell命令来管理HDFS,包括一些文件的创建,删除,修改,上传等等,因为使用shell命令操作HDFS的方式,相对比较简单,方便,但是有时候,我们也需要通过编程的方式来实现对文件系统的管理。比如有如下的一个小需求,...

...用java编写了一个程序,想要连接到hdfs上,运行后显示如下,这是什么...
你的hadoop是2.X的,但是还是按1.X的配置,需修改配置,或者还原hadoop版本。

hadoop的几个问题 1.将本地文件复制到hdfs中,那么在hdfs中这个文件是存...
1. namenode负责管理目录和文件信息,真正的文件块是存放在datanode上。2. 每个map和reduce(即task)都是java进程,默认是有单独的jvm的,所以不可能同一个类的对象会在不同节点上。看你的描述是把namenode,datanode和jobtracker,tasktracker有点混了。所以:问题1. 分块存放在datanode上 问题2.input...

如何使用Java代码访问HDFS.docx?
1.首先,打开Carbon官网,这个直接在浏览器输入网址就行,主界面如下:2.接着就可以直接上传代码片段生成图片了,这里几乎支持所有的编程语言和代码风格,背景色可以自定义,效果实时显示,非常方便,如下:3.如果需要保存图片的话,直接点击右上角的“Export”按钮就行,目前官方支持2种格式的图片,一种是...

在MyEclipse连接Hadoop集群时,编写语句后,run执行报错
解决方法是修改服务端的`hdfs-site.xml`文件,设置更合适的块大小,或在客户端代码中调整相关配置参数。同时,确保配置的参数在服务端和客户端间保持一致。在解决问题过程中,还需要注意配置文件的优先级。配置文件的加载顺序为:代码的优先级 > classpath下的`src\/core-site.xml` > 集群Hadoop的配置...

Hadoop有哪些优缺点?
6、Hadoop带有用Java语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。一、 Hadoop 特点 1、支持超大文件:一般来说,HDFS存储的文件可以支持TB和PB级别的数据。2、检测和快速应对硬件故障:在集群环境中,硬件故障是常见性问题。因为有上...

相似回答