参考:
​​​http://www.jianshu.com/p/0663d74b79b5​


一、实现目的

  1. 理解HDFS在Hadoop体系结构中的角色
  2. 熟练使用HDFS操作常用的Shell命令
  3. 熟悉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】之 熟悉常用的HDFS操作_hdfs


【Hadoop】之 熟悉常用的HDFS操作_大数据_02


(2)启动服务

​./fileName​​ : 表示当前目录下的fileName这个文件

./sbin/start-all.sh

//或者
./sbin/start-dfs.sh
./sbin/start-yarn.sh


(3)上传文件

​hadoop fs -put <localsrc><dst>​

put

【Hadoop】之 熟悉常用的HDFS操作_大数据_03


(4)追加到文件末尾的指令

​hadoop fs -appendToFile local.txt text.txt​

//将test1.txt 追加到 test2.txt
./bin/hadoop fs -appendToFile test1.txt test2.txt

【Hadoop】之 熟悉常用的HDFS操作_HDFS_04


(5)查看HDFS文件的内容

​hadoop fs -cat text1.txt​

.txt

【Hadoop】之 熟悉常用的HDFS操作_hadoop_05


(6)覆盖原有文件的指令(覆盖之后再执行一遍上一步)

​hadoop fs -copyFromLocal <localsrc><dst>​

//这里使用了 -f (强制的意思), 因为我的test3.txt 已存在
./bin/hadoop fs -copyFromLocal -f test2.txt test3.txt

【Hadoop】之 熟悉常用的HDFS操作_hadoop_06


(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

【Hadoop】之 熟悉常用的HDFS操作_HDFS_07

// Java 编程实现