如何用idea连接hadoop
先idea中配置hadoop的maven依赖,然后进行连接
前提条件:1、先配置Hadoop依赖
2、从hadoop-3.1.1中的core文件中找到远程连接的名称和地址
1、先去Maven导入依赖
2、打开core-size.xml文件
3、编写代码
完成代码如下:
编写一个hadoop工具类,方便以后直接用
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import java.io.IOException;
public class HadoopTool {
private HadoopTool(){};
public static FileSystem getConnection(Configuration configuration){
FileSystem fs=null;
try {
fs = FileSystem.get(configuration);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("连接成功!"+fs);
return fs;
}
}
编写测试类hadoop:进行连接
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import java.text.SimpleDateFormat;
import java.util.Date;
public class hadoop {
public static void main(String[] args) throws Exception{
//建立HDFS的连接
//TODO:连接地址和名称都要从hadoop-3.1.1中的/etc/core.site.xml中
//连接名称:fs.defaultFS
//连接地址:hdfs://master:9000/
//创建hadoop配置文件
// Configuration conf = new Configuration();
// conf.set("fs.defaultFS","hdfs://master:9000/");
// FileSystem fs = FileSystem.get(conf);//这里要注意抛异常
// System.out.println("hadoop连接成功!"+fs);
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://master:9000");
FileSystem fs = HadoopTool.getConnection(conf);
RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/"), true);
//迭代器用while循环即可
while (files.hasNext()) {
LocatedFileStatus file = files.next();
long accessTime = file.getAccessTime();//毫秒的时间戳
String name = file.getPath().getName();
System.out.println("文件名:" + name + "," + "文件上传时间:" + new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(new Date(accessTime)));
}
//上传文件的时候,不管文件是否存在,只要放到已存在的根目录下,程序就不会报错
// FSDataInputStream fis = fs.open(new Path("/user/基本用法.txt"));//要读文件
// Path path = new Path("/dasktop/top/");
// FSDataOutputStream fos = fs.create(path);//创建hdfs上一个不存在的目录,将读到的内容放到该目录,如果目录存在,则会创建失败
// int i = 0;
// byte[] bytes = new byte[2048];
// while ((i = fis.read(bytes))!=-1) {
// String s = new String(bytes, 0, bytes.length - 1);
// System.out.println(s);
// fos.write(i);
// fos.hflush();
// }
// fos.close();
// fis.close();
// fs.copyFromLocalFile(new Path("D:\\JAVAprojects\\mavenTest\\hadoopTest\\src\\main\\java\\数据处理.txt"),new Path("/dasktop/"));
// System.out.println("推送成功!");
// //TODO:如果文件不存在,下载或者读取的时候就会报错,如果存在则创建的时候报错,推送成功但不会覆盖
// //下载的时候,因为是通过网络将hadoop中的文件下载下来,所以文件的序列化流也会被下载到本地
// fs.copyToLocalFile(new Path("/user/你好.txt"),new Path("D:\\JAVAprojects\\mavenTest\\hadoopTest\\src\\main\\java"));
// System.out.println("下载成功!");
}
}