'
客户端API操作计数器
1)单计数器
只能操作一个计数器:用户需要自己设定列,方法由HTable提供的
long incrementColumnValue(row,family,qualifier,long amount)
long incrementColumnValue(row,family,qualifier,long amount,boolean writeToWAL)
2)多计数器
Result increment(Increment increment)
需要创建一个Increment实例,构造方法如下
Increment()
Increment(row)
Increment(row,RowLock rowLock)
向其中加入实际的计数器:addColumn(family,qualifier,long maxStamp)
3.协处理器
协处理器允许用户在region服务器上运行自己的代码,也就是允许用户执行region级的操作,并可以使用如触发器类似的功能
另一类适合使用协处理器的场景就是权限控制
协处理器框架提供了一些类,用户可以通过继承这些类扩展自己的功能,主要有两类,即observer和endpoint
observer:回调函数(也被称为钩子函数,hook)在一些特定时间发生时。这些事件包括用户产生的事件和服务器内部自动产生的事件
RegionObserver:用户可以用这种处理器处理数据修改事件,它们与表的region联系紧密
MasterObserver:可以被用作管理或DDL类型的操作,这些是集群级事件
WALObserver:提供控制WAL的钩子函数
endpoint:通过添加一些远程调用来动态扩展RPC协议,可以把它理解为与RDBMS中类似的存储过程。endpoint可以与observer的实现组合起来直接作用于服务器的状态
Coprocesspor类
所有协处理器的类都必须实现这个接口,它定义了协处理器的基本预定。提供了两个被应用于框架的枚举类Priority(SYSTEM,USER)和State
待续!!!!
4.HtablePool
为Hbase集群提供一个客户端连接池,用户可以通过以下任意一个构造器来创建池:
HTablePool()
HtablePool(Configuration conf,int maxSize)
HtablePool(Configuration conf,int maxSize,HTableInterfaceFactory fac)
HTableInterfaceFactory:用户可以创建自定义的工厂类,例如,为Htable实例使用特定的配置,或可以让实例完成一些初始化操作。如果用户想自己扩展HtableInterfaceFactory,则必须实现两个方法createHTableInterface(conf,tableName)和releaseHtableInterface
使用表实例池方式:getTable(String tableName);getTable(byte[] tableName);void putTable(HtableInterface table)
5.连接管理
每个HTable实例都需要建立和远程主机的连接,这些连接在内部使用HConnection类表示,被HConnectionManager类管理并共享。用户没必要和这两个类打交道,只需要创建一个Configuration实例,然后利用客户端API使用这些类。
Hbase内部使用键值映射来存储连接,使用Configuration实例作为键值映射的键。
HtablePool类,所有连接池中的Htable实例都自动共用一个提供的Configuration实例,共享它们的连接。
共享连接的缺点在于释放,如果用户不显示关闭连接,它将一直存在,直到客户端退出,建议用户不在需要使用Htable时主动调用其close(),释放资源,以下是显式清理连接方法
deleteConnection(Configuration conf,boolean stop);
deleteAllConnection(boolean stop)
四、客户端API:管理功能
1.模式定义
1)表:使用表的主要原因是控制表中的所有列以达到共享表内的某些特性的目的
表描述符的构造函数:
HTableDescriptor();
HTableDescriptor(String name);
HTableDescriptor(byte[] name);
HTableDescriptor(HTableDescriptor desc);
任意不相交的系统间的远程通信都使用到了Hadoop RPC框架,需要远程方法中参数都实现Writeable接口,进而能够序列化对象并远程传输
2)表属性
表名一定不能以".","-"开头,表名只能包含拉丁字母或数字、下划线、".","-"
列族:
void addFamily(HColumnDescriptor family)
boolean hasFamily(byte[] c)
HColumnDescriptor[] getColumnFamilies()
HColumnDescriptor getFamily(byte[] column)
文件大小限制:
long getMaxFileSize()
void setMaxFileSize(long maxFileSize)
如果一个列族的存储单元已使用的存储空间超过了大小限制,region将发生拆分,maxFileSize默认值是256M
这个参数只是大致的预期值,而在某些特殊条件下,文件大小可能超过这个预期值(一行数据不能跨region存储)
只读:默认所有的表都可写,对于特殊的表来说,只读参数有特殊的用途。调用setReadOnly(boolean readOnly)设置
memstore刷写大小:写操作会写入到写缓冲区,人后按照合适的条件顺序写入到一个新的存储文件(磁盘)中,可以通过setMemStoreFlushSize(long memstoreFlushSize),这个memstoreFlushSize的默认值是64MB
延迟日志刷写:
Hbase有两种将WAL保存到磁盘的方式,一种是延迟日志刷写,另一种不是,通过setDeferredLogFlush(boolean isDeferredLogFlush),isDeferredLogFlush的默认值为false
3)列族
列族定义了所有列的共享信息,并且可以通过客户端创建任意数量的列。定位到某个具体的列需要列族名和列名合并在一起,以:分隔,如family:qualifier
构造方法:
列族名:
getName()或getNameAsString()
不能被重命名,通常的做法是新建一个列族,然后使用API从旧列族中复制数据到新列族
列族名不能以"."开头,也不能包含":"、"\"或ISO控制符
最大版本数:
所有列族都限定了每个值能够保留的最大版本数,Hbase会移除超过最大版本数的数据,通过setMaxVersions(int maxVersion)设置,这个maxVersion默认为3.
压缩:
Hbase支持插件式的压缩算法,允许用户选择最合适的压缩算法
块大小:
在Hbase中,所有的存储文件都被划分为若干个小存储块,这些小存储块在get或scan操作时会加载到内存中,通过setBlockSize(int size)设置,默认大小是64KB
注:HFile的不同于HDFS中的块,HDFS提到的块是用于拆分大文件以提供分布式存储,且便于MapReduce框架进行并行计算的存储单元;而HBase中的块主要用于高效加载和缓冲数据
缓存块:
Hbase顺序的读取一个数据块到内存缓存中,这个参数默认是为true,每次读取的块都会缓存到内存中,但是如果顺序读取某个特定的列族,最好将这个属性设置为false,通过setBlockCacheEnabled(boolean blockCacheEnabled)方法设置
生存期TTL:
Hbase支持版本数据保存的时间,TTL设置了一个基于时间戳的临界值,内部管理会自动检查TTL的值是否达到上限,在major合并过程中时间戳被判定为超过TTL的数据会被删掉,可以通过setTimeToLive(int timestamp)方法设置,TTL的参数为秒,默认值是Integer.MAX_VALUE,理解为永久保留
在内存中:
setInMemory(boolean inMemory)
将inMemory设置为true只是一种承诺,或者说高优先级。在正常数据读取过程中,块数据被加载到缓冲区中并长期驻留在内存中,除非堆压力过大,这个时候才会强制从内存中卸载这部分数据
布隆过滤器:
能够减少特定访问模式下的查询时间,由于这种模式增加了内存和存储的负担,这个模式默认为关闭状态
复制范围:Hbase提供跨集群同步的功能,本地集群的数据更新可以及时同步到其他集群,复制范围参数默认为0,即这个功能处于关闭状态。可以通过setScope(int scope)设置,1表示开启实时同步
2.HBaseAdmin
HBaseAdmin提供了创建表、列族、检查表是否存在,修改表结构和列族结构、以及删除表功能
构造方法:HbaseAdmin(Configuration conf)
1)表操作
建表:
void createTable(HTableDescriptor desc)
void createTable(HTableDescriptor desc,byte[] startKey,byte[] endKey,int numRegions)
void createTable(HTableDescriptor desc,byte[][] splitKeys)
void createTableAsync(HTableDescriptor desc,byte[][] splitKeys)
HTable类中的方法getStartEndKey()来获取所有region的边界
获取所有表的列表,以及判断是否存在
boolean tableExists(String tableName)
boolean tableExists(byte[] tableName)
HTableDescriptor[] listTables()
HTableDescriptor getTableDescriptor(byte[] tableName)
删除表:
void deleteTable(String tableName)
void deleteTable(byte[] tableName)
在删除表之前需要将表禁用,region服务器会先将内存中近期内还未提交的已修改的数据刷写到磁盘,然后关闭所有region,并更新这样表的元数据,将所有region标记为下线状态。
2)集群管理
允许用户查看集群当前的状态:
static void checkHBaseAvailable(Configuration)
ClusterStatus getClusterStatus()
void closeRegion(String regionname,String hostAndport)
注:所有可用表的region都应该是在线状态
void majorCompact(String tableNameOrRegionName)
五、可用的客户端
1.REST、Thrift,Avro介绍
它们都支持大量的语言,Protocol Buffer与Thrift和Avro最大的不同是它没有自己的RPC堆,而它生成的RPC定义需要被后来其他的RPC库使用,Hbase提供了REST、Thrift、Avro的辅助服务,它们可以实现成专门的网关服务,这些服务运行在共享或专用的机器上。Thrift和Avro都有各自的RPC实现,所以网关服务仅是在它们的基础上进行了封装,至于REST,HBase则采用了自己的实现,并提供了访问存储数据的路径。
每个请求使用一个服务而非建立一个连接的优势在于用户可以复用连接来获得最优性能。
2.交互
1)使用原生Java:直接使用HTable并通过原生的RPC调用与HBase服务器进行交互。
2)REST:
操作:基于REST服务的客户端是在能够与HBase通信之前需要先启动REST网关服务,使用hbase-daemon.sh start rest命令。REST服务提供了HBase表提供的所有操作,REST服务器返回的值都经过了base64Binary编码。
支持的格式:通过使用HTTP Content-Type和Accept头,调用者可以自动选择发送和接收信息的数据格式
Plain(text/plain):
XML(text/xml):默认的存储和查询格式是XML
JSON(application/json):curl -H "Accept:application/json" http://:testtable/%01%02%03/colfam1:col1
REST的java客户端:
REST服务器同样具有全面的java客户端API,位于org.apache.hadoop.hbase.rest.client包中,其中核心类为RemoteHTable和RemoteAdmin
3)Thrift
在使用Thrift之前需要安装Thrift,并且需要启动HBase提供的Thrift Server
启动Thrift命令:hbase-daemon.sh start thrift
4)Avro
在使用Thrift之前需要安装Avro,并且需要启动HBase提供的Avro Server
启动Avro命令:hbase-daemon.sh start Avro
3.批量处理客户端
1)Mapreduce:两种方式,原生java API或Clojure
2)Hive
Hive与Hbase之前的版本需要匹配,细微的RPC变化可能影响交互
3)pig
4)Cascading
4.shell
1)命令
引用名:命令行要求在使用表名和列名时需要通过单引号或双引号对其进行引用。
引用值:命令行支持二进制、八进制、十六进制的输入和输出,用户在引用时必须使用双引号
使用逗号分隔参数
Ruby散列属性:
一些命令中需要设置键值对属性,使用Ruby散列按照以下方式来完成
{'key1'=>'val1','key2'=>'val2',...}
DDL命令
alter 使用modifyTable()修改现有表结构
DML命令:
工具命令:
assgn 分配一个region到一台region服务器中
复制命令:
脚本:
可以使用Nagios或其他监控工具发送脚本
用户还以使用管道的形式运行命令
5.基于Web UI
1)master的web默认端口是60010,region服务默认端口是60030
六、与Mapreduce集成
1.类
InputFormat
InputFormat负责:拆分输入数据,同时返回一个RecordReader实例,定义了键值对象的类,并提供了next()遍历数据
就HBase而言,它提供了一组专用的实现,叫TableInputFormatBase,该实现的子类是TableInputFormat
mapper
HBase提供了一个TableMapper类,将键的类型强制转换为ImmutableBytesWritable类,同时将改制的类型强制转换为Result类型,TableMapper类没有实现具体的功能,它只是添加了键值对的签名
Reducer
HBase提供了一个TableReducer类
OutputFormat
Hbase提供了一个TableOutputFormat
2.支撑类
Mapreduce的支撑类与TableMapReduceUtil类一同协作在HBase上执行Mapreduce任务,它有一个静态方法能配置作业,病并使作业可以使用Hbase作为数据源或目标
3.在HBase上的Mapreduce
当运行Mapreduce作业所需库中的文件不是绑定在Hadoop或Mapreduce框架中时,用户就必须确保这些库文在作业之前已经可用,用户一般两个选择:在所有的任务节点上准备静态的库或直接提供作业所需的所有库
1)静态配置:
将jar文件复制到所有节点的常用路径中
将这些jar文件的完整路径写入hadoop-env.sh配置文件中,按照如右方式编辑HADOOP-CLASSPATH变量:HADOOP-CLASSPATH="":HADOOP-CLASSPATH
重启所有的任务的NodeManager使变更生效
2)动态配置:Hadoop有一个特殊的功能,它可以读取操作目录中/lib目录下所包含的所有库的jar文件,用户可以使用此功能生成所谓的胖jar文件,胖jar文件使用maven的Maven Assembly插件
七、架构
1.数据查找和传输
1)B+树:它的叶节点项目链接并且有序,能够通过主键对记录进行高效的插入、查找以及删除,它表能为一个动态、多层并由上下界的索引,同时要注意维护每一段所包含的键数目
2)LSM树(log-structured merge-tree):输入数据首先存储在日志文件,这些文件内的数据完全有序,当有日志文件被修改时,对应的更新会被保存在内存中加速查询,修改数据文件的操作通过滚动合并完成。
2.存储
1)概览
注:HBase主要处理两种文件:一种是WAL文件,另一种是实际的数据文件,这两种文件都是由HRegionServer管理
2)读取数据流程
联系ZooKeeper子集群(quorum),通过ZooKeeper获取含有-ROOT-表的region服务器来查找行健
通过含有-ROOT-的region服务器可以查询到含有.meta.表中对应region服务器名,其中包内含请求的行健信息
以上信息都会缓存下来,只查找一次
通过查询.META.服务器来获取客户端查询的行健数据所在的region服务器,HBase会存储这次查询的信息
HRegionServer负责打开region,并创建一个对应的HRegion实例,它会为每个表的HColumnFamily创建一个Store实例,每个Store实例包含多个StoreFile(HFile的轻量级封装)和一个MemStore,一个HRegionServer共享一个HLog实例
3)写路径
用户发送HTable.put()请求到HRegion实例来大处理
决定数据是否需要写到HLog类实现的预写日志中,其中WAL是标准的Hadoop SequenceFile,并且存储了HLogKey实例,这些键包含序列号和实际数据
一旦数据写入到WAL中,数据就会放到MemStore中,同时检查MemStore是否已经满了,如果满了就刷写到磁盘中去。书写请求由另一个HRegionServer的线程处理,生成一个新的HFile
4)region拆分
当region的存储文件大于hbase.hregion.max.filesize大小或嫘祖层面的配置的大小时,region会被一分为二
为新region创建两个对应的文件,每个region为原region的一半,通过在父region中创建split目录来完成。
关闭该region,此后该region不再接受任何请求。
region服务器通过split目录中设立必需的文件接受来准备新的子region,包括新region的目录和参考文件。
把这两个新region目录移动表目录
.META.表中父region的状态会被更新,以表示其现在拆分的节点和子节点是什么
两个子region准备好后,将会被同一个服务器并行打开,打开的过程包括更新.META.表,同时也会初始化为两个region并对region中的内容进行合并,合并过程中替换引用文件之前会把父region的存储文件异步重写到两个子region中,在region的.tmp目录进行
最终父region被清理,master被告知查分的情况,并且可以由于负载均衡而把新region移动到其他的HRegionServer上
5)合并
minor合并:负责重写最后生成的几个文件到一个更大的文件中,文件数量有hbase.hstore.compaction.min决定,默认值是3,minor合并处理的最大文件数默认为10,用户可以通过hbase.hstore.compaction.max来配置
major合并:把所有文件压缩成一个单独的文件,在memstore被刷写到磁盘后出发检查,或shell命令major-compact后触发,配置相关参数
hbase.hregion.majorcompaction(默认为24小时)和hbase.hregion.majorcompaction.jitter(默认为0.2)
6)HFile
注:文件长度可变,唯一固定的块是File Info和Trailer,Trailer是指向其他快递的指针,块大小是由HColumnDescriptor配置的,该配置可以在创建表的时候由用户指定,默认大小时64K,每一个块都包含一个magic头部和一定数量的序列化的KeyValue实例
7)WAL
WAL存储了对数据的所有更改,实现了WAL的类叫HLog类,HLog类的一个特性就是跟踪修改,通过使用序列号来实现
3.ZooKeeper
HBase使用ZooKeeper作为其协同服务组件,其主要功能包括跟踪region服务器、保存root region的地址等
HBase建立的znode列表,默认为/hbase,这个znode的名称由zookeeper.znode.parent属性决定,
以下是znode的列表以及他们的作用
/hbase/hbaseid:包括clusterID,与存储在HDFS上的hbase.id文件内容相同。
/hbase/master:包含服务器名称
/hbase/replication:包含副本信息
/hbase/root-region-server:包含-ROOT-region所在的region服务器的机器名,这个经常在region定位中使用
/hbase/rs:所偶region服务器的根节点,集群使用它来跟踪服务器异常
/hbase/shutdown:集群的启动事假和关闭时间
/hbase/table:当表被禁用,信息会被添加到这个znode之下
4.复制
HBase复制可以作为一种灾难恢复的方法,并且可以提供HBase层的高可用性
HBase复制中最基本的机构模式是"主推送",因为每个region服务器都有自己的WAL,所以很容易保存现在正在复制的位置
注:参与复制的集群可以不相等,主机群会通过随机分配尽量均衡从集群的负载
1)常规处理
客户端发送Put、Delete、或Increment到region服务器,这些请求包含的键值对会被region服务器转化为WALEdit,同时WALEdit会被复制程序检查,并以列族为单元复制数据。修改被添加到WAL中,并把实际数据添加到Memstore。
2)没有反馈的从集群
如果从集群的region服务器没有响应rpc请求,主集群的region服务器将会睡眠并按照配置的次数重试。如果从集群的region服务器还是不可用,主机全会重新选择一台其他的机器来提交修改
3)挑选要复制的目标集群
主集群的region服务器连接从集群的ZooKeeper群组,然后扫描/hbase/rs目录来发现所有可用的并随机选择一部分服务器来复制数据(默认是10%)
八、高级用法
1.rowkey设计
1)高表与宽表
HBase中的表可以设计为高表和宽表,前者指表中列少儿行多,后者则正好相反。用户应当尽量将需要查询的维度或信息存储在行健中,应为用它筛选的效率最高
此外,HBase只能按行分片,因此高表更有优势
2)时间序列:当处理流式事件时,最常用的就是按时间序列组织数据,这些数据会被有序的存储在一个特定的范围内,到时系统产生读写热点,解决这个问题的方法就是想办法将数据分散到所有的region服务器上,有很多中方法,例如在行键前价格,通常情况下如下选择
salting方式:prefix=Long.hashCode(timestamp) %
字段变换/提升字段:如果用户设计的行键包含多个字段则可以调整它们的位置
随机化:rowkey=MD5(timestamp),随机化很适合每次只读取一行数据的应用,如果用户不需要连续扫描而只需要随机读取,可以考虑这种策略
时间顺序关系
每个列族下的列可以作为辅助索引单独进行排序,主要内容在主要的列族下,索引放在另外一个列族下,为了编码创建太多的列族,可以把所有辅助索引存储在有一个单独的列族下,同时列键的最左端使用索引ID这个前缀来表示不同的顺序
2.辅助索引
辅助索引存储了新坐标和现有坐标之间的映射关系,一些为可行的解决方案
由客户端管理索引:
把责任完全转移到应用层的典型做法是把一个数据表和一个查找/映射表结合起来,每当程序写数据表的时候,它也同时更新映射表(辅助索引表)。读数据时可以直接在主表进行查询,从辅助索引表中先查找原表的行键,再在原表中读取实际数据。优点:用户可以按照需求设计映射表。缺点:Hbase不能保证跨行操作的原子性
用户可以自由设计主索引和辅助索引之间的映射关系时,必须接受的缺点是用户需要实现所有存储和查找数据必需的方法
带索引的事务型HBase
开源的ITHBase,扩展了HBase,最核心的扩展是增加了保证所有辅助索引,提供了一个IndexedTableDescriptor,提供了数据表的辅助索引操作支持,大多数类被添加了索引支持功能的类替换了
带索引的HBase
IHBase是完全在内存中维护索引,索引永远都是同步的,不需要额外的事务控制,索引的定义由IdxIndexDescriptor类完成
3.搜索集成
使用任意关键字来搜索数据,满足这种需要往往是集成一个完整的搜索引擎
Lucene:独立于HBase使用的Lucene或其他派生类的解决方案可以通过Mapreduce建立索引。
HBasene:选择的方法是直接在HBase内部建立搜索索引,同时为用户提供Lucene的API,它把每个文档的字段、词存储在一个单独的行,同时包含这个词的文档储存在这一行的列中
九、监控集群
1.监控框架
每个HBase进程都会提供一系列监控指标,这些监控指标可以被各种监控API和工具使用,包括JMX和Ganglia。每种服务器都有多组监控指标,这些监控指标按子系统分组并隶属于一种服务器
HBase使用Hadoop的监控框架,并继承了其所有类和特性,这个框架基于MetricsContext接口来处理监控数据点的生成,并使用这些数据点监控和绘图
1)可用的实现列表:
GangliaContext:用来推送监控指标到Ganglia
FileContext:将监控指标写入磁盘上一个文件中
TimeStampingFileContext:将监控指标写入磁盘上一个文件中,但是为每个监控指标添加一个时间戳前缀
CompositeContext:允许为监控指标生成不止一个上下文
NullContext:监控指标框架的关闭选项,使用这个上下文时,不生成也不聚合监控指标
NullContextWithUpdateThread:不生成任何监控指标,但是启动聚合统计线程。这种上下文在通过JMX检索监控指标时使用
多重监控指标使用MetricsRecored分组,来描述一个具体的子系统。HBase使用这些组分别来保存master、region机器,以及其他服务器的统计信息,每个组都有唯一的名字:..。上下文有内置的定时器来触发并将监控指标推送至目标
2)各种指标类型:
整型值:(IV)
长整型值:(LV)
速率(R):一个代表速率的浮点型值,可以是每秒操作或者消息数
字符串:存储静态的,基于文本的信息。并用来报告HBase版本信息和构建时间
时间变化整型(TVI):上下文会维护一个单调递增累加计数器。框架使用这个方法对各种消息进行技术
时间变化长整型(TVL):用于增速较快的计数器
时间变化率(TVR):需要追踪操作数或消息的数量,以及完成操作所用的时间,通常用来计算一次操作完成的平均时间
持续型时间变化率(PTVR):添加了对持续的周期性的监控指标的必要的支持。
3)master提供的监控指标
4)region服务器监控指标:
块缓存监控指标
块缓存用来保存底层HFile从HDFS读取的存储块。count(LV)监控指标反映了当前缓存中保存的块数目,size(LV)监控指标时占用java堆空间大小,free(LV)监控指标时堆空间为缓存保留的可用空间,evicted(LV)反映了命中缓存总数与请求缓存总数的关系
块缓存追踪追踪缓存命中hit(LV)和缓存失效miss(LV)的数目,以及命中率hit radio(LV),其反映了命中缓存总数与请求缓存总数的关系。所有读操作使用缓存,不管用户是否制定过将使用的块保留在缓存中。使用setCacheBlocks()仅仅影响块的保留策略
合并监控
compaction size(PTVR)和compaction time(PTVR)分别代表需要合并的存储文件总大小和操作花费时间
compaction queue size:用来监测一个region服务器有多少文件当前正在排队等待合并
memstore监控指标
memstore size MB(IV):服务器上所有memstore总共占用的堆大小
flush queue zie(IV):将要被刷写的region的数目
存储监控指标:
store files(IV):所有存储文件的数目
store file index MB(IV):所有存储文件的块索引和元数据的总和大小
I/O监控指标:
fs read latency(TVR):文件系统的读延迟
fs write latency:写延迟
fs sync latency:统计了预写日志记录同步到文件系统的延迟
RPC监控指标
Ganglia
组成:
Ganglia监控守护进程(gmond):监控守护进程需要在每台需要监控的机器上运行,它搜集本地数据,准备统计,然后被其他系统拉取。通过单一或组播方网络消息传播的主机变化情况,使用组播方式,每个监控守护进程可以获取集群完整状态,所有的服务器拥有同样的组播地址
Ganglia元数据守护进程(gmetad):元数据守护进程安装在一个中心节点上,作为整个集群的管理节点。元数据守护进程从一个或多个监控守护进程拉去数据来获取整个集群的状态,然后使用RDTool将这些信息存放在一个用于轮询的时间序列数据库中。
GangliaPHP:展示统计信息
十、性能优化
1.垃圾回收优化
垃圾回收时master通常不会产生问题,只需要添加到region服务器的启动参数中。
用户可以通过向hbase-env.sh配置文件中添加HBASE_OPTS或者HBASE_REGIONSERVER_OPTS变量来设置垃圾回收的相关选项。后者仅影响region服务器进程,也是推荐的修改方式
指定新生代的方式:-XX:MaxNewSize=128m -XX:NewSize=128m或-Xmn128m
注意:默认值对于多数region服务器面对的负载还是太小,所以她必须增大
建议在JRE日志中输入垃圾回收的详细信息,通过添加以下JRE选项:
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:$HBASE-HOME/logs/gc-hbase.log
该日志不会按日期定时滚动,需要手动处理(例如:使用基于crontab的每日滚动转存任务)
通过不同的JRE参数来指定不同的垃圾回收实现策略,推荐的值是:
-XX:+UseParNewGC and -XX:+UseConcMarkSweepGC
UseParNewGC:停止运行java进程二期清空年轻代堆
ConcMarkSweepGC:不停止java进程的情况下异步并行的完成工作
2.预拆分region
管理接口中createTable()方法或shell中的create命令可以接受列表形式提供的拆分行健作为参数
3.负载均衡:
master有一个内置的叫做均衡器的特性,在默认的情况下,均衡器每五分钟运行一次,可以通过hbase.balancer.period属性设置
均衡器有一个可以限制自身运行时间的上限,用户可以通过hbase.balance.max.balancing属性来设置,默认为均衡器间隔周期的一半
4.合并region
HBase集成了一个工具能够让用户在集群没有工作时河北那个两个相邻的region,工具为org.apache.hadoop.hbase.util.Merge
5.客户端API:最佳实践
1)禁止自动刷写:当有大量的写入操作时,使用setAutoFlush(false)方法,确认HTable自动刷写的特性已经关闭,如果禁用了自动刷写,add(Put)操作指导写缓冲区被填满时才会被送出,可以调用HTable的flushCommits()方法显式刷写数据,调用HTable的close()也会隐式调用flushCommits()
2)使用扫面缓存:如果HBase被用作一个MapReduce作业的输入源,请最好将作为MapReduce作业输入扫描器实例的缓存用setCaching()方法设置为比默认值1大得多的值,使用默认值意味着map任务处理每条记录都请求region服务器
3)限定扫描范围
当Scan用来处理大量行时注意哪些属性被选中了,从而限制扫描范围
4)关闭ResultScanner
如果用户忘记关闭由HTable.getScanner()返回的ResultScanner实例,则可能对服务器端造成影响,一定要在try/catche的finally块中关闭ResultScanner
5)块缓存用法
Scan实例通过setCacheBlock()方法来设置使用region服务器中的块缓存,如果MapReduce作业中使用扫描,这个方法应当被设为false,对于那些频繁访问行的行,建议使用块缓存
6)关闭Put上WAL
提高吞吐量方式,使用Put的writeToWAL(false)来关闭WAL,不过一旦region服务器故障就会丢失数据
6.配置
1)减少Zookeeper超时
默认在region服务器和ZooKeeper集群之间的超时时间是3分钟,通过zookeeper.session.timeout属性设置,在改变值之前,确认用户服务器上JVM的垃圾回收机制是受控的
2)增加处理线程
hbase.regionserver.handler.count属性定义了响应外部用户访问数据表请求的线程数,默认值10有些偏小,将这个值设置的高也有可能产生问题,并发的写请求造成压力
3)增加堆大小
如果用户使用更好的服务器,可以给HBase分配8G内存或更大,用户可以在hbase-env.sh文件中调整HBASE_HEAPSIZE的设置,master会默认1GB的堆运行,region服务器则会按照用户单独指定的堆空间运行
4)启动数据压缩
用户应当为存储文件启动压缩,尤其推荐使用Snappy或LZO压缩
5)增加region大小
默认region大小为256M,用户可以增加其大小,但是该参数的大小要仔细评估
6)调整块缓存大小
控制堆中块缓存大小的属性是一个浮动点数类型的百分比,默认值是20%,可以通过perf.hfile.block.cache.size属性改变这个值,看看是否存在许多块被换出的情况,如果存在,则可以考虑增加块缓存的大小。用户负载大多数为读请求是另一个增加缓存大小的原因。
7)调整memstore限制
内存存储占用的堆大小用hbase.regionserver.global.memstore.upperLimit属性来配置,默认值为40%,此外hbase.regionserver.global.memstore.lowerLimit属性(默认为35%)用户控制当服务器清空memstore之后剩余的大小,当用户主要在处理读请求时,可以考虑通知减少memstore的上线限来增加块缓存的空间
8)增加阻塞时存储文件数目
这个值通过hbase.hstore.blockingStoreFiles属性来设置的,它决定了当存储文件的数据达到阈值时,更新操作将会被阻塞,当应用经常遇到大负载的突发写请求时,用户可以稍微增加这个值来应对这种情况,其默认值是7
9)增加阻塞倍率
属性hbase.hregion.memstore.block.multiplier的默认值是2,当memstore达到属性multiplier乘以flush的大小限制时会阻止进一步更新
10)减少最大日志文件的限制
设置hbase.regionserver.maxlogs属性使得用户能够控制基于磁盘的WAL文件数目,进而控制刷写频率,该参数的默认值是32
负载测试
Hbase有自己的性能评价工具,名为PE,使用命令:hbase org.apache.hadoop.hbase.PerformanceEvaluation
YCSB:Yahoo的云服务基准测试系统也可用于对HBase集群进行超负荷测试
十一、集群管理
1.运维任务
1)减少节点
使用hbase-daemon.sh stop regionserver停止region服务器
如果关闭节点时负载均衡还在运行,则在复杂均衡和master恢复下线的region服务器之间可能存在竞争,要避免这种情况,使用shell命令:balance_switch false禁用负载均衡
HBase0.90.2之后引入了一种可以让region服务器逐渐减少其负载并停止服务的方法,使用graceful_stop.sh脚本来完成
用户也可以用graceful_stop.sh脚本来重启服务器,并将之前属于它的region移回原味(用户可能选择后者以保持数据的局部性),最简单的滚动重启可以使用如下命令(确认之前已经关闭负载均衡):
for i in 'cat conf/regionservers|sort;
do ./bin/graceful_stop.sh --restart --reload --debug $i;
done $> /tmp/log.txt &
2.数据任务
1)导入/导出
HBase发布了一些有用的工具,其中两个支持导入和导出MapReduce作业。这些工具包含在HBase的JAR文件中,用户可以通过hadoop jar命令来获得这些工具,使用格式:hadoop jar $HBASE_HOME/HBASE-0.91.0-SNAPSHOT.jar
你可能感兴趣的:(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集群所附带的挑战性,放大到了极致(目前是如
关于旗正规则引擎规则中的上传和下载问题
何必如此
文件下载 压缩 jsp 文件上传
文件的上传下载都是数据流的输入输出,大致流程都是一样的。
一、文件打包下载
1.文件写入压缩包
string mainPath="D:\upload\"; 下载路径
string tmpfileName=jar.zip; &n
【Spark九十九】Spark Streaming的batch interval时间内的数据流转源码分析
bit1129
Stream
以如下代码为例(SocketInputDStream):
Spark Streaming从Socket读取数据的代码是在SocketReceiver的receive方法中,撇开异常情况不谈(Receiver有重连机制,restart方法,默认情况下在Receiver挂了之后,间隔两秒钟重新建立Socket连接),读取到的数据通过调用store(textRead)方法进行存储。数据
spark master web ui 端口8080被占用解决方法
daizj
8080 端口占用 spark master web ui
spark master web ui 默认端口为8080,当系统有其它程序也在使用该接口时,启动master时也不会报错,spark自己会改用其它端口,自动端口号加1,但为了可以控制到指定的端口,我们可以自行设置,修改方法:
1、cd SPARK_HOME/sbin
2、vi start-master.sh
3、定位到下面部分
oracle_执行计划_谓词信息和数据获取
周凡杨
oracle 执行计划
oracle_执行计划_谓词信息和数据获取(上)
一:简要说明
在查看执行计划的信息中,经常会看到两个谓词filter和access,它们的区别是什么,理解了这两个词对我们解读Oracle的执行计划信息会有所帮助。
简单说,执行计划如果显示是access,就表示这个谓词条件的值将会影响数据的访问路径(表还是索引),而filter表示谓词条件的值并不会影响数据访问路径,只起到
spring中datasource配置
g21121
dataSource
datasource配置有很多种,我介绍的一种是采用c3p0的,它的百科地址是:
http://baike.baidu.com/view/920062.htm
<!-- spring加载资源文件 -->
<bean name="propertiesConfig"
class="org.springframework.b
web报表工具FineReport使用中遇到的常见报错及解决办法(三)
老A不折腾
finereport FAQ 报表软件
这里写点抛砖引玉,希望大家能把自己整理的问题及解决方法晾出来,Mark一下,利人利己。
出现问题先搜一下文档上有没有,再看看度娘有没有,再看看论坛有没有。有报错要看日志。下面简单罗列下常见的问题,大多文档上都有提到的。
1、repeated column width is largerthan paper width:
这个看这段话应该是很好理解的。比如做的模板页面宽度只能放
mysql 用户管理
墙头上一根草
linux mysql user
1.新建用户 //登录MYSQL@>mysql -u root -p@>密码//创建用户mysql> insert into mysql.user(Host,User,Password) values(‘localhost’,'jeecn’,password(‘jeecn’));//刷新系统权限表mysql>flush privileges;这样就创建了一个名为:
关于使用Spring导致c3p0数据库死锁问题
aijuans
spring Spring 入门 Spring 实例 Spring3 Spring 教程
这个问题我实在是为整个 springsource 的员工蒙羞
如果大家使用 spring 控制事务,使用 Open Session In View 模式,
com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.
百度词库联想
annan211
百度
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>RunJS</title&g
int数据与byte之间的相互转换实现代码
百合不是茶
位移 int转byte byte转int 基本数据类型的实现
在BMP文件和文件压缩时需要用到的int与byte转换,现将理解的贴出来;
主要是要理解;位移等概念 http://baihe747.iteye.com/blog/2078029
int转byte;
byte转int;
/**
* 字节转成int,int转成字节
* @author Administrator
*
简单模拟实现数据库连接池
bijian1013
java thread java多线程 简单模拟实现数据库连接池
简单模拟实现数据库连接池
实例1:
package com.bijian.thread;
public class DB {
//private static final int MAX_COUNT = 10;
private static final DB instance = new DB();
private int count = 0;
private i
一种基于Weblogic容器的鉴权设计
bijian1013
java weblogic
服务器对请求的鉴权可以在请求头中加Authorization之类的key,将用户名、密码保存到此key对应的value中,当然对于用户名、密码这种高机密的信息,应该对其进行加砂加密等,最简单的方法如下:
String vuser_id = "weblogic";
String vuse
【RPC框架Hessian二】Hessian 对象序列化和反序列化
bit1129
hessian
任何一个对象从一个JVM传输到另一个JVM,都要经过序列化为二进制数据(或者字符串等其他格式,比如JSON),然后在反序列化为Java对象,这最后都是通过二进制的数据在不同的JVM之间传输(一般是通过Socket和二进制的数据传输),本文定义一个比较符合工作中。
1. 定义三个POJO
Person类
package com.tom.hes
【Hadoop十四】Hadoop提供的脚本的功能
bit1129
hadoop
1. hadoop-daemon.sh
1.1 启动HDFS
./hadoop-daemon.sh start namenode
./hadoop-daemon.sh start datanode
通过这种逐步启动的方式,比start-all.sh方式少了一个SecondaryNameNode进程,这不影响Hadoop的使用,其实在 Hadoop2.0中,SecondaryNa
中国互联网走在“灰度”上
ronin47
管理 灰度
中国互联网走在“灰度”上(转)
文/孕峰
第一次听说灰度这个词,是任正非说新型管理者所需要的素质。第二次听说是来自马化腾。似乎其他人包括马云也用不同的语言说过类似的意思。
灰度这个词所包含的意义和视野是广远的。要理解这个词,可能同样要用“灰度”的心态。灰度的反面,是规规矩矩,清清楚楚,泾渭分明,严谨条理,是决不妥协,不转弯,认死理。黑白分明不是灰度,像彩虹那样
java-51-输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
bylijinnan
java
public class PrintMatrixClockwisely {
/**
* Q51.输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如:如果输入如下矩阵:
1 2 3 4
5 6 7 8
9
mongoDB 用户管理
开窍的石头
mongoDB用户管理
1:添加用户
第一次设置用户需要进入admin数据库下设置超级用户(use admin)
db.addUsr({user:'useName',pwd:'111111',roles:[readWrite,dbAdmin]});
第一个参数用户的名字
第二个参数
[游戏与生活]玩暗黑破坏神3的一些问题
comsci
生活
暗黑破坏神3是有史以来最让人激动的游戏。。。。但是有几个问题需要我们注意
玩这个游戏的时间,每天不要超过一个小时,且每次玩游戏最好在白天
结束游戏之后,最好在太阳下面来晒一下身上的暗黑气息,让自己恢复人的生气
&nb
java 二维数组如何存入数据库
cuiyadll
java
using System;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
namespace WindowsFormsApplication1
{
本地事务和全局事务Local Transaction and Global Transaction(JTA)
darrenzhu
java spring local global transaction
Configuring Spring and JTA without full Java EE
http://spring.io/blog/2011/08/15/configuring-spring-and-jta-without-full-java-ee/
Spring doc -Transaction Management
http://docs.spring.io/spri
Linux命令之alias - 设置命令的别名,让 Linux 命令更简练
dcj3sjt126com
linux alias
用途说明
设置命令的别名。在linux系统中如果命令太长又不符合用户的习惯,那么我们可以为它指定一个别名。虽然可以为命令建立“链接”解决长文件名的问 题,但对于带命令行参数的命令,链接就无能为力了。而指定别名则可以解决此类所有问题【1】。常用别名来简化ssh登录【见示例三】,使长命令变短,使常 用的长命令行变短,强制执行命令时询问等。
常用参数
格式:alias
格式:ali
yii2 restful web服务[格式响应]
dcj3sjt126com
PHP yii2
响应格式
当处理一个 RESTful API 请求时, 一个应用程序通常需要如下步骤 来处理响应格式:
确定可能影响响应格式的各种因素, 例如媒介类型, 语言, 版本, 等等。 这个过程也被称为 content negotiation。
资源对象转换为数组, 如在 Resources 部分中所描述的。 通过 [[yii\rest\Serializer]]
MongoDB索引调优(2)——[十]
eksliang
mongodb MongoDB索引优化
转载请出自出处:http://eksliang.iteye.com/blog/2178555 一、概述
上一篇文档中也说明了,MongoDB的索引几乎与关系型数据库的索引一模一样,优化关系型数据库的技巧通用适合MongoDB,所有这里只讲MongoDB需要注意的地方 二、索引内嵌文档
可以在嵌套文档的键上建立索引,方式与正常
当滑动到顶部和底部时,实现Item的分离效果的ListView
gundumw100
android
拉动ListView,Item之间的间距会变大,释放后恢复原样;
package cn.tangdada.tangbang.widget;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import andr
程序员用HTML5制作的爱心树表白动画
ini
JavaScript jquery Web html5 css
体验效果:http://keleyi.com/keleyi/phtml/html5/31.htmHTML代码如下:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="UTF-8" >
<ti
预装windows 8 系统GPT模式的ThinkPad T440改装64位 windows 7旗舰版
kakajw
ThinkPad 预装 改装 windows 7 windows 8
该教程具有普遍参考性,特别适用于联想的机器,其他品牌机器的处理过程也大同小异。
该教程是个人多次尝试和总结的结果,实用性强,推荐给需要的人!
缘由
小弟最近入手笔记本ThinkPad T440,但是特别不能习惯笔记本出厂预装的Windows 8系统,而且厂商自作聪明地预装了一堆没用的应用软件,消耗不少的系统资源(本本的内存为4G,系统启动完成时,物理内存占用比
Nginx学习笔记
mcj8089
nginx
一、安装nginx 1、在nginx官方网站下载一个包,下载地址是:
http://nginx.org/download/nginx-1.4.2.tar.gz
2、WinSCP(ftp上传工
mongodb 聚合查询每天论坛链接点击次数
qiaolevip
每天进步一点点 学习永无止境 mongodb 纵观千象
/* 18 */
{
"_id" : ObjectId("5596414cbe4d73a327e50274"),
"msgType" : "text",
"sendTime" : ISODate("2015-07-03T08:01:16.000Z"
java术语(PO/POJO/VO/BO/DAO/DTO)
Luob.
DAO POJO DTO po VO BO
PO(persistant object) 持久对象
在o/r 映射的时候出现的概念,如果没有o/r映射,就没有这个概念存在了.通常对应数据模型(数据库),本身还有部分业务逻辑的处理.可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不包含任何对数据库的操作.
VO(value object) 值对象
通
算法复杂度
Wuaner
Algorithm
Time Complexity & Big-O:
http://stackoverflow.com/questions/487258/plain-english-explanation-of-big-o
http://bigocheatsheet.com/
http://www.sitepoint.com/time-complexity-algorithms/