环境搭建好之后我们就要用java操作hdfs了
首先我们新建个maven项目,并引入如下依赖:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.5</version>
</dependency>
因为我的hadoop是2.7.5版本,因此我导入2.7.5版本jar包。
我们新建一个Demo类。然后通过FileSystem fs = FileSystem.get(conf);创建一个实例,该类在org.apache.hadoop.fs.FileSystem中,不要引错。FileSystem.get()方法要求传入一个org.apache.hadoop.conf.Configuration类型的参数。我们直接new一个Configuration,它会自动读取src目录下的配置文件,因此,我们需要从我们的集群中copy出core-site.xml和hdfs-site.xml放入src目录下,由于我们搭建集群时配置了hostname映射,因此我们要修改一下我们client的hosts映射,如果不修改,需要将我们copy的配置文件中node1等节点名改为节点对应的ip。
好了,现在我们可以开始尝试了。我们调用fs的mkdirs()方法。创建一个文件夹,该方法需要传入一个org.apache.hadoop.fs.Path类型的参数,我们new一个Path,Path path =new Path("/tmp");
fs.mkdirs(path); 当然,最后不要忘记fs.close();运行一下,看看我们的tmp文件是不是创建成功了。
如果发现报错,可能是因为我们client的用户名和namenode的用户名不对应,因为hdfs的安全策略必须保证用户名相同,我们只要修改client的用户名就可以了。修改方法如下:
电脑桌面→开始→运行,快捷键win+R
输入netplwiz,点击确定
选中当前用户名,点击属性
对用户名进行更改,并应用确定
重启计算机,使之生效
当然FileSystem还有许多api在此不一一赘述。
网友评论