HDFS的shell和API操作
2021-06-20 22:05
3)hdfs编程中的重要的 两个对象:
Configuration类的介绍:
Configuration类是加载hadoop中的相应的配置文件
Configuration conf=new Configuration(true);
如果在这里没有在source folder中放入相应的配置文件:
core-site.xml、hdfs-site.xml、yarn-site.xml、mapreduce-site.xml…
那么Configuration类会自动的加载jar包中的配置文件:
hadoop-hdfs-2.7.6.jar/hdfs-default.xml
只有在sourcefolder中放入相应的配置时,才能够加载相应的配置,但是配置文件的名称必须是site 或者default的文件,才能够正确加载
使用相应的方法加载配置文件:
Configuration conf=new Configuration();
conf.addResource(""); //这例实参的内容为配置文件的权限定名称
FileSystem类的介绍:
获取FileSystem对象:
//以这种方式获取的fs对象是本地的文件系统的对象,如果在windows下就是windows的对象
Configuration conf=new Configuration();
FileSystem fs=FileSystem.get(conf);
//能加载自己集群的文件系统对象
conf.set("fs.defaultFS", "hdfs://hadoop01:9000");
解决编程时的权限问题:
由于hdfs文件系统是基于用户的,在Windows下eclipse中操作hdfs默认的用户是Windows的用户,在操作hdfs文件系统时没有权限的,所以在做读写操作时,可能会报出:
解决方案:
(1)在运行时使用run configuration,配置相应的参数:-DHADOOP_USER_NAME=hadoop(指定运行用户)
(2)在代码中指定用户:FileSystem.get(newURI("hdfs://hadoop01:9000"),conf,"hadoop");
(3)在代码中指定jvm运行时使用的用户System.setProperty("HADOOP_USER_NAME", "hadoop"); 这里需要使用run configuration运行
(4)在Windows中添加一个hadoop用户,不建议使用
如果以上方式仍然出现问题,那么就需要在window的path中配置一个环境变量:
DHADOOP_USER_NAME = hadoop 即可。