1. HDFS appendToFile命令DFSClient问题

2.hadoop伪分布式运行时lease recovery is in progress解决办法

借鉴于https://blog.csdn.net/xutao_ccu/article/details/84729640
今天做厦门大学大数据系统的课的实验2时,出现了如题错误。按照链接的办法成功解决了。
出现问题的原因是:集群节点少于3个在运行时就会抛异常;
解决办法就是加入conf.set(“dfs.client.block.write.replace-datanode-on-failure.policy”, “NEVER”); 这条配置。
如下:

  1. // 写入文件
  2. import org.apache.hadoop.conf.Configuration;
  3. import org.apache.hadoop.fs.FileSystem; //用于创建文件系统实例,用FileSystem.create方法可以打开一个输出流,返回FSDataOutputStream
  4. import org.apache.hadoop.fs.FSDataOutputStream;
  5. import org.apache.hadoop.fs.Path; // 用于创建和解决文件路径,且FileSystem的方法大部分要求必须传入Path对象
  6. public class WriteFIle {
  7. public static void main(String[] args) {
  8. try {
  9. Configuration conf = new Configuration();
  10. conf.set("fs.defaultFS","hdfs://localhost:9000");
  11. conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
  12. conf.set("dfs.client.block.write.replace-datanode-on-failure.policy", "NEVER"); //添加无视安全
  13. FileSystem fs = FileSystem.get(conf);
  14. byte[] buff = "Hello world".getBytes(); // 要写入的内容
  15. String filename = "file1.txt"; //要写入的文件名
  16. // FSDataOutputStream os = fs.create(new Path(filename)); //FS.create和open类似,返回一个输出流对象,创建一个文件,会覆盖原有文件
  17. FSDataOutputStream os = fs.append(new Path(filename)); //append方法和create不同,是在文件末尾添加新内容,而非覆盖
  18. os.write(buff,1,buff.length-1);
  19. System.out.println("Create:"+ filename);
  20. os.close();
  21. fs.close();
  22. } catch (Exception e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. }

屏幕截图 2022-04-13 165451.png