hive、hadoop常用命令

hive、hadoop使用

hive常用命令

进入hive、执行hive命令

  • hive
  • hive -e “select …”

查看表结构

  • show create table_name

创建表

建表语句
CREATE  EXTERNAL TABLE IF NOT EXISTS xxx_drainage_mark(
       time string,
       st string,
       id string,
       extend string,
       drainageType string,
       source string)
     PARTITIONED BY (
       dt string,
       hour string)
  ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
  STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
  OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
  LOCATION 'viewfs://c9/user_ext/xxx_bigdata_xxx/warehouse/xxx_drainage_mark'
内表、外表(EXTERNAL):
  • 在删除内部表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的

  • 在建表时,应根据使用场景选择内、外表。如果存储场景的表,应使用外表,以防误删表时能够恢复数据;如自己临时使用的表和给产品创建的表,使用内表即可。

  • 为了方便管理,及时清理hdfs数据内存,我们在创建内部表时应规范统一命名。目前格式暂定为tmp _日期 _邮箱前缀 _用途,例如 tmp _20210903 _xxx _midxx。

  • 后续定时清理临时内部表,暂定每月10号清理前一个月内部表。

  • 附清理脚本

    #!bin/bash
    export HADOOP_HOME=/usr/local/hadoop-2.7.3
    export JAVA_HOME=/usr/local/jdk1.8.0_131
    hive="/usr/local/hive-0.13.0/bin/hive"
    hive -e "show tables " > tables
    array=($(cat tables))
    month=$(date -d "1 month ago" +"%Y%m")
    str=tmp_${month}
    for(( i=0;i<${#array[@]};i++))
    do
      table_name=${array[i]};
      if [[ "$table_name" =~ ^"${str}".* ]];
      then hive -e "drop table ${table_name}"
      ${table_name} >> dropTableName_${month}
      fi
    done
    
分区(PARTITIONED):
  • 在查询中一般会扫描整个表内容,会消耗很多时间查之外的数据,为了减少查询耗时和查询时使用资源数,可增加分区,查询时只查询某些分区。
行分割符(ROW FORMAT DELIMITED FIELDS TERMINATED BY)
  • 指定数据分割字段
数据格式
  • STORED AS INPUTFORMAT … OUTPUTFORMAT …

  • 默认是textfile类型,该类型文件存储就是正常的文本格式,将表中的数据在hdfs上以文本的格式存储,下载后可以直接查看,也可以使用cat命令查看。显示指定为

    STORED AS INPUTFORMAT 
    'org.apache.hadoop.mapred.TextInputFormat' 
    OUTPUTFORMAT           
    'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
    
  • 另外格式为sequencefile和rcfile(平常使用不到),以二进制格式存储,不支持可视化查看,显示指定为

    STORED AS INPUTFORMAT 
    'org.apache.hadoop.mapred.SequenceFileInputFormat' 
    OUTPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat'
    
    STORED AS INPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.RCFileInputFormat' 
    OUTPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.RCFileOutputFormat'
    
存储位置(LOCATION)
  • LOCATION一般与外部表(EXTERNAL)一起使用,存储位置看配置文件
建临时表
CREATE TABLE table_name (
                  uid STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

注:

  • 临时表使用内部表,通常情况下无需分区,采用默认数据格式即可。

删除表

仅删除表中数据,保留表结构(truncate)
  • truncate table table_name;
  • truncate 不能删除外部表!
删除表结构(drop)
  • drop table table_name;
删除某个分区的数据
  • alter table table_name drop partition (partition_name=‘分区名’)

分区

添加分区
  • ALTEL TABLE table_name add PARTITION(分区名称,字段类型)
删除分区
  • ALTER TABLE table_name drop PARTITION(dt=202108903)

修改表名

  • ALTER TABLE table_name1 rename to table_name2;

修改表字段名

  • ALTER TABLE table_name CHANGE name1 name2 String;

内、外表转化

内部表转外部表
  • alter table table_name set TBLPROPROTIES (‘EXTERNAL’=‘TRUE’);
外部表转内部表
  • alter table table_name set TBLPROPROTIES (‘EXTERNAL’=‘FALSE’);

加载数据

落入文件数据(给产品传表常用)

将文件传至服务器上,使用命令落入表中即可。

  • load data local inpath ‘file_name’ overwrite into table table_name
加载其他表中数据
  • INSERT INTO TABLE table_name PARTITION (dt=xxx) SELECT …

    插入字段和查询字段对齐即可

hadoop常用命令

调用文件系统(FS)Shell命令

shell命令区别
hadoop fsfs是文件系统,该命令可以用于其他文件系统,不止是hdfs文件系统内,该命令的使用范围更广
hadoop dfs专门针对hdfs分布式文件系统
hdfs dfs相比于上面的命令更为推荐,并且当使用hadoop dfs时内部会被转为hdfs dfs命令

注:

官方文档用的hadoop fs 下述用hadoop fs

常用命令(和linux命令基本一致)
操作命令
查看文件内容hadoop fs -cat
查看文件、目录信息hadoop fs -ls
查看文件尾部1k内容hadoop fs -tail
文件大小hadoop fs -du
复制文件到本地文件系统hadoop fs -get
本地文件系统复制到hdfshadoop fs -put
文件移动hadoop fs -mv
创建目录hadoop fs -mkdir
创建文件hadoop fs -touchz
删除文件、目录hadoop fs -rm
递归删除hadoop fs -rmr

扩展

误删恢复

hadoop删除文件时,不会立即删除文件夹,而是将其移动到回收站目录下,延迟删除,所以误删后第一时间可以回复。

删除后会有移到的回收站位置,使用hadoop fs -mv 命令将回收站的邮箱移动回原目录下即可

hadoop fs -mv hdfs://ns3-backup/user/xxx_bigdata_xxx/.Trash/Current/user/xxx_bigdata_xxx/warehouse/xxx_feature_judge_log/2021/08/31 hdfs://ns3-backup/user/xxx_bigdata_xxx/warehouse/xxx_feature_judge_log/2021/08
kafka落hive表脚本
#!/bin/bash

export HADOOP_HOME=/usr/local/hadoop-2.7.3
export JAVA_HOME=/usr/local/jdk1.8.0_131
HIVE=/usr/local/hive-0.13.0/bin/hive
HADOOP=/usr/local/hadoop-2.7.3/bin/hadoop

date=$(date -d"1 hour ago" +"%Y%m%d")
hour=$(date -d"1 hour ago" +"%H")
partition=$(date -d"1 hour ago" +"%Y/%m/%d/%H")

$HADOOP distcp -m 100 -bandwidth 20 hdfs://ns1-backup/file/kafka2hdfs/xxx_rid_mid_map/$partition viewfs://c9/user_ext/xxx_bigdata_xxx/warehouse/xxx_rid_mid_map/$partition
sql="CREATE EXTERNAL TABLE IF NOT EXISTS xxx_rid_mid_map(
       rid string,
       mid string)
     PARTITIONED BY (
       dt string,
       hour string)
   ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
  STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
  OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
     LOCATION
       'viewfs://c9/user_ext/xxx_bigdata_xxx/warehouse/xxx_rid_mid_map'"
$HIVE -e "$sql"

$HIVE -e "ALTER TABLE xxx_rid_mid_map ADD PARTITION (dt=$date, hour=$hour) LOCATION '$partition'"
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值