.]
在例子中 "acdd15c7050ec597b484b30b7c744a93" 是 "testtable,DEF,1428681822728" 的 MD5 哈希值。HRegionInfo 的 getEncodedName() 方法返回的 仅仅是这个哈希值,而不是可读的前缀。 这个哈希值本身用于系统在存储层内创建底层文件结构。例如,列出 HBase 存储目录内容时会看到例子中的 region 哈希值,在存储路径中: $ bin/hdfs dfs -ls -R /hbase drwxr-xr-x - larsgeorge supergroup 0 2015-04-10 18:03 /hbase/data/default/testtable/acdd15c7050ec597b484b30b7c744a93/colfam1
region creation timestamp 在一个 region 创建时产生,例如,当一个表创建时,或者一个存在的 region 拆分时。 server name: 也是几个不同部分的组合,包括主机名称: ,, server start time 用于处理在同一物理机器上多个进程。 ServerName 类将细节封装到一个方便的结构中。有些 API 调用要求接收该类的一个实例,可以直接创建该类的实例,但实践方法是通过 API 获取一个 存在的实例,例如,使用 getServerName() 方法。
1.3 表属性 (Table Properties) ----------------------------------------------------------------------------------------------------------------------------------------- 表描述符提供了 getter 和 setter 来设置表的很多选项。由于可以通过这些选项调节表的性能,因此了解它们很重要。按选项影响的属性将这些方法分组 讨论:
● 表名 (Name) ------------------------------------------------------------------------------------------------------------------------------------- 构造器已经有了指定 table name 的参数,Java API 有另外的方法可以访问表的名称:
TableName getTableName() String getNameAsString()
这两个方法返回表的名称。
● 列族 (Column Families) ------------------------------------------------------------------------------------------------------------------------------------- 这是一个表定义最重要的部分。创建表时需要指定想要使用的列族(column families):
HTableDescriptor addFamily(final HColumnDescriptor family) HTableDescriptor modifyFamily(final HColumnDescriptor family) HColumnDescriptor removeFamily(final byte[] column) HColumnDescriptor getFamily(final byte[] column) boolean hasFamily(final byte[] familyName) Set getFamiliesKeys() HColumnDescriptor[] getColumnFamilies() Collection getFamilies()
可以添加列族,修改列族,检查其是否存在,获取所有列族的列表,以及获取或移除一个列族。
● 最大文件大小 (Maximum File Size) ------------------------------------------------------------------------------------------------------------------------------------- 这个参数限制了表中 region 可以增长的大小。文件大小由字节单位设置,通过如下方法读取和这种: long getMaxFileSize() HTableDescriptor setMaxFileSize(long maxFileSize)
最大文件大小在 region 增长到配置的限制时帮助切分 region. 在 HBase 中,扩展和负载均衡单元就是 region. 因此用户需要确定设置这个值为多少 合适。默认情况下,该值设为 10 GB(实际的值为 10737418240, 因为以字节为单位,这个值在默认配置文件的 hbase.hregion.max.filesize 属性设置) 这个值对于大多数场景都是合适的。
● Memstore 刷写大小 (Memstore Flush Size) ------------------------------------------------------------------------------------------------------------------------------------- 之前讨论过存储模型,并指出 HBase 利用一个 in-memory 存储来缓存数据,在某个操作中将数据作为一个新的存储文件写入磁盘,这个过程称为刷写( flush). 这个参数用于控制何时进行刷写操作,单位为字节。通过如下方法控制: long getMemStoreFlushSize() HTableDescriptor setMemStoreFlushSize(long memstoreFlushSize)
默认值为 128 MB(默认配置文件中,由属性 hbase.hregion.memstore.flush.size 设置为 134217728 bytes)。
● Memstore 刷写大小 (Compactions) ------------------------------------------------------------------------------------------------------------------------------------- 可以设置每个表的底层存储文件是否将压缩作为自动处理的一部分。利用如下方法设置和读取该标记: boolean isCompactionEnabled() HTableDescriptor setCompactionEnabled(final boolean isEnable)
● 拆分策略 (Split Policy) ------------------------------------------------------------------------------------------------------------------------------------- 除了设置 maximum file size ,还可以进一步影响 region 拆分。使用如下方法设置一个不同的拆分策略类,会覆盖系统范围设定的拆分策略,该策略由 默认配置文件的 hbase.regionserver.region.split.policy 属性设置: HTableDescriptor setRegionSplitPolicyClassName(String clazz) String getRegionSplitPolicyClassName()
● Region 复本数 (Region Replicas) ------------------------------------------------------------------------------------------------------------------------------------- 为表设置 region 复本数。默认为 1,意为着只有一个主 region. 例如,将该属性设置为 2,会为这个表的每个 region 添加另外一个复本。由表描述 符的如下方法控制: int getRegionReplication() HTableDescriptor setRegionReplication(int regionReplication)
● Durability ------------------------------------------------------------------------------------------------------------------------------------- 在表级别控制数据持久化 durability 方面的保证。 通过如下方法控制:
HTableDescriptor setDurability(Durability durability) Durability getDurability()
● 只读 (Read-only) ------------------------------------------------------------------------------------------------------------------------------------- 默认情况下,所有表都是可写的(writable), 但将某个特殊表设定为只读选项有时是有意义的。如果该参数设为 true, 只能从这个表中读取数据而不能 修改它。 通过如下方法控制: boolean isReadOnly() HTableDescriptor setReadOnly(final boolean readOnly)
● 协处理器 (Coprocessors) ------------------------------------------------------------------------------------------------------------------------------------- 下面列出可以为表配置协处理器的方法调用。这些方法可以在当前表描述符实例上添加、检查、列出、以及移除协处理器的方法:
HTableDescriptor addCoprocessor(String className) throws IOException HTableDescriptor addCoprocessor(String className, Path jarFilePath, int priority, final Map kvs) throws IOException boolean hasCoprocessor(String className) List getCoprocessors() void removeCoprocessor(String className)
● 描述符参数 (Descriptor Parameters) ------------------------------------------------------------------------------------------------------------------------------------- 如下方法可用于设置任意的 key/value 对: byte[] getValue(byte[] key) String getValue(String key) Map getValues() HTableDescriptor setValue(byte[] key, byte[] value) HTableDescriptor setValue(final ImmutableBytesWritable key, final ImmutableBytesWritable value) HTableDescriptor setValue(String key, String value) void remove(final String key) void remove(ImmutableBytesWritable key) void remove(final byte[] key)
● 配置 (Configuration) ------------------------------------------------------------------------------------------------------------------------------------- 允许用户在每个表的基础上,覆盖任何 HBase 配置属性。在运行时它会与默认值,以及集群范围的配置文件合并。注意只有与 region 和 table 相关的 属性设置有用。其它不相关的属性不会起作用,即便覆盖了它们。
String getConfigurationValue(String key) Map getConfiguration() HTableDescriptor setConfiguration(String key, String value) void removeConfiguration(final String key)
● 杂项调用 (Miscellaneous Calls) ------------------------------------------------------------------------------------------------------------------------------------- boolean isRootRegion() boolean isMetaRegion() boolean isMetaTable() String toString() String toStringCustomizedValues() String toStringTableAttributes()
1.4 列族 (Column Families) ----------------------------------------------------------------------------------------------------------------------------------------- 我们已经看到 HTableDescriptor 类提供的方法向一个表中添加列族。与此相关,HColumnDescriptor 类封装了每个列族的设置。
NOTE ------------------------------------------------------------------------------------------------------------------------------------- 在 Java 中这个类的名称有点儿词不达意。更适合的名称应该为 HColumnFamilyDescriptor, 这样才能给表达定义列族属性的真正含义。
列族定义了在其中创建的所有列的公共特征。客户端通过列限定符(column qualifier)可以在其中创建任意数量的列。定位某一列可以联合列族名称和列限 定符(有时也称为 column key),其间由冒号(:)分隔:
`family:qualifier`
列族名称必须是由可打印字符组成,并且不能以冒号(:)开始,或者完全为空。列限定符(column qualifier) 可以由任意的二进制字节组成。回顾之前提到 过的 Bytes 类,可以利用它将选择的名称转换为字节数组。列族名称必须是由可打印字符组成的原因是,这个名称会用作低级存储层目录的一部分。列族名 被加入到路径中,并且必须遵循文件名规范。
也需要对空列限定符(empty column qualifier)有所了解。可以简单地忽略限定符而只适应列族名,HBase 使用特殊的空限定符创建该列。用户可以读写这 个列,就像其它列一样,但很明显,一个列族内只能有一个这样的列,必须给其它列命名以与该列区别。对于简单的应用,使用没有限定符是一种选择,但 在查看数据时没什么意义,例如,使用 HBase shell.
应该在一开始时就给列命名,因为不能在之后简单地重命名列限定符。
使用 HBase Shell, 尝试创建一个没有名称的列:
hbase(main):001:0> create 'testtable', 'colfam1' 0 row(s) in 0.1400 seconds
=> Hbase::Table - testtable hbase(main):002:0> put 'testtable', 'row1', 'colfam1:', 'val1' 0 row(s) in 0.1130 seconds
hbase(main):003:0> scan 'testtable' ROW COLUMN+CELL row1 column=colfam1:, timestamp=1428488894611, value=val1 1 row(s) in 0.0590 seconds
hbase(main):004:0> create 'testtable', 'col/fam1'
ERROR: Illegal character <47>. Family names cannot contain control characters or colons: col/fam1 Here is some help for this command: ...
可以使用静态的帮助方法验证名称:
static byte[] isLegalFamilyName(final byte[] b)
在自己的程序中使用该方法验证用户提供的输入是否遵循名称规范。这个方法不返回 boolean 标志,而是在名称非法时抛出 IllegalArgumentException 异常,如果合法,它直接返回给定的参数值。
NOTE ------------------------------------------------------------------------------------------------------------------------------------- 列族不能重命名。重命名一个列族一般的方法是,使用新名创建一个新的列族,然后使用 API 将数据拷贝到新列族中去. 创建列族时,有多个构造器可以创建实例:
HColumnDescriptor(final String familyName) HColumnDescriptor(final byte[] familyName) HColumnDescriptor(HColumnDescriptor desc) 前两个构造器简单地接收 String 类型或 byte[] 数组类型的 familyName. 另外一个接收一个已存在的 HColumnDescriptor 实例,从其中拷贝所有状态和 设置创建新实例。不通过构造器,也可以使用 getter 和 setter 来设置各种细节信息,下面按其作用分组讨论: ● 列族名称 (Name) ------------------------------------------------------------------------------------------------------------------------------------- 每个列族都有一个名称,并且可以使用如下方法从一个已存在的 HColumnDescriptor 实例上获取到该名称: byte[] getName(); String getNameAsString(); 不能设置列族名称,但可以通过构造器设定它。 NOTE --------------------------------------------------------------------------------------------------------------------------------- 列族名称不能以句点(.)开始,并且不能包含冒号(:), 斜线(/), 或者 ISO 控制符。 ● 最大版本数 (Maximum Versions) ------------------------------------------------------------------------------------------------------------------------------------- 对于每个列族,可以设定每个值可以保留的版本数量。HBase 的内部管理会移除超出最大版本数的数据。通过如下方法获取或设置该值: int getMaxVersions() HColumnDescriptor setMaxVersions(int maxVersions)
默认值为 1,由 hbase.column.max.version 配置属性设置。默认值适用于大多数应用场景。如果需要,可以增加这个数量,例如,对于存储密码的列, 可以将这个值设为 10 来保留使用过的密码历史。 ● 最小版本数 (Minimum Versions) ------------------------------------------------------------------------------------------------------------------------------------- 指定一个列总是保留的版本数量。这个值与 time-to-live 配合使用,避免移除列中最后存储的值。默认值为 0,意为禁用该特性: int getMinVersions() HColumnDescriptor setMinVersions(int minVersions) ● 保留删除的单元 (Keep Deleted Cells) ------------------------------------------------------------------------------------------------------------------------------------- 控制后台 housekeeping 进程是否移除已删除的 cell: KeepDeletedCells getKeepDeletedCells() HColumnDescriptor setKeepDeletedCells(boolean keepDeletedCells) HColumnDescriptor setKeepDeletedCells(KeepDeletedCells keepDeletedCells) 使用的 KeepDeletedCells 是个枚举类型,有如下选项: The KeepDeletedCells enumeration +-------+-------------------------------------------------------------------------------------------------------------------------- | Value | Description +-------+-------------------------------------------------------------------------------------------------------------------------- | FALSE | Deleted cells are not retained. +-------+-------------------------------------------------------------------------------------------------------------------------- | TRUE | Deleted cells are retained until they are removed by other means such as time-to-live (TTL) or the max number of versions. | | If no TTL is specified or no new versions of delete cells are written, they are retained forever +-------+-------------------------------------------------------------------------------------------------------------------------- | TTL | Deleted cells are retained until the delete marker expires due to TTL. This is useful when TTL is combined with the number | | of minimum versions, and you want to keep a minimum number of versions around, but at the same time remove deleted cells | | after the TTL. +-------+-------------------------------------------------------------------------------------------------------------------------- 默认值为 FALSE, 意为在 housekeeping 操作期间,不保留已删除的 cell. ● 压缩 (Compression) ------------------------------------------------------------------------------------------------------------------------------------- HBase 支持插件式压缩算法,允许用户为存储在特定列族中的数据选择最合适的压缩算法,或者选择不压缩。可用的算法列于下表: Supported compression algorithms +-------+------------------------------------------------------------------------------------------- | Value | Description +-------+------------------------------------------------------------------------------------------- | NONE | Disables compression (default). +-------+------------------------------------------------------------------------------------------- | GZ | Uses the Java-supplied or native GZip compression (which needs to be installed separately). +-------+------------------------------------------------------------------------------------------- | LZO | Enables LZO compression; must be installed separately +-------+------------------------------------------------------------------------------------------- | LZ4 | Enables LZ4 compression; must be installed separately +-------+------------------------------------------------------------------------------------------- | SNAPPY| Enables Snappy compression; binaries must be installed separately +-------+------------------------------------------------------------------------------------------- 默认值为 NONE, 换句话说,创建列族时没有启用压缩。使用 API 和列描述符实例,可以通过如下方法改变设置: Compression.Algorithm getCompression() Compression.Algorithm getCompressionType() HColumnDescriptor setCompressionType(Compression.Algorithm type) Compression.Algorithm getCompactionCompression() Compression.Algorithm getCompactionCompressionType() HColumnDescriptor setCompactionCompressionType(Compression.Algorithm type) 注意参数类型为 Compression.Algorithm 枚举类型,其选项为上表所列。另外注意到的是,这里有两套方法,一套是常规的压缩(general compression) 设置,另一套是紧凑压缩(compaction compression)设置。 ● 编码 (Encoding) ------------------------------------------------------------------------------------------------------------------------------------- 设置数据块的编码。如果启用,可以进一步影响是否使用相同的设置应用到 cell 标记(tag). 方法如下: DataBlockEncoding getDataBlockEncoding() HColumnDescriptor setDataBlockEncoding(DataBlockEncoding type) 这两个方法控制使用的编码类型,使用的 DataBlockEncoding 枚举类型包含如下选项: Options of the DataBlockEncoding enumeration +---------------+------------------------------------------------------------------------------------------ | Option | Description +---------------+------------------------------------------------------------------------------------------ | NONE | No prefix encoding takes place (default). +---------------+------------------------------------------------------------------------------------------ | PREFIX | Represents the prefix compression algorithm, which removes repeating common prefixes | | from subsequent cell keys. +---------------+------------------------------------------------------------------------------------------ | DIFF | The diff algorithm, which further compresses the key of subsequent cells by storing | | only differences to previous keys. +---------------+------------------------------------------------------------------------------------------ | FAST_DIFF | An optimized version of the diff encoding, which also omits repetitive cell value data +---------------+------------------------------------------------------------------------------------------ | PREFIX_TREE | Trades increased write time latencies for faster read performance. Uses a tree structure | | to compress the cell key. +---------------+------------------------------------------------------------------------------------------ 除了为每个 cell key 设置编码之外,cell 可能会携带用于不同目的的标记列表(list of tags), 例如安全信息和 cell 级别的 TTL 等。下面的方法可以设置是否将编码属性也应用到这些标记上: HColumnDescriptor setCompressTags(boolean compressTags) boolean isCompressTags() 默认值为 true, 因此所有可选的 cell 标记也作为整个 cell 编码的一部分编码。 ● 块大小 (Block Size) ------------------------------------------------------------------------------------------------------------------------------------- HBase 中,在 get() 或 scan() 操作期间,所有存储文件都被划分为很小的数据块载入,类似于 RDBMS 中的页(page)。数据块大小默认被设置为 64KB 可以通过如下方法调整: synchronized int getBlocksize() HColumnDescriptor setBlocksize(int s)
该值以字节为单位设置,用于控制在获取数据时,要求 HBase 从存储文件中一次读取多少数据放入到内存中缓存起来,以用于后续的访问。
NOTE --------------------------------------------------------------------------------------------------------------------------------- 注意,列族的数据块大小,或者说是 HFile 块大小,与 HDFS 级别的数据块大小之间有着重要的区别。Hadoop 和 HDFS 使用的数据块大小,默认 为 128 MB,用于拆分较大的文件以提供分布式存储,以便于 YARN 框架进行并发处理。对于 HBase, HFile 数据块大小,默认为 64 KB, 是 HDFS 数据块大小的 2048 分之一,是为了在块操作中高效加载和缓存数据,与 HDFS 块大小不相关,并且只为内部使用。
● 块缓存 (Block Cache) ------------------------------------------------------------------------------------------------------------------------------------- 由于为了高效利用 I/O, HBase 读取整块的数据到内存中缓存下来,这样后续的读取就不需要任何的磁盘操作。默认为 true, 为每次读取操作启用块缓 存。但如果用户的应用场景是要顺序地读取某个列族,最好将这个属性设置为 false, 从而禁止其使用块缓存。下列方法用于控制该属性: boolean isBlockCacheEnabled() HColumnDescriptor setBlockCacheEnabled(boolean blockCacheEnabled) 还有其它方法可用于影响块缓存的使用,例如,在 scan() 操作时,可以通过 setCacheBlocks(false) 调用来禁用块缓存。这在全表扫描时很有用,这 样就不会搞乱缓存。 除了缓存本身,也可以配置系统的行为:数据被写入时,存储文件要关闭或打开时,下列方法定义这些属性: boolean isCacheDataOnWrite() HColumnDescriptor setCacheDataOnWrite(boolean value) boolean isCacheDataInL1() HColumnDescriptor setCacheDataInL1(boolean value) boolean isCacheIndexesOnWrite() HColumnDescriptor setCacheIndexesOnWrite(boolean value) boolean isCacheBloomsOnWrite() HColumnDescriptor setCacheBloomsOnWrite(boolean value) boolean isEvictBlocksOnClose() HColumnDescriptor setEvictBlocksOnClose(boolean value) boolean isPrefetchBlocksOnOpen() HColumnDescriptor setPrefetchBlocksOnOpen(boolean value) 注意,目前为止,这些属性默认设置为 false, 意为这些属性都没有激活,除非某个列族启用它们。 ● 生存期 (Time-to-Live) ------------------------------------------------------------------------------------------------------------------------------------- HBase 支持每个值在版本数量上断言删除,也支持基于时间的删除。生存期(time-to-live, TTL) 设置了一个基于时间戳的临界值,内部管理(internal housekeeping)程序自动检查值的生存期是否超过其 TTL 设置。如果超出,会在 major 合并过程中丢弃这个数据。下面的方法用于读写 TTL: int getTimeToLive() HColumnDescriptor setTimeToLive(int timeToLive) 该值以秒为单位指定,默认值为 HConstants.FOREVER, 设置为 Integer.MAX_VALUE, 即 2,147,483,647 秒,意为永远保留该数据,即任何小于该默认 值的正数都会启用该特性。 ● 在内存中 (In-Memory) ------------------------------------------------------------------------------------------------------------------------------------- 之前提到过快缓存,以及如何利用块缓存来将整块的数据保留在内存中,以提高顺序访问数据的效率。in-memory 标志默认为 false, 但可以通过如下 方法读取或修改该属性: boolean isInMemory() HColumnDescriptor setInMemory(boolean inMemory) 将该值设为 true 并不能保证整个列族的所有数据块载入到内存中,也不能保证其一直保留。把它当做承诺,或者较高的优先级,只要在正常的获取操作, 就会将数据载入保留到内存中,直到堆内存的压力太大,这时就需要丢掉它们。 ● 布隆过滤器 (Bloom Filter) ------------------------------------------------------------------------------------------------------------------------------------- 布隆过滤器是 HBase 系统的高级功能,它通过特定访问模式减少查询时间。虽然会增加存储和内存占用的开销,但会提升查找和读取性能。 Supported Bloom Filter Types +-----------+-------------------------------------------------------------------------------------------------------------- | Type | Description +-----------+-------------------------------------------------------------------------------------------------------------- | NONE | Disables the filter. +-----------+-------------------------------------------------------------------------------------------------------------- | ROW | Use the row key for the filter (default). +-----------+-------------------------------------------------------------------------------------------------------------- | ROWCOL | Use the row key and column key (family+qualifier) for the filter +-----------+--------------------------------------------------------------------------------------------------------------
从 HBase 0.96 开始,对所有用户表的所有列族默认设置为 ROW, 对系统目录表没有启用该功能。 可以通过如下方法获取或改变布隆过滤器,其中 BloomType 枚举类型如上表所示: BloomType getBloomFilterType() HColumnDescriptor setBloomFilterType(final BloomType bt) ● 复制范围 (Replication Scope) ------------------------------------------------------------------------------------------------------------------------------------- HBase 的另一个高级功能时复制(replication)。它提供了跨集群同步的功能,本地集群的数据更新可以及时同步到其它集群。默认情况下,复制功能是 禁用的,复制范围(replication scop) 设置为 0,意为禁用复制功能。可以通过如下方法改变设置: int getScope() HColumnDescriptor setScope(int scope)
另一个支持的值是 1,意为启用到远程集群的复制。 Supported Replication Scopes +-------+---------------------------+---------------------------------------------------------------- | Scope | Constant | Description +-------+---------------------------+---------------------------------------------------------------- | 0 | REPLICATION_SCOPE_LOCAL | Local scope, i.e., no replication for this family (default). +-------+---------------------------+------------------------------------------------------------------- | 1 | REPLICATION_SCOPE_GLOBAL | Global scope, i.e., replicate family to a remote cluster. +-------+---------------------------+----------------------------------------------------------------
● 加密 (Encryption) ------------------------------------------------------------------------------------------------------------------------------------- 设置加密相关的信息,方法如下: String getEncryptionType() HColumnDescriptor setEncryptionType(String algorithm) byte[] getEncryptionKey() HColumnDescriptor setEncryptionKey(byte[] keyBytes)
● 描述符参数 (Descriptor Parameters) ------------------------------------------------------------------------------------------------------------------------------------- 下列方法用于设置任意的 key/value 对属性: byte[] getValue(byte[] key) String getValue(String key) Map getValues() HColumnDescriptor setValue(byte[] key, byte[] value) HColumnDescriptor setValue(String key, String value) void remove(final byte[] key)
可以利用这些方法访问所有配置的值,以上提及的所有方法都是通过这个列表中的方法设置它们的参数的。这些方法的另一个应用场景是,用于存储应用 相关的元数据(metadata), 因为它们持久化到服务器上,因此之后可以由客户端读取。
● 配置 (Configuration) ------------------------------------------------------------------------------------------------------------------------------------- 允许用户在列族级别覆盖任何 HBase 的配置属性。这些属性在运行时与默认值、集群范围的配置文件、以及表级别的设置合并。注意,只有与 region 或 table 相关的属性可以设置,其它不相关属性,即便已被覆盖,也不会读取。
方法如下: String getConfigurationValue(String key) Map getConfiguration() HColumnDescriptor setConfiguration(String key, String value) void removeConfiguration(final String key)
● 杂项调用 (Miscellaneous Calls) ------------------------------------------------------------------------------------------------------------------------------------- static Unit getUnit(String key) static Map getDefaultValues() String toString() String toStringCustomizedValues()
目前支持的 Unit 只有 TTL。
下面的示例利用 API 创建了一个描述符,设置自定义属性,并以各种方法打印出来:
示例: Example how to create a HColumnDescriptor in code
HColumnDescriptor desc = new HColumnDescriptor("colfam1") .setValue("test-key", "test-value") .setBloomFilterType(BloomType.ROWCOL);
System.out.println("Column Descriptor: " + desc); System.out.print("Values: ");
for (Map.Entry entry : desc.getValues().entrySet()) { System.out.print(Bytes.toString(entry.getKey().get()) + " -> " + Bytes.toString(entry.getValue().get()) + ", "); }
System.out.println(); System.out.println("Defaults: " + HColumnDescriptor.getDefaultValues()); System.out.println("Custom: " + desc.toStringCustomizedValues()); System.out.println("Units:"); System.out.println(HColumnDescriptor.TTL + " -> " + desc.getUnit(HColumnDescriptor.TTL)); System.out.println(HColumnDescriptor.BLOCKSIZE + " -> " + desc.getUnit(HColumnDescriptor.BLOCKSIZE));
输出结果:
Column Descriptor: {NAME => 'colfam1', DATA_BLOCK_ENCODING =>'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0',COMPRESSION => 'NONE', VERSIONS => '1', TTL => 'FOREVER', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true', METADATA => {'test-key' => 'test-value'}} Values: DATA_BLOCK_ENCODING -> NONE, BLOOMFILTER -> ROWCOL, REPLICATION_SCOPE -> 0, COMPRESSION -> NONE, VERSIONS -> 1, TTL -> 2147483647, MIN_VERSIONS -> 0, KEEP_DELETED_CELLS -> FALSE,BLOCKSIZE -> 65536, IN_MEMORY -> false, test-key -> test-value, BLOCKCACHE -> true Defaults: {CACHE_BLOOMS_ON_WRITE=false, CACHE_DATA_IN_L1=false, PREFETCH_BLOCKS_ON_OPEN=false, BLOCKCACHE=true, CACHE_INDEX_ON_WRITE=false, TTL=2147483647, DATA_BLOCK_ENCODING=NONE,BLOCKSIZE=65536, BLOOMFILTER=ROW, EVICT_BLOCKS_ON_CLOSE=false, MIN_VERSIONS=0, CACHE_DATA_ON_WRITE=false, KEEP_DELETED_CELLS=FALSE,COMPRESSION=none, REPLICATION_SCOPE=0, VERSIONS=1, IN_MEMORY= false} Custom: {NAME => 'colfam1', BLOOMFILTER => 'ROWCOL', METADATA => {'test-key' => 'test-value'}} Units: TTL -> TIME_INTERVAL BLOCKSIZE -> NONE
table 描述符中使用的序列化方法,在列族描述符中也存在,用于通过 RPC 发送经过配置的实例:
byte[] toByteArray() static HColumnDescriptor parseFrom(final byte[] bytes) throws DeserializationException static HColumnDescriptor convert(final ColumnFamilySchema cfs) ColumnFamilySchema convert()
参考:
《HBase - The Definitive Guide - 2nd Edition》Early release —— 2015.7 Lars George
你可能感兴趣的:(HBase)
nosql数据库技术与应用知识点
皆过客,揽星河
NoSQL nosql 数据库 大数据 数据分析 数据结构 非关系型数据库
Nosql知识回顾大数据处理流程数据采集(flume、爬虫、传感器)数据存储(本门课程NoSQL所处的阶段)Hdfs、MongoDB、HBase等数据清洗(入仓)Hive等数据处理、分析(Spark、Flink等)数据可视化数据挖掘、机器学习应用(Python、SparkMLlib等)大数据时代存储的挑战(三高)高并发(同一时间很多人访问)高扩展(要求随时根据需求扩展存储)高效率(要求读写速度快)
浅谈MapReduce
Android路上的人
Hadoop 分布式计算 mapreduce 分布式 框架 hadoop
从今天开始,本人将会开始对另一项技术的学习,就是当下炙手可热的Hadoop分布式就算技术。目前国内外的诸多公司因为业务发展的需要,都纷纷用了此平台。国内的比如BAT啦,国外的在这方面走的更加的前面,就不一一列举了。但是Hadoop作为Apache的一个开源项目,在下面有非常多的子项目,比如HDFS,HBase,Hive,Pig,等等,要先彻底学习整个Hadoop,仅仅凭借一个的力量,是远远不够的。
hbase介绍
CrazyL-
云计算+大数据 hbase
hbase是一个分布式的、多版本的、面向列的开源数据库hbase利用hadoophdfs作为其文件存储系统,提供高可靠性、高性能、列存储、可伸缩、实时读写、适用于非结构化数据存储的数据库系统hbase利用hadoopmapreduce来处理hbase、中的海量数据hbase利用zookeeper作为分布式系统服务特点:数据量大:一个表可以有上亿行,上百万列(列多时,插入变慢)面向列:面向列(族)的
Apache HBase基础(基本概述,物理架构,逻辑架构,数据管理,架构特点,HBase Shell)
May--J--Oldhu
HBase HBase shell hbase物理架构 hbase逻辑架构 hbase
NoSQL综述及ApacheHBase基础一.HBase1.HBase概述2.HBase发展历史3.HBase应用场景3.1增量数据-时间序列数据3.2信息交换-消息传递3.3内容服务-Web后端应用程序3.4HBase应用场景示例4.ApacheHBase生态圈5.HBase物理架构5.1HMaster5.2RegionServer5.3Region和Table6.HBase逻辑架构-Row7.
HBase(一)——HBase介绍
weixin_30595035
大数据 数据库 数据结构与算法
HBase介绍1、关系型数据库与非关系型数据库(1)关系型数据库关系型数据库最典型的数据机构是表,由二维表及其之间的联系所组成的一个数据组织优点:1、易于维护:都是使用表结构,格式一致2、使用方便:SQL语言通用,可用于复杂查询3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询缺点:1、读写性能比较差,尤其是海量数据的高效率读写2、固定的表结构,灵活度稍欠3、高并发读写需求,传统关
HBase介绍
mingyu1016
数据库
概述HBase是一个分布式的、面向列的开源数据库,源于google的一篇论文《bigtable:一个结构化数据的分布式存储系统》。HBase是GoogleBigtable的开源实现,它利用HadoopHDFS作为其文件存储系统,利用HadoopMapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务。HBase的表结构HBase以表的形式存储数据。表有行和列组成。列划分为
Hbase - 迁移数据[导出,导入]
kikiki5
>有没有这样一样情况,把一个集群中的某个表导到另一个群集中,或者hbase的表结构发生了更改,但是数据还要,比如预分区没做,导致某台RegionServer很吃紧,Hbase的导出导出都可以很快的完成这些操作。![](https://upload-images.jianshu.io/upload_images/9028759-4fb9aa8ca3777969.png?imageMogr2/auto
通过DBeaver连接Phoenix操作hbase
不想做咸鱼的王富贵
通过DBeaver连接Phoenix操作hbase前言本文介绍常用一种通用数据库工具Dbeaver,DBeaver可通过JDBC连接到数据库,可以支持几乎所有的数据库产品,包括:MySQL、PostgreSQL、MariaDB、SQLite、Oracle、Db2、SQLServer、Sybase、MSAccess、Teradata、Firebird、Derby等等。商业版本更是可以支持各种NoSQ
Hbase - kerberos认证异常
kikiki2
之前怎么认证都认证不上,问题找了好了,发现它的异常跟实际操作根本就对不上,死马当活马医,当时也是瞎改才好的,给大家伙记录记录。KrbException:ServernotfoundinKerberosdatabase(7)-LOOKING_UP_SERVER>>>KdcAccessibility:removestorm1.starsriver.cnatsun.security.krb5.KrbTg
kvm 虚拟机命令行虚拟机操作、制作快照和恢复快照以及工作常用总结
西京刀客
云原生(Cloud Native) 云计算 虚拟化 Linux C/C++ 服务器 linux kvm
文章目录kvm虚拟机命令行虚拟机操作、制作快照和恢复快照一、kvm虚拟机命令行虚拟机操作(创建和删除)查看虚拟机virt-install创建一个虚拟机关闭虚拟机重启虚拟机销毁虚拟机二、kvm制作快照和恢复快照**创建快照**工作常见问题创建快照报错::internalsnapshotsofaVMwithpflashbasedfirmwarearenotsupported检查虚拟机是否包含pflas
hadoop 0.22.0 部署笔记
weixin_33701564
大数据 java 运维
为什么80%的码农都做不了架构师?>>>因为需要使用hbase,所以开始对hbase进行学习。hbase是部署在hadoop平台上的NOSql数据库,因此在部署hbase之前需要先部署hadoop。环境:redhat5、hadoop-0.22.0.tar.gz、jdk-6u13-linux-i586.zipip192.168.1.128hostname:localhost.localdomain(
实时数仓之实时数仓架构(Hudi)(1),2024年最新熬夜整理华为最新大数据开发笔试题
2401_84181221
程序员 架构 大数据
+Hudi:湖仓一体数据管理框架,用来管理模型数据,包括ODS/DWD/DWS/DIM/ADS等;+Doris:OLAP引擎,同步数仓结果模型,对外提供数据服务支持;+Hbase:用来存储维表信息,维表数据来源一部分有Flink加工实时写入,另一部分是从Spark任务生产,其主要作用用来支持FlinkETL处理过程中的LookupJoin功能。这里选用Hbase原因主要因为Table的HbaseC
HBase 源码阅读(一)
Such Devotion
hbase 数据库 大数据
1.HMastermain方法在上文中MacosM1IDEA本地调试HBase2.2.2,我们使用HMaster的主函数使用"start"作为入参,启动了HMaster进程这里我们再深入了解下HMaster的运行机理publicstaticvoidmain(String[]args){LOG.info("STARTINGservice"+HMaster.class.getSimpleName())
HBase 源码阅读(四)HBase 关于LSM Tree的实现- MemStore
Such Devotion
hbase lsm-tree 数据库
4.MemStore接口Memstore的函数不能并行的被调用。调用者需要持有读写锁,这个的实现在HStore中我们放弃对MemStore中的诸多函数进行查看直接看MemStore的实现类AbstractMemStoreCompactingMemStoreDefaultMemStore4.1三个实现类的使用场景1.AbstractMemStore角色:基础抽象类作用:AbstractMemStor
大数据(Hbase简单示例)
BL小二
hbase 大数据 hadoop
importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.HBaseConfiguration;importorg.apache.hadoop.hbase.TableName;importorg.apache.hadoop.hbase.client.*;importorg.apache.hadoop.hbase
Hbase的简单使用示例
傲雪凌霜,松柏长青
后端 大数据 hbase 数据库 大数据
HBase是基于HadoopHDFS构建的分布式、列式存储的NoSQL数据库,适用于存储和检索超大规模的非结构化数据。它支持随机读写,并且能够处理PB级数据。HBase通常用于实时数据存取场景,与Hadoop生态紧密集成。使用HBase的Java示例前置条件HBase集群:确保HBase集群已经安装并启动。如果没有,你可以通过本地伪分布模式或Docker来运行HBase。Hadoop配置:HBas
快手HBase在千亿级用户特征数据分析中的应用与实践
王知无
声明:本文的原文是来自Hbase技术社区的一个PPT分享,个人做了整理和提炼。大家注意哈,这种会议PPT类的东西能学习到的更多的是技术方案和他人在实践过程中的经验。希望对大家有帮助。背景快手每天产生数百亿用户特征数据,分析师需要在跨30-90天的数千亿特征数据中,任意选择多维度组合(如:城市=北京&性别=男),秒级分析用户行为。针对这一需求,快手基于HBase自主研发了支持bitmap转化、存储、
ClickHouse与其他数据库的对比
九州Pro
ClickHouse 数据库 clickhouse 数据仓库 大数据 sql
目录1与传统关系型数据库的对比1.1性能差异1.2数据模型差异1.3适用场景差异2与其他列式存储数据库的对比2.1ApacheCassandra2.2HBase3与分布式数据库的对比3.1GoogleBigQuery3.2AmazonRedshift3.3Snowflake4ClickHouse的缺点5ClickHouse的其他优点1与传统关系型数据库的对比1.1性能差异ClickHouse是一种
Hbase、hive以及ClickHouse的介绍和区别?
damokelisijian866
hbase hive clickhouse
一、Hbase介绍:HBase是一个分布式的、面向列的开源数据库,由ApacheSoftwareFoundation开发,是Hadoop生态系统中的一个重要组件。HBase的设计灵感来源于Google的Bigtable论文,它通过提供类似于Bigtable的能力,在Hadoop之上构建了一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。HBase主要用于存储大量结构化数据,并支持随机读写访问,
Hive和Hbase的区别
傲雪凌霜,松柏长青
大数据 后端 hive hbase hadoop
Hive和HBase都是Hadoop生态系统中的重要组件,它们都能处理大规模数据,但各自有不同的适用场景和设计理念。以下是两者的主要区别:1.数据模型Hive:Hive类似于传统的关系型数据库(RDBMS),以表格形式存储数据。它使用SQL-like语言HiveQL来查询和处理数据,数据通常是结构化或半结构化的。HBase:HBase是一个NoSQL数据库,基于Google的BigTable模型。
HBase
傲雪凌霜,松柏长青
大数据 后端 hbase 数据库 大数据
ApacheHBase是一个基于Hadoop分布式文件系统(HDFS)构建的分布式、面向列的NoSQL数据库,主要用于处理大规模、稀疏的表结构数据。HBase的设计灵感来自Google的Bigtable,能够在海量数据中提供快速的随机读写操作,适合需要低延迟和高吞吐量的应用场景。HBase核心概念表(Table):HBase的数据存储在表中,与传统的关系型数据库不同,HBase的表是面向列族(Co
大数据面试题:说下为什么要使用Hive?Hive的优缺点?Hive的作用是什么?
蓦然_
大数据面试题 hive 大数据开发面试题 大数据面试
1、为什么要使用Hive?Hive是Hadoop生态系统中比不可少的一个工具,它提供了一种SQL(结构化查询语言)方言,可以查询存储在Hadoop分布式文件系统(HDFS)中的数据或其他和Hadoop集成的文件系统,如MapR-FS、Amazon的S3和像HBase(Hadoop数据仓库)和Cassandra这样的数据库中的数据。大多数数据仓库应用程序都是使用关系数据库进行实现的,并使用SQL作为
Hadoop组件
静听山水
Hadoop hadoop
这张图片展示了Hadoop生态系统的一些主要组件。Hadoop是一个开源的大数据处理框架,由Apache基金会维护。以下是每个组件的简短介绍:HBase:一个分布式、面向列的NoSQL数据库,基于GoogleBigTable的设计理念构建。HBase提供了实时读写访问大量结构化和半结构化数据的能力,非常适合大规模数据存储。Pig:一种高级数据流语言和执行引擎,用于编写MapReduce任务。Pig
Hbase BulkLoad用法
kikiki2
要导入大量数据,Hbase的BulkLoad是必不可少的,在导入历史数据的时候,我们一般会选择使用BulkLoad方式,我们还可以借助Spark的计算能力将数据快速地导入。使用方法导入依赖包compilegroup:'org.apache.spark',name:'spark-sql_2.11',version:'2.3.1.3.0.0.0-1634'compilegroup:'org.apach
EMR组件部署指南
ivwdcwso
运维 EMR 大数据 开源 运维
EMR(ElasticMapReduce)是一个大数据处理和分析平台,包含了多个开源组件。本文将详细介绍如何部署EMR的主要组件,包括:JDK1.8ElasticsearchKafkaFlinkZookeeperHBaseHadoopPhoenixScalaSparkHive准备工作所有操作都在/data目录下进行。首先安装JDK1.8:yuminstalljava-1.8.0-openjdk部署
Sublime text3+python3配置及插件安装
raysonfang
作者:方雷个人博客:http://blog.chargingbunk.cn/微信公众号:rayson_666(Rayson开发分享)个人专研技术方向:微服务方向:springboot,springCloud,Dubbo分布式/高并发:分布式锁,消息队列RabbitMQ大数据处理:Hadoop,spark,HBase等python方向:pythonweb开发一,前言在网上搜索了一些Python开发的
Spring Data:JPA与Querydsl
光图强
java
JPAJPA是java的一个规范,用于在java对象和数据库之间保存数据,充当面向对象领域模型和数据库之间的桥梁。它使用Hibernate、TopLink、IBatis等ORM框架实现持久性规范。SpringDataSpringData是Spring的一个子项目,用于简化数据库访问,支持NoSql数据和关系数据库。支持的NoSql数据库包括:Mongodb、redis、Hbase、Neo4j。Sp
HBase 源码阅读(二)
Such Devotion
hbase 数据库 大数据
衔接在上一篇文章中,HMasterCommandLine类中在startMaster();方法中//这里除了启动HMaster之外,还启动一个HRegionServerLocalHBaseClustercluster=newLocalHBaseCluster(conf,mastersCount,regionServersCount,LocalHMaster.class,HRegionServer.
大数据技术之HBase 与 Hive 集成(7)
大数据深度洞察
Hbase 大数据 hbase hive
目录使用场景HBase与Hive集成使用1)案例一2)案例二使用场景如果大量的数据已经存放在HBase上面,并且需要对已经存在的数据进行数据分析处理,那么Phoenix并不适合做特别复杂的SQL处理。此时,可以使用Hive映射HBase的表格,之后通过编写HQL进行分析处理。HBase与Hive集成使用Hive安装https://blog.csdn.net/qq_45115959/article/
【HBase之轨迹】(1)使用 Docker 搭建 HBase 集群
寒冰小澈IceClean
【大数据之轨迹】 【Docker之轨迹】 笔记 hbase docker hadoop
——目录——0.前置准备1.下载安装2.配置(重)3.启动与关闭4.搭建高可用HBase前言(贫穷使我见多识广)前边经历了Hadoop,Zookeeper,Kafka,他们的集群,全都是使用Docker搭建的一开始的我认为,把容器看成是一台台独立的服务器就好啦也确实是这样,但端口映射问题,让我一路以来磕碰了太多太多,直到现在的HBase,更是将Docker集群所附带的挑战性,放大到了极致(目前是如
Java常用排序算法/程序员必须掌握的8大排序算法
cugfy
java
分类:
1)插入排序(直接插入排序、希尔排序)
2)交换排序(冒泡排序、快速排序)
3)选择排序(直接选择排序、堆排序)
4)归并排序
5)分配排序(基数排序)
所需辅助空间最多:归并排序
所需辅助空间最少:堆排序
平均速度最快:快速排序
不稳定:快速排序,希尔排序,堆排序。
先来看看8种排序之间的关系:
1.直接插入排序
(1
【Spark102】Spark存储模块BlockManager剖析
bit1129
manager
Spark围绕着BlockManager构建了存储模块,包括RDD,Shuffle,Broadcast的存储都使用了BlockManager。而BlockManager在实现上是一个针对每个应用的Master/Executor结构,即Driver上BlockManager充当了Master角色,而各个Slave上(具体到应用范围,就是Executor)的BlockManager充当了Slave角色
linux 查看端口被占用情况详解
daizj
linux 端口占用 netstat lsof
经常在启动一个程序会碰到端口被占用,这里讲一下怎么查看端口是否被占用,及哪个程序占用,怎么Kill掉已占用端口的程序
1、lsof -i:port
port为端口号
[root@slave /data/spark-1.4.0-bin-cdh4]# lsof -i:8080
COMMAND PID USER FD TY
Hosts文件使用
周凡杨
hosts locahost
一切都要从localhost说起,经常在tomcat容器起动后,访问页面时输入http://localhost:8088/index.jsp,大家都知道localhost代表本机地址,如果本机IP是10.10.134.21,那就相当于http://10.10.134.21:8088/index.jsp,有时候也会看到http: 127.0.0.1:
java excel工具
g21121
Java excel
直接上代码,一看就懂,利用的是jxl:
import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import
web报表工具finereport常用函数的用法总结(数组函数)
老A不折腾
finereport web报表 函数总结
ADD2ARRAY
ADDARRAY(array,insertArray, start):在数组第start个位置插入insertArray中的所有元素,再返回该数组。
示例:
ADDARRAY([3,4, 1, 5, 7], [23, 43, 22], 3)返回[3, 4, 23, 43, 22, 1, 5, 7].
ADDARRAY([3,4, 1, 5, 7], "测试&q
游戏服务器网络带宽负载计算
墙头上一根草
服务器
家庭所安装的4M,8M宽带。其中M是指,Mbits/S
其中要提前说明的是:
8bits = 1Byte
即8位等于1字节。我们硬盘大小50G。意思是50*1024M字节,约为 50000多字节。但是网宽是以“位”为单位的,所以,8Mbits就是1M字节。是容积体积的单位。
8Mbits/s后面的S是秒。8Mbits/s意思是 每秒8M位,即每秒1M字节。
我是在计算我们网络流量时想到的
我的spring学习笔记2-IoC(反向控制 依赖注入)
aijuans
Spring 3 系列
IoC(反向控制 依赖注入)这是Spring提出来了,这也是Spring一大特色。这里我不用多说,我们看Spring教程就可以了解。当然我们不用Spring也可以用IoC,下面我将介绍不用Spring的IoC。
IoC不是框架,她是java的技术,如今大多数轻量级的容器都会用到IoC技术。这里我就用一个例子来说明:
如:程序中有 Mysql.calss 、Oracle.class 、SqlSe
高性能mysql 之 选择存储引擎(一)
annan211
mysql InnoDB MySQL引擎 存储引擎
1 没有特殊情况,应尽可能使用InnoDB存储引擎。 原因:InnoDB 和 MYIsAM 是mysql 最常用、使用最普遍的存储引擎。其中InnoDB是最重要、最广泛的存储引擎。她 被设计用来处理大量的短期事务。短期事务大部分情况下是正常提交的,很少有回滚的情况。InnoDB的性能和自动崩溃 恢复特性使得她在非事务型存储的需求中也非常流行,除非有非常
UDP网络编程
百合不是茶
UDP编程 局域网组播
UDP是基于无连接的,不可靠的传输 与TCP/IP相反
UDP实现私聊,发送方式客户端,接受方式服务器
package netUDP_sc;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Ine
JQuery对象的val()方法执行结果分析
bijian1013
JavaScript js jquery
JavaScript中,如果id对应的标签不存在(同理JAVA中,如果对象不存在),则调用它的方法会报错或抛异常。在实际开发中,发现JQuery在id对应的标签不存在时,调其val()方法不会报错,结果是undefined。
http请求测试实例(采用json-lib解析)
bijian1013
json http
由于fastjson只支持JDK1.5版本,因些对于JDK1.4的项目,可以采用json-lib来解析JSON数据。如下是http请求的另外一种写法,仅供参考。
package com;
import java.util.HashMap;
import java.util.Map;
import
【RPC框架Hessian四】Hessian与Spring集成
bit1129
hessian
在【RPC框架Hessian二】Hessian 对象序列化和反序列化一文中介绍了基于Hessian的RPC服务的实现步骤,在那里使用Hessian提供的API完成基于Hessian的RPC服务开发和客户端调用,本文使用Spring对Hessian的集成来实现Hessian的RPC调用。
定义模型、接口和服务器端代码
|---Model
&nb
【Mahout三】基于Mahout CBayes算法的20newsgroup流程分析
bit1129
Mahout
1.Mahout环境搭建
1.下载Mahout
http://mirror.bit.edu.cn/apache/mahout/0.10.0/mahout-distribution-0.10.0.tar.gz
2.解压Mahout
3. 配置环境变量
vim /etc/profile
export HADOOP_HOME=/home
nginx负载tomcat遇非80时的转发问题
ronin47
nginx负载后端容器是tomcat(其它容器如WAS,JBOSS暂没发现这个问题)非80端口,遇到跳转异常问题。解决的思路是:$host:port
详细如下:
该问题是最先发现的,由于之前对nginx不是特别的熟悉所以该问题是个入门级别的:
? 1 2 3 4 5
java-17-在一个字符串中找到第一个只出现一次的字符
bylijinnan
java
public class FirstShowOnlyOnceElement {
/**Q17.在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
* 1.int[] count:count[i]表示i对应字符出现的次数
* 2.将26个英文字母映射:a-z <--> 0-25
* 3.假设全部字母都是小写
*/
pu
mongoDB 复制集
开窍的石头
mongodb
mongo的复制集就像mysql的主从数据库,当你往其中的主复制集(primary)写数据的时候,副复制集(secondary)会自动同步主复制集(Primary)的数据,当主复制集挂掉以后其中的一个副复制集会自动成为主复制集。提供服务器的可用性。和防止当机问题
mo
[宇宙与天文]宇宙时代的经济学
comsci
经济
宇宙尺度的交通工具一般都体型巨大,造价高昂。。。。。
在宇宙中进行航行,近程采用反作用力类型的发动机,需要消耗少量矿石燃料,中远程航行要采用量子或者聚变反应堆发动机,进行超空间跳跃,要消耗大量高纯度水晶体能源
以目前地球上国家的经济发展水平来讲,
Git忽略文件
Cwind
git
有很多文件不必使用git管理。例如Eclipse或其他IDE生成的项目文件,编译生成的各种目标或临时文件等。使用git status时,会在Untracked files里面看到这些文件列表,在一次需要添加的文件比较多时(使用git add . / git add -u),会把这些所有的未跟踪文件添加进索引。
==== ==== ==== 一些牢骚
MySQL连接数据库的必须配置
dashuaifu
mysql 连接数据库配置
MySQL连接数据库的必须配置
1.driverClass:com.mysql.jdbc.Driver
2.jdbcUrl:jdbc:mysql://localhost:3306/dbname
3.user:username
4.password:password
其中1是驱动名;2是url,这里的‘dbna
一生要养成的60个习惯
dcj3sjt126com
习惯
一生要养成的60个习惯
第1篇 让你更受大家欢迎的习惯
1 守时,不准时赴约,让别人等,会失去很多机会。
如何做到:
①该起床时就起床,
②养成任何事情都提前15分钟的习惯。
③带本可以随时阅读的书,如果早了就拿出来读读。
④有条理,生活没条理最容易耽误时间。
⑤提前计划:将重要和不重要的事情岔开。
⑥今天就准备好明天要穿的衣服。
⑦按时睡觉,这会让按时起床更容易。
2 注重
[介绍]Yii 是什么
dcj3sjt126com
PHP yii2
Yii 是一个高性能,基于组件的 PHP 框架,用于快速开发现代 Web 应用程序。名字 Yii (读作 易)在中文里有“极致简单与不断演变”两重含义,也可看作 Yes It Is! 的缩写。
Yii 最适合做什么?
Yii 是一个通用的 Web 编程框架,即可以用于开发各种用 PHP 构建的 Web 应用。因为基于组件的框架结构和设计精巧的缓存支持,它特别适合开发大型应
Linux SSH常用总结
eksliang
linux ssh SSHD
转载请出自出处:http://eksliang.iteye.com/blog/2186931 一、连接到远程主机
格式:
ssh name@remoteserver
例如:
ssh
[email protected]
二、连接到远程主机指定的端口
格式:
ssh name@remoteserver -p 22
例如:
ssh i
快速上传头像到服务端工具类FaceUtil
gundumw100
android
快速迭代用
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOExceptio
jQuery入门之怎么使用
ini
JavaScript html jquery Web css
jQuery的强大我何问起(个人主页:hovertree.com)就不用多说了,那么怎么使用jQuery呢?
首先,下载jquery。下载地址:http://hovertree.com/hvtart/bjae/b8627323101a4994.htm,一个是压缩版本,一个是未压缩版本,如果在开发测试阶段,可以使用未压缩版本,实际应用一般使用压缩版本(min)。然后就在页面上引用。
带filter的hbase查询优化
kane_xie
查询优化 hbase RandomRowFilter
问题描述
hbase scan数据缓慢,server端出现LeaseException。hbase写入缓慢。
问题原因
直接原因是: hbase client端每次和regionserver交互的时候,都会在服务器端生成一个Lease,Lease的有效期由参数hbase.regionserver.lease.period确定。如果hbase scan需
java设计模式-单例模式
men4661273
java 单例 枚举 反射 IOC
单例模式1,饿汉模式
//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
//私有的默认构造函数
private Singleton1() {}
//已经自行实例化
private static final Singleton1 singl
mongodb 查询某一天所有信息的3种方法,根据日期查询
qiaolevip
每天进步一点点 学习永无止境 mongodb 纵观千象
// mongodb的查询真让人难以琢磨,就查询单天信息,都需要花费一番功夫才行。
// 第一种方式:
coll.aggregate([
{$project:{sendDate: {$substr: ['$sendTime', 0, 10]}, sendTime: 1, content:1}},
{$match:{sendDate: '2015-
二维数组转换成JSON
tangqi609567707
java 二维数组 json
原文出处:http://blog.csdn.net/springsen/article/details/7833596
public class Demo {
public static void main(String[] args) { String[][] blogL
erlang supervisor
wudixiaotie
erlang
定义supervisor时,如果是监控celuesimple_one_for_one则删除children的时候就用supervisor:terminate_child (SupModuleName, ChildPid),如果shutdown策略选择的是brutal_kill,那么supervisor会调用exit(ChildPid, kill),这样的话如果Child的behavior是gen_