自学内容网 自学内容网

大数据实验3: HDFS基础编程

实验3 HDFS基础编程

一、实验目的

  1. HDFS的shell命令使用
  2. HDFS的JAVA API使用;

二、实验平台

  1. 操作系统:Linux(Ubuntu16.04);
  2. Hadoop版本:3.3.1;
  3. JDK版本:1.8;
  4. Java IDE:Eclipse。

实验3具体请参见: HDFS编程实践(Hadoop3.1.3)_厦大数据库实验室博客/

三、实验步骤

(一)启动Hadoop;
1)启动hadoop相关进程并证明启动成功;

  1. 执行hdfs dfs 命令,分析结果理解该命令的功能

hdfs dfs 命令是Hadoop分布式文件系统(HDFS)的命令行接口,用于执行各种文件系统操作。这个命令后面通常会跟一个子命令,用于指定具体的操作类型。

1、hdfs dfs -ls [path]:列出指定路径下的文件和目录。

(如果不指定路径,默认列出根目录下的文件和目录。)

2、 hdfs dfs -mkdir [path]:在指定路径下创建一个新目录。

3、hdfs dfs -put localpath hdfspath:将本地文件系统中的文件上传到HDFS。

4、hdfs dfs -get hdfspath localpath:从HDFS下载文件到本地文件系统。

5、hdfs dfs -copyFromLocal localpath hdfspath:也是将本地文件复制到HDFS。

6、hdfs dfs -copyToLocal hdfspath localpath:也是从HDFS复制文件到本地。

7、hdfs dfs -rm [path]:删除指定路径下的文件或目录。

8、 hdfs dfs -rmdir [path]:删除指定的空目录。

9、hdfs dfs -mv source_path destination_path:移动或重命名文件或目录。

10、hdfs dfs -cat [path]:显示文件内容,如果路径是一个目录,则显示目录下所有文件的列表。

11、hdfs dfs -chmod [mode] [path]:更改文件或目录的权限。

12、hdfs dfs -chown [owner][:[group]] [path]:更改文件或目录的所有者和/或组。

13、hdfs dfs -du [path]:显示指定路径下的文件或目录的大小。

14、hdfs dfs -count [path]:显示指定路径下的文件或目录的详细信息,包括大小、数量等。

3)查看hdfs dfs 中put和get命令的详细用法,并理解分析;

1、hdfs dfs -put localfile hdfsdir1

在 Hadoop 分布式文件系统(HDFS)中的作用是将本地文件系统中的文件 localfile 上传到 HDFS 上的目录 hdfsdir1 中。这里是该命令的详细解释:

    hdfs dfs:是 Hadoop 文件系统的命令行接口,用于执行各种文件系统操作。

    -put:子命令,用于将本地文件或目录复制到 HDFS。

    localfile:要上传的本地文件的名称,它应该存在于你执行命令的本地文件系统中。

    hdfsdir:这是 HDFS 中的目标目录。如果这个目录不存在,-put 命令会尝试创建(若配置允许)。如果 hdfsdir 是一个文件而不是目录,命令会失败。

命令执行后,localfile 的内容将被复制到 HDFS 的 hdfsdir1 目录下,并且文件名保持不变。

2. hdfs dfs -get hdfsfile localdir

将存储在 Hadoop 分布式文件系统(HDFS)中的文件 hdfsfile 下载到本地文件系统的目录 localdir 中。这里是该命令的详细说明:

    hdfs dfs:这是 Hadoop 文件系统的命令行接口,用于执行文件系统相关的操作。

    -get:这是 hdfs dfs 命令的一个子命令,用于从 HDFS 获取文件。

    hdfsfile:这是存储在 HDFS 中的文件的路径。

localdir:这是本地文件系统中的目标目录,用于存放从 HDFS 下载的文件。如果目录不存在,命令可能会失败,除非指定了创建目录的选项。

  • 利用Hadoop提供的Shell命令完成下列任务:
(1)在本地创建三个文件并输入自定义的内容备用,并依次将三个文件的内容输出到终端;

(2)在HDFS中创建以自己姓名首拼音命名的文件夹,向HDFS中创建的文件夹中上传(1)中任意文本文件,并检查是否上传成功;

3)在(2)中上传的文件中追加第二个文本文件的内容,并验证追加内容成功;

4)将(2)上传的文件下载到当前目录,并验证下载成功;

(5)将HDFS中(2)中文件的内容输出到终端中;

6)显示HDFS中(2)中文件的读写权限、大小、创建时间、路径等信息;

7)在HDFS中,将文件从源路径移动到hdfs的姓名拼音首字母的文件夹目录下的temp文件夹中,然后将(2)中上传的文件删除,验证操作是否成功。

(8)提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。考虑文件所在目录存在和不存在的两种情况,如果文件所在目录不存在,则自动创建目录;

(9)利用web端查看HDFS中的文件系统信息

(三)编写Java程序解决下列问题(给出关键代码和运行结果图)

在Eclipse中,为项目 HadoopExperiment配置Hadoop环境

  1. 读取HDFS系统指定目录“/bigdata/experiment3”中的所有.txt文件内容并输出至控制台(自行创建文件夹,上传文件,文件后缀类型包含.java和.txt,需要使用过滤器)(参考P62例子);

创建目录 /bigdata/experiment3

2)然后新建一个文件merge.txt,将前面(1).txt文件的内容合并写到新建文件中(参考P62例子);

3)编程设计一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:

myReadLine()方法,实现按行读取HDFS中指定文件的方法,如果读到文件末尾,则返回空并在控制台输出“end!“,否则返回文件一行的文本。

readOddLine():实现按行读取HDFS中指定文件中奇数行的内容,如果读到文件末尾,则返回空并在控制台输出“odd line-end!“,否则返回文件一行的文本。

readEvenLine():实现按行读取HDFS中指定文件中偶数行的内容,如果读到文件末尾,则返回空并在控制台输出“even line-end!“,否则返回文件一行的文本。

程序代码:

  1. 根据文件最后附录1中的数据存在命名为data.txt,上传至HDFS中 /use/root/学号 目录下,并使用2中设计的类MyFSDataInputStream类解决后续问题

1\创建 HDFS 目录(如果不存在):

   hdfs dfs -mkdir -p /user/root/22111303195

2. 上传 `data.txt` 文件到 HDFS:

hdfs dfs -put data.txt /user/root/22111303195

3. 验证文件是否上传成功:

   hdfs dfs -ls /user/root/22111303195

(4)将data.txt中序号为偶数的数据打印在控制台;

测试程序代码:

c d

运行结果:

(5)将data.txt中序号为奇数的数据打印在控制台;

测试程序代码:

运行结果:

  • 问题与收获

在配置Hadoop环境时,遇到了一些困难,主要是环境变量的设置和Java版本兼容性问题。使用HDFS的Java API进行编程时,对于API的某些方法和类的继承关系理解不够深入,导致编程时出现了一些逻辑错误。通过阅读Hadoop的API文档和一些示例代码,加深了对HDFS Java API的理解。

通过本次实验,加深了对Hadoop分布式文件系统(HDFS)的理解和认识。通过亲自操作和编写代码,提高了解决实际问题的能力。掌握了HDFS Shell命令的基本用法,能够在命令行下进行文件系统的操作。

继续深入学习Hadoop和HDFS的原理和架构,为解决更复杂的问题打下理论基础。通过多做实验和项目,积累实践经验,并及时总结和反思。

注:

实验报告以“学号+姓名+实验3.pdf”作为附件上传到学习通的相关作业任务中

附录1:

1 2300024001 male 88

2 2300024002 female 83

3 2300024003 female 61

4 2300024004 female 51

5 2300024005 female 79

6 2300024006 male 89

7 2300024007 male 79

8 2300024008 male 76

9 2300024009 male 82

10 2300024010 male 79

11 2300024012 male 69

12 2300024013 male 75

13 2300024014 male 51

14 2300024015 male 63

15 2300024016 male 52

16 2300024017 female 100

17 2300024018 male 62

18 2300024019 male 98

19 2300024020 male 88

20 2300024021 male 95

21 2300024022 female 65

22 2300024023 male 80

23 2300024024 male 70

24 2300024025 male 74

25 2300024026 male 61

26 2300024027 male 95

27 2300024028 female 100

28 2300024029 male 74

29 2300024030 male 55

30 2300024031 male 72

31 2300024032 male 76

32 2300024033 female 95

33 2300024034 male 91

34 2300024034 male 90

35 2300024035 male 80

36 2300024036 female 80

37 2300024037 male 87

38 2300024038 female 82

39 2300024039 female 75

40 2300024040 female 100

41 2300024041 female 87

42 2300024042 female 90

43 2300024043 female 93

44 2300024044 female 87

45 2300024045 female 92

46 2300024046 female 90

47 2300024047 female 70

48 2300024048 female 61

49 2300024049 female 64

50 2300024050 female 82


原文地址:https://blog.csdn.net/m0_74161592/article/details/143062080

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!