HDFS Java API应用

1、找到IDEA的MAVEN插件安装目录,修改settings.xml文件,在文件中添加MAVEN淘宝镜像库

<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
</mirrors>

在这里插入图片描述修改IDEA的maven插件安装目录下的settings.xml文件

2、在IDEA中新建Marven项目,修改pom.xml,在pom.xml文件中的根节点中,添加一个子节点,如下图:
在这里插入图片描述

3、查询maven组件配置https://mvnrepository.com/
!!注意在查询组件时选择的组件要和实际安装的hadoop版本一致,下面的以hadoop-3.1.2版本为例
需要查询的组件:
hadoop-client

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>3.1.2</version>
</dependency>

hadoop-hdfs

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>3.1.2</version>
    <scope>test</scope>
</dependency>

hadoop-common

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>3.1.2</version>
</dependency>

将所有查询到的组件的XML插入到节点中去,如下图:
在这里插入图片描述
在这里插入图片描述
pom.xml修改完毕后,点击右下角的"Import Changes"即可将MAVEN库中的JAR包下载到项目中,默认情况下,会从MAVEN官网下载,速度比较慢;可事先配置MAVEN淘宝镜像库,基本方法就是在IntelliJ IDEA的安装目录下,找到MAVEN插件的安装目录,修改其配置文件,将镜像设置添加到配置文件中即可

4、首先在D盘新建一个uploadtohdfs.txt文件,然后运行下面的代码:(注意:以下代码的IP地址要替换为hadoop集群中虚拟机主节点实际的IP地址)

package cn.edu.swpu.scs.hdfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
import java.util.Properties;

public class HdfsApp {
    public static void main(String []args) throws IOException {
        Properties properties = System.getProperties();
        properties.setProperty("HADOOP_USER_NAME", "root");

        Configuration config = new Configuration();
        config.set("fs.defaultFS", "hdfs://192.168.151.130:9000");
        FileSystem hdfs = FileSystem.get(config);

        Path local = new Path("file:/D:/uploadtohdfs.txt");
        Path remote = new Path("hdfs://192.168.151.130:9000/tmp/uploadtohdfs.txt");
        hdfs.copyFromLocalFile(local, remote);
        System.out.print("file upload success!");
        hdfs.close();
    }
}

5、运行代码实现hdfs上传文件操作
在这里插入图片描述

6、通过命令在hdfs上查看文件上传情况
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、附:HDFS Java API常见异常解决方案
异常记录:
Exception in thread “main” org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme “hdfs”
缺少hadoop-core配置,hadoop-core版本太低,疑似已被放弃,使用hadoop-client代替

Exception in thread “main” java.lang.IllegalArgumentException: Wrong FS: hdfs://192.168.137.10:9000/uploadtohdfs.txt, expected: file:///
未识别到hdfs服务器导致,应该与jdk版本、hadoop-client等配置有关

Exception in thread “main” org.apache.hadoop.ipc.RemoteException: Server IPC version 9 cannot communicate with client version 4
客户端版本太低,不能使用hadoop-core,而应使用hadoop-client

could only be written to 0 of the 1 minReplication nodes. There are 0 datanode(s) running and 0 node
HDFS问题,检查DataNode是否启动,如果无异常,可能是元数据异常导致,须清空所有节点中的dfs/name,dfs/data和tmp目录,并重新格式化NameNode

Permission denied: user=Administrator, access=WRITE, inode=“/tmp”:root:supergroup:drwxr-xr-x
写入权限问题,解决此问题后可完成API调试
解决方案之一:
(1)NameNode所在节点创建一个和windows一样的用户(注意大小写)
如:adduser Administrator
(2)创建一个子目录,将权限赋予该用户
如:hadoop fs -mkdir /usr
hadoop fs -chown Administrator /usr
(3)通过java代码可将文件上传到该目录

其他解决方案:
上百度自行搜索解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值