HBase&HDFS异构存储的使用&简单介绍
来源:互联网 发布:淘宝账号30天后被冻结 编辑:程序博客网 时间:2024/05/21 06:59
使用方式:
首先,开启hdfs异构存储策略,配置项是——dfs.storage.policy.enabled,该配置默认是开启的(true);
第二步,需要将机器物理硬件上已经部署好的磁盘配置添加到hdfs的配置项dfs.datanode.data.dir中,需要注意的对于SSD盘或者RAM_DISK需要打上特殊的标记,类似[SSD]、[RAM_DISK],配置示例如下:
<property> <name>dfs.datanode.data.dir</name> <value>file:///home/data/data/hadoop/dfs/data/data1,file:///home/data/data/hadoop/dfs/data/data2,file:///home/data/data/hadoop/dfs/data/data3,file:///home/data/data/hadoop/dfs/data/data4,file:///home/data/data/hadoop/dfs/data/data5,file:///home/data/data/hadoop/dfs/data/data6,file:///home/data/data/hadoop/dfs/data/data7,file:///home/data/data/hadoop/dfs/data/data8,file:///home/data/data/hadoop/dfs/data/data9,file:///home/data/data/hadoop/dfs/data/data10,file:///home/data/data/hadoop/dfs/data/data11,file:///home/data/data/hadoop/dfs/data/data12,[SSD]file:///home/data/data/hadoop/dfs/data/data13</value> <final>true</final></property>
上述配置所在的节点上共有13块盘,不同的硬盘挂载到不同的目录中,其中的第十三块盘是SSD盘,所以被标记为[SSD],如果不加此标记,则HDFS默认所有的盘都是[DISK]。
第三步,指定我们的目标目录存储到SSD盘上。
Hdfs的异构存储是受storage policy控制的,hdfs中共定义了5种不同的storage policy,列表如下:
Policy IDPolicy NameBlock Placement (n replicas)Fallback storages for creationFallback storages for replication15Lasy_PersistRAM_DISK: 1, DISK: n-1DISKDISK12All_SSDSSD: nDISKDISK10One_SSDSSD: 1, DISK: n-1SSD, DISKSSD, DISK7Hot (default)DISK: n<none>ARCHIVE5WarmDISK: 1, ARCHIVE: n-1ARCHIVE, DISKARCHIVE, DISK2ColdARCHIVE: n<none><none>
表格来自于hdfs的官方文档,其中列出了五种不同的storage policy,我们知道hdfs上的block块是多备份存储的,上表中的n就代表block备份的份数,大多数情况下都取为3,以All_SSD策略为例,表示该文件下所属block块的3副本都保存在SSD盘上,如下图中所示:
与ALL_SSD不同的是,ONE_SSD将多副本中的一份放置到SSD上,其它仍然在普通DISK中。
Lazy_Persist策略,如果文件被设置为Lazy_Persist策略,当客户端向该文件发起读写请求,客户端写入的数据会首先被相应Block块的DataNode写入到自己的RAM内存中,同时DN会启动异步线程服务将内存中的数据持久化到磁盘上。这里用到了Linux的RAM disk技术,简单来说就是将内存模拟为一块磁盘,供操作系统读写数据。
Warm&Cold策略,分别适用于温数据和冷数据的存储方案,使用到的ARCHIVE代表的是计算能力比较弱而存储密度比较高的存储介质,如果用户将HDFS上的目录storage policy标记为WARM或COLD,则HDFS会根据将不同storeage policy数据存放在不同的存储介质上,如果是CLOD,数据全部位于ARCHIVE中,WRAM介于hot和cold之间,有一份数据放在DISK上。
hdfs支持在文件使用过程中灵活改变文件的storage policy,hdfs列出了几个storage policy相关的命令,用户可输入hdfs storagepolicies -help查看,如下所示:
$ hdfs storagepolicies -help[-listPolicies]List all the existing block storage policies.[-setStoragePolicy -path <path> -policy <policy>]Set the storage policy to a file/directory.<path> The path of the file/directory to set storage policy<policy> The name of the block storage policy[-getStoragePolicy -path <path>]Get the storage policy of a file/directory.<path> The path of the file/directory for getting the storage policy
其中setStoragePolicy用于指定文件或目录按照-policy指定的storage policy进行存储,getStoragePolicy用于获取path指定的文件或目录的storage policy。
最后,策略生效,使用上述命令将文件或目录的存储策略指定为你需要的策略后,接下来就是让策略生效了,hdfs中提供了一个新的数据迁移工具mover,mover与balancer工具相似都是周期触发的,运行时,它会扫描hdfs中各个文件的block以确认该block块的当前存储是否满足用户指定的storage policy,对于那些storage policy发生变化的block块,该工具会将对应的block块进行迁移。
$ hdfs mover -helpUsage: hdfs mover [-p <files/dirs> | -f <local file>]-p <files/dirs>a space separated list of HDFS files/dirs to migrate.-f <local file>a local file containing a list of HDFS files/dirs to migrate.Generic options supported are-conf <configuration file> specify an application configuration file-D <property=value> use value for given property-fs <local|namenode:port> specify a namenode-jt <local|resourcemanager:port> specify a ResourceManager-files <comma separated list of files> specify comma separated files to be copied to the map reduce cluster-libjars <comma separated list of jars> specify comma separated jar files to include in the classpath.-archives <comma separated list of archives> specify comma separated archives to be unarchived on the compute machines.The general command line syntax isbin/hadoop command [genericOptions] [commandOptions]
下面讲讲hbase如何利用上述hdfs的异构存储特性
HBase-12848(Utilize Flash storage for WAL)是1.1.0新推出的特性,它可以将WAL单独置于SSD上,配置方式是将如下的配置做相应修改:
hbase.wal.storage.policy
该配置的默认值是NONE,也就是wal文件和数据都存储在DISK上,不做区分,可以修改为ONE_SSD或者ALL_SDD,不同在于:
ONE_SSD:wal的一个副本置于SSD上,而其他副本仍然在默认存储;
ALL_SSD:wal文件的所有副本都存储于SSD盘上;
HBase实现异构wal存储很简单,底层依赖的就是hdfs的异构storage策略,不过是将wal文件所在的目录经反射调用dfs client的setStoragePolicy方法设置为用户指定的policy,主要代码如下:
public static void setStoragePolicy(final FileSystem fs, final Configuration conf, final Path path, final String policyKey, final String defaultPolicy) { String storagePolicy = conf.get(policyKey, defaultPolicy).toUpperCase(); if (!storagePolicy.equals(defaultPolicy) && fs instanceof DistributedFileSystem) { DistributedFileSystem dfs = (DistributedFileSystem)fs; Class<? extends DistributedFileSystem> dfsClass = dfs.getClass(); Method m = null; try { m = dfsClass.getDeclaredMethod("setStoragePolicy", new Class<?>[] { Path.class, String.class }); m.setAccessible(true); } catch (NoSuchMethodException e) { LOG.info("FileSystem doesn't support" + " setStoragePolicy; --HDFS-7228 not available"); } catch (SecurityException e) { LOG.info("Doesn't have access to setStoragePolicy on " + "FileSystems --HDFS-7228 not available", e); m = null; // could happen on setAccessible() } if (m != null) { try { m.invoke(dfs, path, storagePolicy); LOG.info("set " + storagePolicy + " for " + path); } catch (Exception e) { LOG.warn("Unable to set " + storagePolicy + " for " + path, e); } } }}
0 0
- HBase&HDFS异构存储的使用&简单介绍
- 【Hbase】ubuntu下单节点安装hbase存储使用hdfs
- 【Hbase】ubuntu下单节点安装hbase存储使用hdfs
- HBase 数据文件在HDFS上的存储
- HBase 数据文件在HDFS上的存储
- HBase 数据文件在HDFS上的存储
- HBase 数据文件在HDFS上的存储
- HDFS异构存储
- HDFS异构存储
- hdfs异构存储
- How Hbase store data in HDFS 数据在Hbase上的存储形式,Hbase 知识点概述
- 清理Kylin的中间存储数据(HDFS & HBase Tables)
- 清理Kylin的中间存储数据(HDFS & HBase Tables)
- HDFS简单介绍汇总
- HDFS 简单介绍
- hdfs简单介绍
- HBase API的简单的介绍
- HBase与HDFS结合使用
- zoj 3623 背包
- 关联规则FpGrowth算法
- 帝国cms入门标签
- fastboot代码 engine.c之理解
- Fatal error encountered during command execution
- HBase&HDFS异构存储的使用&简单介绍
- wordpress 通过文章ID 获取文章标题等信息
- python def 定义函数(一)
- VS code当前设置备份
- C#中的get和set
- Java实现网络爬虫入门Demo
- WordPress 密码重置提示 您的密码重设链接无效,请在下方请求新链接 解决方案
- bzoj2599: [IOI2011]Race 点分治
- 统计学习精要 (Elements of Statistical Learning ) 习题 3.21