hbase0.20.6单机伪分布式安装(win7 cygwin)

    之前以为hadoop安装很难,然后装了hbase以后才知道,hadoop其实是小菜一碟,装hbase才叫难。经过我一周的不懈努力和反复尝试,终于成功的试验出来一套在windows上安装hbase0.20.6单机伪分布式模式的方法。

环境
win7 32bit
jdk 1.6.0_45 32bit
zookeeper 3.4.3
hadoop 0.20.2
hbase 0.20.6

首先不得不提的是,版本很重要,hadoop,hbase,jdk版本的搭配非常重要,在某个版本下成功的,很可能换了一个版本就不OK了,这也是hbase安装难的一个因素。

一些基本的安装如cygwin,ssh本文就不细说了,如果不懂,可以参考另一篇文章
http://xpenxpen.iteye.com/blog/2061856

1.下载
hadoop下载 http://archive.apache.org/dist/hadoop/core/
hbase下载 http://archive.apache.org/dist/hadoop/hbase/
zookeeper下载 http://archive.apache.org/dist/zookeeper/

2. 一些准备工作
2.1 JDK版本
由于我用的是比较老的hbase版本,所以jdk一定要1.6的,如果用1.7的jdk是试不出来的(本人N次失败后的经验)。

修改/home/<user>/.bashrc
所指的home是d:\cygwin\home
export JAVA_HOME=/cygdrive/c/jdk1.6.0_45
export PATH=$JAVA_HOME/bin:$PATH


重新进入cygwin

$ which java
/cygdrive/c/jdk1.6.0_45/bin/java

2.2 创建符号链接(仅限Win7)
mklink /d d:\tmp d:\cygwin\tmp
mklink /d i:\tmp d:\cygwin\tmp


这步是比较关键的一步,因为hadoop的代码编写没有考虑到windows系统,所以tmp目录的定位是比较乱的,这里将d:\tmp,i:\tmp全部链接到cygwin下的tmp目录,后面就不会报诸如tmp目录找不到的错了。i:\tmp是由于我将hadoop-0.20.2解压到I盘了,d:\tmp则是因为cygwin装在D盘。如果你装在别的盘上了,则改成相应的盘符。

3.配置文件

3.1 zookeeper

复制conf目录下的zoo_sample.cfg一份,命名为zoo.cfg
修改如下属性
dataDir=/tmp/zookeeper
clientPort=2181


3.2 hadoop

修改conf/hadoop-env.sh
export JAVA_HOME=/cygdrive/c/jdk1.6.0_45
export HADOOP_LOG_DIR=/tmp/logs


修改conf目录下的3个配置文件
core-site.xml
	<property>
		<name>fs.default.name</name>
		<value>hdfs://localhost:9000</value>
	</property>


hdfs-site.xml
	<property>
	  <name>dfs.replication</name>
	  <value>1</value>
	</property>


mapred-site.xml
	<property>
	  <name>mapred.job.tracker</name>
	  <value>localhost:9001</value>
	</property>
	<property> 
	  <name>mapred.tasktracker.map.tasks.maximum</name>
	  <value>4</value>
	</property> 
	<property> 
	  <name>mapred.tasktracker.reduce.tasks.maximum</name>
	  <value>4</value>
	</property>



3.3 hbase

配置conf/hbase-env.sh
export JAVA_HOME=/cygdrive/c/jdk1.6.0_45
export HBASE_CLASSPATH=/cygdrive/i/opensource/hadoop/hbase-0.20.6/lib/zookeeper-3.2.2.jar
export HBASE_MANAGES_ZK=false
export HBASE_LOG_DIR=/tmp/logs/hbase


配置conf/hbase-site.xml

<configuration>
	<property>
		<name>hbase.rootdir</name>
		<value>hdfs://localhost:9000/hbase/root</value>
	</property>
	<property>
		<name>hbase.tmp.dir</name>
		<value>hdfs://localhost:9000/hbase/tmp</value>
	</property>
	<property>
		<name>hbase.zookeeper.quorum</name>
		<value>127.0.0.1</value>
	</property>
	<property>
		<name>hbase.zookeeper.property.dataDir</name>
		<value>/tmp/zookeeper</value>
	</property>
	<property>
		<name>hbase.cluster.distributed</name>
		<value>true</value>
	</property>
</configuration>


4. 启动zookeeper
4.1 启动
Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop
$ cd ./zookeeper-3.4.3

Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/zookeeper-3.4.3
$ ./bin/zkServer.sh start
JMX enabled by default
Using config: I:\opensource\hadoop\zookeeper-3.4.3\conf\zoo.cfg
Starting zookeeper ... STARTED

4.2 检查
Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/zookeeper-3.4.3
$ jps
10040 Jps
6220 QuorumPeerMain

Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/zookeeper-3.4.3
$ ps -ef | grep java
Administ    8656       1 pty0     13:26:43 /cygdrive/c/jdk1.6.0_45/bin/java


提示:
hbase自带的zookeeper版本是3.2.2,但是当你下载zookeeper3.2.2以后,会发现这个版本没有考虑cygwin,所以在cygwin下无法运行。后期版本已经修复了这个问题。如果你比较不同版本的bin/zkEnv.sh,搜索cygwin,你会发现新的版本多出来一些cygwin的判断。这就是之所以要下载zookeeper 3.4.3的原因了。而hbase目录下的zookeeper没关系,就放在那里好了。3.2.2的client连3.4.3的server貌似没什么问题。

5. 启动hadoop

5.1 格式化名称节点
Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/zookeeper-3.4.3
$ cd ../hadoop-0.20.2

Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/hadoop-0.20.2
$ ./bin/hadoop namenode -format

5.2 启动hadoop集群
Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/hadoop-0.20.2
$ ./bin/start-all.sh
starting namenode, logging to /tmp/logs/hadoop-Administrator-namenode-PC-201308290023.out
localhost: starting datanode, logging to /tmp/logs/hadoop-Administrator-datanode-PC-201308290023.out
localhost: starting secondarynamenode, logging to /tmp/logs/hadoop-Administrator-secondarynamenode-PC-201308290023.out
starting jobtracker, logging to /tmp/logs/hadoop-Administrator-jobtracker-PC-201308290023.out
localhost: starting tasktracker, logging to /tmp/logs/hadoop-Administrator-tasktracker-PC-201308290023.out

5.3 检查集群状态
Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/hadoop-0.20.2
$ jps
7620 NameNode
8988 Jps
6220 QuorumPeerMain
6952 JobTracker

(这里可能jps有点问题,只能看到多了2个进程,但实际上没问题,下面用ps可以看到多了5个java进程)

Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/hadoop-0.20.2
$ ps -ef | grep java
Administ    6640       1 ?        13:28:33 /cygdrive/c/jdk1.6.0_45/bin/java
Administ    8160       1 pty0     13:28:21 /cygdrive/c/jdk1.6.0_45/bin/java
Administ    8532       1 ?        13:28:40 /cygdrive/c/jdk1.6.0_45/bin/java
Administ    5680       1 ?        13:28:28 /cygdrive/c/jdk1.6.0_45/bin/java
Administ   10160       1 pty0     13:28:36 /cygdrive/c/jdk1.6.0_45/bin/java
Administ    8656       1 pty0     13:26:43 /cygdrive/c/jdk1.6.0_45/bin/java


5.4 创建hdfs目录
Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/hadoop-0.20.2
$ ./bin/hadoop fs -mkdir /hbase

Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/hadoop-0.20.2
$ ./bin/hadoop fs -mkdir /hbase/root

Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/hadoop-0.20.2
$ ./bin/hadoop fs -mkdir /hbase/tmp

Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/hadoop-0.20.2
$ ./bin/hadoop fs -chmod 777 /hbase/root

Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/hadoop-0.20.2
$ ./bin/hadoop fs -chmod 777 /hbase/tmp

以上创建了/hbase/root和/hbase/tmp目录,这个是和hbase-site.xml里定义的一致的。随后我们将权限放出来。因为之前权限没放,而我win7的主用户是administrator,会出现cyg_server没有写权限而出错,权限全面放开就没问题了。不过linux下应该是创建一个hadoop用户,所以权限只给hadoop一个用户就可以了。
设置好以后可以上http://localhost:50070查看hdfs目录、权限是否正确。

6. 启动hbase

Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/hadoop-0.20.2
$ cd ../hbase-0.20.6

Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/hbase-0.20.6
$ ./bin/start-hbase.sh
starting master, logging to /tmp/logs/hbase/hbase-Administrator-master-PC-201308290023.out
localhost: starting regionserver, logging to /tmp/logs/hbase/hbase-Administrator-regionserver-PC-201308290023.out

Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/hbase-0.20.6
$ jps
7620 NameNode
10048 Jps
8928 HMaster
6220 QuorumPeerMain
6952 JobTracker

(这里jps显示依然有点问题,只能看到多了hmaster一个进程,但实际上没问题,下面用ps可以看到8个java进程,也就是说明多出来2个进程(hmaster和hregionserver))

Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/hbase-0.20.6
$ ps -ef | grep java
Administ    6640       1 ?        13:28:33 /cygdrive/c/jdk1.6.0_45/bin/java
Administ    8160       1 pty0     13:28:21 /cygdrive/c/jdk1.6.0_45/bin/java
Administ    6332       1 ?        13:30:40 /cygdrive/c/jdk1.6.0_45/bin/java
Administ    8532       1 ?        13:28:40 /cygdrive/c/jdk1.6.0_45/bin/java
Administ    5680       1 ?        13:28:28 /cygdrive/c/jdk1.6.0_45/bin/java
Administ   10160       1 pty0     13:28:36 /cygdrive/c/jdk1.6.0_45/bin/java
Administ    2108       1 pty0     13:30:36 /cygdrive/c/jdk1.6.0_45/bin/java
Administ    8656       1 pty0     13:26:43 /cygdrive/c/jdk1.6.0_45/bin/java


7. 测试 hbase shell
成败在此一举,很多时候你辛辛苦苦把前面步骤都做完了,到最后一步发现测试不通。不过这次,我们成功了.

Administrator@PC-201308290023 /cygdrive/i/opensource/hadoop/hbase-0.20.6
$ ./bin/hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Version: 0.20.6, r965666, Mon Jul 19 16:54:48 PDT 2010
create 'mytable', 'data'
create 'mytable', 'data'
0 row(s) in 1.2890 seconds
put 'mytable', 'row1', 'data:1', 'value1'
put 'mytable', 'row1', 'data:1', 'value1'
0 row(s) in 0.0040 seconds
list
list
mytable                                                                           
1 row(s) in 0.0160 seconds
scan 'mytable'
scan 'mytable'
ROW                          COLUMN+CELL                                          
row1                        column=data:1, timestamp=1416715188693, value=value1 
1 row(s) in 0.0220 seconds
exit
exit

最后要说的是,初学者每一步做完都请确认log里没有错误。log有时候是最好的引导者,有了错误日志,你才能去分析问题,去google问题。同时,遇到问题,这也是你宝贵的经验。

猜你喜欢

转载自xpenxpen.iteye.com/blog/2159421