IDEA远程管理HDFS
本地环境配置
Windows
-
解压到本地磁盘
-
配置环境变量
-
添加winutils.exe和hadoop.dll
Hadoop本身对Windows的支持并不友好,如果需要完整使用,需要将winutils.exe和hadoop.dll两个文件移动到%HADOOP_HOME%\bin目录
-
修改hadoop-env.cmd
@rem 这个是注释的内容 @rem 设置JAVA_HOME,使用PROGRA~1表示Program Files文件夹 set JAVA_HOME=C:\PROGRA~1\Java\jdk1.8.0_311
-
验证
hadoop version
MacOS
-
解压解包
tar -zxvf hadoop-3.3.1-aarch64 -C /opt/softwares
-
配置环境变量
vim ~/.bash_profileexport HADOOP_HOME=/opt/softwares/hadoop-3.3.1 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOOME/sbin
-
验证
hadoop version
IDEA创建Maven工程
pom文件
<dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.3.1</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.3.1</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.3.1</version></dependency>
</dependencies>
API之文件系统对象
@Test
public void testGetFileSystem() throws IOException {//创建配置对象,用于加载配置信息(四个默认的配置文件:core-default.xml,hdfs-default.xml,mapred-default.xml,yarn-default.xml)Configuration conf = new Configuration();//修改fs.defaultFS属性的值conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");//使用FileSystem类的静态方法get(Configuration conf);返回fs.defaultFS定义的文件系统FileSystem fs = FileSystem.get(conf);System.out.println("文件系统对象的类型名:"+fs.getClass().getName());
}
API之文件上传
@Test
public void testFileUpload() throws IOException {// 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户System.setProperty("HADOOP_USER_NAME", "root");Configuration conf = new Configuration();conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");FileSystem fs = FileSystem.get(conf);//将本地的一个文件D:/file1,上传到HDFS上 /file1//1. 使用Path描述两个文件Path localPath = new Path("D:/file1");Path hdfsPath = new Path("/file1");//2.调用上传方法fs.copyFromLocalFile(localPath,hdfsPath);//3.关闭fs.close();System.out.println("上传成功");
}
API之文件下载
@Test
public void testFileDownload() throws IOException {// 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户System.setProperty("HADOOP_USER_NAME", "root");Configuration conf = new Configuration();conf.set("fs.defaultFS","hdfs://192.168.10.101:8020");FileSystem fs = FileSystem.get(conf);//从HDFS上下载一个文件/file1,下载到本地 D:/file2//1. 使用Path描述两个文件Path hdfsfile = new Path("/file1");Path local = new Path("D:/file2");//2. 调用下载方法进行下载fs.copyToLocalFile(hdfsfile,local);fs.close();System.out.println("下载成功");
}
API之创建目录
@Test
public void testMkdir() throws IOException {// 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户System.setProperty("HADOOP_USER_NAME", "root");Configuration conf = new Configuration();conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");FileSystem fs = FileSystem.get(conf);//1. 测试创建目录,描述一个目录Path hdfsfile = new Path("/dir1");//2. 调用创建目录的方法fs.mkdirs(hdfsfile);fs.close();System.out.println("创建成功");
}
API之删除目录
@Test
public void testDelete() throws IOException {// 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户System.setProperty("HADOOP_USER_NAME", "root");Configuration conf = new Configuration();conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");FileSystem fs = FileSystem.get(conf);//1. 测试删除目录,描述一个目录Path hdfsfile = new Path("/dir1");//2. 调用创建目录的方法fs.delete(hdfsfile,true);fs.close();System.out.println("删除成功");
}
API之重命名
@Test
public void testRename() throws IOException {// 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户System.setProperty("HADOOP_USER_NAME", "root");Configuration conf = new Configuration();conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");FileSystem fs = FileSystem.get(conf);//1. 测试重命名,将file1改为file01Path oldName = new Path("/file1");Path newName = new Path("/file01");//2.调用重命名方法fs.rename(oldName,newName);fs.close();System.out.println("命名成功");
}
IOUtil上传文件
@Test
public void putFile() throws IOException, URISyntaxException { // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户System.setProperty("HADOOP_USER_NAME", "root");//1 连接HDFS 文件系统 Configuration conf=new Configuration(); //获得文件系统FileSystem fs=FileSystem.get(new URI("hdfs://182.168.10.101:9820"),conf);// 创建输入流,读取输入文件 FileInputStream input=new FileInputStream(new File("c://a.txt"));// 创建输出流FSDataOutputStream out=fs.create(new Path("/gg.txt"));//IO的流拷贝IOUtils.copyBytes(input, out, conf);//关闭资源IOUtils.closeStream(input);IOUtils.closeStream(out);System.out.println("上传完毕");
}
IOUtil下载文件
@Test
public void getFile() throws IOException, URISyntaxException {// 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户System.setProperty("HADOOP_USER_NAME", "root");// 1 连接HDFS 文件系统Configuration conf = new Configuration();// 获得文件系统FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.101:9820"), conf);// 获取输入流 从HDFS上读取FSDataInputStream input=fs.open(new Path("/gg.txt"));// 获取输出流FileOutputStream out=new FileOutputStream(new File("c://gg.txt"));//流拷贝IOUtils.copyBytes(input, out, conf);//关闭流IOUtils.closeStream(input);IOUtils.closeStream(out); System.out.println("下载完成");
}
API之文件状态
@Test
public void testFileStatus() throws IOException {// 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户System.setProperty("HADOOP_USER_NAME", "root");Configuration conf = new Configuration();conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");FileSystem fs = FileSystem.get(conf);//1. 描述你要读取的文件 /file02Path path = new Path("/file02");//获取文件的状态信息RemoteIterator<LocatedFileStatus> it = fs.listLocatedStatus(path);while(it.hasNext()){// 取出对象LocatedFileStatus status = it.next();System.out.println("name:"+status.getPath());//获取位置BlockLocation[] locate = status.getBlockLocations();for(BlockLocation bl:locate){System.out.println("当前块的所有副本位置:"+Arrays.toString(bl.getHosts()));System.out.println("当前块大小:"+bl.getLength());System.out.println("当前块的副本的ip地址信息:"+Arrays.toString(bl.getNames()));}System.out.println("系统的块大小:"+status.getBlockSize());System.out.println("文件总长度:"+status.getLen());}
}
更多大数据精彩内容欢迎B站搜索“千锋教育”或者扫码领取全套资料
【千锋教育】大数据开发全套教程,史上最全面的大数据学习视频