好久没有部署集群了,需要测试性能,本次部署记录如下:
HBase-0,94.5+Hadoop-1.0.4,已经安装好了java,3台机器,1台namenode/master,2台datanode/regionserver
用户名可以用hadoop这样隔离起来挺好,不过我直接使用了当前用户名
先设置/etc/hosts
10.92.2.75 c1.N2.Domino.narwhal.pdl.cmu.local
10.92.2.64 c2.N2.Domino.narwhal.pdl.cmu.local
10.92.2.78 c3.N2.Domino.narwhal.pdl.cmu.local
再设置机器免秘要登录
$ wget http://mirror.olnevhost.net/pub/apache/hadoop/common/stable1/hadoop-1.0.4-bin.tar.gz
$ tar -zxf hadoop-1.0.4-bin.tar.gz -C ~/local/opt
$ cd ~/local/opt/hadoop-1.0.4
JAVA_HOME
$ echo $JAVA_HOME
/usr/lib/jvm/java
$ vim conf/hadoop-env.sh
取消JAVA_HOME
那一行的注释,设置正确的JDK位置
export JAVA_HOME=/usr/lib/jvm/java
<configuration>
<property> <name>fs.default.name</name> <value>hdfs://c1.N3.Domino.narwhal.pdl.cmu.local:9000</value> </property> <property> <name>fs.checkpoint.dir</name> <value>/l0/hadoop-tmp/dfs/namesecondary</value> </property> </configuration>
Hadoop会自动创建目录。
conf/hdfs-site.xml: 本例中设置的为1副本
<configuration> <property> <name>dfs.name.dir</name> <value>/l0/hadoop-tmp/dfs/name</value> </property> <property> <name>dfs.data.dir</name> <value>/l0/hadoop-tmp/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
conf/mapred-site.xml:
<configuration> <property> <name>mapred.job.tracker</name> <value>c1.N3.Domino.narwhal.pdl.cmu.local:9001</value> </property> <property> <name>mapred.local.dir</name> <value>/l0/hadoop-tmp/mapred/local</value> </property> <property> <name>mapreduce.jobtracker.staging.root.dir</name> <value>/l0/hadoop-tmp</value> </property> </configuration>
c1.N3.Domino.narwhal.pdl.cmu.local
c2.N3.Domino.narwhal.pdl.cmu.local c3.N3.Domino.narwhal.pdl.cmu.local
在master上执行以下命令,启动hadoop
$ cd ~/local/opt/hadoop-1.2.1/
#只需一次,下次启动不再需要格式化,只需 start-all.sh
$ bin/hadoop namenode -format
$ bin/start-all.sh
在master上执行:
$ jps
2615 NameNode
2767 JobTracker
2874 Jps
在一台slave上执行:
$ jps
3415 DataNode
3582 TaskTracker
3499 SecondaryNameNode
3619 Jps
将输入数据拷贝到分布式文件系统中:
$ cd ~/local/opt/hadoop-1.2.1/
$ bin/hadoop fs -put conf input
运行 Hadoop 自带的例子:
$ bin/hadoop jar hadoop-examples-*.jar wordcount input output
查看输出文件:
$ bin/hadoop fs -ls output
$ bin/hadoop fs -cat output/part-r-00000
如果能看到结果,说明这个例子运行成功。
在master上执行:
$ bin/stop-all.sh
这一步是为了将bin目录加入PATH,这样可以在任何位置执行hadoop的各种命令。这步是可选的。
Hadoop不推荐使用HADOOP_HOME
,你可以试一下,当设置了HADOOP_HOME
后,执行bin/start-all.sh
,第一行会打印出一行警告信息,Warning: $HADOOP_HOME is deprecated.
应该用HADOOP_PREFIX
代替,见邮件列表里的这封邮件。
给所有机器设置环境变量HADOOP_PREFIX
,并将$HADOOP_PREFIX/bin
加入PATH。
在 ~/.bashrc
中添加如下4行:
export HADOOP_PREFIX=$HOME/local/opt/hadoop-1.2.1
export PATH=$PATH:$HADOOP_PREFIX/bin
source使之立刻生效,
$ source ~/.bashrc
本文已经尽可能的把步骤详细列出来了,但是我相信大部分人不会一次成功。这时候,查找错误就很重要了。查找错误最重要的手段是查看hadoop的日志,一般在logs目录下。把错误消息复制粘贴到google,搜索一下,慢慢找错误。
SafeModeException
异常,不用担心,等待几分钟即可。因为hadoop刚刚启动时,会进入安全模式进行自检,这需要花点时间。stop-all.sh
, 然后hadoop namenode -format
,重试几次,一般可以成功。如果还是不成功,多看看 logs目录下的日志文件,把错误消息复制粘贴到google,搜索答案。