熟练掌握HDFS的Shell访问
HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件 (可以存储TB级的文件)。HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:Shell接口和Java API 接口,对HDFS里面的文件进行操作,具体每个Block放在哪台DataNode上面,对于开发者来说是透明的。
下面将介绍通过Shell接口对HDFS进行操作,HDFS处理文件的命令和Linux命令基本相同,这里区分大小写
目录
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下
如下所示
文档链接:下载
熟练掌握HDFS的Shell访问的更多相关文章
- Hadoop开发第6期---HDFS的shell操作
一.HDFS的shell命令简介 我们都知道HDFS 是存取数据的分布式文件系统,那么对HDFS 的操作,就是文件系统的基本操作,比如文件的创建.修改.删除.修改权限等,文件夹的创建.删除.重命名等. ...
- 大数据:Hadoop(JDK安装、HDFS伪分布式环境搭建、HDFS 的shell操作)
所有的内容都来源与 Hadoop 官方文档 一.Hadoop 伪分布式安装步骤 1)JDK安装 解压:tar -zxvf jdk-7u79-linux-x64.tar.gz -C ~/app 添加到系 ...
- Hadoop HDFS的shell(命令行客户端)操作实例
HDFS的shell(命令行客户端)操作实例 3.2 常用命令参数介绍 -help 功能:输出这个命令参数手册 -ls 功能:显示目录信息 示例: hadoop fs ...
- HDFS基本shell操作
在客户端输入Hadoop fs,可以查看所有的,hadoop shell # -help [cmd] //显示命令的帮助信息,如: hadoop fs -help ls # -ls(r) <pa ...
- HDFS的Shell、java操作
HDFS的Shell操作 1.基本语法 bin/hadoop fs 具体命令 OR bin/hdfs dfs 具体命令 dfs是fs的实现类. 2.命令大全 [Tesla@hadoop102 h ...
- HDFS02 HDFS的Shell操作
HDFS的Shell操作(开发重点) 目录 HDFS的Shell操作(开发重点) 基本语法 常用命令 准备工作 上传 -moveFromLocal 剪切 -copyFromLocal 拷贝 -put ...
- 熟练掌握HDFS的Java API接口访问
HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:She ...
- HDFS的shell操作
bin/hadoop命令操作: namenode -format 格式化文件系统 fs(缩写:FileSystem) 运行一个文件系统的用户客户端 bin/hadoop fs常用命令操作: -ls h ...
- Hadoop框架之HDFS的shell操作
既然HDFS是存取数据的分布式文件系统,那么对HDFS的操作,就是文件系统的基本操作,比如文件的创建.修改.删除.修改权限等,文件夹的创建.删除.重命名等.对HDFS的操作命令类似于Linux的she ...
随机推荐
- nodejs学习笔记之mongoDB
这两天在学习nodejs,但是发现那本书nodejs入门指南上所用的好多方法都报错. 这里主要说下数据库部分 关于注册部分:书上创建数据库那里可能要小心点,用户名不存在的时候,下面调用save的对象要 ...
- java集合框架复习(一)
数组类Array是java中最基本的一个存储结构,它用于存储 一组连续的对象或一组类型相同的基本类型的数据. Array特点:效率高,但容量固定且无法动态改变, 缺点:无法判断其中存有多少元素,len ...
- Codevs No.1287 矩阵乘法
2016-06-01 16:53:23 题目链接: 矩阵乘法 (Codevs No.1287) 题目大意: 给你两个可乘矩阵a,b,求a*b 解法: 定义....... //矩阵乘法 (Codevs ...
- 【bz2002】弹飞绵羊
题意: 给出n个节点 及其父亲 和m个指令1:表示求节点i到根节点(n+1)的距离2:表示将节点i的父亲更换为j 题解: 动态树link.cut.access模板题 貌似没什么难度- - 代码: #i ...
- 【WPF】【火车站点信息查询】
全文涉及到的是C#和XAML 如果这两门语言并非你喜欢的语言,那可以关闭本网页了 本文介绍的是什么? 一个火车站点信息查询软件 本文涉及到的WPF基本知识 Task async await WebCl ...
- POJ 3660 Cow Contest (最短路dijkstra)
MPI Maelstrom 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/G Description BIT has recen ...
- Spring EL regular expression example
Spring EL supports regular expression using a simple keyword "matches", which is really aw ...
- springboot+maven快速构建项目
最近公司运用springboot构建项目,确实比ssh搭建要快很多.springboot官方学习网站 1.首先要下载maven,用maven管理项目很方便,下载完maven配置好环境,maven我就不 ...
- Codeforces 626A Robot Sequence
A. Robot Sequence time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Codeforces Round #219 (Div. 1)(完全)
戳我看题目 A:给你n个数,要求尽可能多的找出匹配,如果两个数匹配,则ai*2 <= aj 排序,从中间切断,分成相等的两半后,对于较大的那一半,从大到小遍历,对于每个数在左边那组找到最大的满足 ...