实验二:熟悉常用的HDFS操作

注:实验报告原word文件在文章末尾;
—————————————————————————————————

"大数据技术原理与应用"课程实验报告

题目:实验二:熟悉常用的HDFS操作

姓名:朱小凡

日期:2022/3/25

1、实验环境:

设备名称 LAPTOP-9KJS8HO6

处理器 Intel® Core™ i5-10300H CPU @ 2.50GHz 2.50 GHz

机带 RAM 16.0 GB (15.8 GB 可用)

主机操作系统 Windows 10 家庭中文版

虚拟机操作系统 ubuntukylin-16.04

Hadoop 版本 3.1.3

JDK 版本 1.8

Java IDE:Eclipse

系统类型 64 位操作系统,基于 x64 的处理器

笔和触控 没有可用于此显示器的笔或触控输入

2、实验内容与完成情况:

1、编程实现以下功能,并利用Hadoop提供的shell命令完成相同任务

(1)向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件。

本地/usr/local/hadoop/文件夹下新建两个文本文件用于实验

文件一:word.txt 文本内容:1212

文件二:local_text.txt 文本内容:123456789

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xTRecIj3-1651740721284)(media/image1.png)]{width="6.0in" height="3.725in"}

图1.创建两个实验文本

a. Shell命令

首先向HDFS上传word.txt文件到test文件夹下

./bin/hdfs dfs -put /usr/local/hadoop/word.txt test

检查文件是否存在,可以使用如下命令

cd /usr/local/hadoop

./bin/hdfs dfs -test -e test/word.txt

echo $?

[外链图片转存失败,建议将图片保存下来直接上传(img-XDUkaABq-1651740721286)(media/image2.png)]{width="6.0in" height="3.0416666666666665in"}

图2.上传并检查HDFS文件

执行完echo $?返回0,意味着查询成功,word.txt文件已存在

再将local_text.txt文件追加到word.txt文件末尾

hadoop fs -appendToFile local_text.txt test/word.txt

用local_text.txt文件内容覆盖原来的word.txt文件

hadoop fs -copyFromLocal -f local_text.txt test/word.txt

[外链图片转存失败,建议将图片保存下来直接上传(img-qbdsMNo2-1651740721291)(media/image3.png)]{width="6.0in" height="2.3743055555555554in"}

图3.追加文本或者覆盖原文本

b.java代码

import java.io.FileInputStream;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FSDataOutputStream;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

public class CopyFromLocalFile {

/**

* 判断路径是否存在

*/

public static boolean test(Configuration conf,String path) {

try (FileSystem fs = FileSystem.get(conf)) {

return fs.exists(new Path(path));

} catch (IOException e) {

e.printStackTrace();

return false;

}

}

/**

* 复制文件到指定路径 若路径已存在,则进行覆盖

*/

public static void copyFromLocalFile(Configuration conf,

String localFilePath,String remoteFilePath) {

Path localPath = new Path(localFilePath);

Path remotePath = new Path(remoteFilePath);

try (FileSystem fs = FileSystem.get(conf)) {

/* fs.copyFromLocalFile
第一个参数表示是否删除源文件,第二个参数表示是否覆盖 */

fs.copyFromLocalFile(false,true,localPath,remotePath);

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 追加文件内容

*/

public static void appendToFile(Configuration conf,String
localFilePath,

String remoteFilePath) {

Path remotePath = new Path(remoteFilePath);

try (FileSystem fs = FileSystem.get(conf);

FileInputStream in = new FileInputStream(localFilePath)

相关文章

文章浏览阅读301次。你可以使用Thrift客户端来测试HBase Thr...
文章浏览阅读565次。hive和hbase数据迁移_hive转hbase
文章浏览阅读707次。基于单机版安装HBase,前置条件为Hadoop...
文章浏览阅读301次。linux集群搭建-HBase_linux中在/home目录...
文章浏览阅读933次。中没有库的概念,说一个数据说的是哪一个...
文章浏览阅读1k次,点赞16次,收藏21次。整理和梳理日常hbas...