rcfile

RCFile是Facebook提出的一种结合行存储和列存储优点的新型文件存储格式,旨在提高Hadoop环境下数据仓库的性能。它通过行组的方式实现数据的水平和垂直划分,既保证了数据加载速度和动态负载适应性,又提升了查询效率和存储空间利用率。

   转自:http://flyingdutchman.iteye.com/blog/1871025

  在当前的基于Hadoop系统的数据仓库中,数据存储格式是影响数据仓库性能的一个重要因素。Facebook于是提出了集行存储和列存储的优点于一身的RCFile文件存储格式,据说当前在Facebook公司内部,其数据仓库的文件存储格式都是RCFile,另外盛大内部的数据仓库使用的也是RCFile文件存储格式。 

        我们现在正在进入一个大数据时代,何为“大数据”?它不仅仅就是指海量的数据,也包括如何高效的存储、管理和使用这写数据。在Hadoop运行环境中,数据的存储格式要满足以下几个特点: 
        1)、数据加载数据要快; 
        2)、数据查询处理要快; 
        3)、高效的数据存储空间利用率; 
        4)、适应高强度的动态负载模式。 
        在之前的Hadoop ecosystem中,我们已经知道了基于行存储结构的TextFile和SequenceFile的文件格式,也学习过Hbase的面向列存储的文件格式,对于Hive数据仓库来说,他们都有各自的有点个缺点,今天我们来学习一个新的文件存储格式——RCFile。 
        首先,我们先来探讨一下基于行的存储和面向列的存储的优缺点: 
        基于行存储的数据结构:优点是具备快速数据加载和动态负载的高适应能力,因为行存储保证了相同记录的所有域都在同一个集群节点;但是它不太满足快速的查询响应时间的要求,特别是在当查询仅仅针对所有列中的少数几列时,它就不能直接定位到所需列而跳过不需要的列,由于混合着不同数据值的列,行存储不易获得一个极高的压缩比,行存储不易获得一个较高的压缩比。 

                                                          Hadoop block中的基于行存储的示例图 
        面向列存储的数据结构:我们先看一下Hadoop block中面向列存储的示例: 

                                                          Hadoop block中的面向列存储的示例图 
        在面向列的文件存储结构中,列A和列B存储在同一列组,而列C和列D分别存储在单独的列组。这种结构使得在查询时能够直接读取需要的列而避免不必要列的读取,并且对于相似数据也可以有一个更好的压缩比。但是他的缺点也想但明显,那就是由于元组重构的较高开销,它并不能提供基于Hadoop系统的快速查询处理,也不能保证不能保证同一记录的所有列都存储在同一集群节点之上,也适应高度动态的数据负载模式。 

        RCFile: 
        结合列存储和行存储的优缺点,Facebook于是提出了基于行列混合存储的RCFile,它是基于SEQUENCEFILE实现的列存储格式,它即满足快速数据加载和动态负载高适应的需求外,也解决了SEQUENCEFILE的一些瓶颈。该存储结构遵循的是“先水平划分,再垂直划分”的设计理念。先将数据按行水平划分为行组,这样一行的数据就可以保证存储在同一个集群节点;然后在对行进行垂直划分。 
        我们再来看一下HDFS块内RCFile方式存储的示例图: 

                                                             Hadoop block中的RCFile存储的示例图 
        RCFile是在Hadoop HDFS之上的存储结构,该结构强调: 
        1)、RCFile存储的表是水平划分的,分为多个行组,每个行组再被垂直划分,以便每列单独存储; 
        2)、RCFile在每个行组中利用一个列维度的数据压缩,并提供一种Lazy解压(decompression)技术来在查询执行时避免不必要的列解压; 
        3)、RCFile支持弹性的行组大小,行组大小需要权衡数据压缩性能和查询性能两方面。 
        每个HDFS block块中,RCFile以行组为基本单位来组织记录。也就是说,存储在一个HDFS块中的所有记录被划分为多个行组;对于一张表所有行组大小都相同,一个HDFS块会有一个或多个行组。 
        一个行组包括三个部分: 
        1)、第一部分是行组头部的同步标识,主要用于分隔HDFS块中的两个连续行组; 
        2)、第二部分是行组的元数据头部,用于存储行组单元的信息,包括行组中的记录数、每个列的字节数、列中每个域的字节数; 
        3)、第三部分是表格数据段,即实际的列存储数据。在该部分中,同一列的所有域顺序存储。从上图可以看出,首先存储了列A的所有域,然后存储列B的所有域等。 
        RCFile的每个行组中,元数据头部和表格数据段(每个列被独立压缩)分别进行压缩,RCFile使用重量级的Gzip压缩算法,是为了获得较好的压缩比。另外在由于Lazy压缩策略,当处理一个行组时,RCFile只需要解压使用到的列,因此相对较高的Gzip解压开销可以减少。 
        RCFile具备相当于行存储的数据加载速度和负载适应能力,在读数据时可以在扫描表格时避免不必要的列读取,它比其他结构拥有更好的性能,使用列维度的压缩能够有效提升存储空间利用率。

转载于:https://www.cnblogs.com/jerryshao2015/p/4419622.html

<think> 我们参考了用户提供的引用内容,特别是引用[1]和引用[2]中关于manage.rc和rcFile参数的使用说明。用户的问题是关于verdi工具中-rcFile参数未生效的解决方案。 根据引用内容,我们可以得知: - 使用-rcFile参数可以读入一个rc文件来预设设置,但是这种方法会被当前调用覆盖,导致下次启动Verdi时带有上次使用的痕迹(如打开波形文件的目录位置)[^2]。 - 而使用-managercFile参数配合manage.rc文件则可以管理多个rc文件,实现每次启动Verdi都载入预设设置,且不受上次保存设置的影响[^1]。 因此,如果用户遇到-rcFile参数未生效的情况,可能是由于以下原因: 1. 路径错误:指定的rc文件路径不正确,导致无法加载。 2. 文件权限问题:rc文件没有读取权限。 3. 文件内容错误:rc文件内容格式不正确,导致无法被正确解析。 4. 参数覆盖:在启动Verdi后,用户的操作覆盖了rc文件中的设置(特别是当使用-rcFile参数时,该文件会被后续操作覆盖)。 针对这些问题,我们可以提供以下解决方案: ### 解决方案 1. **检查rc文件的路径和权限**: - 确保指定的rc文件路径正确。如果使用相对路径,请确认相对路径的起点是当前工作目录。 - 使用绝对路径可以避免路径错误,例如:`-rcFile /home/user/settings.rc`。 - 确保该文件有读取权限。 2. **验证rc文件内容**: - 使用文本编辑器打开rc文件,检查其内容是否符合Verdi rc文件的格式要求。 - 可以尝试使用一个简单的rc文件(例如只包含设置字体的命令)来测试。 3. **避免文件被覆盖**: - 根据引用[2]中的说明,使用-rcFile参数加载的rc文件会被后续操作覆盖。因此,如果用户希望每次启动都是预设设置,建议改用manage.rc机制。 - 使用manage.rc文件的方法: - 创建一个manage.rc文件,内容参考引用[3]: ```ini @Manage rc file Version 1.0 [File] default_file = ~/load_only.rc # 预设的只读rc文件 working_file = ./novas.rc # 用于保存本次更改的rc文件 [Load] default_file [Save] working_file = MODIFIED_KEY ``` - 启动Verdi时使用命令:`verdi -managercFile /path/to/manage.rc` - 这样,每次启动都会加载`default_file`(预设设置),而本次修改会保存到`working_file`中,不会影响预设文件。 4. **检查Verdi版本**: - 确保使用的Verdi版本支持-rcFile参数(较老版本可能不支持,或者参数名称有差异)。 5. **查看日志**: - 启动Verdi时,查看终端输出是否有关于加载rc文件的错误信息。 ### 操作步骤 以使用manage.rc机制为例: 1. 创建预设的只读rc文件(例如`~/load_only.rc`),将你希望每次启动都生效的设置写入该文件。 2. 创建manage.rc文件(例如`~/manage.rc`),内容如上。 3. 启动Verdi时使用:`verdi -managercFile ~/manage.rc` 这样,每次启动都会加载`~/load_only.rc`中的设置,而本次会话的修改会保存到当前目录下的`novas.rc`文件中,不会影响预设设置。 如果用户坚持使用-rcFile参数,请注意每次启动后不要保存设置到该文件(避免覆盖),或者将该文件设为只读。 ### 相关问题 1. 如何创建和管理Verdi的预设配置文件? 2. Verdi的manage.rc文件有什么高级用法? 3. 如何调试Verdi启动时加载配置文件的问题? [^1]: 引用1 [^2]: 引用2 [^3]: 引用3 </think> 针对Verdi的`-rcFile`参数未生效问题,以下是系统化的解决方案,结合引用内容分析: ### 问题原因分析 1. **参数覆盖问题**(主要原因): 使用`-rcFile`加载的配置文件会被Verdi **自动覆盖更新**[^2]。这意味着: - 启动时加载预设配置 - 退出时自动保存当前设置(如窗口位置、波形路径等)到同一文件 - 下次启动时加载的是修改后的文件,导致预设失效 2. **文件权限/路径错误** - 配置文件路径错误或权限不足(无法读取) - 文件内容格式错误(如语法不兼容) 3. **参数冲突** 同时使用`-rcFile`和其他配置参数(如`-managercFile`)可能导致冲突 --- ### 解决方案 #### ✅ 最佳实践:改用`-managercFile`(推荐) 通过管理文件分离**预设配置**和**运行时配置**,彻底解决覆盖问题[^1]: ```bash verdi -managercFile ~/verdi_config/manage.rc ``` **manage.rc 文件示例**(需手动创建): ```ini @Manage rc file Version 1.0 [File] default_file = ~/verdi_config/load_only.rc # 只读预设配置 working_file = ./novas.rc # 运行时临时配置 [Load] default_file # 启动时加载预设 [Save] working_file = MODIFIED_KEY # 退出时保存到临时文件[^3] ``` **优势**: - 每次启动强制加载`load_only.rc`预设(不会被修改) - 用户操作产生的设置保存到`novas.rc`(不影响预设) - 需更新预设时,从`novas.rc`手动复制配置到`load_only.rc`[^2] --- #### ⚠️ 临时方案:锁定配置文件 若坚持使用`-rcFile`: 1. 将配置文件设为**只读**: ```bash chmod a-w ~/verdi_config/my_preset.rc ``` 2. 启动命令: ```bash verdi -rcFile ~/verdi_config/my_preset.rc ``` **缺点**:Verdi无法保存任何新设置(如窗口布局调整) --- #### 🔧 通用排查步骤 1. **检查文件路径** 确保路径无空格或特殊字符,建议使用**绝对路径** 2. **验证文件内容** 在配置文件中添加显式测试项(如:`OpenWindowGeometry 1200x800`) 3. **查看启动日志** 在终端运行`verdi`,观察是否报错: ``` Error: Cannot open rc file: /path/to/file.rc ``` 4. **版本兼容性** 较旧Verdi版本可能不支持`-rcFile`,升级至2018+版本 --- ### 配置建议 1. **预设文件内容**(`load_only.rc`示例): ```ini # 界面设置 SetTabSpace 4 SetFont "Courier New,12" # 波形窗口默认设置 AddSignal -color "red" [find "clk"] ``` 2. **避免冲突**: 不要同时使用`-rcFile`和`-managercFile` > 通过`managercFile`机制可完美实现:**每次启动加载固定预设** + **保存用户临时设置**的分离管理[^1][^3],彻底解决参数失效问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值