Haoop基本操作

一.HDFS的常用操作

(一)、HDFS文件的权限
Linux文件权限类似
r: read; w:write; x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容。
如果Linux系统用户hdp使用hadoop命令创建一个文件,那么这个文件在HDFSowner就是hdp
HDFS的权限目的:阻止好人错错事,而不是阻止坏人做坏事;HDFS相信,你告诉我你是谁,我就认为你是谁。

(二)、HDFS下的文件操作
1、列出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  文件命令查看HDFSin文件中的内容:
$ 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之间拷贝数据

5.setrep
hadoop fs -setrep -R 3 < hdfs path >
改变一个文件在hdfs中的副本个数,上述命令中数字3为所设置的副本个数,-R选项可以对一个人目录下的所有目录+文件递归执行改变副本个数的操作

(五)、附HDFS常用命令集合使用格式及含义
-ls      -ls <路径>      查看指定路径的当前目录结构
-lsr      -lsr <路径>      递归查看指定路径的目录结构
-du      -du <路径>      统计目录下个文件大小
-dus      -dus <路径>      汇总统计目录下文件()大小
-count      -count [-q] <路径>      统计文件()数量
-mv      -mv <源路径> <目的路径>      移动
-cp      -cp <源路径> <目的路径>      复制
-rm      -rm [-skipTrash] <路径>      删除文件/空白文件夹
-rmr      -rmr [-skipTrash] <路径>      递归删除
-put      -put <多个linux上的文件> <hdfs路径>      上传文件
-copyFromLocal      -copyFromLocal <多个linux上的文件> <hdfs路径>      从本地复制
-moveFromLocal      -moveFromLocal <多个linux上的文件> <hdfs路径>      从本地移动
-getmerge      -getmerge <源路径> <linux路径>      合并到本地
-cat      -cat <hdfs路径>      查看文件内容
-text      -text <hdfs路径>      查看文件内容
-copyToLocal      -copyToLocal [-ignoreCrc] [-crc] [hdfs源路径] [linux目的路径]      从本地复制
-moveToLocal      -moveToLocal [-crc] <hdfs源路径> <linux目的路径>      从本地移动
-mkdir      -mkdir <hdfs路径>      创建空白文件夹
-setrep      -setrep [-R] [-w] <副本数> <路径>      修改副本数量
-touchz      -touchz <文件路径>      创建空白文件
-stat      -stat [format] <路径>      显示文件统计信息
-tail      -tail [-f] <文件>      查看文件尾部信息
-chmod      -chmod [-R] <权限模式> [路径]      修改权限
-chown      -chown [-R] [属主][:[属组]] 路径      修改属主
-chgrp      -chgrp [-R] 属组名称 路径      修改属组
-help      -help [命令选项]      帮助

二.Hadoop回收站机制

1、简介
HDFS里,删除文件时,不会真正的删除,其实是放入回收站/trash,回收站里的文件可以快速恢复。
可以设置一个时间阀值,当回收站里文件的存放时间超过这个阀值或是回收站被清空时,文件才会被彻底删除,并且释放占用的数据块。

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

[html] view plain copy

 print?在CODE上查看代码片派生到我的代码片

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?在CODE上查看代码片派生到我的代码片

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 namefied1fied2,且版本数均为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'}
#
例如:修改表tab1cfTTL180
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的添加一行记录:rowkeyrowkey001family namefied1column namecol1valuevalue01timestamp:系统默认
hbase(main)>
 put 'tab1','rowkey001','fied1:col1','value01'
用法比较单一。


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


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


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


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


b )
删除行
#
语法:deleteall <table>, <rowkey>,  <family:column> , <timestamp>,可以不指定列名,删除整行数据
#
例如:删除表tab1rowk001的数据
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


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


4
incr 命令
'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

 

原文地址:https://www.cnblogs.com/fiberhome/p/6829601.html