一.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

最新文章

  1. java1234教程系列笔记 S1 Java SE 02 eclipse初步使用、注释、标识符
  2. 关于Oracle出现listener refused the connection with the ORA-12505错误,解决方案
  3. .Net“/”应用程序中的服务器错误 超过了最大请求长度 错误解决办法
  4. 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码
  5. 常用按键ASCII码
  6. android.util.AndroidRuntimeException: requestFeature() must be called before adding content 错误解决方法
  7. 【转】数据库中的join
  8. OFBiz进阶之环境搭建(eclipse)
  9. BZOJ2741: 【FOTILE模拟赛】L
  10. 用Quartus II 建立一个工程模板,以后新建工程时无需再配置参数
  11. oracle至mysql该指南的数据模式()任意数据源之间的跨导应用
  12. Xposed hook布局类资源文件的获取
  13. java中类的三大特征之多态
  14. python 发送163邮件
  15. MyBatis源码解析(七)——DataSource数据源模块之托管数据源
  16. EXCEL中把两列表格里的数字合成一列并且中间用逗号隔开
  17. JavaEE学习总结(十二)—MyEclipse开发工具与HTML
  18. JavaScript对象与JSON字符串的相互转换
  19. 分布式一致性Hash
  20. [ 原创 ]Centos 7.0下安装 Tomcat8.5.15

热门文章

  1. JavaScript实现常见排序算法
  2. ICC_lab总结——ICC_lab4:时钟树综合
  3. 修改mysql root账号密码
  4. ASP.NET Core MVC 源码学习:MVC 启动流程详解
  5. 谈谈在DevOps实践中,感觉最重要的这三个技术……
  6. 《Django By Example》第十一章 中文 翻译 (个人学习,渣翻)
  7. sass或scss入门
  8. SERVLET中的doGet与doPost两个方法之间的区别
  9. 【C++】浅谈三大特性之一继承(二)
  10. iOS 历史浏览网页的定向跳转