熟悉常用的HDFS操作

实验环境

ubuntu18.04
在这里插入图片描述

实验内容

开启hadoop
在这里插入图片描述
当前工作目录
在这里插入图片描述

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

  1. 向HDFS中上传任意文本文件,如果指定的文件在HDFS中已存在,由用户指定是追加到原有文件末尾还是覆盖原有文件
input=$1        #获得第一个参数,也就是需要上传的文件
filename=$(basename $input)     #获得该文件的文件名
dst="/root/update"      #上传的文件目录

if  `/root/rDesk/hadoop-3.3.2/bin/hadoop fs -test -e $dst"/"$filename` ;then
        echo "该文件已存在,是否追加到该文件尾部“
        echo "追加到尾部:y 覆盖源文件:n”
        read opt
        case $opt in
                [yY]*)
                        `/root/rDesk/hadoop-3.3.2/bin/hadoop fs -appendToFile  $input $dst"/"$filename`
                ;;
                [nN]*)
                        `/root/rDesk/hadoop-3.3.2/bin/hadoop fs -rm $dst"/"$filename`
                        `/root/rDesk/hadoop-3.3.2/bin/hadoop fs -put $input $dst`
                ;;
                *)
                        echo "input err, shell out"
                ;;
        esac
else
        `/root/rDesk/hadoop-3.3.2/bin/hadoop fs -put $intput $dst`

fi
echo "the shell is completed"

在这里插入图片描述


  1. 从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名
downloadPath=$1 #HDFS中下载的文件的路径
savePath=$2 #保存在本地的路径
downloadFilename=$(basename $downloadPath) #下载的文件的文件名
nowtime=$(date "+%Y%m%d%H%M%S") #获取当前时间
if [ -e $savePath"/"$downloadFilename ]; then
  #如果存在相同文件名文件,则以当前时间当作文件名
  `/root/rDesk/hadoop-3.3.2/bin/hadoop fs -get $downloadPath $savePath"/"$nowtime`
  echo "the original filename is existed, now the filename is $savePath"/"$nowtime"
else
  `/root/rDesk/hadoop-3.3.2/bin/hadoop fs -get $downloadPath $savePath`
fi
echo "copyOver"

将hdfs系统下/root/update/tag.txt文件复制到当前目录(./)

在这里插入图片描述


  1. 将HDFS中指定的文件的内容输出到终端
filePath=$1		#获得需要指定的HDFS中的文件路径
#echo $filePath
echo `/root/rDesk/hadoop-3.3.2/bin/hadoop fs -cat $filePath`

在这里插入图片描述


  1. 显示HDFS中指定的文件的读写权限,大小,创建时间,路径等信息

bin/hadoop fs -ls /root

or

#codecodecoderr
echo `/root/rDesk/hadoop-3.3.2/bin/hadoop fs -ls $1`

在这里插入图片描述
在这里插入图片描述


  1. 给定HDFS中的某一个目录,输出该目录下的所有文件的读写权限,大小,创建时间,路径等信息,如果该文件是目录,则递归输出该目录下的所有文件相关信息。

/root/rDesk/hadoop-3.3.2/bin/hadoop fs -ls -R /root

在这里插入图片描述


  1. 提供一个HDFS中的文件的路径,对该文件进行创建和删除操作,如果文件所在目录不存在,则自动创建目录
#codecodecoderr
path=$1   #获取指定的文件路径
if `/root/rDesk/hadoop-3.3.2/bin/hadoop fs -test -e $path`;then
  echo "the file is exist"
else
  echo "the file is not exist"
  `/root/rDesk/hadoop-3.3.2/bin/hadoop fs -mkdir  $path`	
  echo "the dir is created"
fi

在这里插入图片描述


  1. 提供一个HDFS中的文件的路径,对该文件进行创建和删除操作。创建目录时,如果目录文件所在目录不存在这自动创建相应目录,删除目录时,由用户指定当该目录不为空时是否还删除该目录
    进行递归创建文件夹

bin/hadoop fs -mkdir -p /root/update/a/b/c

在这里插入图片描述
删除一个文件夹,当不为空的时候指定是否进行删除

bin/hadoop fs -rmdir /root/update/a
当该文件夹不为空任然删除
bin/hadoop fs -rm -r /root/update/a

在这里插入图片描述


  1. 向HDFS中指定的文件追加内容,由用户指定将内容追加到原有文件的开头还是结尾
hdfsPath=$2 #HDFS中指定文件的路径
localPath=./tmp__  #临时本地文件存储路径
type=$1 #操作类型 -h表示追加到开头,-t表示追加到末尾

#判断是否该目录下是否存在tmp__文件,存在删除
if [ -e $localPath ];then
  `rm -rf $localPath`
  fi
case $type in

-h)
  #追加到开头,操作流程:先将HDFS指定文件复制到本地,使用sed命令在开头写入内容,然后删除HDFS的文件,再将编辑好的文件上传到HDFS
  `/root/rDesk/hadoop-3.3.2/bin/hadoop fs -copyToLocal $hdfsPath $localPath`
  read -p "输入需要插入的内容:" text
  `sed -i "1 i $text" $localPath`
  `/root/rDesk/hadoop-3.3.2/bin/hadoop fs -rm $hdfsPath`
  `/root/rDesk/hadoop-3.3.2/bin/hadoop fs -put $localPath $hdfsPath`
  `rm -rf $localPath`
  ;;
-t)
  #策略:以输入的文件内容在本地临时创建一个文件,然后使用appendToFile命令将该文件内容追加到HDFS指定文件末尾
  read -p "输入需要追加到末尾的内容:" text
  `echo $text > $localPath`
  `/root/rDesk/hadoop-3.3.2/bin/hadoop fs -appendToFile $localPath $hdfsPath`
  `rm -rf $localPath`
  ;;
*)
  echo "llxxx操作数错误xxxll"
  ;;
esac
echo "Over"



在这里插入图片描述


  1. 删除HDFS中指定的文件

删除指定文件
bin/hadoop fs -rm /root/update/tag.txt
删除指定空目录
bin/hadoop fs -rmdir /root/update/new

在这里插入图片描述


  1. 在HDFS中将文件从源路径移动到目的路径

bin/hadoop fs -cp /root/update/tag.txt /root

在这里插入图片描述

资料参考

https://www.jianshu.com/p/52e16e9ce24e
https://blog.csdn.net/weixin_43215948/article/details/107290768
http://c.biancheng.net/view/2767.html
https://blog.csdn.net/Olivia_Vang/article/details/104081096
https://blog.csdn.net/weixin_39962758/article/details/116929907

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值