find -mtime +N/-N/N 的时间算法

本文详细解析了在Unix/Linux环境下使用find命令时-mtime参数的含义及具体应用,通过实例展示了如何查找特定时间点之前的文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)find -mtime +N/-N/N 的时间算法:

        原文链接地址:http://www.oracleblog.org/study-note/how-to-calculate-find-mtime/

        在unix或linux环境中经常会用到find -mtime这样的写法来找某某时间点之前的文件,至于如何写find -mtime +N/-N/N,原来并不是很清楚,今天找了些资料看看,画下了这个图,以便理解和记忆:

从图上可以看出,以当前时间点开始算起,+表示往左,从该时间点开始再继续往更早推,可以称作xx以外;-表示往右,从该时间点算起往后的时间推,可以称作xx以内;没有加减号表示据此此前第N天。因此:
我们来看下面这个例子:
我当前的时间2011年3月1日22:31,我有如下的文件:

E:\testpath>ls -l
total 0
-rwxrwxrwa   1 Administrator   None                  0 Feb 25 22:37 111.txt
-rwxrwxrwa   1 Administrator   None                  0 Feb 26 22:38 222.txt
-rwxrwxrwa   1 Administrator   None                  0 Feb 27 22:38 333.txt
-rwxrwxrwa   1 Administrator   None                  0 Feb 28 22:01 444.txt
-rwxrwxrwa   1 Administrator   None                  0 Feb 28 22:30 555.txt
-rwxrwxrwa   1 Administrator   None                  0 Mar  1 22:31 666.txt<--当前时间的文件
-rwxrwxrwa   1 Administrator   None                  0 Mar  2  2011 777.txt
 
E:\testpath>


-mtime +2,表示2天以外的,即从距离当前时间(2011-03-01 22:31)的2天前开始算起,往更早的时间推移。因此,距离当前时间的2天为:2011-02-27 22:31,在此前的文件,会被选出来。

E:\testpath>find ./ -mtime +2
./111.txt
./222.txt


-mtime +1,表示1天以外的,即从距当前时间的1天前算起,往更早的时间推移。因此2011-02-28 22:31前的文件属于该结果,2011-02-28 22:31后的文件不属于该结果:

E:\testpath>find ./ -mtime +1
./111.txt
./222.txt
./333.txt
./444.txt
./555.txt


-mtime 2, 距离当前时间第2天的文件,当前时间为2011-03-01 22:31,往前推2天为2011-02-27 22:31,因此以此为时间点,24小时之内的时间为2011-02-27 22:31~2011-02-28 22:31,因此这段时间内的文件会被选中出来:

E:\testpath>find ./ -mtime 2
./333.txt
./444.txt
./555.txt


-mtime 1, 距离当前时间第1天的文件,当前时间为2011-03-01 22:31,往前推1天为2011-02-28 22:31,因此以此为时间点,24小时之内的时间为2011-02-28 22:31~2011-03-01 22:31,因此这段时间内的文件会被选中出来:

E:\testpath>find ./ -mtime 1
./666.txt


-mtime -1 表示1天以内的,从距当前时间的1天为2011-02-28 22:31,往右推移:

E:\testpath>find ./ -mtime -1
./
./666.txt
./777.txt


-mtime -2 表示2天以内的,从距当前时间的2天为2011-02-27 22:31开始,往右推移:

E:\testpath>find ./ -mtime -2
./
./333.txt
./444.txt
./555.txt
./666.txt
./777.txt


        下面是另一篇简要介绍find命令的文章可供参考:

(2)find命令-mtime参数理解

        原文链接地址:http://hi.baidu.com/ljm0211/item/d46591307a4985b9623aff33

find . -mtime N
实际上你应该这样理解..
N * 24
+1 内表示 1 * 24 +24小时以外..
+0 才表示 0 * 24 +24小时以外
1 表示 1*24 + 24 到 24 之间..
0 表示 0*24 + 24 到 0 之间..
-1 表示 0*24 +24 内,甚至为未来时间...

记住0也是自然数....

 


 

一、存储 PB 级环境监测数据的性能优化方案 技术工具:Hadoop 3.x 功能:分布式存储与资源管理 1.数据存储架构优化 为高效存储 PB 级环境监测数据,在原有 Hadoop 集群架构基础上,采用分层存储策略。将高频访问的实时监测数据和近期预测数据存储于 HDFS 的高速存储层,选用 SSD 硬盘作为存储介质,利用其快速读写特性,满足实时监测与短期预测对数据读取速度的严格要求。对于历史监测数据等低频访问数据,则迁移至 HDFS 的大容量存储层,使用 HDD 硬盘降低存储成本。同时,通过Hadoop的异构存储管理功能,实现不同存储层之间的数据自动分层与迁移,在保证性能的前提下,优化存储资源利用率。 (1)异构存储配置实现 Hadoop 3.x 支持异构存储策略,通过配Storage Policy可自动管理数据分层。在hdfs-site.xml中添加以下配置: <property> <name>dfs.storage.policy.enabled</name> <value>true</value> </property> <property> <name>dfs.storage.policy.names</name> <value>LAZY_PERSIST, ALL_SSD, ONE_SSD, HOT, WARM, COLD, ALL_DISK</value> </property> 创建存储策略映射表,将不同类型数据分配到对应存储层: # 为实时数据设置SSD存储策略 hdfs storagepolicies -setStoragePolicy -path /air_quality/real_time -policy ALL_SSD # 为历史数据设置HDD存储策略 hdfs storagepolicies -setStoragePolicy -path /air_quality/historical -policy COLD (2)自动分层迁移脚本 编写定期执行的数据分层迁移脚本,将超过 30 天的历史数据自动迁移至冷存储层: #!/usr/bin/env python3 import subprocess import datetime import logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s') def migrate_old_data(days_threshold=30): cutoff_date = (datetime.datetime.now() - datetime.timedelta(days=days_threshold)).strftime('%Y-%m-%d') # 获取所有超过阈值的文件 cmd = f"hdfs dfs -find /air_quality/data -type f -mtime +{days_threshold}" files = subprocess.check_output(cmd, shell=True).decode().strip().split('\n') for file in files: # 检查文件当前存储策略 policy = subprocess.check_output(f"hdfs storagepolicies -getStoragePolicy -path {file}", shell=True).decode().strip() # 如果不是冷存储策略,则迁移 if "COLD" not in policy: logging.info(f"Migrating {file} to COLD storage") subprocess.run(f"hdfs storagepolicies -setStoragePolicy -path {file} -policy COLD", shell=True) if __name__ == "__main__": migrate_old_data() 2.数据压缩与编码 在数据写入 HDFS 前,应用高效的数据压缩算法与编码技术。针对空气质量监测数据的特点,采用 Snappy 压缩算法,该算法在提供较高压缩比的同时,具备极快的压缩和解压缩速度,能够显著减少数据存储空间,降低数据传输过程中的网络带宽消耗。此外,对数值型的污染物浓度等数据,运用列式存储与 Run - Length Encoding(行程长度编码)相结合的方式,进一步提升数据压缩效果,加速数据分析与查询操作,为 PB 级数据的高效处理提供支持。 (1)压缩算法配置 在 Hadoop 集群中配置 Snappy 压缩算法,修改mapred-site.xml: <property> <name>mapreduce.map.output.compress</name> <value>true</value> </property> <property> <name>mapreduce.map.output.compress.codec</name> <value>org.apache.hadoop.io.compress.SnappyCodec</value> </property> <property> <name>mapreduce.output.fileoutputformat.compress</name> <value>true</value> </property> <property> <name>mapreduce.output.fileoutputformat.compress.codec</name> <value>org.apache.hadoop.io.compress.SnappyCodec</value> </property> (2)列式存储与编码实现 使用 Parquet 列式存储格式处理数值型监测数据,配置示例: from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("AirQualityDataProcessing") \ .getOrCreate() # 读取原始数据 df = spark.read.csv("/air_quality/raw_data/*.csv", header=True) # 应用RLE编码并存储为Parquet格式 df.write \ .option("compression", "snappy") \ .option("parquet.enable.dictionary", "true") \ .option("parquet.page.size", 1048576) \ .parquet("/air_quality/processed_data") 3.集群扩展与负载均衡 随着环境监测数据量的持续增长,制定动态集群扩展策略。当集群存储利用率达到预设阈值(如 80%)时,自动添加新的 DataNode 节点。通过 Hadoop 的自动发现机制,新节点能够快速加入集群,并自动同步元数据与数据块,实现无缝扩展。同时,优化 YARN 资源管理器的负载均衡算法,根据各节点的 CPU、内存、磁盘 I/O 等资源使用情况,动态分配任务,避免部分节点负载过高而影响整体性能,确保集群在处理 PB 级数据时始终保持高效稳定运行。 (1)动态扩缩容脚本 实现基于存储利用率的自动扩缩容机制: #!/usr/bin/env python3 import subprocess import json import logging import requests logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s') # 阈值配置 STORAGE_THRESHOLD = 0.8 # 80%使用率触发扩容 INSTANCE_TEMPLATE = "hadoop-datanode-template" MAX_NODES = 50 def get_cluster_usage(): # 获取HDFS集群使用情况 cmd = "hdfs dfsadmin -report" output = subprocess.check_output(cmd, shell=True).decode() # 解析输出获取使用百分比 for line in output.split('\n'): if "DFS Used%" in line: usage = float(line.split(':')[1].strip().replace('%', '')) / 100 return usage return 0.0 def scale_cluster(): usage = get_cluster_usage() logging.info(f"Current cluster usage: {usage:.2%}") # 获取当前节点数 cmd = "hdfs dfsadmin -report | grep 'Live datanodes' | awk '{print $3}'" current_nodes = int(subprocess.check_output(cmd, shell=True).decode().strip()) if usage > STORAGE_THRESHOLD and current_nodes < MAX_NODES: # 计算需要添加的节点数 nodes_to_add = min(5, MAX_NODES - current_nodes) logging.info(f"Adding {nodes_to_add} new datanodes...") # 使用GCP Compute Engine API添加节点 cmd = f"gcloud compute instance-groups managed resize hadoop-datanodes --size={current_nodes + nodes_to_add}" subprocess.run(cmd, shell=True) # 等待节点加入集群 logging.info("Waiting for new nodes to join the cluster...") # 实际应用中应添加等待节点就绪的逻辑 if __name__ == "__main__": scale_cluster() (2)资源调度优化配置 在yarn-site.xml中优化资源调度配置: <property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> </property> <property> <name>yarn.scheduler.capacity.root.queues</name> <value>air_quality, batch, default</value> </property> <property> <name>yarn.scheduler.capacity.root.air_quality.capacity</name> <value>60</value> </property> <property> <name>yarn.scheduler.capacity.root.air_quality.maximum-capacity</name> <value>80</value> </property> <property> <name>yarn.scheduler.capacity.resource-calculator</name> <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value> </property> 三、方案实施效果评估与总结 1.性能评估 通过模拟 PB 级环境监测数据的写入、存储和查询操作,对存储方案的性能进行全面评估。在数据写入方面,测试不同数据规模下的写入速度与吞吐量,验证数据压缩和集群扩展策略对写入性能的提升效果;在数据查询环节,针对常见的空气质量指标查询、历史数据统计分析等场景,测量查询响应时间,评估数据编码和负载均衡优化对查询性能的影响。将评估结果与预设的性能指标进行对比,分析方案在处理 PB 级数据时的优势与不足,为后续优化提供依据。 (1)基准测试脚本 使用 Terasort 基准测试评估 HDFS 性能: #!/bin/bash # 配置测试参数 SIZE=10000000000 # 10GB数据 NUM_MAPS=20 NUM_REDS=5 INPUT_DIR=/benchmarks/terasort/input OUTPUT_DIR=/benchmarks/terasort/output RESULT_FILE=~/terasort_results.txt # 生成测试数据 echo "Generating test data..." hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar teragen -Dmapred.map.tasks=$NUM_MAPS $SIZE $INPUT_DIR # 执行排序测试 echo "Running terasort benchmark..." START_TIME=$(date +%s) hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar terasort -Dmapred.map.tasks=$NUM_MAPS -Dmapred.reduce.tasks=$NUM_REDS $INPUT_DIR $OUTPUT_DIR END_TIME=$(date +%s) # 计算并保存结果 ELAPSED_TIME=$((END_TIME - START_TIME)) echo "Terasort completed in $ELAPSED_TIME seconds" > $RESULT_FILE # 验证结果 echo "Validating results..." hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar teravalidate $OUTPUT_DIR $OUTPUT_DIR/validate # 清理测试数据 echo "Cleaning up..." hdfs dfs -rm -r -f $INPUT_DIR $OUTPUT_DIR (2)性能监控配置 配置 Ganglia 监控 Hadoop 集群性能: # gmetad.conf配置 data_source "hadoop_cluster" namenode1:8651 datanode1:8651 datanode2:8651 # gmond.conf配置示例 cluster { name = "hadoop_cluster" owner = "AirQualitySystem" latlong = "unknown" url = "unknown"} udp_send_channel { host = namenode1 port = 8649 ttl = 1} udp_recv_channel { port = 8649} tcp_accept_channel { port = 8651 } 2.总结 性能优化成果:通过实施上述优化方案,系统性能提升显著 存储效率:通过分层存储和压缩技术,存储成本降低 40%,存储容量利用率提升至 85% 处理速度:实时数据查询响应时间从平均 2.5 秒降至 0.8 秒,提升 68% 扩展性:动态扩缩容机制使集群可在 15 分钟内完成 5 节点扩展,满足突发数据增长需求 生成关于以上内容的代码运行截图。
最新发布
06-12
<think>我们无法直接生成运行截图,但可以提供生成截图的步骤和伪代码/脚本示例。用户需要在实际环境中运行这些脚本并自行截图。根据用户需求,涉及以下方面:1.Hadoop3.x集群配置2.数据分层存储3.压缩算法4.列式存储(例如ORC/Parquet)5.动态扩缩容6.性能评估(如Terasort基准测试)下面分别给出各部分的脚本示例及如何获取运行结果截图:1.Hadoop3.x集群配置-修改配置文件:core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml-截图:配置文件内容,以及通过WebUI(如NameNodeUI:http://<namenode>:9870)查看集群状态的截图。2.数据分层存储(HDFS存储策略)-设置存储策略(Hot,Warm,Cold,All_SSD,One_SSD,Lazy_Persist等)-示例命令:```bash#创建不同存储策略的目录hdfsdfs-mkdir/hothdfsdfs-setStoragePolicy-path/hot-policyHOThdfsdfs-mkdir/coldhdfsdfs-setStoragePolicy-path/cold-policyCOLD#将文件移动到不同存储策略的目录hdfsdfs-mv/data/file1/hot/hdfsdfs-mv/data/file2/cold/#查看存储策略hdfsstoragepolicies-listPolicieshdfsstoragepolicies-getStoragePolicy-path/hot```-截图:命令运行结果,HDFS目录结构,以及通过`hdfsdfs-du-h`查看文件大小和存储情况。3.压缩算法-在Hive中创建表时指定压缩-示例:```sqlSEThive.exec.compress.output=true;SETmapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;CREATETABLEcompressed_table(...)STOREDASORC;```-截图:Hive命令运行结果,HDFS上文件大小对比(压缩前后)。4.列式存储(ORC/Parquet)-在Hive中使用ORC格式并设置压缩:```sqlCREATETABLEorc_table(...)STOREDASORCtblproperties("orc.compress"="SNAPPY");```-截图:Hive建表语句和查询结果,以及HDFS上文件的大小。5.动态扩缩容-添加/移除节点:-在`workers`文件中添加新节点主机名,然后运行:```bashhdfsdfsadmin-refreshNodesyarnrmadmin-refreshNodes```-如果要退役节点,需要先在`excludes`文件中添加主机名,再运行上述命令。-截图:使用`hdfsdfsadmin-report`和`yarnnode-list`查看节点状态的输出。6.性能评估(Terasort基准测试)-步骤:```bash#生成测试数据hadoopjar$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.x.jarteragen10000000/tera/input#排序hadoopjar$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.x.jarterasort/tera/input/tera/output#验证排序结果hadoopjar$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.x.jarteravalidate/tera/output/tera/validate```-截图:Terasort作业的启动命令和运行完成后的JobTracker界面(包括执行时间等)。注意:以上脚本需要根据实际环境调整路径和参数。由于无法生成截图,用户需要自行在集群上运行这些命令和操作,并通过命令行输出或Web界面进行截图。同时,建议在每次优化前后都进行性能测试(如Terasort的执行时间、磁盘空间占用等),并对比截图,以展示优化效果。另外,对于环境监测数据的特定场景,可能需要结合时间序列数据的存储优化,例如使用ApacheParquet格式,并利用其列式存储和谓词下推等特性。也可以考虑使用其他存储系统如HBase(适合随机读写)或Kudu(同时支持随机读写和批量分析)来优化。最后,性能评估应该包括:-存储空间节省(压缩前后对比)-查询性能(相同SQL查询在不同存储格式和压缩算法下的执行时间-扩缩容效率(扩缩容前后集群处理能力的变化)用户可以根据这些指导生成截图并整理成优化方案报告。§§相关问题§§1.如何验证Hadoop集群扩容后的性能提升效果?2.环境监测数据在HDFS中采用分层存储时,如何设计存储策略?3.在Hive中使用ORC格式时,如何选择合适的压缩算法?</think> ### Hadoop 3.x PB级环境监测数据存储优化方案运行截图指南 #### 1. 数据分层迁移脚本运行截图 **脚本示例** (`data_tiering_migration.sh`): ```bash #!/bin/bash # 热数据迁移至SSD hdfs storagepolicies -setStoragePolicy -path /env_data/hot -policy ONE_SSD hdfs mover -p /env_data/hot # 冷数据迁移至ARCHIVE hdfs storagepolicies -setStoragePolicy -path /env_data/cold -policy COLD hdfs mover -p /env_data/cold ``` **如何截图**: - 运行前使用 `hdfs dfs -du -h /env_data` 显示原始数据分布 - 执行脚本时捕捉终端输出(包括迁移进度和耗时) - 运行后通过 `hdfs storagepolicies -getStoragePolicy -path /path` 验证策略生效情况 - 在HDFS NameNode Web UI(`http://<namenode>:9870`)截取存储策略分布图 --- #### 2. 动态扩缩容操作截图 **扩缩容流程**: ```bash # 添加节点(截图扩容过程) hdfs dfsadmin -refreshNodes yarn rmadmin -refreshNodes # 节点退役(截图缩容) echo "dn-07.example.com" > excludes.txt hdfs dfsadmin -refreshNodes ``` **关键截图点**: 1. 扩容前集群状态:`yarn node -list` 2. 扩容命令执行输出 3. HDFS Web UI的`Decommissioning Nodes`页面 4. 容量变化对比:`hdfs dfsadmin -report` 的容量统计部分 --- #### 3. Terasort性能测试截图 **基准测试脚本** (`terasort_benchmark.sh`): ```bash # 生成1TB测试数据 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.x.jar teragen 10000000000 /bench/in # 运行排序测试 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.x.jar terasort /bench/in /bench/out # 验证结果 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.x.jar teravalidate /bench/out /bench/validate ``` **核心截图**: - 任务启动命令和参数 - YARN ResourceManager Web UI(`http://<rm>:8088`)显示的任务执行进度 - `Terasort`作业的Counter信息(重点截取`FILE_BYTES_READ/WRITTEN`) - 最终耗时输出:`Job Finished in 32.5 minutes` --- #### 4. 列式存储优化截图(Parquet格式) **Hive表创建示例**: ```sql CREATE TABLE env_monitor_parquet ( sensor_id STRING, timestamp BIGINT, value DOUBLE ) STORED AS PARQUET TBLPROPERTIES ("parquet.compression"="SNAPPY"); ``` **截图要点**: 1. Hive命令行执行DDL语句的输出 2. 通过 `hdfs dfs -du -h /warehouse/...` 显示Parquet文件大小 3. `DESCRIBE FORMATTED env_monitor_parquet` 的表属性信息 4. 相同查询对比ORC/Parquet/Text的执行时间(通过`EXPLAIN ANALYZE`) --- #### 5. 压缩算法效果对比截图 **压缩测试流程**: ```bash # 创建不同压缩格式的测试表 CREATE TABLE snappy_tbl STORED AS ORC TBLPROPERTIES ("orc.compress"="SNAPPY"); CREATE TABLE zlib_tbl STORED AS ORC TBLPROPERTIES ("orc.compress"="ZLIB"); # 插入相同数据集 INSERT INTO snappy_tbl SELECT * FROM source_data; INSERT INTO zlib_tbl SELECT * FROM source_data; ``` **关键截图**: 1. HDFS文件大小对比:`hdfs dfs -du -h /warehouse/*` 2. 插入耗时:YARN作业日志中的`Elapsed Time` 3. 查询性能:通过`EXPLAIN ANALYZE`比较扫描同量数据的耗时差异 --- #### 6. 综合性能评估报告 **监控指标截图**: 1. **HDFS容量**:NameNode UI的`Summary`板块 2. **资源利用率**:YARN UI的`Cluster Metrics`图表 3. **压缩率计算**:原始文本文件 vs 压缩后文件大小 4. **IO负载**:Grafana监控中的磁盘IOPS/吞吐量面板 5. **查询延迟**:Hive/Spark执行日志中的作业完成时间 > 📌 **操作建议**: > - 所有截图需包含时间戳和主机标识 > - 使用`tee`命令保存完整输出:`./benchmark.sh | tee benchmark.log` > - 对关键指标用红色方框标注,如:`[平均吞吐量: 1.2GB/s]`
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值