HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件 (可以存储TB级的文件)。HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:Shell接口和Java API 接口,对HDFS里面的文件进行操作,具体每个Block放在哪台DataNode上面,对于开发者来说是透明的。

下面将介绍通过Shell接口对HDFS进行操作,HDFS处理文件的命令和Linux命令基本相同,这里区分大小写

目录

1、shell操作单个HDFS集群

2、shell操作多个HDFS集群

3、hadoop管理员其他常见shel操作

1、shell 操作单个HDFS集群

下面列举出几个常用场景下的命令

  • 创建文件夹

  HDFS上的文件目录结构类似Linux,根目录使用"/"表示。

  下面的命令将在/middle(已存在)目录下建立目录weibo

  [hadoop@ljc hadoop]$ hadoop fs -mkdir /middle/weibo

  效果如下:

  

  • 上传文件weibo.txt到weibo目录下

  [hadoop@ljc ~]$ hadoop fs -put weibo.txt /middle/weibo/

  效果如下:

  

  还可以使用 -copyFromLocal参数。

  [hadoop@ljc ~]$ hadoop fs -copyFromLocal weibo.txt /middle/weibo/

  • 查看weibo.txt文件内容。

  [hadoop@ljc ~]$ hadoop fs -text /middle/weibo/weibo.txt

  效果如下:

  

  还可以用 -cat、-tail 参数查看文件的内容。但是对于压缩的结果文件只能用 -text 参数来查看,否则是乱码。

  [hadoop@ljc ~]$ hadoop fs -cat /middle/weibo/weibo.txt

  [hadoop@ljc ~]$ hadoop fs -tail /middle/weibo/weibo.txt

  • 通过终端向"/middle/weibo/weibo.txt"中输入内容

  [hadoop@ljc ~]$ hadoop fs -appendToFile - /middle/weibo/weibo.txt

  如下所示:

  

  退出终端输入,按Ctrl + C

  • 把"/middle/weibo/weibo.txt"复制到"/middle"

  [hadoop@ljc ~]$ hadoop fs -cp /middle/weibo/weibo.txt /middle

  效果如下:

  

  • 把weibo.txt文件复制到本地。

  [hadoop@ljc ~]$ hadoop fs -get /middle/weibo/weibo.txt

  效果如下:

  

  还可以用 -copyToLocal 参数。

  [hadoop@ljc ~]$ hadoop fs -copyToLocal /middle/weibo/weibo.txt

  • 删除weibo.txt文件。

  [hadoop@ljc ~]$ hadoop fs -rm /middle/weibo/weibo.txt

  效果如下:

  

  • 删除/middle/weibo文件夹。

  [hadoop@ljc ~]$ hadoop fs -rm -r /middle/weibo

  效果如下:

  

  • 显示 /middle 目录下的文件。

  [hadoop@ljc ~]$ hadoop fs -ls /middle

  效果如下:

  

2、shell 操作多个 HDFS 集群

  上面我们介绍的是访问 单个HDFS集群,但是多个Hadoop集群需要复制数据该怎么办呢?幸运的是,Hadoop 有一个有用的distcp分布式复制程序,该程序是由 MapReduce作业来实现的,它是通过集群中并行运行的map来完成集群之间大量数据的复制。下面我们将介绍 distcp在不同场景下该如何使用

  • 两个集群运行相同版本的Hadoop

    确保两个集群版本相同,这里以hadoop1、hadoop2集群为例,如下所示

    

    

    1)、两个 HDFS 集群之间传输数据,默认情况下 distcp 会跳过目标路径下已经存在的文件

    [hadoop@hadoop1 ~]$ hadoop distcp /weather hdfs://hadoop2:9000/middle

    效果如下:

    

    这条指令是在hadoop1中执行,意思是把/weather目录及其内容复制到hadoop2集群的/middle目录下,所以hadoop2集群最后的目录结构为/middle/weather

    如下所示

    

    如果/middle 不存在,则新建一个。也可以指定多个源路径,并把所有路径都复制到目标路径下。

    这里的目标路径(hadoop2)必须是绝对路径,源路径(hadoop1)可以是绝对路径,也可以是相对路径,因为我是在hadoop1中执行的,且默认是HDFS协议

    在执行这条指令时可能会报错

    如下所示

    

    这是因为没有把hadoop2(hadoop2对应IP:192.168.233.130)追加到/etc/hosts文件中,如下所示

    

    如果指令在hadoop2中执行,可以这样写,如下

    [hadoop@hadoop2 ~]$ hadoop distcp hdfs://hadoop1:9000/weather /middle

    效果如下:

    

    这时,源路径就必须写绝对路径,目录路径可以是绝对路径,也可以是相对路径,因为我是在hadoop2中执行的,且默认是HDFS协议,如果报错,请参考上面

    2)、两个 HDFS 集群之间传输数据,覆盖现有的文件使用overwrite

    [hadoop@hadoop1 ~]$ hadoop distcp -overwrite /weather hdfs://hadoop2:9000/middle/weather

    如下所示

    

    注意,在overwrite时,只是将/weather中的内容覆盖到"hdfs://hadoop2:9000/middle/weather"中,不包含/weather目录本身,所以在overwrite时,目录路径加上了/weather

    3)、两个 HDFS 集群之间传输数据,更新有改动过的文件使用update。

    [hadoop@hadoop1 ~]$ hadoop distcp -update /weather hdfs://hadoop2:9000/middle/weather

    效果如下:

    

    注意,在update时,只是将/weather中的内容覆盖到"hdfs://hadoop2:9000/middle/weather"中,不包含/weather目录本身,所以在update时,目录路径加上了/weather

  • 两个集群运行不同版本的Hadoop

    不同版本Hadoop集群的RPC是不兼容的,使用distcp复制数据并使用hdfs协议,会导致复制作业失败。想要弥补这种情况,可以在下面两种方式选择一种;下面以hadoop1、hadoop3两个集群为例,版本如下

    

    

    1)、基于hftp实现两个HDFS集群之间传输数据

    [hadoop@hadoop3 ~]$ hadoop distcp hftp://hadoop1:50070/weather /middle

    如下所示

    

    有三点需要说明:

  1、这个命令必须运行在目标集群上,进而实现hdfs RPC版本的兼容

  2、hftp地址由dfs.http.address属性决定的,其端口默认值为50070

  3、该命令是将hftp://hadoop1:9000/weather中内容传输到/middle目录中,不包含/middle目录本身

    2)、基于webhdfs实现两个HDFS集群之间传输数据

    如果使用新出的webhdfs协议(替代 hftp)后,对源集群和目标集群均可以使用 HTTP协议进行通信,且不会造成任何不兼容的问题

    [hadoop@hadoop3 ~]$ hadoop distcp webhdfs://hadoop1:50070/weather webhdfs://hadoop3:50070/middle

    如下所示

    

3、Hadoop管理员其他常见shell操作

  掌握了 shell 如何访问 HDFS,作为 Hadoop 管理员,还需要掌握如下常见命令

  • 查看正在运行的Job。

  [hadoop@hadoop1 ~]$ hadoop job –list

  如下所示

  

  • 关闭正在运行的Job

  [hadoop@hadoop1 ~]$ hadoop job -kill job_1432108212572_0001

  如下所示

  

  • 检查 HDFS 块状态,查看是否损坏。

  [hadoop@hadoop1 ~]$ hadoop fsck /

  • 检查 HDFS 块状态,并删除损坏的块。

  [hadoop@hadoop1 ~]$ hadoop fsck / -delete

  • 检查 HDFS 状态,包括 DataNode 信息。

  [hadoop@hadoop1 ~]$ hadoop dfsadmin -report

  • Hadoop 进入安全模式。

  [hadoop@hadoop1 ~]$ hadoop dfsadmin -safemode enter

  如下所示

  

  • Hadoop 离开安全模式。

  [hadoop@hadoop1 ~]$ hadoop dfsadmin -safemode leave

  如下所示

  

  • 平衡集群中的文件

  [hadoop@hadoop1 ~]$ /usr/java/hadoop/sbin/start-balancer.sh

  start-balancer.sh命令位于hadoop安装路径下的/sbin下

  如下所示

  

文档链接:下载

转载于:https://www.cnblogs.com/MarchThree/p/5399720.html

熟练掌握HDFS的Shell访问相关推荐

  1. Hadoop HDFS概念学习系列之熟练掌握HDFS的Shell访问(十五)

    调用文件系统(FS)Shell命令应使用 $HADOOP_HOME/bin/hadoop fs  *** 的形式!!! 所有的FS Shell命令使用URI路径作为参数. URI格式是scheme:/ ...

  2. java sftp 密钥_通过密钥 SFTP (二):启用没有 Shell 访问权限的 SFTP 账户

    目标 1. 授权网站开发人员使用 sftp 上传项目文件 2. 必须使用密钥方式,去掉密码验证方式 3. 简单起见,全部放在 /var/www 目录下 4. 熟练之后,可以在继续修改 sshd 配置文 ...

  3. Hadoop开发第6期---HDFS的shell操作

    一.HDFS的shell命令简介 我们都知道HDFS 是存取数据的分布式文件系统,那么对HDFS 的操作,就是文件系统的基本操作,比如文件的创建.修改.删除.修改权限等,文件夹的创建.删除.重命名等. ...

  4. HDFS的shell命令简介

    一.HDFS的shell命令简介 ​ 我们都知道HDFS 是存取数据的分布式文件系统,那么对HDFS 的操作,就是文件系统的基本操作,比如文件的创建.修改.删除.修改权限等,文件夹的创建.删除.重命名 ...

  5. 实验二 HDFS的Shell命令操作,和HDFS的API操作

    文章目录 实验目的 一. 实验原理 二.实验准备 实验内容 步骤 项目1 HDFS常见命令练习 列出HDFS当前用户家目录下的文件及文件夹: 列出HDFS文件下名为directory的文件夹中的文件: ...

  6. 2021年大数据Hadoop(八):HDFS的Shell命令行使用

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 HDFS的Shell命 ...

  7. HDFS的shell和API操作

    1. HDFS的shell操作 hadoop version //查看版本 hadoop fs -appendToFile src(Linux中的文件) dest(hdfs目录下的文件) //追加 h ...

  8. 学习笔记Hadoop(十)—— Hadoop基础操作(2)—— HDFS常用Shell操作

    三.HDFS常用Shell操作 3.1.HDFS文件系统 HDFS Shell 指的是可以使用类似shell的命令来直接和Hadoop分布式文件系统(HDFS)进行交互. 使用命令: bin/hado ...

  9. 用SHELL访问特定的URL

    今天开发给了我一个需求,需要用shell访问特定的URL.需求如下: 开发给了4个URL例如: http://www.chlinux.net/index/consortialevel?server=s ...

最新文章

  1. 技术干货 | Flutter 混合开发基础
  2. Bugku-CTF之你必须让他停下+头等舱
  3. Oracle中的sequence对象
  4. 评分卡模型开发(八)--主标尺设计及模型验证
  5. R中ggplot2绘图学习笔记
  6. Primer – 支撑 GitHub 的 CSS 工具包和准则
  7. Spring设置定时器配置
  8. Spring框架学习笔记6-AOP编程-AspectJ方式
  9. java traingdx函数实现_提取伪彩色图像的信息
  10. java NIO网络编程
  11. 微信小程序-“授权失败”场景的优雅处理
  12. zsh compinit: insecure directories, run compaudit for list.Ignore insecure directories and continue
  13. Intel正式发布新一代Atom处理器
  14. Go mod包依赖管理工具使用详解
  15. mug网络用语_日常聊天常见网络用语(Daily chat common Internet slang).doc
  16. 电商移动Web实战项目(1)
  17. Java 14:JDK 14进入GA时的所有新功能
  18. 八.deepin V20.6安装mysql8.0.30
  19. 近距离无线通信(NFC)技术介绍
  20. 数据库课程设计 人事管理系统

热门文章

  1. python编程有哪些-Python编程编译器有哪些比较好用
  2. python3.7.2下载-Python编程神器 v3.7.2 最新免费版
  3. python菜鸟基础教程-python基础菜鸟教程,Python的基础语法
  4. python 框架好学吗-python的flask框架难学吗
  5. python教程txt免费下载-python编程从入门到实践PDF电子书教程免费下载
  6. python在化学方面的应用-用Python解析化学公式
  7. python打开一个文件-python下几种打开文件的方式
  8. python入门视频教程推荐-python入门学习哪个书比较好(python视频教程知乎)
  9. python学习手册中文版免费下载-Python学习手册(第3版)
  10. 深度学习可视化工具visdom使用