`
kabike
  • 浏览: 598896 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论
文章列表
原来mongodb的文档上一直宣称是2阶段协议提交来保证3个config server保持强一致性,然而其实不是的 https://jira.mongodb.org/browse/DOCS-5289 有人看源代码,发现mongodb源码和文档不一致,提交了这个jira,导致mongodb连官方文档都改了...噗... 由于各种原因导致config server不一致的时候,mongos日志中出现了 will not perform auto-split because config servers are inconsistent 可以用dbHash来比较3个config server,找到不 ...
建立无密钥登录最好用ssh-copy-id 但是它有个问题是每次都无脑的在authorized_keys文件中添加数据,容易造成重复,而且如果有很多台服务器要建立的话要运行多次,多次输入"yes",多次输入密码. 利用expect可以实现自动安装 https://github.com/kabike/autoSSHKey
expect脚本的开头一般都写/usr/bin/expect -f,这个-f选项有什么作用呢? 比如如下脚本 #!/usr/bin/expect -f for {set i 0} {$i < $argc} {incr i} { puts "arg $i: [lindex $argv $i]" } 运行./bar.sh -c "puts foo" hehe bar输出如下 引用foo arg 0: hehe arg 1: bar 如果改成#!/usr/bin/expect,则输出如下 引用arg 0: -c arg 1: puts fo ...
1 查询某个yum源安装了哪些包 yum install yum-utils yumdb search from_repo bar 2 查看哪些包依赖krb5-libs repoquery --whatrequires krb5-libs 3 利用xargs -n 1,解压多个tar文件 echo *.tgz | xargs -n 1 tar xf 4 利用tee和exec,将一个脚本中所有的输出额外添加到文件中 exec &> >(tee -a "bar.log") echo "This will be logged to the fil ...
DBQuery.shellBatchSize = 300 http://stackoverflow.com/questions/3705517/how-to-print-out-more-than-20-items-documents-in-mongodbs-shell
各种地方都能配置zookeeper的log4j,真是太烦人了.给用户太多的选择,并不一定能更好的提升用户体验

linux时间同步

我一直以为要用cron job和ntpdate,现在发现应该用ntpd. http://www.ansen.org/2014/01/linuxntpdntpdate_21.html
最近看了下clojure的并发,其中提到了agent.agent的原理是把对agent的action提交到线程池中运行.它保证线程安全的措施是对每一个agent,同时只有一个actio 在运行. 下面做一个简单的对比,多个线程多次对同一个StringBuilder进行append,如果不同步,结果是不正确的. final StringBuilder sb = new StringBuilder(); ExecutorService pool = Executors.newFixedThreadPool(Runtime .getRuntime().availableProce ...
storm中有时需要添加一些metrics监控项,这时需要添加metrics. 在spout或者bolt的prepare方法中注册metrics public void prepare(@SuppressWarnings("rawtypes") Map stormConf, TopologyContext context, OutputCollector collector) { this.collector = collector; barMetric = new CountMetric(); context.registerMetric(&qu ...
storm中有种应用场景,是迷你批量,比如积攒一定数量的tuple,超过一定时间或者数量之后,把这些tuple统一处理. 想到了以下三种思路 1 在bolt中额外启动一个线程.不过在bolt中启动线程就要考虑并发的问题 2 定义另一个command stream,根据需要向这个command stream发tuple.bolt根据tuple的sourceStreamId判断是正常的stream 还是command stream. 这样需要在建立拓扑时有一些额外操作,比如为command stream建立一个spout,每个bolt用allGrouping从command stream的spout ...
最近用storm的过程中发现了一个问题,根源也是hostname获取的不正确.和http://kabike.iteye.com/blog/2111791问题类似 storm,hadoop这些java项目在linux上取得hostname的时候,不是简单调用hostname这个命令,而是调用 InetAddress.getLocalHost().getCanonicalHostName() 显而易见,如果/etc/hosts把hostname设置成127.0.0.1这个回环IP,就很有可能把hostname取成localhost

java的内存counter

 
假设需要在内存中维护一个计数器,在storm tuple来时更新计数器的值,最终统一提交到数据库 可以用commons-collection中的Bag或者MultiValueMap,不过效率不高. 用java的Map放Integer主要问题在于Integer是不可变类,每次需要构造新的对象,开销比较大,因此尝试了common-lang中的MutableInt和java.util中的AtomicInteger,这俩的效率不相上下. 不过最快的方式是在Map中放int数组...不过优势也不是特别明显 int size = 10000000; // 1 long ...
官方文档写的还行.补充几点 1 如果没有自动failover,两个namenode启动后都是standby状态 文档上说用 "hdfs haadmin -failover"命令使其中一个active. hdfs haadmin -failover命令正确用法是 引用hdfs haadmin -failover node13 node14 2 如果hbase想使用hdfs的ha,需要把hdfs的core-site.xml hdfs-site.xml加入classpath.比如在hbase的conf建立这两个文件的链接,或者在hbase-env.sh加到classpath
就说hdfs的checkpoint node吧,它说 引用Multiple checkpoint nodes may be specified in the cluster configuration file. 哥,你敢具体写么?你这东西各种bug你知道么? https://issues.apache.org/jira/browse/HDFS-7871 2.7才fix,之前是不是根本没人用
https://issues.apache.org/jira/browse/KAFKA-369 使用consumer的时候要指定zookeeper,使用producer要指定broker.一个集群两种配置,很容易出错.用户体验不好,差评 而且kafka的文档也相当糟糕了...simple consumer根本就没有group的概念,0.8.2以后的java producer也挺模糊. 唉
Global site tag (gtag.js) - Google Analytics