个人随笔
目录
通过FileSystem API 将内容写入hdfs
2019-11-18 23:06:42

这里写一个将字符串内容写入hdfs文件的例子,项目跟上一篇通过FileSystem API 从hdfs文件系统读取文件内容类似,这里只增加一个静态方法,内容如下:

  1. /**
  2. * 将字符串内容写入hdfs
  3. * @param content 要写入的内容
  4. * @param path 路径
  5. * @return
  6. */
  7. public static String writeStringToHDFS(String content,String path) {
  8. if(StringUtils.isBlank(path)) {
  9. log.error("请指定hdfs文件系统中的文件路径");
  10. return "";
  11. }
  12. try {
  13. //FileSystem 对HDFS系统的引用,操作HDFS的根类,所有HDFS文件操作均以此类为源头发起
  14. //URI.create(path):通过给定的uri方案和权限来确定要使用的文件系统
  15. //Path HDFS文件的抽象,与Java IO流中的File对象对等
  16. FileSystem fs = FileSystem.get(URI.create(path),conf);
  17. //FSDataInputStream HDFS系统的文件字节输入流,类似于Java IO中的InputStream类,实现对HDFS文件的读取
  18. //FSDataOutputStream HDFS系统的文件字节输出流,类似于Java IO中的OutputStream类,实现对HDFS文件的写入
  19. FSDataOutputStream out = null;
  20. try {
  21. out = fs.create(new Path(path));
  22. out.writeBytes(content);
  23. }finally {
  24. //关闭IO流
  25. IOUtils.closeStream(out);
  26. }
  27. } catch (IOException e) {
  28. log.error(e.getMessage());
  29. }
  30. return "";
  31. }

这样既可以啦,测试的话这里是配合上一篇读取来测试的,执行jar的时候传入两个参数,第一个是要读取的hdfs文件,第二个是把第一步读取的文件内容写入的文件路径。

  1. public static void main(String[] args) throws IOException {
  2. if(args.length>1) {
  3. //读取的hdfs文件系统的路径
  4. String file1 = args[0];
  5. //将读取的内容保存的文件路径
  6. String file2 = args[1];
  7. log.info("开始读取"+file1+"中的内容");
  8. String content= getStringByHSFSPath(file1);
  9. log.info("读取结果是:"+content);
  10. log.info("将结果存入:"+file2+"中");
  11. writeStringToHDFS(content, file2);
  12. log.info("保存成功");
  13. }
  14. }

然后传输到集群中运行

  1. yarn jar hadoop-core.jar /test.txt /abcd.txt

结果如下:

  1. 19/11/19 00:04:23 INFO util.HdfsFileOperationUtil: 开始读取/test.txt中的内容
  2. 19/11/19 00:04:28 INFO util.HdfsFileOperationUtil: 读取结果是:qwyeytqweiuyqwiuehiwqjeioqwueiqwe
  3. eriuewyroiqeoiuqwioejwqlkd
  4. iefhklsdhflksjdflkjlksdjflksdjlkf
  5. sjkdhfjksdhfjsdjfjklsdjflksdjlfk
  6. 19/11/19 00:04:28 INFO util.HdfsFileOperationUtil: 将结果存入:/abcd.txt
  7. 19/11/19 00:04:29 INFO util.HdfsFileOperationUtil: 保存成功
  8. [hadoop@worker1 test]$ hdfs dfs -cat /abcd.txt
  9. qwyeytqweiuyqwiuehiwqjeioqwueiqwe
  10. eriuewyroiqeoiuqwioejwqlkd
  11. iefhklsdhflksjdflkjlksdjflksdjlkf
  12. sjkdhfjksdhfjsdjfjklsdjflksdjlfk

当然,刚开始我这里报了一个安全模式的错误

  1. The reported blocks 10 needs additional 1 blocks to reach the threshold 0.9990 of total blocks 12. The number of live datanodes 1 has reached the minimum number 0. Safe mode will be turned off automatically once the thresholds have b

应该是我直接关闭虚拟机没有关闭hdfs的原因导致文件损坏,然后我强行退出安全模式:

  1. hadoop dfsadmin -safemode leave

真他喵机智!

 511

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2