当前位置:   article > 正文

HDFS编程实践_从hdfs中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重

从hdfs中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重

目录:

前提

在VMware中查找虚拟机的IP地址

启动putty

启动Hadoop

登陆HDFS的Web界面

步骤

1、向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件(第一种实现方式)

2、向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件(第二种实现方式)

3、从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名

4、将HDFS中指定文件的内容输出到终端中

5、显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息

6、给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息

7、提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录

8、提供一个HDFS的目录的路径,对该目录进行创建和删除操作。创建目录时,如果目录文件所在目录不存在则自动创建相应目录;删除目录时,由用户指定当该目录不为空时是否还删除该目录

9、向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的结尾

10、向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头(由于没有直接的命令可以操作,方法之一是先移动到本地进行操作,再进行上传覆盖)

11、删除HDFS中指定的文件

12、删除HDFS中指定的目录,由用户指定目录中如果存在文件时是否删除目录

13、在HDFS中,将文件从源路径移动到目的路径

14、编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。

参考文章


前提:

VMware中查找虚拟机的IP地址

ifconfig -a        //查找虚拟机的IP地址

启动putty

启动Hadoop

  1. /opt/hadoop/sbin/start-all.sh //启动所有进程
  2. jps //查看进程结果

登陆HDFS的Web界面

http://192.164.85.124:50070        //192.164.85.124”为“ifconfig-a”命令得到的虚拟机IP地址

 

步骤:

1、向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件(第一种实现方式)

  1. cd //首先回到主目录
  2. ls //查看主目录下的文件
  3. /opt/hadoop/bin/hadoop fs -ls //查看下HDFS下的文件
  4. echo "hello world" >> test1.txt //在主目录下创建一个文本内容为“hello world”的test1.txt
  5. echo "my name is C" >> test3.txt //在主目录下创建一个文本内容为“hello world”的test3.txt
  6. /opt/hadoop/bin/hadoop fs -touchz test99.txt //在HDFS创建一个test99.txt的空文本文件
  7. ls
  8. /opt/hadoop/bin/hadoop fs -ls //查看下HDFS下的文件,看看是否创建成功
  9. /opt/hadoop/bin/hadoop fs -put test1.txt //将本地的test1.txt上传到HDFS
  10. /opt/hadoop/bin/hadoop fs -ls //查看下HDFS下的文件,看看是否上传成功
  11. /opt/hadoop/bin/hadoop fs -put test3.txt //将本地的test3.txt上传到HDFS
  12. /opt/hadoop/bin/hadoop fs -ls //查看下HDFS下的文件,看看是否上传成功
  13. /opt/hadoop/bin/hadoop fs -appendToFile test1.txt test3.txt //test1.txt追加到test3.txt
  14. /opt/hadoop/bin/hadoop fs -cat test3.txt /查看下HDFS下的test3.txt文件,看看是否追加成功
  15. /opt/hadoop/bin/hadoop fs -copyFromLocal -f test3.txt test1.txt //-f:强制的意思,如果没有,会报错“file exits”;用test3.txt的内容覆盖掉test1.txt的内容
  16. /opt/hadoop/bin/hadoop fs -cat test1.txt /查看下HDFS下的test3.txt文件,看看是否覆盖成功

 

2、向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件(第二种实现方式)

  1. if $(/opt/hadoop/bin/hadoop fs -test -e test1.txt); //判断HDFS中是否存在“test1.txt”
  2. then $(/opt/hadoop/bin/hadoop fs -appendToFile test3.txt test1.txt); //若存在,则将本地的test3.txt追加到test1.txt文件的末尾。因为不存在,所以在HDFS中会新生成一个test1.txt,内容为追加后的内容
  3. else $(/opt/hadoop/bin/hadoop fs -copyFromLocal -f test3.txt test1.txt); //-f:强制。若不存在,则用test3.txt的内容覆盖test1.txt的内容
  4. fi
  5. /opt/hadoop/bin/hadoop fs -cat test1.txt //这一步查看HDFS中test1的内容,意在验证test1.txt为追加后的内容
  6. /opt/hadoop/bin/hadoop fs -rm test1.txt //删除test1.txt
  7. /opt/hadoop/bin/hadoop fs -ls //查看是否删除
  8. if $(/opt/hadoop/bin/hadoop fs -test -e test1.txt); //判断HDFS是否存在。。。
  9. then $(/opt/hadoop/bin/hadoop fs -appendToFile test3.txt test1.txt); //存在,则。。。
  10. else $(/opt/hadoop/bin/hadoop fs -copyFromLocal -f test3.txt test1.txt); //不存在,则。。。
  11. fi
  12. /opt/hadoop/bin/hadoop fs -cat test1.txt //意在验证test1.txt的内容是否为“my name is C”

3、从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名

  1. ls //查看本地文件
  2. /opt/hadoop/bin/hadoop fs -ls //查看HDFS文件
  3. if $(test -e /home/hadoop/test1.txt); //判断本地是否存在test1.txt
  4. then $(/opt/hadoop/bin/hadoop fs -copyToLocal test1.txt /home/hadoop/test2.txt); //若存在,则将HDFS中的test1.txt复制为本地的test2.txt
  5. else $(/opt/hadoop/bin/hadoop fs -copyToLocal test1.txt /home/hadoop/test1.txt); //若不存在,则将HDFS中的test1.txt复制为本地的test1.txt
  6. fi
  7. /opt/hadoop/bin/hadoop fs -cat test1.txt //查看HDFS中test1.txt内容
  8. ls //查看本地文件
  9. cat test2.txt //查看本地的test2.txt内容
  10. rm test1.txt //删除本地的test1.txt
  11. ls //查看本地文件,判断是否删除成功
  12. if $(test -e /home/hadoop/test1.txt); //现在本地不存在test1.txt,预计执行的是else后续语句
  13. then $(/opt/hadoop/bin/hadoop fs -copyToLocal test1.txt /home/hadoop/test2.txt);
  14. else $(/opt/hadoop/bin/hadoop fs -copyToLocal test1.txt /home/hadoop/test1.txt);
  15. fi
  16. cat test1.txt //查看本地test1.txt的内容

4、将HDFS中指定文件的内容输出到终端中

  1. /opt/hadoop/bin/hadoop fs -ls //查看HDFS中有哪些文件
  2. /opt/hadoop/bin/hadoop fs -cat test1.txt //选择其中一个文件,输出其内容到终端

5、显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息

  1. /opt/hadoop/bin/hadoop fs -ls //查看HDFS中有哪些文件
  2. /opt/hadoop/bin/hadoop fs -ls -h test1.txt //显示指定文件的读写权限、大小、创建时间、路径等信息

6、给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息

/opt/hadoop/bin/hadoop fs -ls -h /user/hadoop

7、提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录

  1. if $(/opt/hadoop/bin/hadoop fs -test -d /user/hadoop/test); //查看是否存在test目录
  2. then $(/opt/hadoop/bin/hadoop fs -touchz /user/hadoop/test/test8888.txt ); //若存在,则在test目录下创建一个test8888.txt
  3. else $(/opt/hadoop/bin/hadoop fs -mkdir -p /user/hadoop/test && /opt/hadoop/bin/hadoop fs -touchz /user/hadoop/test/test8888.txt); //若不存在,则先创建该目录,再到该目录下创建test888.txt
  4. fi

8、提供一个HDFS的目录的路径,对该目录进行创建和删除操作。创建目录时,如果目录文件所在目录不存在则自动创建相应目录;删除目录时,由用户指定当该目录不为空时是否还删除该目录

  1. /opt/hadoop/bin/hadoop fs -ls //查看HDFS中的文件
  2. if $(/opt/hadoop/bin/hadoop fs -test -e /user/hadoop/test100); //HDFS是否存在这个目录
  3. then $();
  4. else $(/opt/hadoop/bin/hadoop fs -mkdir -p /user/hadoop/test100); //没有就自己建一个
  5. fi
  6. /opt/hadoop/bin/hadoop fs -ls //查看HDFS中的文件
  7. if $(/opt/hadoop/bin/hadoop fs -test -e /user/hadoop/test100); //HDFS是否存在这个目录
  8. then $(/opt/hadoop/bin/hadoop fs -rm -r /user/hadoop/test100); //存在就删除这个目录
  9. fi
  10. /opt/hadoop/bin/hadoop fs -ls //查看HDFS中的文件

9、向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的结尾

  1. /opt/hadoop/bin/hadoop fs -ls //查看HDFS的文件
  2. ls //查看本地文件
  3. /opt/hadoop/bin/hadoop fs -cat test1.txt //查看HDFS中的test1.txt
  4. cat test3.txt //查看本地的test3.txt
  5. /opt/hadoop/bin/hadoop fs -appendToFile test3.txt test1.txt //将本地文件test3.txt的内容追加到HDFS中的test1.txt中
  6. /opt/hadoop/bin/hadoop fs -cat test1.txt //查看HDFS中的test1.txt

10、向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头

(由于没有直接的命令可以操作,方法之一是先移动到本地进行操作,再进行上传覆盖)

  1. ls //查看本地主目录
  2. /opt/hadoop/bin/hadoop fs -ls //查看HDFS文件
  3. cat test3.txt //查看本地的test3.txt
  4. /opt/hadoop/bin/hadoop fs -cat test1.txt //查看HDFS的test1.txt
  5. /opt/hadoop/bin/hadoop fs -get test1.txt //下载HDFS的test1.txt到当前目录
  6. cat test1.txt >> test3.txt //将test1.txt内容追加到test3.txt
  7. /opt/hadoop/bin/hadoop fs -copyFromLocal -f test3.txt test1.txt //test3.txt上传覆盖掉test1.txt
  8. /opt/hadoop/bin/hadoop fs -ls //查看HDFS的文件
  9. /opt/hadoop/bin/hadoop fs -cat test1.txt //查看HDFS中的test1.txt

11、删除HDFS中指定的文件

  1. /opt/hadoop/bin/hadoop fs -ls
  2. /opt/hadoop/bin/hadoop fs -rm test55.txt 删除test55.txt
  3. /opt/hadoop/bin/hadoop fs -ls
  4. 【文件夹可以使用rm -r来删除】

12、删除HDFS中指定的目录,由用户指定目录中如果存在文件时是否删除目录

  1. /opt/hadoop/bin/hadoop fs -ls
  2. /opt/hadoop/bin/hadoop fs -rmdir /user/hadoop/test5 //删除空目录“test5
  3. /opt/hadoop/bin/hadoop fs -ls
  4. /opt/hadoop/bin/hadoop fs -rmdir /user/hadoop/test //删除非空目录“test”,这一步会提示“not empty”
  5. /opt/hadoop/bin/hadoop fs -rm -r /user/hadoop/test //强制删除目录
  6. /opt/hadoop/bin/hadoop fs -ls

13、在HDFS中,将文件从源路径移动到目的路径

  1. /opt/hadoop/bin/hadoop fs -mv test1.txt /user/hadoop/input/test2.txt //将HDFS上的test1.txt移动到input目录里并更名为“test2.txt”【test1.txt等价于/user/hadoop/test1.txt,似乎叫作“相对路径”】
  2. /opt/hadoop/bin/hadoop fs -ls //查看HDFS的文件【也即/user/hadoop下的文件】
  3. /opt/hadoop/bin/hadoop fs -ls -h /user/hadoop/input //看看input目录下是否存在test2.txt
  4. /opt/hadoop/bin/hadoop fs -cat /user/hadoop/input/test2.txt //查看input目录下test2.txt

14、编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。

  MyFSDataInputStream类代码如下,“Path file = new Path("test3");” 这一行代码很关键,在HDFS中寻找“test3”这个文件

  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.FSDataInputStream;
  5. import org.apache.hadoop.fs.FileSystem;
  6. import org.apache.hadoop.fs.Path;
  7. public class MyFSDataInputStream
  8. {
  9. public static void main(String[] args)
  10. {
  11. try
  12. {
  13. Configuration conf = new Configuration();
  14. conf.set("fs.defaultFS", "hdfs://localhost:9000");
  15. conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
  16. FileSystem fs = FileSystem.get(conf);
  17. Path file = new Path("test3"); //这一行代码很关键,在HDFS中寻找“test3”这个文件
  18. FSDataInputStream in = fs.open(file);
  19. BufferedReader d = new BufferedReader(new InputStreamReader(in));
  20. String content = d.readLine();
  21. while(content!=null) //一行循环一次,然后输出内容,到最后一行输出完就停止
  22. {
  23. System.out.println(content);
  24. content = d.readLine();
  25. }
  26. d.close();
  27. fs.close();
  28. }
  29. catch (Exception e)
  30. {
  31. e.printStackTrace();
  32. }
  33. }
  34. }
  1. cd /share
  2. ls
  3. /opt/hadoop/bin/hadoop fs -ls
  4. vim test3 //从ls的结果知本地没有test3,所以会默认创建一个,test3就是上述代码在寻找的东西

在test3中敲入一些文字(ESC + a切换到编辑模式)(ESC + “:” + wq为保存退出)

将本地的test3上传之HDFS并展示

  1. ls
  2. vim MyFSDataInputStream.java //创建一个.java文件,随后将上述代码粘贴保存退出

  1. javac -classpath /opt/hadoop/share/hadoop/common/hadoop-common-2.7.7.jar MyFSDataInputStream.java //编译,编译成功后会出现MyFSDataInputStream.class文件
  2. ls
  3. HADOOP_CLASSPATH=. /opt/hadoop/bin/hadoop MyFSDataInputStream //运行

参考文章:

https://blog.csdn.net/fanfan4569/article/details/77823382

https://wenku.baidu.com/view/6d3235d70d22590102020740be1e650e52eacf16.html

https://blog.csdn.net/wozenmezhemeshuai/article/details/79937342

https://blog.csdn.net/T1DMzks/article/details/72593512?locationNum=5&fps=1

https://www.cnblogs.com/OZX143570/p/8947472.html

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

闽ICP备14008679号