Shell
命令:
if $(hdfs dfs -test -e file:///home/hadoop /);
then $(hdfs dfs - . /);
else $(hdfs dfs - . /); fi
(一) 实验目的
1.复习HDFS 常用的Shell 命令;
2.熟悉HDFS 操作常用的Java API ;
3.学会用Java 代码实现HDFS 读写文件。
(三) 实验环境
1.理解HDFS 的读写原理;
2.编程实现按行读取HDFS 中的指定文件;
3.编程实现HDFS 中指定文件的内容输出到终端
(四) 实验步骤
(二) 实验要求
1.大数据分析实验系统(FSDP );
2.CentOS 6.7;
3.Hadoop 2.7.1;
4.Java SE 10,Eclipse 4.7。
提示:
(1)部分Shell 命令的参数路径只能是本地路径或者HDFS 路径。
(2)若Shell 命令的参数既可以是本地路径,也可以是HDFS 路径时,务必注意区分。为保证操作正确,可指定路径前缀 hdfs:///或者file:///。 (3)注意区分相对路径与绝对路径。
(4)命令说明可参考 / docs/stable/hadoop-project-dist/hadoop-common/ FileSystemShell.html 。
(5)参考Java 代码文件“HDFSApi.java”。
if $(hdfs dfs -test -);
then $(hdfs dfs - );
else $(hdfs dfs -copyFromLocal - ); fi
(1)向HDFS 中上传任意文本文件,如果指定的文件在HDFS 中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件。 Shell 命令:
检查文件是否存在: hdfs dfs -test -(执行完这一句不会输出结果,需要继续输入命令" echo $?")
追加命令: hdfs dfs -
覆盖命令1: hdfs dfs -copyFromLocal -
覆盖命令2: hdfs dfs -cp -f file:///home/hadoop / 也可以使用如下命令实现:
(如下代码可视为一行代码,在终端中输入第一行代码后,直到输入 fi 才会真正执行)
Shell 命令:
hdfs dfs -
Shell 命令:
hdfs dfs -ls -
(2)从HDFS 中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名。 (3)将HDFS 中指定文件的内容输出到终端中。 (4)显示HDFS 中指定的文件的读写权限、大小、创建时间、路径等信息。 1.Shell 命令和Java 代码实现HDFS 文件操作; 2.Java 编程实现“MyFSDataInputStream ”类; 3.Java 编程实现HDFS 文件内容输出到终端。
1、Shell 命令和Java 代码实现HDFS 文件操作
Shell 命令:
hdfs dfs -
(5)在HDFS 中,将文件从源路径移动到目的路径。
Shell 命令:
if $(hdfs dfs -test -d dir1/dir2);
then $(hdfs dfs -touchz dir1/dir2/filename); else $(hdfs dfs -mkdir -p dir1/dir2 && hdfs dfs -touchz dir1/dir2/filename); fi
删除文件:hdfs dfs -rm dir1/dir2/filename Shell 命令:
创建目录:hdfs dfs -mkdir -p dir1/dir2
删除目录(如果目录非空则会提示not empty ,不执行删除):hdfs dfs -rmdir dir1/dir2
强制删除目录:hdfs dfs -rm -R dir1/dir2 Shell 命令:
追加到文件末尾:hdfs dfs - 追加到文件开头:
(由于没有直接的命令可以操作,方法之一是先移动到本地进行操作,再进行上传覆盖): hdfs dfs - >>
hdfs dfs -copyFromLocal - Shell 命令:
hdfs dfs -
(7)提供一个HDFS 内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录。
(8)提供一个HDFS 的目录的路径,对该目录进行创建和删除操作。创建目录时,如果目录文件所在目录不存在则自动创建相应目录;删除目录时,由用户指定当该目录不为空时是否还删除该目录。
(9)向HDFS 中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾;
(10)删除HDFS 中指定的文件; Shell 命令:
inputtypefile不上传文件hdfs dfs -ls -R -h /user/hadoop
(6)给定HDFS 中某个目录,输出该目录下所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息。 (11)删除HDFS 中指定的目录,由用户指定目录中如果存在文件时是否删除目录; Shell 命令:
删除目录(如果目录非空则会提示not empty ,不执行删除):hdfs dfs -rmdir dir1/dir2 强制删除目录:hdfs dfs -rm -R dir1/dir2
// 实现按行读取,每次读入一个字符,遇到"\n"结束,返回一行内容
while((read = br.read(data, off, 1)) != -1){ if(String.valueOf(data[off]).equals("\n") ){ off += 1; break; }
off += 1; }
if(off > 0){
return String.valueOf(data); } else {
return null; }
// 读取文件内容
FileSystem fs = (conf);
Path remotePath = new Path(remoteFilePath); FSDataInputStream in = fs.open(remotePath); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String line = null;
while((line = adline(br)) != null ) {
System.out.println(line); }
public static void main(String[] args) throws Exception {
String remoteFilePath = "hdfs:///user/hadoop/ ";// HDFS 文件 InputStream in = null;
try { // 通过URL 对象打开数据流,从中读取数据 in = new URL(remoteFilePath).openStream(); pyBytes(in,System.out,4096,false); } finally {
IOUtils.closeStream(in); } }
2、编程实现“MyFSDataInputStream ”类
该类继承“org.apache.hadoop.fs.FSDataInput Stream”,实现按行读取HDFS 中指定文件的方法“readLine ()”,如果读到文件末尾,则返回空,否则返回文件一行的文本,主要Java 代码如下:
用“java .URL”和“org.apache.hadoop.fs. FsURLStreamHandlerFactory ”编程完成输出HDFS 中指定文件的文本到终端中,主要Java 代码如下:
3、编程实现HDFS 文件内容输出到终端
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论