HDFS分布式文件系统 *** 作

HDFS分布式文件系统 *** 作,第1张

HDFS分布式文件系统 *** 作

大数据与数据挖掘技术实验二:HDFS分布式文件系统 *** 作

启动Hadoop

$ cd /usr/local/hadoop
$ ./sbin/start-dfs.h #启动hadoop

实验内容 一、利用Shell命令和HDFS进行交互

Hadoop支持很多Shell命令,其中fs是HDFS最常用的命令,利用fs可以查看HDFS文件系统的目录结构、上传和下载数据、创建文件等。

教材《大数据技术原理与应用》的命令是以”./bin/hadoop dfs”开头的Shell命令方式,实际上有三种shell命令方式。

hadoop fs hadoop fs适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统

hadoop dfs hadoop dfs只能适用于HDFS文件系统

hdfs dfs hdfs dfs跟hadoop dfs的命令作用一样,也只能适用于HDFS文件系统

$ ./bin/hadoop fs

查看put命令如何使用

$ ./bin/hadoop fs -help put

1、目录 *** 作

第一次使用HDFS时,需要首先在HDFS中创建用户目录。

$ cd /usr/local/hadoop
$ ./bin/hadf dfs -mkdir -p /user/hadoop

该命令中表示在HDFS中创建一个“/user/hadoop”目录,“–mkdir”是创建目录的 *** 作,“-p”表示如果是多级目录,则父目录和子目录一起创建,这里“/user/hadoop”就是一个多级目录,因此必须使用参数“-p”,否则会出错。“/user/hadoop”目录就成为hadoop用户对应的用户目录

$ ./bin/hdfs dfs -ls .

该命令中,“-ls”表示列出HDFS某个目录下的所有内容,“.”表示HDFS中的当前用户目录,也就是“/user/hadoop”目录,因此,上面的命令和下面的命令是等价的:

$ ./bin/hdfs dfs -ls /user/hadoop

如果要列出HDFS上的所有目录,可以使用如下命令:

$ ./bin/hdfs dfs -ls

创建一个input目录:

$ ./bin/hdfs dfs -mkdir input

在创建个input目录时,采用了相对路径形式,实际上,这个input目录创建成功以后,它在HDFS中的完整路径是“/user/hadoop/input”。如果要在HDFS的根目录下创建一个名称为input的目录,则需要使用如下命令:

$ ./bin/hdfs dfs -mkdir /input

可以使用rm命令删除一个目录,比如,可以使用如下命令删除刚才在HDFS中创建的“/input”目录(不是“/user/hadoop/input”目录):

$ ./bin/hdfs dfs -rm -r /input

上面命令中,“-r”参数表示如果删除“/input”目录及其子目录下的所有内容,如果要删除的一个目录包含了子目录,则必须使用“-r”参数,否则会执行失败。

2、文件 *** 作

在实际应用中,经常需要从本地文件系统向HDFS中上传文件,或者把HDFS中的文件下载到本地文件系统中。
首先,使用vim编辑器,在本地Linux文件系统的“/home/hadoop/”目录下创建一个文件myLocalFile.txt,里面可以随意输入一些单词。

$ cd /home/hadoop/
$ cd > myLocalFile.txt #很多方法创建新文件,这里使用的cd


$ gedit myLocalFile.txt

然后,可以使用如下命令把本地文件系统的“/home/hadoop/myLocalFile.txt”上传到HDFS中的当前用户目录的input目录下,也就是上传到HDFS的“/user/hadoop/input/”目录下:

$ cd /usr/local/hadoop/
$ ./bin/hdfs dfs -put /home/hadoop/myLocalFile.txt input

下面使用如下命令查看HDFS中的myLocalFile.txt这个文件的内容:

$ ./bin/hdfs dfs -cat input/myLocalFile.txt

任意创建另一个目录,将HDFS中的文件(不是“/home/hadoop/”下的文件)拷贝到该目录下,查看文件内容与HDFS中文件是否一致。

$ cd~
$ mkdir newdirectory
$ cd /usr/local/hadoop/
$ ./bin/hdfs dfs -get input/myLocalFile.txt  /home/hadoop/newdirectory
$ cd ~
$ ls
$ cat myLocalFile.txt

最后,了解一下如何把文件从HDFS中的一个目录拷贝到HDFS中的另外一个目录。比如,如果要把HDFS的“/user/hadoop/input/myLocalFile.txt”文件,拷贝到HDFS的另外一个目录“/input”中(注意,这个input目录位于HDFS根目录下),可以使用如下命令:

$ ./bin/hdfs dfs -cp input/myLocalFile.txt  /input

在Eclipse中创建一个项目,用编写的Java应用程序检测HDFS中是否存在某文件

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
 
public class Chapter3 {
    public static void main(String[] args) {
           try {
               String filename = "test";
               Configuration conf = new Configuration();
               conf.set("fs.defaultFS","hdfs://localhost:9000");
               conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
               FileSystem fs = FileSystem.get(conf);
               if(fs.exists(new Path(filename))){
                   System.out.println("文件存在");
               }else{
                   System.out.println("文件不存在");
               }
               fs.close();
           } catch (Exception e) {
               e.printStackTrace();
           }
    }
} 


写入文件

        import org.apache.hadoop.conf.Configuration;  
        import org.apache.hadoop.fs.FileSystem;
        import org.apache.hadoop.fs.FSDataOutputStream;
        import org.apache.hadoop.fs.Path;
 
        public class Chapter3 {    
                public static void main(String[] args) { 
                        try {
                                Configuration conf = new Configuration();  
                                conf.set("fs.defaultFS","hdfs://localhost:9000");
                                conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
                                FileSystem fs = FileSystem.get(conf);
                                byte[] buff = "Hello world".getBytes(); // 要写入的内容
                                String filename = "test"; //要写入的文件名
                                FSDataOutputStream os = fs.create(new Path(filename));
                                os.write(buff,0,buff.length);
                                System.out.println("Create:"+ filename);
                                os.close();
                                fs.close();
                        } catch (Exception e) {  
                                e.printStackTrace();  
                        }  
                }  
        }

读取文件

        import java.io.BufferedReader;
        import java.io.InputStreamReader;
 
        import org.apache.hadoop.conf.Configuration;
        import org.apache.hadoop.fs.FileSystem;
        import org.apache.hadoop.fs.Path;
        import org.apache.hadoop.fs.FSDataInputStream;
 
        public class Chapter3 {
                public static void main(String[] args) {
                        try {
                                Configuration conf = new Configuration();
                                conf.set("fs.defaultFS","hdfs://localhost:9000");
                                conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
                                FileSystem fs = FileSystem.get(conf);
                                Path file = new Path("test"); 
                                FSDataInputStream getIt = fs.open(file);
                                BufferedReader d = new BufferedReader(new InputStreamReader(getIt));
                                String content = d.readLine(); //读取文件一行
                                System.out.println(content);
                                d.close(); //关闭文件
                                fs.close(); //关闭hdfs
                        } catch (Exception e) {
                                e.printStackTrace();
                        }
                }
        }

实在不想写了。实验教程在http://dblab.xmu.edu.cn/blog/2630-2/

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5696130.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存