基于Docker的Zookeeper+Hadoop(HA)+hbase(HA)搭建

公司要将监控数据存入opentsdb,而opentsdb使用了hbase作为存储。所以想搭建一套高可用的分布式存储来供opentsdb使用。

因为机器有限,所以测试过程中将三台集群的环境安装在docker上。

一:宿主机版本和docker版本

  宿主机:Centos7.2  3.10.0-862.14.4.el7.x86_64

  docker:Docker version 1.13.1, build 94f4240/1.13.1

二:镜像版本

  docker.io/centos

三:创建docker镜像

   mkdir -p /home/dockerfile/hbaseha

  上传软件包至此目录

  zookeeper-3.4.12.tar.gz

  hbase-1.3.2.1-bin.tar.gz

  hadoop-2.6.5.tar.gz

  jdk8.tar.gz

  创建Dockerfile。

  vi Dockerfile

# 选择一个已有的os镜像作为基础
FROM centos
# 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no
RUN yum install -y openssh-server sudo
RUN sed -i ‘s/UsePAM yes/UsePAM no/g‘ /etc/ssh/sshd_config
#安装openssh-clients
RUN yum  install -y openssh-clients
# 添加测试用户root,密码root,并且将此用户添加到sudoers里
RUN echo "root:root" | chpasswd
RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers
# 下面这两句比较特殊,在centos6上必须要有,否则创建出来的容器sshd不能登录
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# 启动sshd服务并且暴露22端口
RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]ADD jdk8.tar.gz /usr/local/RUN mv /usr/local/jdk1.8.0_171 /usr/local/jdk1.8ENV JAVA_HOME /usr/local/jdk1.8ENV PATH $JAVA_HOME/bin:$PATHADD hadoop-2.6.5.tar.gz /usr/local#安装which软件包RUN yum install -y which#安装net-tools软件包RUN yum install -y net-toolsENV HADOOP_HOME /usr/local/hadoop-2.6.5ENV PATH $HADOOP_HOME/bin:$PATHADD zookeeper-3.4.12.tar.gz /usr/localENV ZOOKEEPER_HOME /usr/local/zookeeper-3.4.12ENV PATH $ZOOKEEPER_HOME/bin:$PATHADD hbase-1.3.2.1-bin.tar.gz /usr/local

创建镜像命令:

docker build -t pro/hbase .

创建完成后查看镜像生成情况:

docker images

  

四:启动容器,并规划IP

  1-虚拟机规划

name role IP
hab0 Hadoop namenode/Hbase Master/ResourceManager 172.17.0.21
hab1 Hadoop namenode/Hbase Master/ResourceManager 172.17.0.22
hab2   172.17.0.23

  

  

  

  2-启动容器

docker run --name hab0 --hostname hab0 -d -P -p 50070:50070 -p 8088:8088 pro/hbase
docker run --name hab1 --hostname hab1 -d -P pro/hbase
docker run --name hab2 --hostname hab2 -d -P pro/hbase

  3-安装bridge-utils 和pipework

  bridge-utils用来管理网桥,pipework可以用来给docker容器设置固定IP

yum -y install bridge-utils
unzip pipework-master.zip
mv pipework-master pipework
cp -rp pipework/pipework /usr/local/bin/

  4-设置容器IP

pipework docker0 hab0 172.17.0.20/24
pipework docker0 hab1 172.17.0.21/24
pipework dcoker0 hab2 172.17.0.22/24 

 五:安装Zookeeper

  1-进入hab0/hab1/hab2 并配置免密登陆

docker exec -it hab0 /bin/bash

  hab0/1/2都需要添加如下hosts

 vi /etc/hosts
172.17.0.20 hab0
172.17.0.21 hab1
172.17.0.22 hab2
在hab0上执行如下操作
    cd  ~
    mkdir .ssh
    cd .ssh
    ssh-keygen -t rsa(一直按回车即可)
    ssh-copy-id -i localhost
    ssh-copy-id -i hab0
    ssh-copy-id -i hab1
    ssh-copy-id -i hab2
 在hab1上执行下面操作
    cd  ~
    cd .ssh
    ssh-keygen -t rsa(一直按回车即可)
    ssh-copy-id -i localhost
    ssh-copy-id -i hab1
 在hab2上执行下面操作
    cd  ~
    cd .ssh
    ssh-keygen -t rsa(一直按回车即可)
    ssh-copy-id -i localhost
    ssh-copy-id -i hab2

  2-修改zookeeper文件

/usr/local/zookeeper-3.4.12/confcp zoo_sample.cfg zoo.cfg

  vi zoo.cfg 在文件末尾追加

dataDir=/home/hadoop/zookeeper-3.4.12/data/zkData
//在最后添加,指定zookeeper集群主机及端口,机器数必须为奇数
server.1=hab0:2888:3888
server.2=hab1:2888:3888
server.3=hab2:2888:3888

  3-创建data/zkData目录,并创经myid. 待会儿同步配置后需要修改三个节点的myid的值。

//在zookeeper根目录下创建zoo.cfg中配置的目录
mkdir data/zkData/ -p

//创建并编辑文件
vi myid

//输入1,即表示当前机器为在zoo.cfg中指定的server.1
1

//保存退出
:wq

  4-拷贝zookeeper到其他节点

  上述操作是在hab0机器上进行的,要将zookeeper拷贝到其他zookeeper集群机器上:

  集群中各组件的安装目录最好保持一致。

cd /usr/local
scp -r zookeeper-3.4.12/ hab1:/usr/local
scp -r zookeeper-3.4.12/ hab2:/usr/local

  5-修改hab1 和hab2的myid

  myid文件是作为当前机器在zookeeper集群的标识,这些标识在zoo.cfg文件中已经配置好了,但是之前在hab0这台机器上配置的myid为1,所以还需要修改其他机器的myid文件:

//在hab1机器上
echo 2 > /usr/local/zookeeper-3.4.12/data/zkData/myid
//在hab2机器上
echo 3 > /usr/local/zookeeper-3.4.12/data/zkData/myid

  6-启动zookeeper集群

cd zookeeper-3.4.12/bin/

//分别在hab0、hab1、hab2上启动
./zkServer.sh start

//查看状态
./zkServer.sh status

三台机器的zookeeper状态必须只有一个leader,其他都是follower。
//查看进程,若有QuorumpeerMain,则启动成功
jps

 六:安装并启动hadoop的ha集群

  1-修改hadoop 5大配置文件

  进入hadoop配置目录

cd /usr/local/hadoop-2.6.5/etc/hadoop

  vi hadoop-env.sh

JAVA_HOME=/usr/local/jdk1.8

  vi core-site.xml

<configuration>
  <!-- hdfs地址,ha模式中是连接到nameservice  -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://junode</value>
  </property>
  <!-- 这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录,也可以单独指定 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop-2.6.5/tmp</value>
  </property>

  <!-- 指定ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点-->
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>hab0:2181,hab1:2181,hab2:2181</value>
  </property>
</configuration>

  vi hdfs-site.xml

<configuration>
  <!-- 指定副本数,不能超过机器节点数  -->
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>

  <!-- 为namenode集群定义一个services name -->
  <property>
    <name>dfs.nameservices</name>
    <value>junode</value>
  </property>

  <!-- nameservice 包含哪些namenode,为各个namenode起名 -->
  <property>
    <name>dfs.ha.namenodes.junode</name>
    <value>hab0,hab1</value>
  </property>

  <!-- hab0的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
  <property>
    <name>dfs.namenode.rpc-address.junode.hab0</name>
    <value>hab0:9000</value>
  </property>

  <!---hab1的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
  <property>
    <name>dfs.namenode.rpc-address.junode.hab1</name>
    <value>hab1:9000</value>
  </property>

  <!--hab0的namenode的http地址和端口号,用来和web客户端通讯 -->
  <property>
    <name>dfs.namenode.http-address.junode.hab0</name>
    <value>hab0:50070</value>
  </property>

  <!-- hab1的namenode的http地址和端口号,用来和web客户端通讯 -->
  <property>
    <name>dfs.namenode.http-address.junode.hab1</name>
    <value>hab1:50070</value>
  </property>

  <!-- namenode间用于共享编辑日志的journal节点列表 -->
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hab0:8485;hab1:8485;hab2:8485/junode</value>
  </property>

  <!-- 指定该集群出现故障时,是否自动切换到另一台namenode -->
  <property>
    <name>dfs.ha.automatic-failover.enabled.junode</name>
    <value>true</value>
  </property>

  <!-- journalnode 上用于存放edits日志的目录 -->
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/usr/local/hadoop-2.6.5/tmp/data/dfs/journalnode</value>
  </property>

  <!-- 客户端连接可用状态的NameNode所用的代理类 -->
  <property>
    <name>dfs.client.failover.proxy.provider.junode</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
  <!-- 一旦需要NameNode切换,使用ssh方式进行操作 -->
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
  </property>

  <!-- 如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置 -->
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
  </property>
  <!-- connect-timeout超时时间 -->
  <property>
    <name>dfs.ha.fencing.ssh.connect-timeout</name>
    <value>30000</value>
  </property>
</configuration>

  vi mapred-site.xml

<!-- 采用yarn作为mapreduce的资源调度框架 -->
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

  vi yarn-site.xml

<configuration>

  <!-- 启用HA高可用性 -->
  <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
  </property>

  <!-- 指定resourcemanager的名字 -->
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yrc</value>
  </property>

  <!-- 使用了2个resourcemanager,分别指定Resourcemanager的地址 -->
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
  </property>

  <!-- 指定rm1的地址 -->
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>hab0</value>
  </property>

  <!-- 指定rm2的地址  -->
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>hab1</value>
  </property>

  <!-- 指定当前机器hab0作为rm1 -->
  <property>
    <name>yarn.resourcemanager.ha.id</name>
    <value>rm1</value>
  </property>

  <!-- 指定zookeeper集群机器 -->
  <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>hab0:2181,hab1:2181,hab2:2181</value>
  </property>

  <!-- NodeManager上运行的附属服务,默认是mapreduce_shuffle -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

</configuration>

  vi slaves

hab0
hab1
hab2

  2-拷贝hadoop目录到其他节点

scp -r hadoop-2.6.5 hab1:/usr/local
scp -r hadoop-2.6.5 hab2:/usr/local

  3-修改hab1的yarn-site.xml

  在hab1机器,即ResourceManager备用主节点上修改如下属性,表示当前机器作为rm2::

<property>
    <name>yarn.resourcemanager.ha.id</name>
    <value>rm2</value>
  </property>

  同时删除hab2节点上的该属性对,因为hab2机器并不作为ResourceManager。

  3-启动hadoop

  启动Journalnode

cd hadoop-2.6.5/sbin/

./hadoop-daemon.sh start 

//查看进程JouralNode是否启动
jps

  4-格式化 NameNode和ZKFC

  在hab0机器上,执行格式化操作:

cd hadoop-2.6.5/bin

./hdfs namenode -format

./hdfs zkfc -formatZK

../sbin/hadoop-daemon.sh start namenode

  5-备用主节点同步主节点元数据

  在hab1(备用主节点)机器上,执行同步操作:

cd hadoop-2.6.5/bin

./hdfs namenode -bootstrapStandby

  6-安装fuster

  若服务器是最小化安装centeros时,有可能系统没有fuster程序,那么跳过这个安装步骤直接进行后面的操作时,将有可能出现以下问题:

hab0作为主节点时,kill掉hab0上的NameNode和ResourceManager进程时,可以实现故障转移,hab1将从stanby状态自动变成active状态;但是当hab1作为主节点时,若kill掉hab1上的进程,hab0上的进程状态却还是stanby,并不能实现故障自动转移。原因是我们在 hdfs-site.xml中配置了当集群需要故障自动转移时采用SSH方式进行,而因为缺少fuster程序,将在zkfc的日志文件中发现如下错误:
PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 9000 via ssh: bash: fuser: 未找到命令
Unable to fence service by any configured method
java.lang.RuntimeException: Unable to fence NameNode at master
hab1/172.17.0.21:9000

  在hab0/hab1/hab2上执行

sudo yum install psmisc

  7-启动HDFS、YARN、ZookeeperFailoverController

  在hab0上

cd hadoop-2.6.5/sbin

./start-dfs.sh

//验证,显示NameNode和DataNode
jps

./start-yarn.sh

//验证,显示ResourceManager和NodeManager
jps

./hadoop-daemon.sh start zkfc

//验证,显示ZookeeperFailoverController
jps

  在hab1机器上,启动ResourceManager,备用主节点的ResourceManager需要手动启动:

cd hadoop-2.6.5/sbin

yarn-daemon.sh start resourcemanager

  查看hab0 Namenode、ResourceManager状态

hdfs haadmin -getServiceState hab0
yarn rmadmin -getServiceState rm1 

hdfs haadmin -getServiceState hab1
yarn rmadmin -getServiceState rm2

  也可以通过Web界面来查看,浏览器中输入 ip:50070 查看HDFS,输入 ip:8088/cluster/cluster 查看YARN。

  8-测试高可用

  a.主节点--->备用主节点

  kill掉主节点的namenode,查看备用主节点的namenode状态是否切换为active;

  kill掉主节点的ResourceManager,查看备用主节点的ResourceManager是否切换为active;

  b.备用主节点--->主节点

  若上述操作执行成功,那么再测试反向故障自动转移

  先启动被杀死的原主节点的namenode和ResourceManager

  hadoop-daemon.sh start namenode 

  yarn-daemon.sh start resourcemanager

  再kill备用主节点的namenode和ResourceManager,查看主节点的状态,若能切换为active,那么Hadoop HA高可用集群搭建完成。

  

  补充当前三台机器网元启动状态

  

hab0

[[email protected] sbin]# jps

5794 DataNode5186 JournalNode2835 ResourceManager3219 DFSZKFailoverController38 QuorumPeerMain7274 Jps5483 NameNode3694 HRegionServer2943 NodeManager
[[email protected] logs]# jps2258 NameNode2403 JournalNode1333 NodeManager1765 HRegionServer2684 DataNode3262 Jps30 QuorumPeerMain1487 ResourceManager
[[email protected] ~]#jps

1891 Jps1496 JournalNode249 QuorumPeerMain1129 HRegionServer1596 DataNode959 NodeManager

七:在ha的hadoop集群上搭建Hbase

  1-修改hbase配置

进入hbase-1.3.2.1//conf/目录,修改配置文件:
cd /usr/local/hbase-1.3.2.1/conf/

  创建pid目录

mkdir -p /usr/local/hbase-1.3.2.1/data/hbase/pids

  vi hbase-env.sh

//配置JDK
export JAVA_HOME=/usr/local/jdk1.8

//保存pid文件
export HBASE_PID_DIR=/usr/local/hbase-1.3.2.1/data/hbase/pids

//修改HBASE_MANAGES_ZK,禁用HBase自带的Zookeeper,因为我们是使用独立的Zookeeper
export HBASE_MANAGES_ZK=false

  vi hbase-site.xml

<configuration>
  <!-- 设置HRegionServers共享目录,请加上端口号 -->
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://junode/hbase</value>
  </property>

  <!-- 指定HMaster主机 -->
  <property>
    <name>hbase.master</name>
    <value>hdfs://hab0:60000</value>
  </property>

  <!-- 启用分布式模式 -->
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>

  <!-- 指定Zookeeper集群位置 -->
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>hab0:2181,hab1:2181,hab2:2181</value>
  </property>

  <!-- 指定独立Zookeeper安装路径 -->
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/usr/local/zookeeper-3.4.12</value>
  </property>

  <!-- 指定ZooKeeper集群端口 -->
  <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
  </property>
</configuration>

  vi regionservers

  修改regionservers文件,因为当前是使用独立的Zookeeper集群,所以要指定RegionServers所在机器:

hab0
hab1
hab2

  2-拷贝hbase到其他节点

scp -r hbase-1.3.2.1 hab1:/usr/local
scp -r hbase-1.3.2.1 hab2:/usr/local

  3-在主节点上启动HBase(这里的主节点是指NameNode状态为active的节点)

cd hbase-1.3.2.1/bin

./start-hbase.sh

//查看HMaster、Regionserver进程是否启动
jps
注意:此时Hadoop集群应处于启动状态,并且是在主节点执行start-hbase.sh启动HBase集群,否则HMaster进程将在启动几秒后消失,而备用的HMaster进程需要在备用主节点单独启动,命令是:./hbase-daemon.sh start master。
备用节点启动hmaster
cd hbase-1.3.2.1/bin
./hbase-daemon.sh start master

  4-Hbase高可用测试

  在浏览器中输入 ip:16010 ,查看主节点和备用主节点上的HMaster的状态,在备用主节点的web界面中,可以看到“Current Active Master: master188”,表示当前HBase主节点是master188机器;
  主节点--->备用主节点

    这里的主节点指使用start-hbase.sh命令启动HBase集群的机器

  kill掉主节点的HMaster进程,在浏览器中查看备用主节点的HBase是否切换为active;

  若上述操作成功,则在主节点启动被杀死的HMaster进程:

  cd hbase-1.3.2.1/bin/

  ./hbase-daemon.sh start master

  然后,kill掉备用主节点的HMaster进程,在浏览器中查看主节点的HBase是否切换为active,若操作成功,则HBase高可用集群搭建完成;

  5-Hbase基本操作

//启动HBase
[[email protected] ~] start-hbase.sh

//进入HBase Shell
[[email protected] ~] hbase shell

//查看当前HBase有哪些表
hbase(main):> list

//创建表t_user,cf1和cf2是列族,列族一般不超过3个
hbase(main):> create ‘t_user‘,‘cf1‘,‘cf2‘

//获得表t_user的描述信息
hbase(main):> describe ‘t_user‘

//禁用表
hbase(main):> disable ‘t_user‘

//删除表,删除表之前要先把表禁用掉
hbase(main):> drop ‘t_user‘

//查询表是否存在
hbase(main):> exists ‘t_user‘

//查看全表数据
hbase(main):> scan ‘t_user‘

//插入数据,分别是表名、key、列(列族:具体列)、值。HBase是面向列的数据库,列可无限扩充
hbase(main):> put ‘t_user‘ ,‘001‘,‘cf1:name‘,‘chenxj‘
hbase(main):> put ‘t_user‘ ,‘001‘,‘cf1:age‘,‘18‘
hbase(main):> put ‘t_user‘ ,‘001‘,‘cf2:sex‘,‘man‘
hbase(main):> put ‘t_user‘ ,‘002‘,‘cf1:name‘,‘chenxj‘
hbase(main):> put ‘t_user‘ ,‘002‘,‘cf1:address‘,‘fuzhou‘
hbase(main):> put ‘t_user‘ ,‘002‘,‘cf2:sex‘,‘man‘

//获取数据,可根据key、key和列族等进行查询
hbase(main):> get ‘t_user‘,‘001‘
hbase(main):> get ‘t_user‘,‘002‘,‘cf1‘
hbase(main):> get ‘t_user‘,‘001‘,‘cf1:age‘

  

原文地址:https://www.cnblogs.com/latiaotaba/p/10180099.html

时间: 2024-10-08 11:40:07

基于Docker的Zookeeper+Hadoop(HA)+hbase(HA)搭建的相关文章

基于Docker的Consul服务发现集群搭建

原文:基于Docker的Consul服务发现集群搭建 在去年的.NET Core微服务系列文章中,初步学习了一下Consul服务发现,总结了两篇文章.本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架构示范,也会更加贴近于实际应用环境. 一.示例整体架构 此示例会由一个API Gateway, 一个Consul Client以及三个Consul Server组成,有关Consul的Client和Server这两种模式的Agent的背景知识,请

hadoop HA + HBase HA搭建:

hadoop HA搭建参考:https://www.cnblogs.com/NGames/p/11083640.html (本节:用不到YARN 所以可以不用考虑部署YARN部分) Hadoop 使用分 布式文件系统,用于存储大数据,并使用 MapReduce 来处理.Hadoop 擅长于存储各种格式 的庞大的数据,任意的格式甚至非结构化的处理. Hadoop 的限制: Hadoop 只能执行批量处理,并且只以顺序方式访问数据.这意味着必须搜索整个数据集, 即使是最简单的搜索工作.这一点上,一个

基于docker的 Hyperledger Fabric 多机环境搭建(上)

环境:ubuntu 16.04 Docker  17.04.0-ce go 1.7.4 consoul v0.8.0.4 ======================================================================= 一.项目准备 想必能搜到这篇文章的人对Hyperledger Fabric(以下简称Fabric)已经是有了一定的了解了,我就不多介绍了. 先说一下Fabric的构建环境: Hyperledger Fabric  tag v1.0.0

Hadoop HA + HBase环境搭建(一)————zookeeper和hadoop环境搭建

版本信息: Hadoop 2.6.3 HBase 1.0.3 JDK 1.8 Zookeeper 3.4.9 集群信息: RDFMaster 192.168.0.41 (Hadoop主节点,zk节点,HBase主节点) RDFSlave01 192.168.0.42 (Hadoop备份主节点,从节点,zk节点,HBase的RegionServer) RDFSlave02 192.168.0.43 (从节点,zk节点,HBase的RegionServer) RDFSlave03 192.168.0

Hadoop HA + HBase环境搭建(二)————HBase环境搭建

HBase配置(只需要做一处修改) 修改HBase的 hbase-site.xml 配置文件种的一项 <property> <name>hbase.rootdir</name> <value>hdfs://nn/hbase</value> </property> 解释:以前value值的设置的是Hadoop中主节点的名字加上端口号,如 hdfs://RDFMaster:8020/hbase ,需要改写成在Hadoop的配置文件 hdf

基于Docker进行Zookeeper集群的安装

需要先部署jdk环境 这次通过手工部署的方式, 先上传jdk的tar包 [[email protected] soft]# ll total 189496 -rw-r--r-- 1 root root 194042837 Apr 8 14:11 jdk-8u202-linux-x64.tar.gz 解压到指定目录 mkdir -p /opt/test/java tar -zxvf jdk-8u202-linux-x64.tar.gz -C /opt/test/java vim /etc/prof

生产环境下hadoop HA集群及Hbase HA集群配置

一.环境准备 操作系统版本:centos7 64位 hadoop版本:hadoop-2.7.3 hbase版本: hbase-1.2.4 1.机器及角色 IP 角色 192.168.11.131 Namenode DFSZKFailoverController ResourceManager Jobhistory HMaster QuorumPeerMain 192.168.11.132 Namenode DFSZKFailoverController HMaster QuorumPeerMai

hbase 概念 + 搭建分布式HA应用

HBase - Hadoop Database hbase的设计思想来自于google的bigtable 主键:Row Key 主键是用来检索记录的主键,访问Hbase table 中的行,只有三种方式 通过单个Row Key 访问 通过Row Key 的range 全表扫描 列族:Column Family 列族在创建表的时候声明,一个列族可以包含多个列,列中的数据都是以二进制形式存在,没有数据类型 时间戳:Timestamp Hbase中通过row和columns确定的为一个存储单元称为ce

ZooKeeper原理及其在Hadoop和HBase中的应用

简介 ZooKeeper是一个开源的分布式协调服务,由雅虎创建,是Google Chubby的开源实现.分布式应用程序可以基于ZooKeeper实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理.Master选举.分布式锁和分布式队列等功能. 基本概念 本节将介绍ZooKeeper的几个核心概念.这些概念贯穿于之后对ZooKeeper更深入的讲解,因此有必要预先了解这些概念. 集群角色 在ZooKeeper中,有三种角色: Leader Follower Observer 一