实验2_熟悉常用的HDFS操作

一、实验目的

  1. 理解HDFS在Hadoop体系结构中的角色
  2. 熟练使用HDFS操作常用的Shell命令
  3. 熟悉HDFS操作常用的Java API

二、实验平台

  • 操作系统:Ubuntu 18
  • Hadoop版本:Hadoop 3.1.3
  • JDK版本:1.8
  • Java IDE:eclipse

三、实验内容和要求

  1. 利用Hadoop提供的Shell命令完成下列任务:
  • 向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件。
 ./bin/hdfs dfs -put test.txt test/ 
 ./bin/hdfs dfs -appendToFile local.txt test/test.txt
 ./bin/hdfs dfs -cat test/test.txt

结果
实验2_熟悉常用的HDFS操作_第1张图片请添加图片描述

  • 从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名。
if $(./bin/hdfs dfs -test -e /usr/local/hadoop/test.txt);
> then $(./bin/hdfs dfs -copyToLocal test/test.txt ./test.txt);
> else $(./bin/hdfs dfs -copyToLocal test/test.txt ./test2.txt); 
> fi

结果实验2_熟悉常用的HDFS操作_第2张图片

  • 将HDFS中指定文件的内容输出到终端中。
./bin/hdfs dfs -cat test/test.txt

结果
请添加图片描述

  • 显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息。
./bin/hdfs dfs -ls -h test/test.txt

结果
请添加图片描述

  • 给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息。
./bin/hdfs dfs -ls -h test

结果
请添加图片描述

  • 提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录。
if $(./bin/hdfs dfs -test -d test/test1);
> then $(./bin/hdfs dfs -touchz test/test1);
> else $(./bin/hdfs dfs -mkdir -p test/test1 );
> fi
./bin/hdfs dfs -ls test/

结果
实验2_熟悉常用的HDFS操作_第3张图片

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

先将之前的目录删掉

hadoop fs -rm -r /test/test1

结果
请添加图片描述
创建

if $(hadoop fs -test -d /test/test1);
> then $(hadoop fs -touchz /test/test1);
> else $(hadoop fs -mkdir -p /test/test1 );
> fi
fs -ls /test/

结果
实验2_熟悉常用的HDFS操作_第4张图片
删除

if $(hadoop fs -test -d test/test1);
> then $(hadoop fs -rm -r test/test1);
> else $(hadoop fs -rm -r test/test1 );
> fi
hadoop fs -ls test/

结果
请添加图片描述
请添加图片描述

  • 向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾;
hadoop fs -appendToFile ./demo0.txt test/test.txt
hadoop fs -cat test/test.txt

结果
实验2_熟悉常用的HDFS操作_第5张图片

  • 删除HDFS中指定的文件;
hadoop fs -rm test/hello.txt

结果
请添加图片描述

  • 删除HDFS中指定的目录,由用户指定目录中如果存在文件时是否删除目录;
if $(hadoop fs -test -d test/test1); 
> then $(hadoop fs -rm -r test/test1); 
> else $(hadoop fs -rm -r test/test1 );
> fi
hadoop fs -ls test/

结果
实验2_熟悉常用的HDFS操作_第6张图片

  • 在HDFS中,将文件从源路径移动到目的路径。
hadoop fs -mv test/test.txt  test2
hadoop fs -ls test2/

结果
请添加图片描述

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

结果
实验2_熟悉常用的HDFS操作_第7张图片

  1. 查看Java帮助手册或其它资料,用“java.net.URL”和“org.apache.hadoop.fs.FsURLStreamHandlerFactory”编程完成输出HDFS中指定文件的文本到终端中。
hadoop jar ./jar/hadoop2.jar

结果
请添加图片描述

  1. 请分别新建文件file1.txt、file2.txt、file3.txt、file4.abc和file5.abc,上述文件内容如下表所示,
文件名称 文件内容
file1.txt this is file1.txt
file2.txt this is file2.txt
file3.txt this is file3.txt
file4.abc this is file4.abc
file5.abc this is file5.abc

将这些文件上传到HDFS的“/user/hadoop”目录下。请参考授课讲义第3章 分布式文件系统HDFS7.3 HDFS常用Java API及应用案例,编写Java应用程序,实现从该目录中过滤出所有后缀名不为“.abc”的文件,对过滤之后的文件进行读取,并将这些文件的内容合并到文件“/user/hadoop/merge.txt”中。
实验2_熟悉常用的HDFS操作_第8张图片

hadoop jar ./jar/hadoop3.jar

结果
实验2_熟悉常用的HDFS操作_第9张图片

你可能感兴趣的:(Linux_Hadoop,hadoop,big,data)