一、实现目的
- 理解HDFS在Hadoop体系结构中的角色
- 熟练使用HDFS操作常用的Shell命令
- 熟悉HDFS操作常用的Java API
二、实验平台
- 操作系统:Ubuntu 16
- Hadoop版本:2.7.3
- JDK 版本:1.8
- Java IDE: Eclipse
三、实验内容和要求
编程实现以下指定功能,并利用Hadoop提供的Shell命令完成相同的任务。
(1)向HDFS中上传任意文本文件,如果指定的文件在HDFS 中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件。
(1)创建文本
//创建带内容的文本
echo "hello world" > test1.txt
//或者 创建一个<path> 指定的空文件 (要在启动服务下执行)
hadoop fs - touchz <path>
(2)启动服务
./fileName
: 表示当前目录下的fileName这个文件
./sbin/start-all.sh
//或者
./sbin/start-dfs.sh
./sbin/start-yarn.sh
(3)上传文件
hadoop fs -put <localsrc><dst>
./bin/hadoop fs -put ./test1.txt
(4)追加到文件末尾的指令
hadoop fs -appendToFile local.txt text.txt
//将test1.txt 追加到 test2.txt
./bin/hadoop fs -appendToFile test1.txt test2.txt
(5)查看HDFS文件的内容
hadoop fs -cat text1.txt
./bin/hadoop fs -cat test2.txt
(6)覆盖原有文件的指令(覆盖之后再执行一遍上一步)
hadoop fs -copyFromLocal <localsrc><dst>
//这里使用了 -f (强制的意思), 因为我的test3.txt 已存在
./bin/hadoop fs -copyFromLocal -f test2.txt test3.txt
(7)以上步骤也可以用如下命令实现
if $(hadoop fs -test -e text.txt);
then $(hadoop fs -appendToFile local.txt text.txt);
else $(hadoop fs -copyFromLocal -f local.txt text.txt);
fi
//本机操作
if $(./bin/hadoop fs -test -e test1.txt);
then $(./bin/hadoop fs -appendToFile test1.txt test2.txt);
else $(./bin/hadoop fs -copyFromLocal -f test1.txt test3.txt);
fi
// Java 编程实现