Hadoop:HDFS学习巩固——基础习题及编程实战

一 HDFS 选择题

1.对HDFS通信协议的理解错误的是?

A.客户端与数据节点的交互是通过RPC(Remote Procedure Call)来实现的

B.HDFS通信协议都是构建在IoT协议基础之上的

C.名称节点和数据节点之间则使用数据节点协议进行交互

D.客户端通过一个可配置的端口向名称节点主动发起TCP连接,并使用客户端协议与名称节点进行交互

HDFS通信协议构建在TCP/IP协议基础之上

2. HDFS的命名空间不包含:

A. 目录        B. 文件        C. 字节        D. 块

C HDFS的命名空间只有目录、文件、块三部分

3.采用多副本冗余存储的优势不包含:

A.加快数据传输速度            B.保证数据可靠性

C.节约存储空间                D.容易检查数据错误

C 多副本冗余存储的缺点之一就是浪费存储空间

4.分布式文件系统HDFS采用了主从结构模型,由计算机集群中的多个节点构成的,这些节点分为两类,一类存储元数据叫()?另一类存储具体数据叫()?

A.数据节点,名称节点

B.名称节点,主节点

C.名称节点,数据节点

D.从节点,主节点

C 存储元数据的是主节点/名称节点,存储具体数据的是从节点/数据节点

5.数据节点是()

A.NameNode                          B.DataNode

C.SecondaryNameNode         D.Jobtracker

B data就是数据的意思

6. HDFS默认Block Size的大小是()MB。

A. 32          B. 64          C. 128            D. 256

B/C  关于这道题的答案存在争议,主要是和Hadoop的版本有关。Hadoop2.7.3之后是128 MB,2.7.3之前是64MB。大多数教材上是以64MB为答案的,大家可以具体情况具体分析。

7.判断HDFS是否启动成功,可以通过哪个命令?

A.hdfs         B.spark        C.jps       D. start-dfs

C 可以使用jps命令查看当前节点个数,判断HDFS是否成功启动

8.用户在使用HDFS时,仍然可以像普通文件系统那样用文件名去访问文件,以下哪个选项是正确的访问方式?

A.把文件名发送给名称节点,根据文件名在名称节点上找到数据块的实际存储信息,客户端再到数据节点上获取数据

B.把文件名发送给数据节点,根据文件名直接在数据节点上获取数据

C.把文件名发送给名称节点,根据文件名直接在名称节点上获取数据

D.以上说法都不对

A 客户端不直接从名称节点上获取数据,只获取存放数据的数据节点的位置

9.数据节点负责数据的存储和读取,每个数据节点中的数据会被保存在()。

A.各自节点的磁盘文件系统中

B.其他节点的磁盘系统中

C.各自节点的本地Linux文件系统中

D.其他节点的本地Linux文件系统中

10. HDFS中的block默认保存()份。

A. 3        B. 2        C. 1        D. 不确定

11.以下对数据节点理解不正确的是

A.数据节点通常只有一个

B.数据节点的数据保存在磁盘中

C.数据节点在名称节点的统一调度下进行数据块的创建、删除和复制等操作

D.数据节点用来存储具体的文件内容

 A 只有一个的是名称节点

二 HDFS操作题

1.启动hadoop

cd /apps/hadoop/sbin  
./start-all.sh  

2.在HDFS文件系统中建立如下目录:/zhangsan/hadoop 

hadoop fs -mkdir -p /zhangsan/hadoop

3.接着在第3步建立的目录下,创建test文件夹,并使用ls命令查看是否创建成功。

hadoop fs -mkdir -p /zhangsan/hadoop/test
haddop fs -ls -R /

4.将Linux文件系统中的“~/.bashrc”文件上传到HDFS的test文件夹中,并在浏览器中查看文件是否上传成功。

hadoop fs -put ~/.bashrc /zhangsan/hadoop/test

5.将a.txt从hdfs文件系统下载到Linux文件系统。

hadoop fs -get /zhangsan/hadoop/a.txt /home/zhangyu

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
HDFSHadoop分布式文件系统,它提供了Java API来进行文件读写操作。在HDFS中,文件被分成多个块并存储在不同的节点上,因此需要使用分布式文件系统的API来进行文件读写操作。 HDFS Java API提供了以下几个类来进行文件读写操作: 1. FileSystem:表示一个文件系统对象,可以通过它来获取文件系统的配置信息、创建文件、删除文件等操作。 2. Path:表示一个文件或目录的路径。 3. FSDataInputStream:表示一个输入流,可以用来读取HDFS中的文件。 4. FSDataOutputStream:表示一个输出流,可以用来向HDFS中写入数据。 下面是一个简单的示例代码,演示如何使用HDFS Java API进行文件读写操作: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; public class HdfsExample { public static void main(String[] args) throws Exception { // 创建一个Configuration对象,用于获取Hadoop配置信息 Configuration conf = new Configuration(); // 获取HDFS文件系统对象 FileSystem fs = FileSystem.get(conf); // 创建一个Path对象,表示要读取的文件路径 Path inputPath = new Path("/input/test.txt"); // 创建一个FSDataInputStream对象,用于读取文件 FSDataInputStream in = fs.open(inputPath); // 读取文件内容 byte[] buffer = new byte[1024]; int len = in.read(buffer); while (len > 0) { System.out.write(buffer, 0, len); len = in.read(buffer); } // 关闭输入流 in.close(); // 创建一个Path对象,表示要写入的文件路径 Path outputPath = new Path("/output/test.txt"); // 创建一个FSDataOutputStream对象,用于写入文件 FSDataOutputStream out = fs.create(outputPath); // 写入文件内容 String content = "Hello, HDFS!"; out.write(content.getBytes()); // 关闭输出流 out.close(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值