建立伪分布式hbase集群

建立伪分布式hbase集群

目标

  1. 建立hadoop伪分布式集群,挂载主机目录做为数据目录,暴露9000端口做为数据访问端口
  2. 建立hbase伪分布式集群,使用hadoop:9000做为文件系统
  3. 使用容器,并使用docker-compose简化系统启停

建立hadoop伪分布式集群

从官网下载合适版本。hbase目前版本支持hadoop2.6.1+版本,不支持2.7.0,因此,这次下载最新的2.6.5版本

几个配置文件如下,全部参考官方文档

core-site.xml


    
        fs.defaultFS
        hdfs://hadoop:9000
    

hdfs-site.xml


    
        dfs.replication
        1
    
    
        dfs.namenode.name.dir
        file:/v/dfs/name
    
    
        dfs.datanode.data.dir
        file:/v/dfs/data
    

这里的/v/dfs/是容器映射主机的目录,在docker-compose.xml文件中会有详细定义

yarn-site.xml




    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    
    
        yarn.resourcemanager.hostname
        hadoop
    

mapred-site.xml


    
        mapreduce.framework.name
        yarn
    

dockerfile: dockerfile取名hadoop.dockerfile

# Creates pseudo distributed hadoop 2.6.5

FROM java:on
MAINTAINER lyalchan "[email protected]"

ENV HADOOP_VERSION=2.6.5
ADD hadoop-${HADOOP_VERSION}.tar.gz /

ENV PATH /hadoop-${HADOOP_VERSION}/bin:/hadoop-${HADOOP_VERSION}/sbin:$PATH
ENV HADOOP_PREFIX=/hadoop-${HADOOP_VERSION}

ADD core-site.xml ${HADOOP_PREFIX}/etc/hadoop/
ADD hdfs-site.xml ${HADOOP_PREFIX}/etc/hadoop/
ADD mapred-site.xml ${HADOOP_PREFIX}/etc/hadoop/
ADD yarn-site.xml ${HADOOP_PREFIX}/etc/hadoop/

RUN echo export JAVA_HOME=${JAVA_HOME} >> $HADOOP_PREFIX/etc/hadoop/hadoop-env.sh
RUN echo export HADOOP_PREFIX=/hadoop-${HADOOP_VERSION} >> $HADOOP_PREFIX/etc/hadoop/hadoop-env.sh

RUN $HADOOP_PREFIX/bin/hdfs namenode -format -force

ADD hadoop.sh /
RUN chmod +x /hadoop.sh

ENTRYPOINT ["/hadoop.sh"]

说明:

  1. java:on是自定义的一个java镜像,基于isuper/java-oracle:jdk_8,增加ssh免密码登陆功能,并修正了时区。ssh免密码登陆是hadoop、hbase集群必备条件
  2. namenode必须先格式化,这里为了格式化已有的namenode,增加了force参数
  3. hadoop.sh启动hdfs和yarn服务,具体为

hadoop.sh

#!/bin/bash 

service ssh start
start-dfs.sh
start-yarn.sh
sleep 99999999

建立hbase伪分布式集群

从官网下载最新版本,这里是1.2.4版本

配置文件,只有一个hbase-site.xml


  
    hbase.cluster.distributed
    true
  
  
    hbase.rootdir
    hdfs://hadoop:9000/hbase
  
  
    hbase.zookeeper.property.dataDir
    hdfs://hadoop:9000/zookeeper
  

使用hadoop:9000端口,hadoop是前面hadoop集群的主机名称,在docker-compose.yml中指定

dockerfile: 取名hbase.dockerfile

FROM java:on
MAINTAINER lyalchan "[email protected]"

ENV HBASE_VERSION 1.2.4

ADD hbase-${HBASE_VERSION}-bin.tar.gz /
ADD hbase-site.xml /hbase-${HBASE_VERSION}/conf/
ENV PATH /hbase-${HBASE_VERSION}/bin:$PATH
RUN echo export JAVA_HOME=$JAVA_HOME >> /hbase-$HBASE_VERSION/conf/hbase-env.sh

ADD hbase.sh /
RUN chmod +x /hbase.sh

ENTRYPOINT ["/hbase.sh"]

hbase.sh启动hbase服务,具体为

hbase.sh

#!/bin/bash 

service ssh start
start-hbase.sh
sleep 99999999

建立容器,并使用docker-compose启停

docker-compose.yml

version: "2"
services:
    hadoop:
        build: 
            context: .
            dockerfile: hadoop.dockerfile
        image: hadoop_pseudo_distributed:2.6.5
        container_name: hadoop
        hostname: hadoop
        ports:
            - 50070:50070
            - 8088:8088
        volumes:
            - ./data:/v
         
    hbase:
        build: 
            context: .
            dockerfile: hbase.dockerfile
        image: hbase_pseudo_distributed:1.2.4
        container_name: hbase
        depends_on: 
            - hadoop
        hostname: hbase
        ports:
            - 16010:16010
        volumes:
            - ./data:/v

定义两个服务,hadoop和hbase

  • hadoop使用hadoop.dockerfile做为dockerfile,生成image叫hadoop_pseudo_distributed:2.6.5,启动的容器名为hadoop,主机名为hadoop,暴露两个端口50070和8088,并挂载主机当前目录下的data目录,从hdfs-site.xml可以知道,这个目录被用来当做hadoop的namenode和datanode目录。
  • hbase类似

docker1.10以后的网络功能大为增强,在docker daemon中新增了dns功能,所有使用自定义网络的容器都可以通过主机名互通

把所有文件都放在一个目录下,共12个文件,一个data文件夹,这12个文件为

hadoop文件

  • hadoop-2.5.6.tar.gz
  • hadoop.dockerfile
  • hadoop.sh
  • core-site.xml
  • hdfs-site.xml
  • yarn-site.xml
  • mapred-site.xml

hbase文件

  • hbase-1.2.4.tar.gz
  • hbase.dockerfile
  • hbase.sh
  • hbase-site.xml

还有一个docker-compose.yml文件

启动系统

docker-compose up -d

停止系统

docker-compose down

重建镜像

docker-compose build

或者

docker-compose up -d --build

使用和验证

hbase shell

docker exec -it hbase /bin/bash

进入hbase容器,然后启动hbase shell

hbase shell

在hbase shell下面创建表test,并增加2行

create "test", "cf"
put "test", "row1", "cf:a", "value1"
put "test", "row1", "cf:b", "value2"
put "test", "row2", "cf:a", "value3"
put "test", "row2", "cf:c", "value4"

新增两行row1row2row1有a,b两列,row2有a,c两列

list "test"
scan "test"
get "test", "row1"
get "test", "row2"

WEB查看

在主机的localhost:16010localhost:50070localhost:8088,可以查看hbase和hadoop的运行情况

你可能感兴趣的:(建立伪分布式hbase集群)