hadoop和hbase节点添加和单独重启
有时候hadoop或hbase集群运行时间久了后,某些节点就会失效,这个时候如果不想重启整个集群(这种情况在很多情况下已经不被允许),这个时候可以单独重启失效节点。
HADOOP:

hadoop中重启单节点的方法和增加新节点其实是一样的。
1、我们先看下如何了解hadoop机器的情况,可以用命令:
hadoop dfsadmin -report 查看集群容量情况,很多情况下失效节点也可以从这里了解到(比如失效节点容量显示为0)。
也可以用web查看:http://ip:54030/jobtracker.jsp
2、重启或添加节点:
$bin/hadoop-daemon.sh start datanode
$bin/hadoop-daemon.sh start tasktracker
当然,添加的话需要copy配置文件到新节点。重启的话先 $bin/hadoop-daemon.sh stop datanode/ tasktracker
3、重新balancer(可选)
$bin/hadoop balancer
其实集群自己会balancer,当然也可以像上面那样手动balancer,不然在繁忙时段最好避免。

HBASE:
很多时候,节点失效是因为pid文件被删除引起(默认pid文件中/tmp下),所以最好把很多默认是/tmp的目录修改成自己的目录,比如hbase的pid配置可以在hbase-env.sh中,修改export HBASE_PID_DIR=/var/hadoop/pids就可以。hbase节点失效常对应60020端口异常。
进入hbase shell
1、查看节点情况:
status
当然,也可以通过web页面查看(如果服务开放的话):
http://serviceIp:60010/master.jsp
http://serviceIp:60030/regionserver.jsp

http://serviceIp:60010/zk.jsp

2、重启
$bin/hbase-daemon.sh stop regionserver
$bin/hbase-daemon.sh start regionserver
也可以添加新的master(默认只有一个master),$bin/hbase-daemon.sh start master

create 'NESO_Real', {NAME => 'SO', VERSIONS => '1', COMPRESSION => 'SNAPPY', BLOCKCACHE => true}

访问hbase,以及操作hbase,命令不用使用分号
hbase shell 进入hbase

list 查看表
hbase shell -d

hbase(main):024:0> scan '.META.'

=============小例子===================================================

1. 创建一个表member
hbase(main):025:0> create 'member','m_id','address','info'

2.list #查看所有表

3.查看表描述
hbase(main):028:0> describe 'member'

4. scan浏览表中数据
scan 'member'

5.
删除一个列族m_id:先将表disable(如果表中之前有数据的话,会把数据清空)
hbase(main):030:0> disable 'member'

hbase(main):033:0> is_enabled 'member'

hbase(main):034:0> alter 'member',{NAME=>'m_id',METHOD=>'delete'}

最后enable,否则不能进行其他操作
hbase(main):038:0> enable 'member'

6.插入几条记录

put'member','scutshuxue','info:age','24'

put'member','scutshuxue','info:birthday','1987-06-17'

put'member','scutshuxue','info:company','alibaba'

put'member','scutshuxue','address:contry','china'

put'member','scutshuxue','address:province','zhejiang'

put'member','scutshuxue','address:city','hangzhou'

scan 'member'

7.获取数据
获取一个id的所有数据
hbase(main):001:0>get 'member','scutshuxue'

获取一个id,一个列族的所有数据
hbase(main):002:0>get 'member','scutshuxue','info'

获取一个id,一个列族中一个列的所有数据
hbase(main):002:0>get 'member','scutshuxue','info:age'

通过timestamp来获取两个版本的数据
hbase(main):010:0>get 'member','scutshuxue',{COLUMN=>'info:age',TIMESTAMP=>1321586238965}

8. 更新一条记录

将scutshuxue的年龄改成99
hbase(main):004:0>put 'member','scutshuxue','info:age' ,'99'

10.
查询表中有多少行:
hbase(main):019:0>count 'member'

11.
删除整行
hbase(main):001:0>deleteall 'member','xiaofeng'

12.
删除id为xiaofeng的值的‘info:age’字段
hbase(main):016:0>delete 'member','temp','info:age'

13.
给‘xiaofeng’这个id增加'info:go'字段,并使用counter实现递增
hbase(main):041:0> incr 'member','xiaofeng','info:go'
连续执行incr以上,COUNTER VALUE 的值会递增,通过get_counter

获取当前count的值
hbase(main):069:0>get_counter 'member','xiaofeng','info:age'

hbase(main):058:0>get 'member','xiaofeng','info:go'

获取当前count的值
hbase(main):069:0>get_counter 'member','xiaofeng','info:age'

=============================相关删除=========================

1.
删除一个列族:先将表disable(如果表中之前有数据的话,会把数据清空)
hbase(main):030:0> disable 'member'

hbase(main):033:0> is_enabled 'member'

hbase(main):034:0> alter 'member',{NAME=>'m_id',METHOD=>'delete'}

最后enable,否则不能进行其他操作
hbase(main):038:0> enable 'member'

2.
删除整行
hbase(main):001:0>deleteall 'scores','xiaofeng'

3.
将整张表清空:
hbase(main):035:0>truncate 'scores'
hbase是先将掉disable掉,然后drop掉后重建表来实现truncate的功能

4.
drop一个表(先disable,在drop)
hbase(main):029:0>disable 'scores'
hbase(main):029:0>drop 'scores'
=====================基本操作===========================================

1.
查询表是否存在
hbase(main):021:0>exists 'scores'

2.
判断表是否enable
hbase(main):034:0>is_enabled 'scores'

3.
判断表是否disable
hbase(main):032:0>is_disabled 'scores'

4.
列出所有的表
hbase(main):028:0>list

5.
创建表member
hbase(main):025:0> create 'member','m_id','address','info'

6.
查看表描述
hbase(main):028:0> describe 'member'

=================查询操作================================================
1.scan '表名' #查看所有数据

2.get是根据主键查看一列
get '表名','主键'[,'列簇名'][,'列簇名:列名']

=============================================================
过滤查询表的内容
1.FirstKeyOnlyFilter() 得到每一行的列族info的第一个列
hbase(main):002:0> scan 'student',{COLUMNS=>'info',FILTER=>"(FirstKeyOnlyFilter())"}

2.查看列簇是info,LIMIT是显示的行数,STARTROW是开始行对应的是主键
hbase(main):008:0> scan 'student',{COLUMNS=>['info'],LIMIT=>4,STARTROW=>'200977100710'}

3.查看列簇是info,name
hbase(main):007:0> scan 'student',{COLUMNS=>['info','name'],LIMIT=>4,STARTROW=>'200977100710'}

查看HBase中表对应的元数据信息:

scan '.META.', {STARTROW=>'TrojanInfo', LIMIT=>30}

HBase强制删除一个表

由于内网测试环境hbase并没有安装“SNAPPY”压缩,而建表时执行了

[plain] view plaincopy
01.alter 'TrojanInfo', {NAME => 'i', COMPRESSION => 'SNAPPY'}

强制删除表:

1、强制删除该表在hdfs上的所有文件(路径根据实际情况而定):

[sql] view plaincopy
01../hadoop fs -rmr /hbase/TrojanInfo
2、删除该表在HBase系统表.META.中的记录:
A、首先从.META.中查询出表 TrojanInfo在.META.中的rowkey,这可以通过scan '.META.', {STARTROW=>'TrojanInfo', LIMIT=>4},然后手动筛选(LIMIT等于表的region数即可);
B、然后删除该rowkey下的3个字段(假设查询出的rowkey为TrojanInfo,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.)

[plain] view plaincopy
01.delete '.META.','TrojanInfo,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.','info:server'
02.delete '.META.','TrojanInfo,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.','info:serverstartcode'
03.delete '.META.','TrojanInfo,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.','info:regioninfo'
C、重启hbase即可删除表 TrojanInfo

UPDATE S
SET SODate = T.SODate,
Status1 = T.Status,
LastEditUser ='SO',
LastEditDate = GETDATE()
FROM TableName S
INNER JOIN TableName T
ON S.SONumber = T.SONumber

常用到的HBase启动脚本有:
1.$HBASE_HOME/bin/start-hbase.sh
启动整个集群

2.$HBASE_HOME/bin/stop-hbase.sh
停止整个集群

3.$HBASE_HOME/bin/hbase-daemons.sh
启动或停止,所有的regionserver或zookeeper或backup-master

4.$HBASE_HOME/bin/hbase-daemon.sh
启动或停止,单个master或regionserver或zookeeper

以start-hbase.sh为起点,可以看看脚本间的一些调用关系
start-hbase.sh的流程如下:
1.运行hbase-config.sh(作用后面解释)
2.解析参数(0.96版本及以后才可以带唯一参数autorestart,作用就是重启)
3.调用hbase-daemon.sh来启动master;调用hbase-daemons.sh来启动regionserver zookeeper master-backup

hbase-config.sh的作用:
装载相关配置,如HBASE_HOME目录,conf目录,regionserver机器列表,JAVA_HOME目录等,它会调用$HBASE_HOME/conf/hbase-env.sh

hbase-env.sh的作用:
主要是配置JVM及其GC参数,还可以配置log目录及参数,配置是否需要hbase管理ZK,配置进程id目录等

hbase-daemons.sh的作用:
根据需要启动的进程,
如为zookeeper,则调用zookeepers.sh
如为regionserver,则调用regionservers.sh
如为master-backup,则调用master-backup.sh

zookeepers.sh的作用:
如果hbase-env.sh中的HBASE_MANAGES_ZK" = "true",那么通过ZKServerTool这个类解析xml配置文件,获取ZK节点列表(即hbase.zookeeper.quorum的配置值),然后通过SSH向这些节点发送远程命令:
cd ${HBASE_HOME};
$bin/hbase-daemon.sh --config ${HBASE_CONF_DIR} start/stop zookeeper

regionservers.sh的作用:
与zookeepers.sh类似,通过${HBASE_CONF_DIR}/regionservers配置文件,获取regionserver机器列表,然后SSH向这些机器发送远程命令:
cd ${HBASE_HOME};
$bin/hbase-daemon.sh --config ${HBASE_CONF_DIR} start/stop regionserver

master-backup.sh的作用:
通过${HBASE_CONF_DIR}/backup-masters这个配置文件,获取backup-masters机器列表(默认配置中,这个配置文件并不存在,所以不会启动backup-master),然后SSH向这些机器发送远程命令:
cd ${HBASE_HOME};
$bin/hbase-daemon.sh --config ${HBASE_CONF_DIR} start/stop master --backup

hbase-daemon.sh的作用:
无论是zookeepers.sh还是regionservers.sh或是master-backup.sh,最终都会调用本地的hbase-daemon.sh,其执行过程如下:
1.运行hbase-config.sh,装载各种配置(java环境、log配置、进程ID目录等)
2.如果是start命令?
滚动out输出文件,滚动gc日志文件,日志文件中输出启动时间+ulimit -a信息,如
“Mon Nov 26 10:31:42 CST 2012 Starting master on dwxx.yy.taobao”
"..open files (-n) 65536.."
3.调用$HBASE_HOME/bin/hbase start master/regionserver/zookeeper
4.执行wait,等待3中开启的进程结束
5.执行cleanZNode,将regionserver在zk上登记的节点删除,这样做的目的是:在regionserver进程意外退出的情况下,可以免去3分钟的ZK心跳超时等待,直接由master进行宕机恢复
6.如果是stop命令?
根据进程ID,检查进程是否存在;调用kill命令,然后等待到进程不存在为止
7.如果是restart命令?
调用stop后,再调用start。。。

$HBASE_HOME/bin/hbase的作用:
最终启动的实现由这个脚本执行
1.可以通过敲入$HBASE_HOME/bin/hbase查看其usage
DBA TOOLS
shell run the HBase shell
hbck run the hbase 'fsck' tool
hlog write-ahead-log analyzer
hfile store file analyzer
zkcli run the ZooKeeper shell
PROCESS MANAGEMENT
master run an HBase HMaster node
regionserver run an HBase HRegionServer node
zookeeper run a Zookeeper server
rest run an HBase REST server
thrift run the HBase Thrift server
thrift2 run the HBase Thrift2 server
avro run an HBase Avro server

PACKAGE MANAGEMENT
classpath dump hbase CLASSPATH
version print the version
or
CLASSNAME run the class named CLASSNAME

2.bin/hbase shell,这个就是常用的shell工具,运维常用的DDL和DML都会通过此进行,其具体实现(对hbase的调用)是用ruby写的

3.bin/hbase hbck, 运维常用工具,检查集群的数据一致性状态,其执行是直接调用
org.apache.hadoop.hbase.util.HBaseFsck中的main函数

4.bin/hbase hlog, log分析工具,其执行是直接调用
org.apache.hadoop.hbase.regionserver.wal.HLogPrettyPrinter中的main函数

5.bin/hbase hfile, hfile分析工具,其执行是直接调用
org.apache.hadoop.hbase.io.hfile.HFile中的main函数

6.bin/hbase zkcli,查看/管理ZK的shell工具,很实用,经常用,比如你可以通过(get /hbase-tianwu-94/master)其得知当前的active master,可以通过(get /hbase-tianwu-94/root-region-server)得知当前root region所在的server,你也可以在测试中通过(delete /hbase-tianwu-94/rs/dwxx.yy.taobao),模拟regionserver与ZK断开连接,,,
其执行则是调用了org.apache.zookeeper.ZooKeeperMain的main函数

7.回归到刚才hbase-daemon.sh对此脚本的调用为:
$HBASE_HOME/bin/hbase start master/regionserver/zookeeper
其执行则直接调用
org.apache.hadoop.hbase.master.HMaster
org.apache.hadoop.hbase.regionserver.HRegionServer
org.apache.hadoop.hbase.zookeeper.HQuorumPeer
的main函数,而这些main函数就是了new一个了Runnable的HMaster/HRegionServer/QuorumPeer,在不停的Running...

8.bin/hbase classpath 打印classpath

9.bin/hbase version 打印hbase版本信息

10.bin/hbase CLASSNAME, 这个很实用,所有实现了main函数的类都可以通过这个脚本来运行,比如前面的hlog hfile hbck工具,实质是对这个接口的一个快捷调用,而其他未提供快捷方式的class我们也可以用这个接口调用,如Region merge 调用:
$HBASE_HOME/bin/hbase/org.apache.hadoop.hbase.util.Merge

脚本使用小结:
1.开启集群,start-hbase.sh
2.关闭集群,stop-hbase.sh
3.开启/关闭所有的regionserver、zookeeper,hbase-daemons.sh start/stop regionserver/zookeeper
4.开启/关闭单个regionserver、zookeeper,hbase-daemon.sh start/stop regionserver/zookeeper
5.开启/关闭master hbase-daemon.sh start/stop master, 是否成为active master取决于当前是否有active master
两个进阶脚本
6.rolling-restart.sh 可以用来挨个滚动重启
7.graceful_stop.sh move服务器上的所有region后,再stop/restart该服务器,可以用来进行版本的热升级

几个细节:
1。 hbase-daemon.sh start master 与 hbase-daemon.sh start master --backup,这2个命令的作用一样的,是否成为backup或active是由master的内部逻辑来控制的

2。stop-hbase.sh 不会调用hbase-daemons.sh stop regionserver 来关闭regionserver, 但是会调用hbase-daemons.sh stop zookeeper/master-backup来关闭zk和backup master,关闭regionserver实际调用的是hbaseAdmin的shutdown接口

3。通过$HBASE_HOME/bin/hbase stop master关闭的是整个集群而非单个master,只关闭单个master的话使用$HBASE_HOME/bin/hbase-daemon.sh stop master

4。$HBASE_HOME/bin/hbase stop regionserver/zookeeper 不能这么调,调了也会出错,也没有路径会调用这个命令,但是可以通过$HBASE_HOME/bin/hbase start regionserver/zookeeper 来启动rs或者zk,hbase-daemon.sh调用的就是这个命令

导数据方法:

当我们用HBase 存储实时数据的时候, 如果要做一些数据分析方面的操作, 就比较困难了, 要写MapReduce Job。 Hive 主要是用来做数据分析的数据仓库,支持标准SQL 查询, 做数据分析很是方便,于是便很自然地想到用Hive来载入HBase的数据做分析, 但是很奇怪地是, 上网查了一下, 只看到以下两种情况:

1. 如何用Hive 往HBase里面插入大量的数据。

2. Hive 与HBase集成, 直接从Hive里面连HBase的数据库进行查询。参考链接: https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration

选项1是我们需求的逆操作, 直接忽略, 选项2, 虽然没有做专门的Benchmark, 但总感觉直接对HBase进行查询操作不怎么靠谱, 如果我们要频繁做很多类型的数据分析, 那HBase的压力一定会倍增。

难道没有把HBase里面的数据直接导入到Hive当中的工具或者方法吗?

找了一会, 似乎没找到, 那么只好自己想一个解决方案了。

思路:

利用选项2, 先打通Hive对HBase指定表的全表访问, 再建立一个新的空表, 把查询出来的数据全部导入到新表当中, 以后的所有数据分析操作在新表中完成。

说干就干, 让我们试一个简单的例子。

首先在HBase里面建一个表, 名为 student, 包含 id 和 name 两个column.
hbase shell

create 'student', 'id', 'name'
向表中插入两行数据
put 'student', 'row1', 'id:val', '1'
put 'student', 'row1', 'name:val', 'Tony'
put 'student', 'row2', 'id:val', '2'
put 'student', 'row2', 'name:val', 'Mike'
注意:在插入数据的时候一定要指定column (如id:val, name:value) 直接使用column family (如 id, name) 去存数据会导致后面Hive 建表的时候有问题。

扫描此表, 确定数据已经插入
scan 'student'
ROW COLUMN+CELL
row1 column=id:val, timestamp=1384939342989, value=1
row1 column=name:val, timestamp=1384939365511, value=Tony
row2 column=id:val, timestamp=1384939351444, value=2
row2 column=name:val, timestamp=1384939379245, value=Mike
建立Hive 对HBase的访问

参考: https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration

这里我们使用的是Pivotal 公司的Pivotal Hadoop,
hive --auxpath /usr/lib/gphd/hive/lib/hive-hbase-handler-0.11.0-gphd-2.1.1.0.jar,/usr/lib/gphd/hbase/hbase.jar,/usr/lib/gphd/zookeeper/zookeeper.jar,/usr/lib/gphd/hbase/lib/guava-11.0.2.jar -hiveconf hbase.zookeeper.quorum=centos62-3,centos62-4,centos62-5
解释一下参数:

后面三个jar 包主要是Hive 访问时需要用到的, hhbase.zookeeper.quorum=centos62-3,centos62-4,centos62-5 是指hbase使用的是这三个zookeeper, 这样就不用指定hbase master了。

这个命令运行完以后会打开Hive 的输入终端。

从Hive建立可以访问HBase的外部表
CREATE EXTERNAL TABLE student(key string, id int, name string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "id:val,name:val")
TBLPROPERTIES("hbase.table.name" = "student");
扫描student表, 确认访问成功:
hive> select * from student;
OK
row1 1 Tony
row2 2 Mike
但是此时这个表实际上是一个虚拟表, 实际的数据还在HBase中。 下面需要在Hive中另建一个结构一样的空表, 再把数据导出来。

Hive中建立一个新的空表
CREATE TABLE new_student (
key string,
id INT,
name STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
将数据从HBase中导入到新的Hive表中
hive> INSERT OVERWRITE TABLE new_student SELECT * FROM student;
确认新表中数据正确:
hive> select * from new_student;
OK
row1 1 Tony
row2 2 Mike
至此大功告成!

以后所有复杂的数据查询和数据分析都可以在new_student表中完成。

查看端口: netstat -npl|grep 9090
查找文件: find / -name ""
netstat -npl|grep 2181
查看程序对应进程号:ps –ef|grep 端口名
查看磁盘剩余空间:df -hl

多Shard 的时候如果有节点down掉,访问时忽略失败节点:shards.tolerant=true

/home/jw4r/solr-4.6.0/example/cloud-scripts

./zkcli.sh -cmd upconfig -zkhost 10.16.236.108 -confdir /home/jw4r/solr/inst/solr_4.6.0_2shard/shard1/solr/customerfactbase/conf -confname customerfactbase

./zkcli.sh -cmd upconfig -zkhost 10.16.236.108 -confdir /home/jw4r/solr/inst/solr_4.6.0_2shard/shard1/solr/ownershipstatistics/conf -confname ownershipstatistics

./zkcli.sh -cmd upconfig -zkhost 10.16.236.108 -confdir /home/jw4r/solr/inst/solr_4.6.0_2shard/shard1/solr/ownershipstatistics/conf -confname ownershipstatistics
<cores>
<core collection="customerfactbase" shard="shard1" name="customerfactbase" instanceDir="/home/jw4r/solr/inst/solr_4.6.0_2shard/shard1/solr/customerfactbase"/>
<core collection="ownershipstatistics" shard="shard1" name="ownershipstatistics" instanceDir="/home/jw4r/solr/inst/solr_4.6.0_2shard/shard1/solr/ownershipstatistics"/>
</cores>

/opt/app/neso-sobase/solrA/inst/so

http://10.1.24.133:8002/master/customermc/update/?stream.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E&stream.contentType=text/xml;charset=utf-8&commit=true

删除 Solr数据 :http://10.16.236.108:7070/solr/customerfactbase/update/?stream.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E&stream.contentType=text/xml;charset=utf-8&commit=true

DIH 捞取数据:http://10.1.24.133:8002/master/customermc/admin/dataimport.jsp?handler=/dataimport

http://10.1.24.133:8002/master/customermc/update/?stream.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E&stream.contentType=text/xml;charset=ut8&commit=true

单节点查询:

http://10.1.24.133:7003/solr/customercallreason?shards=10.1.24.133:7003/solr

HBase相关的更多相关文章

  1. HBase相关的一些点

    1.在运行Hbase时,如果遇到出错之后: 可以通过{HBASE_HOME}目录,我的是在/usr/soft/hbase下的logs子目录中的日志文件查看错误原因.2.启动关闭Hadoop和HBase ...

  2. Spark-读写HBase,SparkStreaming操作,Spark的HBase相关操作

    Spark-读写HBase,SparkStreaming操作,Spark的HBase相关操作 1.sparkstreaming实时写入Hbase(saveAsNewAPIHadoopDataset方法 ...

  3. HBase 相关API操练(三):MapReduce操作HBase

    MapReduce 操作 HBase 在 HBase 系统上运行批处理运算,最方便和实用的模型依然是 MapReduce,如下图所示. HBase Table 和 Region 的关系类似 HDFS ...

  4. HBase 相关API操练(一):Shell操作

    HBase 为用户提供了一个非常方便的使用方式, 我们称之为“HBase Shell”. HBase Shell 提供了大多数的 HBase 命令, 通过 HBase Shell 用户可以方便地创建. ...

  5. 暑假第五周总结(学习HBASE相关知识)

    本周主要对HBASE的相关知识进行了学习,主要是通过视频的讲解了解到了HBASE的存储机制,HBASE的机制与普通的关系型数据库完全不同,HBASE以列进行存储,其主要执行的就是增删查操作,其更改主要 ...

  6. 大数据Hbase相关运维题

    1.启动先电大数据平台的 Hbase 数据库,其中要求使用 master 节点的RegionServer.在 Linux Shell 中启动 Hbase shell,查看 HBase 的版本信息.(相 ...

  7. HBase篇--HBase操作Api和Java操作Hbase相关Api

    一.前述. Hbase shell启动命令窗口,然后再Hbase shell中对应的api命令如下. 二.说明 Hbase shell中删除键是空格+Ctrl键. 三.代码 1.封装所有的API pa ...

  8. hbase 相关

    ----------------------------------------hbase的 安装---------------------------------------- 本地安装: 1 解压 ...

  9. HBase相关问题

    HBase和Hive的异同之处? 共同点:HBase与Hive都是架构在Hadoop之上,底层存储都是使用HDFS 区别: 1). Hive是建立在Hadoop之上为了减少MapReduce jobs ...

随机推荐

  1. Anciroid的IPC机制-Binder概述

    在Linux系统中,是以进程为单位分配和管理资源的.出于保护机制,一个进程不能直接访问另一个进程的资源,也就是说,进程之间互相封闭.但是,在一个复杂的应用系统中,通常会使用多个相关的进程来共同完成一项 ...

  2. svn patch用法

    最近遇到了一个patch的使用场景: 有一个同事对源码做了一些修改,但是又不想将源码提交到SVN服务器,而我又想得到他所做的修改. patch的使用方法: 创建patch 在要导出“修改”的目录中,单 ...

  3. [后端人员耍前端系列]KnockoutJs篇:快速掌握KnockoutJs

    一.引言 之前这个系列文章已经介绍Bootstrap.由于最近项目中,前端是Asp.net MVC + KnockoutJs + Bootstrap来做的.所以我又重新开始写这个系列.今天就让我们来看 ...

  4. 如何为编程爱好者设计一款好玩的智能硬件(七)——LCD1602点阵字符型液晶显示模块驱动封装(上)

    当前进展: 一.我的构想:如何为编程爱好者设计一款好玩的智能硬件(一)——即插即用.积木化.功能重组的智能硬件模块构想 二.别人家的孩子:如何为编程爱好者设计一款好玩的智能硬件(二)——别人是如何设计 ...

  5. Unity3d使用经验总结 数据驱动篇

    我这里说的数据驱动,不是指某种框架,某种结构,或者某种编码方式. 我要说的,是一种开发方式. 大家都知道,U3D中,我们可以为某个对象编写一个脚本,然后将这个脚本挂在对象上,那这个对象就拥有了相应的能 ...

  6. Yii Model中添加默认搜索条件

    在查询中增加条件 public function defaultScope() { return array( 'condition' => " is_deleted = 0" ...

  7. NanoProfiler - 适合生产环境的性能监控类库 之 大数据篇

    上期回顾 上一期:NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇 上次介绍了NanoProfiler的基本功能,提到,NanoProfiler实现了MiniProfiler欠 ...

  8. Spring Trasnaction管理(3)- 事务嵌套

    问题导读 Spring 如何管理嵌套的事务 Spring事务传播机制 Nested 和 RequireNew 有何区别 事务传播机制 事务的传播机制应该都比较熟悉 在日常开发中会遇到需要事务嵌套的情况 ...

  9. 《Effective Java》—— 创建与销毁对象

    本篇主要总结的是<Effecticve Java>中关于创建和销毁对象的内容. 比如: 何时以及如何创建对象 何时以及如何避免创建对象 如何确保及时销毁 如何管理对象销毁前的清理动作 考虑 ...

  10. salesforce 零基础开发入门学习(十一)sObject及Schema深入

    sObject在salesforce中占有举足轻重的位置,除了在数据库中数据以外,我们还应该关心一下他的元信息.元信息封装在Schema命名空间内. 作为面向对象语言,我们可以畅想一下如果我们是设计人 ...