一、创建目录
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 <!--是否开启HDFS的权限检查,默认true-->
* <name>dfs.permissions</name>
* <value>false</value>
* </property>
* 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可以理解是取参数的,如图所示:
第三种方式:dfs.permissions -->false ; 默认是ture,修改就行。
第四种方式:命令 -chmod 改变hdfs的目录权限