使用JavaAPI操作HDFS创建目录和权限问题

 

一、创建目录

1.首先在虚拟Linux上找到jar包
          $HADOOP_HOME/share/hadoop/common/*.jar
          $HADOOP_HOME/share/hadoop/common/lib/*.jar
          $HADOOP_HOME/share/hadoop/hdfs/*.jar
          $HADOOP_HOME/share/hadoop/hdfs/lib/*.jar


2.下载当中所有的jar包然后导入在MyEclipse上

 

3.示例代码:

package com.stu.demo;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;

/*这个错误是因为没用Linux的root用户,权限不够无法创建目录。实例是正确代码,使用root用户。因为虚拟机的HDFS的权限检查没有设置所以你说你是root就是root,无需证明。
*hdfs-site.xml 
* dfs.permissions
* false
* 
* Permission denied: user=Сì, access=WRITE, inode="/folder":root:supergroup:d rwx r-x r-x
*/
public class TestMkDir {
@Test
public void testMkdir1() throws Exception {
//指定当前的Hadoop用户
System.setProperty("HADOOP_USER_NAME", "root");
//配置参数,指定NameNode地址
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://192.168.125.111:9000");
//创建一个客服端
FileSystem client = FileSystem.get(conf);

//创建目录
client.mkdirs(new Path("/folder"));

//关闭客户端
client.close();
}
}

 


二、关于hdfs权限问题

 

1、示例代码

package com.stu.demo;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;

public class Demo {

@Test
public void test01() throws Exception{

//配置参数,指定NameNode地址
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://192.168.125.111:9000");
//创建客服端
FileSystem client = FileSystem.get(conf);
//创建目录
client.mkdirs(new Path("/Demo/demo111"));
//关闭客户端
client.close();
}
}

 


2、出错信息:org.apache.hadoop.security.AccessControlException: Permission denied: user=Сì, access=WRITE, inode="/Demo/demo223":root:supergroup: d rwx r-x r-x

     出错原因:当前用Windows操作所以是本地用户,其他用户是没有写的权限的,所以要修改HDFS的权限。

 

3、解决方式

     第一种方式://指定当前用户为root用户
                          System.setProperty("HADOOP_USER_NAME", "root");

     第二种方式:通过java的-D方式参数,-D可以理解是取参数的,如图所示:使用JavaAPI操作HDFS创建目录和权限问题_第1张图片

   使用JavaAPI操作HDFS创建目录和权限问题_第2张图片

  第三种方式:dfs.permissions -->false ; 默认是ture,修改就行。

  第四种方式:命令 -chmod 改变hdfs的目录权限

 

你可能感兴趣的:(大数据学习)