当前位置:   article > 正文

IDEA远程操作HDFS_idea远程调用hadoop

idea远程调用hadoop

IDEA远程管理HDFS

本地环境配置
Windows
  1. 解压到本地磁盘

  2. 配置环境变量

  3. 添加winutils.exe和hadoop.dll

    Hadoop本身对Windows的支持并不友好,如果需要完整使用,需要将winutils.exe和hadoop.dll两个文件移动到%HADOOP_HOME%\bin目录

  4. 修改hadoop-env.cmd

    1. @rem 这个是注释的内容
    2. @rem 设置JAVA_HOME,使用PROGRA~1表示Program Files文件夹
    3. set JAVA_HOME=C:\PROGRA~1\Java\jdk1.8.0_311
  5. 验证

    hadoop version
    
MacOS
  1. 解压解包

    tar -zxvf hadoop-3.3.1-aarch64 -C /opt/softwares
    
  2. 配置环境变量

    1. vim ~/.bash_profile
    2. export HADOOP_HOME=/opt/softwares/hadoop-3.3.1
    3. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOOME/sbin
  3. 验证

    hadoop version
    
IDEA创建Maven工程
pom文件
  1. <dependencies>
  2. <dependency>
  3. <groupId>org.apache.hadoop</groupId>
  4. <artifactId>hadoop-common</artifactId>
  5. <version>3.3.1</version>
  6. </dependency>
  7. <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
  8. <dependency>
  9. <groupId>org.apache.hadoop</groupId>
  10. <artifactId>hadoop-client</artifactId>
  11. <version>3.3.1</version>
  12. </dependency>
  13. <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
  14. <dependency>
  15. <groupId>org.apache.hadoop</groupId>
  16. <artifactId>hadoop-hdfs</artifactId>
  17. <version>3.3.1</version>
  18. </dependency>
  19. </dependencies>
API之文件系统对象
  1. @Test
  2. public void testGetFileSystem() throws IOException {
  3. //创建配置对象,用于加载配置信息(四个默认的配置文件:core-default.xml,hdfs-default.xml,mapred-default.xml,yarn-default.xml)
  4. Configuration conf = new Configuration();
  5. //修改fs.defaultFS属性的值
  6. conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
  7. //使用FileSystem类的静态方法get(Configuration conf);返回fs.defaultFS定义的文件系统
  8. FileSystem fs = FileSystem.get(conf);
  9. System.out.println("文件系统对象的类型名:"+fs.getClass().getName());
  10. }
API之文件上传
  1. @Test
  2. public void testFileUpload() throws IOException {
  3. // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
  4. System.setProperty("HADOOP_USER_NAME", "root");
  5. Configuration conf = new Configuration();
  6. conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
  7. FileSystem fs = FileSystem.get(conf);
  8. //将本地的一个文件D:/file1,上传到HDFS上 /file1
  9. //1. 使用Path描述两个文件
  10. Path localPath = new Path("D:/file1");
  11. Path hdfsPath = new Path("/file1");
  12. //2.调用上传方法
  13. fs.copyFromLocalFile(localPath,hdfsPath);
  14. //3.关闭
  15. fs.close();
  16. System.out.println("上传成功");
  17. }
API之文件下载
  1. @Test
  2. public void testFileDownload() throws IOException {
  3. // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
  4. System.setProperty("HADOOP_USER_NAME", "root");
  5. Configuration conf = new Configuration();
  6. conf.set("fs.defaultFS","hdfs://192.168.10.101:8020");
  7. FileSystem fs = FileSystem.get(conf);
  8. //从HDFS上下载一个文件/file1,下载到本地 D:/file2
  9. //1. 使用Path描述两个文件
  10. Path hdfsfile = new Path("/file1");
  11. Path local = new Path("D:/file2");
  12. //2. 调用下载方法进行下载
  13. fs.copyToLocalFile(hdfsfile,local);
  14. fs.close();
  15. System.out.println("下载成功");
  16. }
API之创建目录
  1. @Test
  2. public void testMkdir() throws IOException {
  3. // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
  4. System.setProperty("HADOOP_USER_NAME", "root");
  5. Configuration conf = new Configuration();
  6. conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
  7. FileSystem fs = FileSystem.get(conf);
  8. //1. 测试创建目录,描述一个目录
  9. Path hdfsfile = new Path("/dir1");
  10. //2. 调用创建目录的方法
  11. fs.mkdirs(hdfsfile);
  12. fs.close();
  13. System.out.println("创建成功");
  14. }
API之删除目录
  1. @Test
  2. public void testDelete() throws IOException {
  3. // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
  4. System.setProperty("HADOOP_USER_NAME", "root");
  5. Configuration conf = new Configuration();
  6. conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
  7. FileSystem fs = FileSystem.get(conf);
  8. //1. 测试删除目录,描述一个目录
  9. Path hdfsfile = new Path("/dir1");
  10. //2. 调用创建目录的方法
  11. fs.delete(hdfsfile,true);
  12. fs.close();
  13. System.out.println("删除成功");
  14. }
API之重命名
  1. @Test
  2. public void testRename() throws IOException {
  3. // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
  4. System.setProperty("HADOOP_USER_NAME", "root");
  5. Configuration conf = new Configuration();
  6. conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
  7. FileSystem fs = FileSystem.get(conf);
  8. //1. 测试重命名,将file1改为file01
  9. Path oldName = new Path("/file1");
  10. Path newName = new Path("/file01");
  11. //2.调用重命名方法
  12. fs.rename(oldName,newName);
  13. fs.close();
  14. System.out.println("命名成功");
  15. }
IOUtil上传文件
  1. @Test
  2. public void putFile() throws IOException, URISyntaxException {
  3. // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
  4. System.setProperty("HADOOP_USER_NAME", "root");
  5. //1 连接HDFS 文件系统
  6. Configuration conf=new Configuration();
  7. //获得文件系统
  8. FileSystem fs=FileSystem.get(new URI("hdfs://182.168.10.101:9820"),conf);
  9. // 创建输入流,读取输入文件
  10. FileInputStream input=new FileInputStream(new File("c://a.txt"));
  11. // 创建输出流
  12. FSDataOutputStream out=fs.create(new Path("/gg.txt"));
  13. //IO的流拷贝
  14. IOUtils.copyBytes(input, out, conf);
  15. //关闭资源
  16. IOUtils.closeStream(input);
  17. IOUtils.closeStream(out);
  18. System.out.println("上传完毕");
  19. }
IOUtil下载文件
  1. @Test
  2. public void getFile() throws IOException, URISyntaxException {
  3. // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
  4. System.setProperty("HADOOP_USER_NAME", "root");
  5. // 1 连接HDFS 文件系统
  6. Configuration conf = new Configuration();
  7. // 获得文件系统
  8. FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.101:9820"), conf);
  9. // 获取输入流 从HDFS上读取
  10. FSDataInputStream input=fs.open(new Path("/gg.txt"));
  11. // 获取输出流
  12. FileOutputStream out=new FileOutputStream(new File("c://gg.txt"));
  13. //流拷贝
  14. IOUtils.copyBytes(input, out, conf);
  15. //关闭流
  16. IOUtils.closeStream(input);
  17. IOUtils.closeStream(out);
  18. System.out.println("下载完成");
  19. }
API之文件状态
  1. @Test
  2. public void testFileStatus() throws IOException {
  3. // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
  4. System.setProperty("HADOOP_USER_NAME", "root");
  5. Configuration conf = new Configuration();
  6. conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
  7. FileSystem fs = FileSystem.get(conf);
  8. //1. 描述你要读取的文件 /file02
  9. Path path = new Path("/file02");
  10. //获取文件的状态信息
  11. RemoteIterator<LocatedFileStatus> it = fs.listLocatedStatus(path);
  12. while(it.hasNext()){
  13. // 取出对象
  14. LocatedFileStatus status = it.next();
  15. System.out.println("name:"+status.getPath());
  16. //获取位置
  17. BlockLocation[] locate = status.getBlockLocations();
  18. for(BlockLocation bl:locate){
  19. System.out.println("当前块的所有副本位置:"+Arrays.toString(bl.getHosts()));
  20. System.out.println("当前块大小:"+bl.getLength());
  21. System.out.println("当前块的副本的ip地址信息:"+Arrays.toString(bl.getNames()));
  22. }
  23. System.out.println("系统的块大小:"+status.getBlockSize());
  24. System.out.println("文件总长度:"+status.getLen());
  25. }
  26. }

更多大数据精彩内容欢迎B站搜索“千锋教育”或者扫码领取全套资料   

【千锋教育】大数据开发全套教程,史上最全面的大数据学习视频

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/444130
推荐阅读
相关标签
  

闽ICP备14008679号