熟练掌握HDFS的Shell访问

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

  [[email protected] hadoop]$ hadoop fs -mkdir /middle/weibo

  效果如下:

  

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

  [[email protected] ~]$ hadoop fs -put weibo.txt /middle/weibo/

  效果如下:

  

  还可以使用 -copyFromLocal参数。

  [[email protected] ~]$ hadoop fs -copyFromLocal weibo.txt /middle/weibo/

  • 查看weibo.txt文件内容。

  [[email protected] ~]$ hadoop fs -text /middle/weibo/weibo.txt

  效果如下:

  

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

  [[email protected] ~]$ hadoop fs -cat /middle/weibo/weibo.txt

  [[email protected] ~]$ hadoop fs -tail /middle/weibo/weibo.txt

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

  [[email protected] ~]$ hadoop fs -appendToFile - /middle/weibo/weibo.txt

  如下所示:

  

  退出终端输入,按Ctrl + C

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

  [[email protected] ~]$ hadoop fs -cp /middle/weibo/weibo.txt /middle

  效果如下:

  

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

  [[email protected] ~]$ hadoop fs -get /middle/weibo/weibo.txt

  效果如下:

  

  还可以用 -copyToLocal 参数。

  [[email protected] ~]$ hadoop fs -copyToLocal /middle/weibo/weibo.txt

  • 删除weibo.txt文件。

  [[email protected] ~]$ hadoop fs -rm /middle/weibo/weibo.txt

  效果如下:

  

  • 删除/middle/weibo文件夹。

  [[email protected] ~]$ hadoop fs -rm -r /middle/weibo

  效果如下:

  

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

  [[email protected] ~]$ hadoop fs -ls /middle

  效果如下:

  

2、shell 操作多个 HDFS 集群

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

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

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

    

    

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

    [[email protected] ~]$ 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中执行,可以这样写,如下

    [[email protected] ~]$ hadoop distcp hdfs://hadoop1:9000/weather /middle

    效果如下:

    

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

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

    [[email protected] ~]$ hadoop distcp -overwrite /weather hdfs://hadoop2:9000/middle/weather

    如下所示

    

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

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

    [[email protected] ~]$ 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集群之间传输数据

    [[email protected] ~]$ 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协议进行通信,且不会造成任何不兼容的问题

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

    如下所示

    

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

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

  • 查看正在运行的Job。

  [[email protected] ~]$ hadoop job –list

  如下所示

  

  • 关闭正在运行的Job

  [[email protected] ~]$ hadoop job -kill job_1432108212572_0001

  如下所示

  

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

  [[email protected] ~]$ hadoop fsck /

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

  [[email protected] ~]$ hadoop fsck / -delete

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

  [[email protected] ~]$ hadoop dfsadmin -report

  • Hadoop 进入安全模式。

  [[email protected] ~]$ hadoop dfsadmin -safemode enter

  如下所示

  

  • Hadoop 离开安全模式。

  [[email protected] ~]$ hadoop dfsadmin -safemode leave

  如下所示

  

  • 平衡集群中的文件

  [[email protected] ~]$ /usr/java/hadoop/sbin/start-balancer.sh

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

  如下所示

  

文档链接:下载

时间: 2024-08-09 14:35:04

熟练掌握HDFS的Shell访问的相关文章

熟练掌握HDFS的Shell访问和JavaAPI访问

HDFS设计的主要目的是对海量数据进行处理,也就是说在其上能够储存很大量文件(可以储存TB级的文件).HDFS将这些文件分割之后,储存在不同的DataNode上,HDFS提供了两种数据访问接口:Shell接口和javaAPI接口,对HDFS里面的文件进行操作. Shell接口  HDFS处理文件的命令和linux命令基本相同,这里区分大小写.下面介绍HDFS操作分布式文件系统的命令. HDFS基本命令 hadoop fs -cmd  其中cmd:具体的操作,基本上与unix的命令相同 args:

HDFS的Shell命令

一.HDFS的Shell命令 我们都知道HDFS 是存取数据的分布式文件系统,那么对HDFS 的操作,就是文件系统的基本操作,比如文件的创建.修改.删除.修改权限等,文件夹的创建.删除.重命名等.对HDFS 的操作命令类似于lLinux 的shell 对文件的操作,如ls.mkdir.rm 等.我们在执行HDFS的shell操作的时候,一定要确定hadoop 是正常运行的,我们可以使用使用jps 命令确保看到各个hadoop 进程.我们可以执行命令hadoop fs,来查看HDFS的shell操

大数据技术之_04_Hadoop学习_01_HDFS_HDFS概述+HDFS的Shell操作(开发重点)+HDFS客户端操作(开发重点)+HDFS的数据流(面试重点)+NameNode和SecondaryNameNode(面试开发重点)

第1章 HDFS概述1.1 HDFS产出背景及定义1.2 HDFS优缺点1.3 HDFS组成架构1.4 HDFS文件块大小(面试重点)第2章 HDFS的Shell操作(开发重点)第3章 HDFS客户端操作(开发重点)3.1 HDFS客户端环境准备3.2 HDFS的API操作3.2.1 HDFS文件上传(测试参数优先级)3.2.2 HDFS文件下载3.2.3 HDFS文件夹删除3.2.4 HDFS文件名更改3.2.5 HDFS文件详情查看3.2.6 HDFS文件和文件夹判断3.3 HDFS的I/O

如何使用erlang 的shell 访问远程节点

实验环境: 公司内网的2台机器,一台是我自己的笔记本 (机器名nb11),一台是公司的服务器(机器名ws100),都是win7 的系统 (发觉一个诡异的问题,shell访问的命令,windows 下,只有werl.exe 支持,erl.exe调不出.在命令行启动erl 控制台,不支持) A.首先起分别在2个机器上启动erl 节点 1.首先在笔记本启动 命令输入 erl -same master -setcookie test 机器启动erl后,出现提示 [[email protected]]1>

HDFS的shell操作

既然HDFS 是存取数据的分布式文件系统,那么对HDFS的操作,就是对文件系统的基本操作,比如文件的创建.修改.删除.修改权限等,文件夹的创建.删除.重命名等.对 HDFS 的操作命令类似于Linux 的shell 对文件的操作,只是在HDFS中,hadoop fs是主命令,其他像ls,mv,cp都是被作为该命令的选项. 以下表格列出一些常用的HDFS shell命令选项. 选项名称 使用格式 含义 -ls -ls <路径> 查看指定路径的当前目录结构 -lsr -lsr <路径>

HDFS的shell和API操作

1. HDFS的shell操作 hadoop version //查看版本 hadoop fs -appendToFile src(Linux中的文件) dest(hdfs目录下的文件) //追加 hadoop fs -cat file(hdfs目录下的文件) //查看文件内容 Hadoop fs -tail file(hdfs目录下的文件) //查看文件末尾1kb的数据 hadoop fs -checksum file(hdfs目录下的文件) //校验当前文件是否正确 hadoop fs -c

熟练掌握HDFS的Java API接口访问

HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:Shell接口和Java API 接口,对HDFS里面的文件进行操作,具体每个Block放在哪台DataNode上面,对于开发者来说是透明的. 通过Java API接口对HDFS进行操作,我将其整理成工具类,地址见底部 1.获取文件系统 1 /** 2 * 获取文件系统 3 * 4 * @return F

Hadoop HDFS (3) JAVA访问HDFS

现在我们来深入了解一下Hadoop的FileSystem类.这个类是用来跟Hadoop的文件系统进行交互的.虽然我们这里主要是针对HDFS,但是我们还是应该让我们的代码只使用抽象类FileSystem,这样我们的代码就可以跟任何一个Hadoop的文件系统交互了.在写测试代码时,我们可以用本地文件系统测试,部署时使用HDFS,只需配置一下,不需要修改代码了. 在Hadoop 1.x以后的版本中引入了一个新的文件系统接口叫FileContext,一个FileContext实例可以处理多种文件系统,而

批量上传文件到HDFS的Shell脚本

在做Hadoop数据挖掘项目的时候,我们第一步是源数据的获取,即把相应的数据放置到HDFS中,以便Hadoop进行计算,手动将文件上传到HDFS中,未免太费时费力,所以我们可以采取像Flume一样的框架,或者采用Shell脚本进行文件的上传.下面主要提供Shell脚本的大致写法,仅供参考,可以根据不同业务进行相应的修改. 版本1: #!/bin/bash #set java env export JAVA_HOME=/export/servers/jdk export JRE_HOME=${JA