• 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

     

  • 相关阅读:
    Redis中的批量删除数据库中的Key
    Solr中初学Demo
    Solr中Schema.xml中文版
    Eclipse中web项目的默认发布路径改为外部Tomcat中webapp路径
    Java操作XML的工具类
    Java中创建操作文件和文件夹的工具类
    Java中的操作日期的工具类
    Java POI操作Excle工具类
    【转】怎样写一个解释器
    【转】什么是语义学
  • 原文地址:https://www.cnblogs.com/fiberhome/p/6829601.html
Copyright © 2020-2023  润新知