HDFS常规操作

HDFS文件统计

  1. 获取指定目录数据大小信息

hdfs dfs -du /user/hive/warehouse/ods.db/ > db_du

  1. 获取指定目录修改时间信息

hdfs dfs -ls /user/hive/warehouse/udm.db/ > db_ls

  1. 合并信息脚本
#!/usr/bin/perl
use strict;
my %table_du = map{my @m = split /\s+/;$m[0],$m[1]} `awk -F'[ /]' '{print tolower(\$NF),\$1}' db_du`;
my %table_ls = map{my @m = split /\s+/;$m[0],$m[1]} `awk '{print tolower(\$NF),\$6}' db_ls|awk -F\/ '{print \$NF}'`;

for (keys %table_du){
    print "$_|$table_du{$_}|$table_ls{$_}\n";
}

HDFS 过期文件清理

#shell脚本
#!/bin/bash
#cleanup hive session dir on hdfs named with Specify the directory
usage="Usage: hive-clean.sh [days]"
cleanup_dir="/tmp/hive/bduser"
echo "cleanup_dir on HDFS:  $cleanup_dir"
if [ ! "$1" ]; then
    echo $usage
    exit 1
fi
now=$(date +%s)
hadoop fs -ls $cleanup_dir | grep "^d" | while read f; do
    dir_date=$(echo $f | awk '{print $6}')
    difference=$((($now - $(date -d "$dir_date" +%s)) / (24 * 60 * 60)))
    if [ $difference -gt $1 ]; then
        echo $f
        # 此处直接对上边的过滤结果进行删除,建议先改成 hadoop fs -ls -R 命令先进行测试,一切正常在改回删除
        hadoop fs -ls -R $(echo $f | awk '{ print $8 }')
        #hadoop fs -rm -r -skipTrash $(echo $f | awk '{ print $8 }')
    fi
done

HDFS EC 存储冷数据

  1. 查看原始数据量

hdfs dfs -du -s -h /user/hive/warehouse/np.db/user_info

统计结果

2.2 G 6.5 G /user/hive/warehouse/np.db/np_user_info

  1. 新表目录设置EC

hdfs ec -setPolicy -policy RS-6-3-1024k -path /user/hive/warehouse/cold_data.db/np_user_info

  1. 数据转移至新表

  2. 查看新表数据量

hdfs dfs -du -s -h /user/hive/warehouse/cold_data.db/np_user_info

  1. 统计结果

2.2 G 3.2 G /user/hive/warehouse/cold_data.db/np_user_info

HDFS datanode离线检测机制

检测机制
dfs.namenode.heartbeat.recheck-interval 默认300000 – 单位毫米 合计五分钟
dfs.heartbeat.interval - default: 3 seconds

如果使用默认值的话,当一台datanode的心跳消失30秒钟,namenode会认为这台datanode stale了。如果又过了10分钟(总共10.5分钟)还没有心跳,namenode会认定datanode死亡了。

timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval
= 10min + 30second = 10min 30sec

https://www.cnblogs.com/sx66/p/12605059.html

CDH 设置 datanode离线 40分钟内不进行数据迁移和平衡
hdfs-site.xml 的 HDFS 服务高级配置代码段(安全阀)

dfs.namenode.heartbeat.recheck-interval
1200000

(即20分钟),失联检测时间=2 * 20min + 10 * 3 = 40min30

HDFS 的 datanode失联检测。移动机器为了保证不进行数据移动平衡,设置如上,保证40分钟内不进行失联迁移数据操作

### HDFS基本操作详解 Hadoop分布式文件系统(HDFS)提供了丰富的命令行工具来管理和操作存储在其上的数据。以下是基于站内引用的内容以及扩展的知识点,详细介绍HDFS的基本操作。 #### 1. HDFS Shell 操作基础 HDFS支持通过`hadoop fs`命令进行各种文件系统的操作[^1]。这些命令类似于Linux中的标准文件系统命令,但专用于HDFS环境下的文件和目录管理。 - **创建目录** 使用`mkdir`命令可以创建新目录。 ```bash hadoop fs -mkdir /example_directory ``` - **上传文件HDFS** 将本地文件复制到HDFS上可以通过`put`或`copyFromLocal`实现。 ```bash hadoop fs -put local_file_path /destination_in_hdfs ``` - **下载文件到本地** 下载HDFS上的文件至本地可使用`get`或`copyToLocal`命令。 ```bash hadoop fs -get /source_in_hdfs local_destination_path ``` - **删除文件/目录** 删除指定路径的文件或目录可通过`rm`或`rmdir`完成。 ```bash hadoop fs -rm /path_to_delete ``` - **查看文件内容** 可以利用`cat`、`tail`等命令浏览文件的部分内容。 ```bash hadoop fs -cat /file_path | head -n 10 ``` 以上命令均属于`hadoop fs`系列的一部分,适用于日常的数据处理需求。 #### 2. 集群管理命令 除了常规文件操作外,管理员还可以借助`hdfs dfsadmin`执行更高级别的任务[^2]: - 查看当前集群的状态报告: ```bash hdfs dfsadmin -report ``` - 进入或退出安全模式(Safe Mode),此状态下不允许修改任何数据块分配情况直到解除为止。 ```bash hdfs dfsadmin -safemode enter hdfs dfsadmin -safemode leave ``` 上述功能对于监控健康状况或者维护期间非常有用。 #### 3. 数据写入与读取流程简介 理解内部机制有助于优化性能表现。当向HDFS写入数据时会经历多个阶段包括但不限于客户端请求NameNode获取目标DataNodes列表并建立管道传输字节流;而读取过程则是由Client直接联系负责保存副本的一个节点发起拉取动作直至结束整个事务链条[^4]。 --- ### 示例代码展示 下面给出一段简单的Java程序演示如何通过API方式连接访问远程HDFS实例: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class HDFSDemo { public static void main(String[] args) throws Exception{ Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(new URI("hdfs://namenode_address:port"),conf,"username"); Path srcPath=new Path("/local/path/to/file.txt"); Path dstPath=new Path("/remote/hdfs/directory/"); try{ fs.copyFromLocalFile(srcPath,dstPath); System.out.println("Upload successful!"); }finally{ if(fs!=null){ fs.close(); } } } } ``` 该片段展示了怎样配置必要的参数并通过FileSystem类方法调用达到目的——即把某个特定位置处的小型纯文本档案传送到远端服务器上去存档起来待后续分析用途所用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

htmljsp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值