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代码可将文件上传到该目录
其他解决方案:
上百度自行搜索解决