版本兼容问题:
Hadoop完全分布式安装:
此处配置两台机器:
master : 192.168.0.104 机器名hadoop1
slave1 : 192.168.0.105 机器名hadoop2
slave2 : 192.168.0.106 机器名hadoop3
zookeeper为hadoop1、hadoop2、hadoop3 (zookeeper必须配置为奇数个节点)
Zookeeper的安装见Zookeeper集群配置一节
NameNode与SecondaryNameNode的关系与备份
NameNode主要是用来保存HDFS的元数据信息,比如命名空间信息,块信息等等。当它运行的时候,这些信息是存在内存中的。但是这些信息也可以持久化到磁盘上:
fsimage:它是NameNode启动时对整个文件系统的快照。
edits:它是在NameNode启动后,对文件系统的改动序列。
只有在NameNode重启时,edits才会合并到fsimage文件中,从而得到一个文件系统的最新快照。但是在生产环境集群中的NameNode是很少重启的,这意味者当NameNode运行来很长时间后,edits文件会变的很大。在这种情况下就会出现下面这些问题:
edits文件会变的很大,如何去管理这个文件?
NameNode的重启会花费很长的时间,因为有很多改动要合并到fsimage文件上。
如果NameNode宕掉了,那我们就丢失了很多改动,因为此时的fsimage文件时间戳比较旧。
因此为了克服这个问题,我们需要一个易于管理的机制来帮助我们减小edits文件的大小和得到一个最新的fsimage文件,这样也会减小在NameNode上的压力。而Secondary NameNode就是为了帮助解决上述问题提出的,它的职责是合并NameNode的edits到fsimage文件中。如图所示:
注意事项:
1. 日志文件是滚动的,一个正在写,几个已经写好的滚动;
2. checkpoint时,把正在写的滚动一下,然后把fsimage和日志文件下载到secondarynamenode上,只有第一次才会下载fsimage,这时候不会很大,以后就光下载日志文件,日志文件下载不会很大;
3. 如果namenode硬盘损坏,可以将secondarynamenode的元数据拷贝到namenode,但是secondarynamenode虽然有元数据信息,但是只能恢复大部分数据,最新更新的数据可能由于没有来得及下载到secondarynamenode,而无法全部恢复。
4.secondarynamenode虽然有元数据信息但是不能更新元数据,不能充当namenode使用。
/*************************安装前准备************************/
(1)修改主机ip
进入IP网卡目录:cd /etc/sysconfig/network-scripts/
列举所有网卡信息:ll
修改对应网卡ip信息(列举出来的第一个网卡,此处为ifcfg-enp0s3):vim ifcfg-enp0s3
修改对应IP信息:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.0.104
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=4c6fdf84-30f6-4105-bc90-5bbedaa388fd
DEVICE=enp0s3
ONBOOT=yes
注意如果DNS1配置无效,则需要直接修改/etc/resolv.cof,添加如下:
nameserver 8.8.8.8
当然我这里配置的是8.8.8.8是因为我是链接的wifi,自动获取DNS,所以填写的一个互联网通用DNS
(2)修改主机名
修改主机名有两种方法:
方法一:在centos中直接使用hostnamectl命令: hostnamectl set-hostname hadoop1
方法二:直接修改/etc/hostname,清空后直接输入主机名:hadoop1
最后,重启:reboot
(3)设置本地时区
如果时间不与网络时间同步,可以通过ntp服务同步网络时间:
# yum install -y ntp
# ntpdate cn.pool.ntp.org
由于默认的时区不是东八区,也就是不是上海时间,我们必须设置为上海时间
查看本地时间:date 发现时间不正确,时区不对
修改本地时间:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime (注意localtime为文件)
查看本机时间:date 发现本机时间已经修正
(4)修改hosts域名映射
vim /etc/hosts
输入:
192.168.0.104 hadoop1
192.168.0.105 hadoop2
(5)安装JDK
首先,新建/home/Downloads目录,在该目录下下载jdk:
重命名为 /jdk-8u171-linux-x64.tar.gz
其次,拷贝 /jdk-8u171-linux-x64.tar.gz到/opt目录: cp /jdk-8u171-linux-x64.tar.gz /opt,并解压进去
再次,修改环境变量:vim /etc/profile,增加如下内容:
export JAVA_HOME=/opt/jdk1.8.0_171
export JRE_HOME=/opt/jdk1.8.0_171/jre
export CLASSPATH=${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
最后,使得环境变量生效:source /etc/profile
验证jdk是否安装成功,在终端输入:java -version即可
/*************************Hadoop完全分布式安装************************/
注意:
a. Hadoop要求所有机器上Hadoop的部署目录结构要求相同, 并且都有一个相同的用户名账户,
b. Hadoop安装过程中需要关闭防火墙和SElinux,否则会出现异常
(1)禁用防火墙和SElinux
关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
关闭SElinux:
vim /etc/selinux/config
修改SELINUX=disbabled
修改后,重启机器生效
(2)创建Hadoop用户名和组
切换到root目录,执行添加用户操作:
adduser hadoop
passwd hadoop
输入两次密码即可,默认hadoop用户所在组也是hadoop组
(3)ssh免秘钥登录
目的:实现某台机器上操作指令,其他所有节点同时执行(比如1到2或3都可以免密码登录,从1节点控制即可操作2和3节点)
安装ssh和rsync
yum -y install ssh
yum -y install rsync
说明:
Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到 NameNode,SSH之所以能够保证安全,原因在于它采用了公钥加密:
(1)远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)用户使用这个公钥,将登录密码加密后,发送回来。
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
切换到hadoop用户,在用户目录下建立.ssh文件夹
su hadoop
mkdir ~/.ssh/
配置hadoop1(master)机器无密码登录所有slave机器:
在master节点执行以下命令:
ssh-keygen -t rsa 一路回车
生成的密钥对:id_rsa(私钥)和id_rsa.pub(公钥),默认存储在”/home/用户名/.ssh”目录下。查看“/home/用户名/”下是否有“.ssh”文件夹,且“.ssh”文件下是否有两个刚生产的无密码密钥对(id_rsa和id_rsa.pub私钥和公钥)。
设置权限,否则ssh免秘钥登录无效:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/*
将~/.ssh/下的id_rsa.pub的公钥作为认证发放到hadoop1,hadoop2下的~/.ssh/下:
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop1
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop2
期间要求输入hadoop的用户密码回车即可。
测试,在hadoop1上登录其他机器都不需要密码:ssh hadoop2
如果需要密码说明文件夹权限和文件权限设置有问题,分别登录到对应机器,切换到hadoop用户下(必须创建),重新设置权限即可(见chomd 700 ~/.ssh)!
(4)Hadoop环境变量配置
解压hadoop安装包到/opt目录下,并使用root用户将文件夹所有者设置为hadoop
tar -zxvf hadoop-2.9.1.tar.gz
chown -R hadoop:hadoop hadoop-2.9.1
然后切换到root用户继续操作(否则使用hadoop用户,source命令无法执行)
最终配置如下:
export JAVA_HOME=/opt/jdk1.8.0_171
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export HADOOP_HOME=/opt/hadoop-2.9.1
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
(5)配置环境变量
配置hadoop-env.sh
修改/opt/hadoop-2.9.1/etc/hadoop/hadoop-env.sh的JAVA_HOME路径:
export JAVA_HOME=/opt/jdk1.8.0_171
注意,不能设置为默认值(无绝对路径)export JAVA_HOME=${JAVA_HOME},否则报错
使配置生效:
source hadoop-env.sh
配置yarn-env.sh
修改/opt/hadoop-2.9.1/etc/hadoop/yarn-env.sh
export JAVA_HOME=/opt/jdk1.8.0_171
使配置生效:
source yarn-env.sh
查看hadoop环境变量配置是否生效:
hadoop version
接下来配置一台机器,然后将配置好的机器复制到其他机器!!!
(5.1)配置slave信息
编辑所有的配置文件:vim /opt/hadoop/etc/hadoop/slaves
添加如下
注意:#如果不需要服务端做存储节点可以不添加hadoop1这台机器
(6)配置core-site.xml
切换到hadoop用户,创建hadoop临时目录:(hadoop有权限也会自动创建!)
<configuration>
<!-- 指定hdfs的namenode在hadoop1上-hadoop的入口:hdfs为主机节点地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<!-- Size of read/write buffer used in SequenceFiles. -->
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<!-- 指定hadoop临时目录-是其他目录的基础目录,hadoop会自动创建 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop/tmp</value>
<!--<value>file:/home/hadoop/hadoop/tmp</value>-->
</property>
<!--指定两个连续检查点之间最大的间隔时间-->
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600</value>
</property>
</configuration>
(7)配置hdfs-site.xml
<configuration>
<!--配置SecondaryNameNode的http访问地址:这里SecondaryNameNode和NameNode放在一起,实际情况最好分离-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop1:50090</value>
</property>
<!--配置文件拷贝的副本数目,一般默认至少2个副本,hadoop默认一个文件有2个副本也就是存3份-->
<!--两个相同的副本数不可能在同一DataNode上,副本数小于等于dataNode数,默认为3个副本-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!--元数据目录,会自动创建->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop/hdfs/name</value>
</property>
<!--数据目录,会自动创建-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop/hdfs/data</value>
</property>
<!--设置为true,可以在浏览器中IP+port查看-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!--设置浏览器查看hdfs地址-->
<property>
<name>dfs.http.address</name>
<value>hadoop1:50070</value>
</property>
</configuration>
(8)配置yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- Configurations for ResourceManager -->
<!--NodeManager上运行的附属服务,用于运行mapreduce-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--ResourceManager 对客户端暴露的地址-->
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop1:8032</value>
</property>
<!--ResourceManager 对ApplicationMaster暴露的地址-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop1:8030</value>
</property>
<!--ResourceManager 对NodeManager暴露的地址-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop1:8031</value>
</property>
<!--ResourceManager 对管理员暴露的地址-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop1:8033</value>
</property>
<!--ResourceManager 对外web暴露的地址,可在浏览器查看-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop1:8088</value>
</property>
(9)配置mapred-site.xml
该文件如果没做存在(默认是没有),就把mapred-site.xml.template 文件拷贝一个就可以了,编辑内容如下:
<configuration>
<!--mapreduce运用了yarn框架,设置name为yarn-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--查看Mapreduce作业记录-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop1:10020</value>
<description>MapReduce JobHistory Server IPC host:port</description>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop1:19888</value>
</property>
</configuration>
(10)masters配置SecondNameNode
重点:
secondNameNode作用专门是合并日志文件,能做到部分备份的作用,所以最好不用将NameNode和SecondNameNode跑在一台机器上,如果NameNode机器发生意外会导致全部数据丢失!所以我们最好将SecondNameNode跑在其他机器上,当然如果不更改则SecondNameNode跑在NameNode机器上!具体配置如下,修改master.xml配置文件(master配置文件其实是设置SecondNameNode的并不是配置NameNode的;cor-size.xml配置NameNode,masters配置SecondaryNameNode,slaves配置从节点DataNode)
为了保证数据部分安全性能,我们可以将SecondaryNameNode不放在localhost中(hadoop1),否则就不需要进行如下操作!
问题来了,hadoop2.x之前SecondaryNameNode配置使用masters文件进行配置,而2.7以后发现etc/hadoop/masters文件已经丢弃,改用xml进行配置
我们也可以直接增加masters文件(虽然不存在)
vi masters
添加内容,这里我们配置SecondaryNameNode放在hadoop2上,添加内容为hadoop2即可
修改hdfs-size.xml修改SecondaryNameNode的http访问地址:
<!--修改SecondaryNameNode地址:如果配置了SecondaryNameNode不在NameNode机器上-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop2:50090</value>
</property>
(10)配置slaves文件,增加slave主机名
一般为两个副本,一行一个,这里填写DataNode即可
hadoop2
hadoop3
以上具体配置项目的文档参照:http://hadoop.apache.org/
其中选择对应版本文档即可:
拖拽至最下方,即可看到相关配置:
(12)复制hadoop配置好的包到其他linux机器
scp -r /opt/hadoop-2.9.1 hadoop2:/opt (hadoop)
scp -r /opt/jdk1.8.0_171 hadoop2:/opt (jdk)
scp /etc/profile hadoop2:/etc (环境变量-root用户才可以)
在其他机器分别修改权限:(用户:分组)
chown -R hadoop:hadoop /opt/hadoop-2.9.1
chown -R hadoop:hadoop /opt/jdk1.8.0_171
source /etc/profile
打开防火墙端口(一般教程都是直接关闭防火墙,如下方法是否可行待深度测试,目前搭建环境没有发现问题,看应用是否有问题):
firewall-cmd --add-port=9000/tcp --permanent
firewall-cmd --add-port=50090/tcp --permanent
firewall-cmd --add-port=8030/tcp --permanent
firewall-cmd --add-port=8031/tcp --permanent
firewall-cmd --add-port=8032/tcp --permanent
firewall-cmd --add-port=8033/tcp --permanent
firewall-cmd --add-port=8088/tcp --permanent
firewall-cmd --add-port=10020/tcp --permanent
firewall-cmd --add-port=19888/tcp --permanent
firewall-cmd --add-port=50070/tcp --permanent
firewall-cmd --add-port=50090/tcp --permanent
firewall-cmd --reload
9000为rpc协议,50070是http协议端口!
其中50070是配置文件中没有配置的端口,是基本的web界面,能查看NameNode和DataNode信息,也可以查看HDFS中的文件!50090是SecondaryNameNode节点http页面。
(13)格式化HDFS文件系统(切换为普通用户hadoop)
切换用户
su hadoop
执行:(profile文件设置了hadoop的bin目录为path,所以环境变量生效hdfs可用,如果不可用说明PATH添加的hadoop/bin或sbin无效)
各个节点都执行如下命令
hdfs namenode -format
格式化成功会有打印:
INFO common.Storage: Storage directory /home/hadoop/hadoop/hdfs/name has been successfully formatted.
或
Exitting with status 0 如果 Exitting with status 1 则说明出错!
(14)启动hadoop集群
在hadoop1上执行:
./start-all.sh
注意: start-dfs.sh 只启动HDFS,start-all不仅启动HDFS,也启动MapReduce;
启动结果:
[hadoop@hadoop1 opt]$ start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [hadoop1]
hadoop1: starting namenode, logging to /opt/hadoop-2.9.1/logs/hadoop-hadoop-namenode-hadoop1.out
hadoop2: starting datanode, logging to /opt/hadoop-2.9.1/logs/hadoop-hadoop-datanode-hadoop2.out
Starting secondary namenodes [hadoop1]
hadoop1: starting secondarynamenode, logging to /opt/hadoop-2.9.1/logs/hadoop-hadoop-secondarynamenode-hadoop1.out
starting yarn daemons
starting resourcemanager, logging to /opt/hadoop-2.9.1/logs/yarn-hadoop-resourcemanager-hadoop1.out
hadoop2: starting nodemanager, logging to /opt/hadoop-2.9.1/logs/yarn-hadoop-nodemanager-hadoop2.out
启动后主节点(没有dataNode是因为主节点不错副本,hadoop2和hadoop3做副本):
NameNode和SecondaryNameNode是元数据处理,主节点必备,ResourceManager是yarn资源管理
从节点数量:
运行检查(任意节点运行都可以):
hdfs dfsadmin -report
如果SecondaryNameNode不在hadoop1,我们可以测试如下:
stop-all.sh
jps
start-dfs.sh
jps
(14)查看集群地址状态
成功启动后,可以访问 HDFS的Web界面,查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件:
http://192.168.12.104:50070
节点信息
启动了YARN 可以通过 Web 界面查看任务的运行情况
在浏览器中直接输入hadoop1的集群地址: http://192.168.12.104:8088/
在这里我们可以看到hadoop的所有配置:
具体配置如下:
命令行查看:
jps
问题:解决Hadoop启动时,没有启动datanode,jps发现没有datanode线程;
原因:当我们使用hadoop namenode -format格式化namenode时,会在namenode数据文件夹(这个文件夹为自己配置文件中dfs.name.dir的路径)中保存一个current/VERSION文件(这里为:/home/hadoop/hadoop/hdfs/name/current),记录clusterID,datanode中保存的current/VERSION文件中的clustreID的值是上一次格式化保存的clusterID,这样,datanode和namenode之间的ID不一致!
解决:
(1)如果dfs文件夹中没有重要的数据,那么删除dfs文件夹,再重新运行下列指令(${HADOOP_HOME}/tmp/,这里就是/home/hadoop/hadoop/tmp)
hadoop namenode -format
start-dfs.sh
(2)如果dfs文件中有重要的数据,那么在dfs/name目录下找到一个current/VERSION文件(/home/hadoop/hadoop/hdfs/name/current),记录clusterID并复制。然后dfs/data目录下找到一个current/VERSION文件(/home/hadoop/hadoop/hdfs/data/current),将其中clustreID的值替换成刚刚复制的clusterID的值即可
规范:
每次运行结束Hadoop后,都应该关闭Hadoop.下次想重新运行Hadoop,不用再格式化namenode,直接启动Hadoop即可
问题:无法启动namenode
日志:
原因:服务访问name的VERSION文件,查看发现VERSION隶属于root
解决:修改用户权限
su root
chown -R hadoop:hadoop /home/hadoop/
重启:
su hadoop
stop-all.sh
jps
start-all.sh
jps
日志排错:
在主节点上查看/opt/hadoop版本/logs目录下的日志文件即可!
cat /opt/hadoop-2.9.1/logs/hadoop-hadoop-datanode-hadoop2.log
总结,新机器或增加的机器需要做的事:
(1)修改主机ip
(2)修改主机名称
(3)修改主机hosts
(4)修改主机北京时间(先同步网络时间,然后修改本地时区/etc/localtime)
(5)新建用户、设置用户密码
(6)安装ssh、rsync、vim、lrzsz
(7)ssh免秘钥登录设置
(8)修改用户目录下的.ssh目录700和.ssh目录下所有文件权限600
(9)root更改/opt所有者
(10)环境变量配置(scp拷贝jdk和hadoop的目录--scp安全拷贝)
(11)关闭防火墙禁和SElinux
问题解决: unable to load native-hadoop library for you platform
解决方法:设置日志级别
export HADOOP_ROOT_LOGGER=DEBUG,console
如果只想打印错误:
export HADOOP_ROOT_LOGGER=ERROR
Hadoop测试
1、准备一个好一个文件word.txt添加内容
2、在hadoop文件系统中创建存放文件目录input
hadoop fs -mkdir /input
hadoop fs -ls /
当然如果需要删除目录,可以使用如下指令
hadoop fs -rm -r -skipTrash /目录名
3、使用hadoop文件系统进行上传
打开调试模式
export HADOOP_ROOT_LOGGER=DEBUG,console
hadoop fs -put word.txt /input
4、查看input目录下文件
hadoop fs -ls /
Hbase安装配置
(1)下载Hbase1.2.6.1稳定版本,解压到opt目录,并更改所有者为hadoop
tar -zxvf hbase-1.2.6.1.tar.gz
(2)配置hbase环境变量
编辑环境变量配置文件:vim /etc/profile增加如下两行:
export HBASE_HOME=/opt/hbase-1.2.6.1
export PATH=${HBASE_HOME}/bin:$PATH
使环境变量生效:
source /etc/profile
(3)配置hbase环境变量
编辑HBase的环境变量配置文件:vim hbase-env.sh
修改Jdk目录:
export JAVA_HOME=/opt/jdk1.8.0_171
export HBASE_MANAGES_ZK=false (这类使用单独的Zookeeper)
(4)修改HBASE配置文件
进入hbase配置文件目录:cd /opt/hbase-1.2.6.1/conf
输入:vim hbase-site.xml 根节点添加配置文件内容如下:
<property>
<!-- 端口要和Hadoop的fs.defaultFS端口一致-->
<!-- hbase存放数据目录 -->
<name>hbase.rootdir</name>
<value>hdfs://hadoop1:9000/hbase</value>
</property>
<property>
<!-- 是否分布式部署 -->
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<!-- zookooper列表当然只能部署数个,多个用逗号分开也可以指定端口如hadoop1:2181,hadoop2:2181-->
<name>hbase.zookeeper.quorum</name>
<value>hadoop1,hadoop2,hadoop3</value>
</property>
<property>
<!--zookooper配置、日志等临时文件的存储位置 -->
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/hbase/zookeeper</value>
</property>
<property>
<!--不设置将会使用一个默认端口,可能不是zookeeper使用的2181,或者直接不配置改项,使用hbase.zookeeper.quorum配置时直接指定hadoop1:2181,hadoop2:2181-->
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
(5)配置regionservers,添加slave 节点
编辑/opt/hbase-1.2.6.1/conf/regionservers去掉默认的localhost
增加hadoop2和hadoop3(如果有其他slave都加上)
hadoop2
hadoop3
(6)添加备份主节点(如果有的话)
backup-masters (当然可以把slave中的某台设置为备份主节点)
(7)远程赋值hbase配置到其他slave机器上
如果有其他slave节点(因为我这里配置了1个slave的datanode节点):
scp
(8)启动停止
启动顺序:
如果用hbase自带的Zookeeper启动顺序:先启动Hadoop->hbase
如果使用外置的Zookeeper启动顺序:Hadoop->zookeeper->hbase
a。在Hadoop已经启动成功的基础上,输入start-hbase.sh,过几秒钟便启动完成
b。输入hbase shell 命令 进入hbase命令模式输入status命令可以看到如下内容,1个master,2 servers,3机器全部成功启动
在浏览器中输入http://hadoop1:16010就可以在界面上看到hbase的配置了
停止顺序:
hbase->zookeeper->hadoop
c。当要停止hbase时输入stop-hbase.sh,过几秒后hbase就会被停止了
注意:
为保证集群的可靠性,可以启动多个HMaste(hbase-daemon.sh start master,不能在已经启动HMaster的机器上再次启动,否则会报已经启动,必须填停止之前的HMaster进程,jps查看);Master还有一个职责就是负责分配Region给Region Server。HBase允许多个Master 节点共存,但是这需要Zookeeper的帮助。不过当多个Master节点共存时,只有一个Master是提供服务的,其他的Master节点处于待命的状态。当正在工作的Master节点宕机时,其他的Master则会接管 HBase 的集群.
(9)检查hbase启动情况(必须是master的ip:160100端口)
第一:
http://192.168.12.104:160100就可以在界面上看到hbase的配置了
第二:
当然可以使用hbase shell进入hbase的管理界面
然后输入status查看状态,输入list查看所有表,输入exit可以退出管理,回到命令行
问题:使用hbase shell查看hbase状态时,发现错误:org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = Con
最终查找日志发现是hbase-site.xml中配置的clientPort为3351,实际上Zookeeper的默认端口为2181端口,所以更改所有机器的改配置项,停止后stop-hbase.sh 然后start-hbase.sh即可。
快来成为我的朋友或合作伙伴,一起交流,一起进步!
QQ群:961179337
微信:lixiang6153
邮箱:lixx2048@163.com
公众号:IT技术快餐
更多资料等你来拿!