标签:安全模式 blog dfsclient directive mon rom lse dao 历史记录
本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建,多添加了一个 datanode 节点 。
下载 hbase-1.2.6-bin.tar.gz 并在合适的位置解压缩,笔者这里解压缩的路径为:
/usr/local
将解压得到的目录改名为 hbase
1 cd /usr/local 2 mv hbase-1.2.6/ hbase/
在"/etc/profile"中添加内容:
1 export HBASE_HOME=/usr/local/hbase 2 export PATH=$PATH:$HBASE_HOME/bin
重新加载环境:
source /etc/profile
编辑文件:
vim $HBASE_HOME/conf/hbase-env.sh
添加内容:
1 export JAVA_HOME=/usr/local/jdk1.8 2 export HBASE_CLASSPATH=/usr/local/hadoop/etc/hadoop3 export HBASE_MANAGES_ZK=false
关于 HBASE_CLASSPATH , 官方文档解释如下:Of note, if you have made HDFS client configuration changes on your Hadoop cluster, such as configuration directives for HDFS clients, as opposed to server-side configurations, you must use one of the following methods to enable HBase to see and use these configuration changes:
HADOOP_CONF_DIR
to the HBASE_CLASSPATH
environment variable in hbase-env.sh.An example of such an HDFS client configuration is dfs.replication
. If for example, you want to run with a replication factor of 5, HBase will create files with the default of 3 unless you do the above to make the configuration available to HBase.
HBASE_MANAGES_ZK 设置是否使用内置 ZooKeeper ,默认为 true 也就是使用内置 ZooKeeper 笔者这里使用外置 ZooKeeper 。(生产环境建议使用外置ZooKeeper,维护起来比较方便,可参考到底要不要用hbase自带的zookeeper)
编辑文件:
vim $HBASE_HOME/conf/hbase-site.xml
配置可参考如下代码:
1 <configuration> 2 <!--HBase 的数据保存在 HDFS 对应的目录下--> 3 <property> 4 <name>hbase.rootdir</name> 5 <value>hdfs://master:9000/hbase</value> 6 </property> 7 <!--是否分布式环境--> 8 <property> 9 <name>hbase.cluster.distributed</name> 10 <value>true</value> 11 </property> 12 <!--配置 ZK 的地址, 三个节点都启用 ZooKeeper--> 13 <property> 14 <name>hbase.zookeeper.quorum</name> 15 <value>master,slave1,slave2</value> 16 </property> 17 <!--内置 ZooKeeper 的数据目录--> 18 <property> 19 <name>hbase.zookeeper.property.dataDir</name> 20 <value>/usr/local/hbase/zookeeper</value> 21 </property> 22 </configuration>
编辑文件:
vim $HBASE_HOME/conf/regionservers
添加内容:
1 slave1 2 slave2
这个文件需要自己创建。
编辑文件:
vim $HBASE_HOME/conf/backup-masters
添加内容:
slave1
为了保证HBase集群的高可靠性,HBase支持多Backup Master 设置。当Active Master挂掉后,Backup Master可以自动接管整个HBase的集群。
1 scp -r /usr/local/hbase slave1:/usr/local 2 scp -r /usr/local/hbase slave2:/usr/local
1 scp /etc/profile slave1:/etc/ 2 scp /etc/profile slave2:/etc/
分发后分别在各节点重新加载环境并测试,可使用 hbase version 测试。
参考 阿里云ECS服务器部署HADOOP集群(三):ZooKeeper 完全分布式集群搭建
注:服务器端口全部开放的可以直接跳过这一步,不想看笔者BB的也可以直接跳到该小结的最后。
可能是由于计算机网络没学好,从搭建Hadoop开始大半的时间都被浪费到这个端口问题上,各种 Error 全都是因为这个问题。??????
至此发誓一定要认真重新学习一遍计算机网络!!!
回到正题:阿里云服务器默认只开放三个端口,如下
所以Hadoop集群搭建的各种所需端口都需要自己手动开放。
看到一些例如一些废弃的端口如 yarn 的 web ui 旧端口 8088 会被黑客用来挖矿的关于端口开放安全性的问题,笔者尝试一个个的参照配置文件一个个的添加端口,结果遇到各种问题。例如
起初在 Hadoop 配置的时候还好,问题还比较容易发现,但是随着从底层的向上延伸到了 Hadoop 的组件问题就变的很神秘了, 例如在 hbase 中遇到的
zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.SocketException: Network is unreachable;
Caused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException): org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException: Expected nextCallSeq: 1 But the nextCallSeq got from client: 0; request=scanner_id: 5643550422109494702 number_of_rows: 100 close_scanner: false next_call_seq: 0
master.SplitLogManager: finished splitting (more than or equal to) 0 bytes
hbase:meta,,1.1588230740 state=PENDING_OPEN, ts=Tue Nov 24 08:26:45 UTC 2015 (1098s ago), server=amb2.service.consul,16020,1448353564099
17/11/12 22:44:10 INFO hdfs.DFSClient: Exception in createBlockOutputStream
java.io.IOException: Bad connect ack with firstBadLink as 192.168.0.101:50010
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.createBlockOutputStream(DFSOutputStream.java:1456)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1357)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:587)
注:这次没有记录Error所以以上都是从浏览器历史记录中找到的,有些不完整的用网上的相似的Error替代了。
这些问题在网上找到的所有解决方法大致归结为以下几点:
但是:
所以试了这么多方法我的这么多Error一个都没解决。。。
认真看了官方文档尝试了各种配置甚至尝试了各个版本的hbase,在老师的开导下先换了HMaster的放置的节点失败了,尝试伪分布式也失败,但这时的 Error 已经不像刚开始的又少又难懂,网上匹配的结果也很少,范围越来越小,Error越来越明显了。然后就发现了原来是 hdfs 之间的连接问题,但是因为菜还不太明确问题,所以便尝试将 hdfs 设置成伪分布式,终于成功了!然后又尝试配置两个节点的 hdfs 集群,这时终于从 log 中确定了问题所在,原来是节点的 50010 50020 端口没开放,导致节点间无法通讯。于是一气之下打开了服务器的所有端口,重新配置了一遍便成功了。
总结:log 一定要认真仔细查看并去理解,如果遇到报错很少并且各种方法都无效的情况时,应该尝试更换思路,比如简单化当前的配置,缩小范围,获得一些新的、更多的Error,绝对不能放弃,只要是个错误,就一定可以得到解决,除非它本身就是个Error。。。学会变换不同的思路去解决问题,方法肯定尝试不完~
启动顺序:hdfs-->zookeeper-->hbase
1 # master 2 start-dfs.sh 3 zkServer.sh start 4 # slave1, slave2 5 zkServer.sh start 6 # master 7 start-base.sh
[root@master ~]# jps 17136 HMaster 14532 QuorumPeerMain 16885 SecondaryNameNode 16695 NameNode 17324 Jps [root@slave1 ~]# jps 11138 HRegionServer 11475 Jps 9479 QuorumPeerMain 11015 DataNode 11225 HMaster [root@slave2 ~]# jps 5923 DataNode 6216 Jps 5288 QuorumPeerMain 6040 HRegionServer
进入 hbase shell
hbase shell
在 hbase shell 中输入 list 结果如下
hbase(main):001:0> list TABLE 0 row(s) in 0.3050 seconds => []
打开网页 http://master:16010(IP根据实际情况修改),可以看到如下页面:
至此,基于阿里云三台服务器的HBASE完全分布式集群搭建就完成了!
阿里云ECS服务器部署HADOOP集群(二):HBase完全分布式集群搭建(使用外置ZooKeeper)
标签:安全模式 blog dfsclient directive mon rom lse dao 历史记录
原文地址:https://www.cnblogs.com/RansonDu/p/11912648.html