一.HDFS的常用操作

(一)、HDFS文件的权限
与Linux文件权限类似
r: read; w:write; x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容。
如果Linux系统用户hdp使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就是hdp。
HDFS的权限目的:阻止好人错错事,而不是阻止坏人做坏事;HDFS相信,你告诉我你是谁,我就认为你是谁。、列出HDFS文件
通过“-ls”命令列出HDFS下的文件
bin/hadoop dfs -ls
bin/hadoop fs -lsr /user/admin/hdfs
注意:在HDFS中未带参数的“-ls”命令没有返回任何值,它默认返回HDFS的“home”目录下的内容。HDFS中,没有当前工作目录这样的概念,也没有cd这个命令。

2、列出HDFS目录下某个文档中的文件
此处展示的是“-ls  文件名”命令浏览HDFS下名为in的文档中的文件
$ bin/hadoop dfs -ls in

3、上传文件到HDFS
此处展示的是“-put  文件1  文件2”命令将hadoop-0.20.2目录下的test1文件上传到HDFS上并重命名为test
$ bin/hadoop dfs -put test1 test
注意:在执行“-put”时只有两种可能,即是执行成功和执行失败。在上传文件时,文件首先复制到DataNode上,只有所有的DataNode都成功接收完数据,文件上传才是成功的。

4、将HDFS中的文件复制到本地系统中
此处展示的是“-get  文件1  文件2”命令将HDFS中的in文件复制到本地系统并命名为getin:
$ bin/hadoop dfs -get in getin

5、删除HDFS下的文档
此处展示的是“-rmr  文件”命令删除HDFS下名为out的文档:
$ bin/hadoop dfs -rmr out

6、查看HDFS下的某个文件
此处展示的是“-cat  文件”命令查看HDFS下in文件中的内容:
$ bin/hadoop dfs -cat in/*
输出:
hello world
hello hadoop

PS:bin/hadoop dfs 的命令远不止这些,对于其他的操作,可以通过“-help commandName”命令所列出的清单查看

(三)、管理与更新
1、报告HDFS的基本统计信息
通过“-report”命令查看HDFS的基本统计信息:
$ bin/hadoop dfsadmin -report

2、退出安全模式
NameNode在启动时会自动进入安全模式。安全模式是NameNode的一种状态,在这个阶段,文件系统不允许有任何的修改。安全模式的目的是在系统启动时检查各个DataNode上数据块的有效性,同时根据策略对数据块进行必要的复制和删除,当数据块的最小百分比数满足配置的最小副本数条件时,会自动退出安全模式。
$ bin/hadoop dfsadmin -safemode leave

3、进入安全模式
$ bin/hadoop dfsadmin -safemode enter

4、添加节点
可扩展性是HDFS的一个重要的特性,向HDFS集群中添加节点是很容易实现的。添加一个新的DataNode节点,首先在新加的节点上安装好hadoop,要和NameNode使用相同的配置,修改HADOOP_HOME/conf/master文件,加入NameNode主机名。然后在NameNode节点上修改HADOOP_HOME/conf/slaves文件,加入新节点主机名。再建立到新节点无密码SSH连接,运行启动命令:
$ bin/start-all.sh
通过http://(主机名):50070可查看到新的DataNode节点添加成功

5、负载均衡
用户可以使用下面的命令来重新平衡DataNode上的数据块的分布:
$ bin/start-balancer.sh

(四)、其他相关有用命令
1.count
hadoop fs -count < hdfs path >
统计hdfs对应路径下的目录个数,文件个数,文件总计大小 显示为目录个数,文件个数,文件总计大小,输入路径

2.put
hadoop fs -put < local file > < hdfs file >
hdfs file的父目录一定要存在,否则命令不会执行

hadoop fs -put  < local file or dir >...< hdfs dir >
hdfs dir 一定要存在,否则命令不会执行

hadoop fs -put - < hdsf  file>
从键盘读取输入到hdfs file中,按Ctrl+D结束输入,hdfs file不能存在,否则命令不会执行

2.1.moveFromLocal
hadoop fs -moveFromLocal  < local src > ... < hdfs dst >
与put相类似,命令执行后源文件 local src 被删除,也可以从从键盘读取输入到hdfs file中

2.2.copyFromLocal
hadoop fs -copyFromLocal  < local src > ... < hdfs dst >
与put相类似,也可以从从键盘读取输入到hdfs file中

3.get
hadoop fs -get < hdfs file > < local file or dir>
local file不能和 hdfs file名字不能相同,否则会提示文件已存在,没有重名的文件会复制到本地

hadoop fs -get < hdfs file or dir > ... < local  dir >
拷贝多个文件或目录到本地时,本地要为文件夹路径
注意:如果用户不是root, local 路径要为用户文件夹下的路径,否则会出现权限问题,

3.1.moveToLocal
当前版本中还未实现此命令

3.2.copyToLocal
hadoop fs -copyToLocal < local src > ... < hdfs dst >
与get相类似

4.distcp
用来在两个HDFS之间拷贝数据为所设置的副本个数,-R选项可以对一个人目录下的所有目录+文件递归执行改变副本个数的操作、简介
在HDFS里,删除文件时,不会真正的删除,其实是放入回收站/trash,回收站里的文件可以快速恢复。
可以设置一个时间阀值,当回收站里文件的存放时间超过这个阀值或是回收站被清空时,文件才会被彻底删除,并且释放占用的数据块。

2、回收站功能启用
Hadoop的回收站trash功能默认是关闭的,所以需要在core-site.xml中手动开启。
修改core-site.xml,增加[在每个节点(不仅仅是主节点)上添加配置 /etc/hadoop/conf/core-site.xml,增加如下内容]

[html] view plain copy

print?

1.   <property>

2.   <name>fs.trash.interval</name>

3.   <value>1440</value>

4.   <description>Number of minutes between trash checkpoints.

5.   If zero, the trash feature is disabled.

6.   </description>

7.   </property>

默认是0,单位是分钟,这里设置为1天。
删除数据rm后,会将数据move到当前文件夹下的.Trash目录。

3、回收站日常操作
存放位置
hadoop fs -ls /user/hadoop/.Trash/Current/

查看hdfs存储空间使用情况
hadoop dfsadmin -report

查看回收站占用空间及内容
hadoop dfs -du -h /user/hadoop/.Trash/
hadoop fs -ls /user/hadoop/.Trash/Current/
hadoop dfs -ls /user/hadoop/.Trash/

清空回收站
删除.Trash目录
hadoop fs -rmr .Trash
hadoop fs -rmr .Trash  
hadoop dfs -rmr /user/hadoop/.Trash/*

清空回收站命令(经测试,基本没用)
hdfs dfs -expunge 
bin/hadoop dfs -expunge
bin/hadoop dfs -ls .Trash/Current/user/grid
 
4hdfs文件直接删除不进回收站
--  hadoop dfs -rmr /tmp/nisj/oss/
--  hadoop dfs -rmr -skipTrash /tmp/nisj/oss/

5hive表删除情况
hive的表及分区删除,如果回收站功能启用,实际上也是将文件放到回收站的。如果想快速利用空间,实际上也要进行手工清空回收站操作。目前,没有找到删除hive表不进入回收站的方法。
在一次系统跑批中,由于空间有限,要将从oss上下载的数据文件处理完后,立即删除;但表数据文件实际上是进入了回收站,还是占用hdfs空间,所以编写了一个定时脚本进行回收站的清空操作。
[hadoop@emr-header-1 getDataFromOss]$ cat truncate_trash.sh 

[java] view plain copy

print?

1.   #!/usr/bin/env bash

2.

3.   source /etc/profile;

4.   /usr/lib/hadoop-current/bin/hadoop dfs -rmr /user/hadoop/.Trash/* >>/home/hadoop/nisj/getDataFromOss/trash_truncate.log 2>&1

三.Hadoop任务查看管理相关

1.查看 Job 信息:
hadoop job -list 

2.杀掉 Job 
hadoop  job –kill  job_id

3.指定路径下查看历史日志汇总:
hadoop job -history output-dir 

4.作业的更多细节: 
hadoop job -history all output-dir 

5.打印mapreduce完成百分比和所有计数器:
hadoop job –status job_id 

6.杀死任务。被杀死的任务不会不利于失败尝试:
hadoop jab -kill-task <task-id> 

7.使任务失败。被失败的任务会对失败尝试不利:
hadoop job  -fail-task <task-id>

8yarn资源管理器相关
yarn application -list
如需杀死当前某个作业,使用kill application-id的命令如下:
yarn application -kill application_1437456051228_1725

四.Hbase常用shell命令

1.进入hbase shell console
$HBASE_HOME/bin/hbase shell
如果有kerberos认证,需要事先使用相应的keytab进行一下认证(使用kinit命令);认证成功之后再使用hbase shell进入可以使用whoami命令可查看当前用户 
hbase(main)> whoami

2.表的管理
1
)查看有哪些表 
hbase(main)> list

2)创建表
# 语法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}
# 例如:创建表tab1,有两个family name:fied1,fied2,且版本数均为2
hbase(main)> create 'tab1',{NAME => 'fied1', VERSIONS => 2},{NAME => 'fied2', VERSIONS => 2}

3)删除表
分两步:首先disable,然后drop
例如:删除表tab1
hbase(main)> disable 'tab1'
hbase(main)> drop 'tab1'

4)查看表的结构
# 语法:describe <table>
# 例如:查看表tab1的结构
hbase(main)> describe 'tab1'

5)修改表结构
修改表结构必须先disable
# 语法:alter 'tab1', {NAME => 'fied1'}, {NAME => 'fied2', METHOD => 'delete'}
# 例如:修改表tab1的cf的TTL为180天
hbase(main)> disable 'tab1'
hbase(main)> alter 'tab1',{NAME=>'body',TTL=>'15552000'},{NAME=>'meta', TTL=>'15552000'}
hbase(main)> enable 'tab1'

3.表数据的增删改查
1
)添加数据 
# 语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
# 例如:给表tab1的添加一行记录:rowkey是rowkey001,family name:fied1,column name:col1,value:value01,timestamp:系统默认
hbase(main)> put 'tab1','rowkey001','fied1:col1','value01'
用法比较单一。

2)查询数据
a)查询某行记录
# 语法:get <table>,<rowkey>,[<family:column>,....]
# 例如:查询表tab1,rowkey001中的fied1下的col1的值
hbase(main)> get 'tab1','rowkey001', 'fied1:col1'
# 或者:
hbase(main)> get 'tab1','rowkey001', {COLUMN=>'fied1:col1'}
# 查询表tab1,rowke002中的fied1下的所有列值
hbase(main)> get 'tab1','rowkey001'

b)扫描表
# 语法:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num}
# 另外,还可以添加STARTROW、TIMERANGE和FITLER等高级功能
# 例如:扫描表tab1的前5条数据
hbase(main)> scan 'tab1',{LIMIT=>5}

c)查询表中的数据行数
# 语法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum}
# INTERVAL设置多少行显示一次及对应的rowkey,默认1000;CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度
# 例如,查询表tab1中的行数,每100条显示一次,缓存区为500
hbase(main)> count 'tab1', {INTERVAL => 100, CACHE => 500}

3)删除数据
a )删除行中的某个列值
# 语法:delete <table>, <rowkey>,  <family:column> , <timestamp>,必须指定列名
# 例如:删除表tab1,rowkey001中的fied1:col1的数据
hbase(main)> delete 'tab1','rowkey001','fied1:col1'
注:将删除改行fied1:col1列所有版本的数据

b )删除行
# 语法:deleteall <table>, <rowkey>,  <family:column> , <timestamp>,可以不指定列名,删除整行数据
# 例如:删除表tab1,rowk001的数据
hbase(main)> deleteall 'tab1','rowkey001'

c)删除表中的所有数据
# 语法: truncate <table>
# 其具体过程是:disable table -> drop table -> create table
# 例如:删除表tab1的所有数据
hbase(main)> truncate 'tab1'

4.其他命令
1
status命令
hbase(main):008:0> status

2version命令
hbase(main):007:0> version
3exists 命令——查看表是否存在
hbase(main):014:0> exists 'tab1'

4incr 命令
给'tab1'这个列增加 uid 字段,并使用counter实现递增
连续执行incr以上,COUNTER VALUE 的值会递增,通过get_counter
hbase(main):010:0> incr 'tab1', 'row2', 'uid', 2
COUNTER VALUE = 2
hbase(main):011:0> incr 'tab1', 'row2', 'uid', 3
COUNTER VALUE = 5

Haoop基本操作的更多相关文章

  1. Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作

    一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有: ...

  2. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  3. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  4. 三、Redis基本操作——List

    小喵的唠叨话:前面我们介绍了Redis的string的数据结构的原理和操作.当时我们提到Redis的键值对不仅仅是字符串.而这次我们就要介绍Redis的第二个数据结构了,List(链表).由于List ...

  5. 二、Redis基本操作——String(实战篇)

    小喵万万没想到,上一篇博客,居然已经被阅读600次了!!!让小喵感觉压力颇大.万一有写错的地方,岂不是会误导很多筒子们.所以,恳请大家,如果看到小喵的博客有什么不对的地方,请尽快指正!谢谢! 小喵的唠 ...

  6. 一、Redis基本操作——String(原理篇)

    小喵的唠叨话:最近京东图书大减价,小喵手痒了就买了本<Redis设计与实现>[1]来看看.这里权当小喵看书的笔记啦.这一系列的模式,主要是先介绍Redis的实现原理(可能很大一部分会直接照 ...

  7. Linq查询基本操作

    摘要:本文介绍Linq查询基本操作(查询关键字) - from 子句 - where 子句 - select子句 - group 子句 - into 子句 - orderby 子句 - join 子句 ...

  8. C++ map的基本操作和使用

    原文地址:http://blog.sina.com.cn/s/blog_61533c9b0100fa7w.html Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可 ...

  9. python之最强王者(10)———文件(File)、输入输出的基本操作

    1. Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 2.打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式. ...

随机推荐

  1. 关于window service2008系统iis部署访问证书,内部错误

    近期因为在做微信支付系列,做到退款的时候需要通过把数据流通过证书post过去的时候,win7.win8.xp部署在iis都没问题.但是部署到服务器 2008的时候就出现了内部错误. 折腾许久,总算找到 ...

  2. java学习笔记 --- 方法

    一.方法  (1)方法:就是完成特定功能的代码块.   注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法.  (2)格式:   修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 ...

  3. python如何保证输入键入数字

    要求:python写一个要求用户输入数字,如果不是数字就一直循环要求输入,直到输入数字为止的代码 错误打开方式: while True: ten=input('Enter a number:') if ...

  4. Brackets--我的初恋编辑器

    大学毕业以后,因为一些个人琐事没有找到自己专业的对口工作,整天混混沌沌得过着也没有打破现状的决心和机会.但是每当独自思考的时候总是一阵阵的害怕,怕自己从此一事无成一无所有.于是在某个心潮澎湃的瞬间开始 ...

  5. windows 安装Beautiful Soup(转)

    Beautiful Soup是一个Python的一个库,主要为一些短周期项目比如屏幕抓取而设计.有三个特性使得它非常强大: 1.Beautiful Soup提供了一些简单的方法和Python术语,用于 ...

  6. Git 远程分支的pull与push

    Git 远程分支的pull与push 远程分支信息查看 git branch -r #查看远程分支 git branch -a #查看所有分支,本地和远程 git remote show [remot ...

  7. win7下nsis打包exe安装程序教程

    下载软件包: NSIS中文版 :https://pan.baidu.com/s/1mitSQU0 装好之后会出现两个软件:Nullsoft Install System 和 VNISEdit 编译环境 ...

  8. 老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具

    老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具 poptest是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全 ...

  9. 转接口IC GM7150BN/ GM7150BC:CVBS转BT656芯片 低功耗NTSC/PAL 视频解码器

    1 概述    GM7150 是一款9 位视频输入预处理芯片,该芯片采用CMOS 工艺,通过I2C 总线与PC 或DSP 相连构成应用系统.    它内部包含1 个模拟处理通道,能实现CVBS.S-V ...

  10. android开发之-数据存储Map、HashMap、Hashtable、concurenthashmap区别

    选择一个map进行软件基础数据初始化操作,要求第一次初始化后,不修改数据,可能会出现静态类被回收,然后在进行初始化操作? 1.Map :接口 /** * A {@code Map} is a data ...