Hadoop archive 唯一的优势可能就是将众多的小文件打包成一个har 文件了,那这个文件就会按照dfs.block.size 的大小进行分块,因为hdfs为每个块的元数据大小大约为150个字节,如果众多小文件的存在(什么是小文件内,就是小于dfs.block.size 大小的文件,这样每个文件就是一个block)占用大量的namenode 堆内存空间,打成har 文件可以大大降低namenode 守护节点的内存压力。但对于MapReduce 来说起不到任何作用,因为har文件就相当一个目录,仍然不能讲小文件合并到一个split中去,一个小文件一个split ,任然是低效的,这里要说一点<<hadoop 权威指南 中文版>>对这个翻译有问题,上面说可以分配到一个split中去,但是低效的。
既然有优势自然也有劣势,这里不说它的不足之处,仅介绍如果使用har 并在hadoop中更好的使用har 文件
首先 看下面的命令
hadoop archive -archiveName 20131101.har /user/hadoop/login/201301/01 /user/hadoop/login/201301/01
我用上面的命令就可以将 /user/hadoop/login/201301/01 目录下的文件打包成一个 20131101.har 的归档文件,但是系统不会自动删除源文件,需要手动删除
hadoop fs -rmr /user/hadoop/login/201301/01/*.*.* 我是用正则表达式来删除的,大家根据自己的需求删除原始文件
有人说了,我删了,归档文件存在,源文件不在了,如果要恢复怎么办,这个也困惑了我,hadoop 好像确实也没有提供这样的API 可以 还原成源文件
功夫不负有心人,其实也很简单,直接从har 文件中 cp出来就可以了。
hadoop fs -cp /user/hadoop/login/201301/01/20130101.har/* /user/hadoop/login/201301/01/
那如何在hive 中使用呢,首先看建表 :
CREATE EXTERNAL TABLE login_har(
ldate string,
ltime string,
userid int,
name string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'hdfs://h60:9000/user/hadoop/login/201301/01'
这是正常的文件 建外表 从而可以不损害源文件的情况下 在Hive中查看,外边有啥优点不多说。
如果是har 文件呢?
CREATE EXTERNAL TABLE login_har(
ldate string,
ltime string,
userid int,
name string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'har://h60:9000/user/hadoop/login/201301/01/20130101.har'
这样就可以实现,但这样不好,为什么不好呢,我只能制定单一的目录,加入我的数据增加了,如何能动态的修改呢?
其实也简单:
CREATE EXTERNAL TABLE login_har(
ldate string,
ltime string,
userid int,
name string)
PARTITIONED BY (
ym string,
d string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'hdfs://h60:9000/user/hadoop/login'
先对其父目录建表,然后对年月日进行分区PARTITIONED BY 即是进行分区
再手动修改 其动态分区 即可:
alter table login_har add partition(ym='201301',d='01') LOCATION 'har:///flume/loginlog/201301/01/20130101.har';
这样很好,既可以对hive 表进行分区索引,也可以动态增加har 文件 到新的分区中。har包不能一旦建成不能修改,我们可以打小包,建目录的方式进行分而治之,既满足需求也不影响效率。
相关推荐
- **使用HAR文件**:通过Hadoop命令创建和使用HAR文件。 - **限制**:讨论了使用HAR文件的一些限制条件。 #### 四、Hadoop I/O **4.1 数据完整性** - **HDFS中的数据完整性**:介绍HDFS如何确保数据在存储过程中...
7. **数据生命周期管理**:Hadoop提供了多种工具,如HDFS的 Trash机制、Hadoop Archive (HAR) 和SequenceFile,用于数据的保留、归档和清理。 8. **安全性与认证**:Kerberos、SSL/TLS加密、ACLs和Sentry等机制保障...
- **归档管理**: 介绍了一种称为Hadoop归档文件(HAR)的技术,用于高效地管理和存储大量的小文件。 #### 四、Hadoop的I/O **4.1 数据完整性** - **数据校验**: Hadoop提供了多种机制来确保数据的完整性和一致性,...
- HDFS支持数据的并行复制(distcp)和归档文件(Hadoop Archive,HAR),优化存储空间利用率。 4. **Hadoop的I/O** - Hadoop提供了数据完整性机制,确保数据在传输和存储过程中的准确性。 - 压缩技术可以减少...
对于小文件处理,可以通过归档策略如SequenceFile、MapFile、Har等方式提高效率。 12. Client在HDFS上写文件时,Namenode提供DataNode信息,Client将文件分割并按顺序写入每个DataNode。在上传文件过程中,数据副本...
- 了解Hadoop归档文件(HAR)的概念。 - 学习如何创建和使用HAR文件来优化存储和访问效率。 14. **Hadoop实战案例** - 分析实际应用场景中的Hadoop项目案例。 - 探讨如何将理论知识应用于解决具体问题。 #### 二...
可以通过归档小文件、使用Har或者MapReduce的CombineFileInputFormat减少小文件数量。 8. **HDFS架构**:HDFS由NameNode(元数据管理)、DataNode(数据存储)和客户端组成,通过RPC通信,提供高容错、高吞吐量的...
4. **处理.HAR归档文件** - 如果HDFS中存在`.har`归档目录,使用`--decompress_har`参数可以自动解压并迁移。 ``` ./hdfs_to_cos_cmd --decompress_har --hdfs_path=/tmp/hive --cos_path=/hdfs/20170224/ ``` ...
避免策略包括使用Har Archive、SequenceFile或MapReduce的CombineFileInputFormat。 #### 8. HDFS组织架构 HDFS由NameNode(负责元数据管理)、DataNode(存储数据)和Client(与NameNode交互,读写数据)三部分...
文章目录OverviewHow to Create an ArchiveHow to Look Up Files in ArchivesHow to Unarchive an Archive操作DemoHadoop Archives and ...Hadoop archive 包含元数据(形式是 _index 和 _masterindx)和数据(p
小文件会增加NameNode的内存负担,解决方法包括使用Har Archive、SequenceFile、MapReduce的CombineFileInputFormat,或者利用HBase、Spark等技术对小文件进行整合。 **1.2.5 Shuffle 与优化** Shuffle是MapReduce...
- **HAR(Hadoop Archive)**:将小文件打包成大文件,减少NameNode的负担。 - **Consolidator**:整合小文件,减少文件数量。 - **HBase存储**:使用HBase存储小文件,利用其列族和行键特性,优化存储效率。 6....
- 持久化级别的选择会影响内存使用和数据恢复速度。 **6. Checkpoint检查点机制** - 记录RDD的血统信息,以便在失败时恢复。 - 通过显式调用`checkpoint()`方法。 - 存储在可靠的存储系统中,如HDFS。 **7. ...
- **解决方案**:介绍常见的解决方案,比如归档工具Hadoop Archive (HAR)、SequenceFile等,以及它们的优缺点。 ### 4. Shuffle及其优化 - **Shuffle过程**:解释MapReduce框架中的Shuffle阶段,包括Map端的数据...