2014年7月31日星期四

Hadoop 运行中集群删除节点

core-site.xml 中增加配置:
  
     dfs.hosts.exclude
     excludes
  

excludes 是文件,位于 Hadoop 的安装目录下,用其列出需要删除的节点的 hostname 或 ip:port(推荐 hostname)。

运行命令:
$ hadoop dfsadmin -refreshNodes 
$ hadoop dfsadmin -report

hadoop dfsadmin -report 执行后可看到 excludes 中列出的节点的 Decommission Status 为: Decommission In Progress 或者该节点已消失(当时间足够长时)。

登录从集群中删除的节点,运行:
$ hadoop-daemon.sh stop datanode
$ hadoop-daemon.sh stop tasktracker


PS: 按正常理解, 有关 dfs. 开头的配置应该都是在 hdfs-site.xml 文件中配置,但这里并不是。另外, excludes 若位于 conf 目录下,dfs.hosts.exclude 指定其绝对路径,竟不管用。这都是坑啊。

2014年7月29日星期二

MongoDB cursor timeout

PHP 的 MongoDB 扩展里,设置查询超时:
MongoCursor::$timeout = -1;


之前,一直以为 find 之后的 cursor 设置 timeout 为 -1 后,应该就表示查询永不超时,但在循环结果集或是 count 时还是报 cursor timed out (timeout: 30000, time left: 0:0, status: 0)。参照 记一次MongoDB性能问题 找问题原因,也没解决。直到看了 PHP Mongo's driver has no effects on Mongo Cursor timeout 这里才知道,设置超时需要按上面来设置。

附火丁笔记里提到的查找方法:
使用 strace 跟踪了一下PHP脚本,发现进程卡在了recvfrom操作上:
shell> strace -f -r -p 
recvfrom(,
通过如下命令查询recvfrom操作的含义:
shell> apropos recvfrom
receive a message from a socket
或者按照下面的方式确认一下:
shell> lsof -p 
shell> ls -l /proc//fd/

2014年7月17日星期四

libboost_python-py27.so.1.53.o No such file or directory

系统升级后,就再也没跑过之前访问 Hadoop 的 Python 脚本,直到前天因测试 AWS 的 EMR, 才又捡起之前的代码。可一跑,问题也随之而来:报找不到库。
libboost_python-py27.so.1.53.o No such file or directory

sudo apt-get install libboost-all-dev 后,再执行,错误依旧存在。
后想可能版本问题,找到 libboost-python27* ,创建一个到 python-py27.so.1.53.o 的软链接应该也可以解决问题。但找遍了 /usr/lib, /usr/local/lib,连 libboost 开头的 so 也没一个。dpkg -S libboost-python 出来的是一堆 /usr/share 下的文档, .so 还是没影。

Google,找到这个Installing POV-Ray: configuration error,里面提到 apt-get install 后, libboost* 的库位于 /usr/lib/x86_64-linux-gnu/ 目录下。我的系统是 32 位, 尝试ls -al /usr/lib/i386-linux-gnu/libboost*后,果真 libboost 库在这目录下。
把 /usr/lib/i386-linux-gnu 目录 加入引入库的配置文件。 ldconfig 后,执行,顺利通过。

果然,系统升级还是有风险。