hbase-1.2.6完全分布式安装

hbase-1.2.6完全分布式安装

1. 安装环境

  • 软件环境
    ubuntu14.04, hadoop2.7.4, hbase1.2.6, zookeeper3.4.1
  • hadoop 集群环境
    一台主机名为”hadoop-master”的作为master,另外三台主机名为”hadoop-slave1”,”hadoop-slave2”和”hadoop-slave3”,作为slave。

2. 完全分布式安装

2.1 安装准备

分别从hbase官网和zookeeper官网下载hbase以及zookeeper,并将其解压到hadoop-master主机的/user/local/文件夹中,并分别重命名:

ssh hadoop@hadoop-master
cd /usr/local/

sudo tar zxvf hbase-1.2.6-bin.tar.gz -C ./
sudo mv hbase-1.2.6 hbase
sudo chmod -R a+w hbase

sudo tar zxvf zookeeper-3.4.10.tar.gz -C ./
sudo mv zookeeper-3.4.10 zookeeper
sudo chmod -R a+w zookeeper

2. 2 在Hadoop-master上配置Hbase

# config hbase in fully cluster mode
ssh hadoop@hadoop-master
cd /usr/local/hbase
# 1. config java env
echo "export JAVA_HOME=/usr/local/jdk1.8.0_144" >> conf/hbase-env.sh

# 2. config regionserver
#首先需要删除 conf/regionservers中的"localhost" ,然后执行:
echo "hadoop-slave1" >> conf/regionservers
echo "hadoop-slave2" >> conf/regionservers
echo "hadoop-slave3" >> conf/regionservers


# 3. config backup master, create file conf/backup-masters
sudo vim conf/backup-masters #add "hadoop-slave2" to  backup-masters file

# 4. config hbase
edit conf/hbase-site.xml, add the folloing contents:
<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
</property>
<property>
  <name>hbase.rootdir</name>
  <value>hdfs://hadoop-master:9000/hbase</value>
</property>

# 5. Configure ZooKeeper
edit conf/hbase-site.xml, add the folloing contents:
<property>
  <name>hbase.zookeeper.quorum</name>
  <value>hadoop-master,hadoop-slave1,hadoop-slave2,hadoop-slave3</value>
</property>
<property>
  <name>hbase.zookeeper.property.dataDir</name>
  <value>/usr/local/zookeeper</value>
</property>

2.3 在hadoop-slave1,2,3上配置hbase

# copy hbase and zookeeper to hadoop-slave1,2,3
sudo tar zcvf hbase.tar.gz ./hbase
sudo tar zcvf zookeeper.tar.gz ./zookeeper

# hadoop-slave1 as an example
ssh hadoop-slave1
su root
cd /usr/local/
scp hadoop@hadoop-master:/usr/local/hbase.tar.gz ./
sudo tar zxvf hbase.tar.gz -C ./
scp hadoop@hadoop-master:/usr/local/zookeeper.tar.gz ./
sudo tar zxvf zookeeper.tar.gz -C ./
rm *.tar.gz

3. 启动hbase服务

ssh hadoop@hadoop-master
cd /usr/local/hbase
./bin/start-hbase.sh

4. 测试安装是否成功

# 查看hdfs上的hbase文件夹中是否有内容
hadoop fs -ls /hbase
# 或者
hadoop fs -ls hdfs://hadoop-master:9000/hbase
# 进入hbase命令行
bin/hbase shell
# 创建表“test”
create 'test','cf' # create a table - test
# list “test”表信息
list 'test' 
# 往表中添加数据
put 'test', 'row1', 'cf:a', 'value1' 
put 'test', 'row2', 'cf:b', 'value2' 
put 'test', 'row3', 'cf:c', 'value3' 
# 查询“test”表所有数据
scan 'test' 
# 删除表test
drop 'test' 

5. 遇到的问题及解决方法

5.1 问题1

问题:java.net.ConnectException: Connection refused;

java.net.ConnectException: Call From hadoop-master/172.17.0.2 to localhost:50090 failed on connection exception: java.net.ConnectException: Conn
ection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:783)
    at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:730)
    at org.apache.hadoop.ipc.Client.call(Client.java:1415)
    at org.apache.hadoop.ipc.Client.call(Client.java:1364)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:206)
    at com.sun.proxy.$Proxy15.setSafeMode(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:187)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)
    at com.sun.proxy.$Proxy15.setSafeMode(Unknown Source)
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.setSafeMode(ClientNamenodeProtocolTranslatorPB.java:602)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.hadoop.hbase.fs.HFileSystem$1.invoke(HFileSystem.java:279)
    at com.sun.proxy.$Proxy16.setSafeMode(Unknown Source)
    at org.apache.hadoop.hdfs.DFSClient.setSafeMode(DFSClient.java:2264)
    at org.apache.hadoop.hdfs.DistributedFileSystem.setSafeMode(DistributedFileSystem.java:986)
    at org.apache.hadoop.hdfs.DistributedFileSystem.setSafeMode(DistributedFileSystem.java:970)
    at org.apache.hadoop.hbase.util.FSUtils.isInSafeMode(FSUtils.java:525)
    at org.apache.hadoop.hbase.util.FSUtils.waitOnSafeMode(FSUtils.java:971)
    at org.apache.hadoop.hbase.master.MasterFileSystem.checkRootDir(MasterFileSystem.java:429)
    at org.apache.hadoop.hbase.master.MasterFileSystem.createInitialFileSystemLayout(MasterFileSystem.java:153)
    at org.apache.hadoop.hbase.master.MasterFileSystem.<init>(MasterFileSystem.java:128)
    at org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:693)
    at org.apache.hadoop.hbase.master.HMaster.access$600(HMaster.java:189)
    at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1803)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.ConnectException: Connection refused
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
    at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
    at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:529)
    at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:493)
    at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:606)
    at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:700)
    at org.apache.hadoop.ipc.Client$Connection.access$2800(Client.java:367)
    at org.apache.hadoop.ipc.Client.getConnection(Client.java:1463)
    at org.apache.hadoop.ipc.Client.call(Client.java:1382)
    ... 29 more

解决方法

在hbase的根目录中,修改conf/hbase-site.xml。
修改之前的:

<property>
  <name>hbase.rootdir</name>
  <value>hdfs://localhost:50090/hbase</value>
</property>

修改之后的:

<property>
  <name>hbase.rootdir</name>
  <value>hdfs://hadoop-master:50090/hbase</value>
</property>

5.2 问题2

问题:com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.

java.io.IOException: Failed on local exception: com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match
 expected tag.; Host Details : local host is: "hadoop-master/172.17.0.2"; destination host is: "hadoop-master":50090; 
    at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:764)
    at org.apache.hadoop.ipc.Client.call(Client.java:1415)
    at org.apache.hadoop.ipc.Client.call(Client.java:1364)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:206)
    at com.sun.proxy.$Proxy15.setSafeMode(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:187)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)
    at com.sun.proxy.$Proxy15.setSafeMode(Unknown Source)
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.setSafeMode(ClientNamenodeProtocolTranslatorPB.java:602)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.hadoop.hbase.fs.HFileSystem$1.invoke(HFileSystem.java:279)
    at com.sun.proxy.$Proxy16.setSafeMode(Unknown Source)
    at org.apache.hadoop.hdfs.DFSClient.setSafeMode(DFSClient.java:2264)
    at org.apache.hadoop.hdfs.DistributedFileSystem.setSafeMode(DistributedFileSystem.java:986)
    at org.apache.hadoop.hdfs.DistributedFileSystem.setSafeMode(DistributedFileSystem.java:970)
    at org.apache.hadoop.hbase.util.FSUtils.isInSafeMode(FSUtils.java:525)
    at org.apache.hadoop.hbase.util.FSUtils.waitOnSafeMode(FSUtils.java:971)
    at org.apache.hadoop.hbase.master.MasterFileSystem.checkRootDir(MasterFileSystem.java:429)
    at org.apache.hadoop.hbase.master.MasterFileSystem.createInitialFileSystemLayout(MasterFileSystem.java:153)
    at org.apache.hadoop.hbase.master.MasterFileSystem.<init>(MasterFileSystem.java:128)
    at org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:693)
    at org.apache.hadoop.hbase.master.HMaster.access$600(HMaster.java:189)
    at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1803)
    at java.lang.Thread.run(Thread.java:748)
Caused by: com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.
    at com.google.protobuf.InvalidProtocolBufferException.invalidEndTag(InvalidProtocolBufferException.java:94)
    at com.google.protobuf.CodedInputStream.checkLastTagWas(CodedInputStream.java:124)
    at com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:202)
    at com.google.protobuf.AbstractParser.parsePartialDelimitedFrom(AbstractParser.java:241)
    at com.google.protobuf.AbstractParser.parseDelimitedFrom(AbstractParser.java:253)
    at com.google.protobuf.AbstractParser.parseDelimitedFrom(AbstractParser.java:259)
    at com.google.protobuf.AbstractParser.parseDelimitedFrom(AbstractParser.java:49)
    at org.apache.hadoop.ipc.protobuf.RpcHeaderProtos$RpcResponseHeaderProto.parseDelimitedFrom(RpcHeaderProtos.java:2364)
    at org.apache.hadoop.ipc.Client$Connection.receiveRpcResponse(Client.java:1056)
    at org.apache.hadoop.ipc.Client$Connection.run(Client.java:950)

解决方法

这是由于hdfs的路径有误,首先通过下面命令,查询hdfs的路径,我这边得到的结果为“hdfs://hadoop-master:9000”

hdfs getconf -confKey fs.default.name

在hbase的根目录中,修改conf/hbase-site.xml中的hdfs的路径:
修改之前的:

<property>
  <name>hbase.rootdir</name>
  <value>hdfs://hadoop-master:50090/hbase</value>
</property>

修改之后的:

<property>
  <name>hbase.rootdir</name>
  <value>hdfs://hadoop-master:9000/hbase</value>
</property>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值