Hadoop & HBase安装笔记 – Pro Evolution Slawdan
Hadoop & HBase安装笔记
目标
在两台机器上安装Hadoop和HBase作为实验,两台机器分别作为主从。
背景环境
- 对Hadoop,HBase有一定了解
- CentOS 5
- JDK 1.6.0_25
- Hadoop 0.20.205.0
- HBase 0.90.4
安装Hadoop
主要参考:官方集群建立文档 http://hadoop.apache.org/common/docs/current/cluster_setup.html
次要参考:
- 官方单机建立文档 http://hadoop.apache.org/common/docs/current/single_node_setup.html
- HDFS默认配置 http://hadoop.apache.org/common/docs/current/hdfs-default.html
拓扑结构:
- A,B两台机器,A为NameNode + JobTracker + DataNode + TaskTracker, B仅为DataNode + TaskTracker
基本步骤:
按官方文档走即可,注意调整各种配置。在A上配置完毕以后,直接scp hadoop安装目录(包括conf)到B的对应目录,然后从A bin/start-all 启动。主从配置完全取决于 conf/masters 和 conf/slaves。
碰到的各种问题:
- 坑爹的公司服务器的SSH配置: 老实用rsa/dsa就好了……实在不行单开一个sshd服务也行。
- ssh参数: -i PrivKey文件地址 -p 端口号
- scp参数:-i PrivKey文件地址 -P 端口号
- sshd_config里确认两台机器的IP地址以及localhost都被允许:
- AllowUsers hadoop_user@127.0.0.1 hadoop_user@A hadoop_user@B
- AllowUsers支持IP通配符 “*, ?”
- service sshd reload 重启sshd
- cfengine对各种配置文件的保护:
- chattr +i 锁定修改
- 锁定以后最好再检查一遍防止正好碰上cfengine同步
- 需要重新修改的时候用chattr -i 解锁,解锁之前最好先备份一下……
- 如果在root用户下启动,可能会碰到 -jvm wrong parameter blahblah,可以修改 bin/hadoop, 找到 if [[ $EUID -eq 0 ]]; then,改掉子句里的参数列表,跟 else 子句相同即可。主要原因是root用户的 EUID 为0;以及jvm不同版本的启动参数不太相同导致。
- 一定要下载 0.20.205.0 以后版本,合并了可以和 HBase 兼容的代码分支 0.20-append。 启动的时候会报很多Warning $HADOOP_HOME deprecated blahblah,不需理会。
- 如果用 bin/start-all 偷懒方式启动,有可能因为配置错误什么的导致某些服务起不来,但不会有任何错误提示。最好使用 netstat -nlp | grep java 看下端口号50030, 50010, 50070, 还有JobTracker的自定义端口是否已经被监听了,如果没有,可以用对应的启动脚本单独启动,这样会输出具体的错误。
- 启动之前一定要修改 ulimit 的 -n 51200 和 -u unlimited 以上。否则会出现各种Fetch Failed。
安装HBase
前提:
必须已经正确安装了Hadoop,但可以不启动JobTracker,HBase有自己的MapRed
主要参考:
安装步骤:
建议先启动Standalone玩儿一下,然后再往Hadoop里配置,依照官方文档即可。
拓扑结构:
B为master,A和B均为regionserver
碰到的各种问题:
- 官方文档里说明了HBase与Hadoop的适配版本,主要是 0.20-append 分支是否合并进hadoop主干的问题。hadoop 0.20.205.0 已经合并,所以一定要用 0.20.205.0 以后版本的hadoop。
- 启动之前一定要修改 ulimit -n 51200 和 ulimit -u 51200 以上。
- 官方文档里提到的需要替换 lib/hadoop-core-….jar 的问题一定要做。否则启动时会出现 EOFException。由于实际版本号不同,所以直接把原jar移走,新jar放入即可。
- 0.20.205.0 需要同时把 hadoop/lib 里的commons-configuration-1.6.jar 也考到 hbase/lib里。否则启动master时会出现master.HMaster exception of “NoClassDefFoundError” (参考 http://javoft.net/2011/09/hbase-hmaster-%E6%97%A0%E6%B3%95%E5%90%AF%E5%8A%A8-call-to-failed-on-local-exception/)
- 这两个jar最好设置与原来的jar相同的属性: rwsrwsrwt:
- 设置方法: chmod a+x, chmod ug+s, chmod o+t
- bin/start-hbase 会自动启动一个zookeeper。当然可以自行配置zookeeper。
- bin/stop-hbase 貌似只会停止zookeeper和master, 在 B(master)上会遗留 regionserver,可以kill 进程或者 bin/hbase-daemon.sh stop regionserver
- 同样使用 netstat -nlp | grep java 检查端口号,HBase相关服务端口均以 600开头。
Happy Starting
TODO:
- ZooKeeper
- 各种监视脚本
- Hadoop NameNode单点
- HBase master单点
- 修改集群需要停机……
- 测试各种文件大小空间占用
- 各种文件大小和负载下的Benchmark
- 在超过5台服务器上配置集群。貌似由于现在只有2台机器共4块硬盘,而默认dfs.replication为3,所以造成硬盘随机读写,简单benchmark时的IO吞吐低的离谱(w:30M/s, r: 150M/s)……