安装的环境要求:我用的是x86_64的CentOS6.3 linux操作系统,安装过程很简单,一路默认即可。

     搭建开发环境是学习一门新技术的首先要面对的,当然技术的选型也是相当重要,刚开始搭建环境的时候公司让用cloudera manager CDH4自动在cloudera官网下载安装hadoop、hbase、zookeeper等,但是这个过程在网速不好的情况下是相当的缓慢。(在天朝访问国外的网站,你懂得),公司的网速很悲催,导致我杯具的装了很久,到后来经过各种查资料发现原来将rpm包从官网下载先来之后再安装是多么的快了,现在将如何在本地建立安装文件资源库分享给大家,步骤如下:

      Step 1: 安装repo:命令如下:yum install createrepo

    Step 2: 准备安装所需的rpm文件到一个目录下,例如、usr/repo

    Step 3: 创建本地资源库:在usr/repo目录下执行如下命令:createrepo .  即可在当前目录下创建repodata的文件夹,其中的xml文件包含所有想要添加到库的文件。

    Step 4: 创建本地服务器,通过如下命令安装httpd 服务:

yum installhttpd CentOS 6.3 自带此服务,一般不需安装,通过如下命令启动httpd服务: service httpd start

    Step 5: 发布服务:将之前创建的资源文件夹repo复制到服务器的发布目录,通常是 var/www/html下,命令如下:  mv /usr/repo /var/www/html                chmod -R ugo+rX /var/www/html/repo

    Step 6: 创建客户端的repo文件,在etc/ yum.repos.d/下创建自己的repo文件,格式如下:

                 [myrepo]

                 name=myrepo

                 baseurl=http://master1/repo  指出资源的URL路径

                 enabled=1

                 gpgcheck=0

     Step 7: 客户端测试,通过浏览器输入baseurl地址,访问服务器资源。

     注意:安装要启动的服务:httpd sshd


    自动安装的过程就是这样,但是后来呢,总监说自动安装的方式不利于刚开始学习,让我们从源码安装开始,一步一步学习怎么样配置,OK,好吧,还得继续搭建环境,悲催的我经历过各种配置把好不容易整好的环境推翻了,重新来搞。作为一名好学的程序猿,我忍。继续,从官网下载hadoop-2.0.3-alpha 、hbase-0.94.5-security、zookeeper-3.4.5,然后从hadoop开始配置,由于最终这个配置以失败而告终,这个配置的过程我就不详细的介绍了。基本上跟大多数的分布式搭建环境的步骤类似。只是由于hadoop2.x系列和1.0x系列包结构变化太大,导致在这个过程中浪费了许多时间,hadoop集群安装完成之后,一切正常。只是在纳闷为什么jobtracker的50030端口为何启动不起来,后来在官方文档中找到,原来到2.0x以后就改成 ResourceManager了,端口也变为8088了。hadoop算是正常启动了,也尝试的运行了下经典的wordcount,一切ok。接下来就是安装hbase了,hbase的配置文件相对于hadoop来说已经相当少了,很容易就能配好,但是呢,由于hbase-0.94.5-security所依赖的是hadoop-core-1.0.4.jar.而现在公司让用的最新版的hadoop-2.0.3-alpha里面竟然没有找到一个带有core的jar包,怎么办,悲催了。。。版本冲突问题搞了两天,其中编译过源码,将hadoop-2.0.3-alpha里所有的lib拷贝过去都试过了,还是版本冲突导致HMaster无法启动,(我推测可能是由于在拷贝的jar包的过程中遗漏了哪个jar文件吧,理论上来说这个方法是可行的呀),没办法,跟总监说明了情况之后,他建议用cloudera公司的CDH4源码安装的方式,因为cloudera公司的源码是采用了官方稳定的版本,然后自己再修复了部分BUG才放出来的。其中cloudera公司已经将版本兼容问题给我们解决了,俺们这些程序猿就不用去担心搞了半天的环境最终败给版本冲突了。

      好吧,第三次环境搭建开始了,首先还是去官网下安装包,hadoop-2.0.0-cdh4.2.0 、 hbase-0.94.2-cdh4.2.0 、    zookeeper-3.4.5-cdh4.2.0下载完成之后这次的搭建就很容易了,毕竟前面已经配置过一次了。hadoop的分布式环境很顺利的就完成了,然后到hbase了,hbase的配置少,很快就配好了,配好之后,启动hbase,擦,有错误,启动不起起来,怎么回事?看看日志吧,

Thu Mar 21 20:54:06 CST 2013 Starting master on master
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 63643
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

怎么就这么一点,加载了个启动信息就没了?奇怪了怎么搞的。怎么办,配置文件没有问题啊,一个一个检查吧,

hbase-site-xml没有问题啊,hbase-env.sh好像也没有问题啊,可是为什么就是连加载都不加载呢?肯定是环境没配好,就在hbase-env.sh里面找吧,

  export JAVA_HOME=/usr/java/jdk1.6.0_31
  export HBASE_OPTS="$HBASE_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode"
  export HBASE_MANAGES_ZK=false
 # export HBASE_HOME=/root/hahoop/hbase-0.94.2-cdh4.2.0
  export HADOOP_HOME=/root/hadoop/hadoop-2.0.0-cdh4.2.0
  export HBASE_LOG_DIR=/root/hadoop/hbase-0.94.2-cdh4.2.0/logs
  export HBASE_CLASSPATH=/root/hadoop/hadoop-2.0.0-cdh4.2.0/etc/hadoop

经过苦苦挣扎之后发现多配了个HBASE_HOME,很奇怪,看别人的教程都是这么配的呀,奇怪的问题,算了,先把HBASE_HOME注释掉吧,不纠结了,重新启动看看,这下应该可以启动了吧。。。。。 HMaster还是没能启动起来,怎么办,hbase的环境配置快整死我了,大晚上上还在加班,为了能赶紧回去休息还是看日志吧,这次最起码日志里面有错误信息了,也就证实了刚才的确是因为多配了HBASE_HOME的原因。来看看错误信息吧:

2013-03-21 21:48:48,057 WARN org.apache.hadoop.hdfs.DFSClient: DataStreamer Exception
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /hbase/hbase.version could only be replicated to 0 nodes instead of minReplication (=1).  There are 2 datanode(s) running and no node(s) are excluded in this operation.
	at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget(BlockManager.java:1325)
	at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:2258)
	at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:481)
	at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:297)
	at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java:44080)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:453)
	at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1002)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1695)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1691)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:396)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
	at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1689)

	at org.apache.hadoop.ipc.Client.call(Client.java:1225)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:202)
	at $Proxy15.addBlock(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:164)
	at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:83)
	at $Proxy15.addBlock(Unknown Source)
	at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.addBlock(ClientNamenodeProtocolTranslatorPB.java:290)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.locateFollowingBlock(DFSOutputStream.java:1150)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1003)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:463)
2013-03-21 21:48:48,059 WARN org.apache.hadoop.hbase.util.FSUtils: Unable to create version file at hdfs://master:9000/hbase, retrying: File /hbase/hbase.version could only be replicated to 0 nodes instead of minReplication (=1).  There are 2 datanode(s) running and no node(s) are excluded in this operation.
	at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget(BlockManager.java:1325)
	at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:2258)
	at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:481)
	at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:297)
	at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java:44080)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:453)
	at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1002)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1695)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1691)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:396)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
	at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1689)
然后就是各种google找资料啊,最后在一个小日本的网站上看到原来是由于在配置hadoop的时候dfs.replication配置的是三,而我的hbase regionservers只配置了两个,所以才会导致出现这种情况。据说这是hbase0.91以前的GUG,我运气好,刚好赶上了。终于在我的坚持不懈下,HMASTER启动起来了,打开 master:60010,终于看到了亲爱的master-status页面了。这次终于搞好了,虽然当时有那么一丝兴奋感,但是现在觉着这么简单的环境搭建浪费了那么多时间,挺失败的。好了,环境搭建就到这,现在,开始HBASE的学习之旅吧!!!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐