首页 > 其他分享 >docker搭建hadoop+hbase(待写完)

docker搭建hadoop+hbase(待写完)

时间:2024-07-26 09:25:28浏览次数:12  
标签:XML capacity hadoop yarn SITE CAPACITY hbase docker

参考文档:

    1. 官方文档 https://hub.docker.com/r/apache/hadoop

一.创建集群配置

根据文档可知,首先创建一个docker-compose.yaml文件

我的文件内容如下

version: "2"
services:
   namenode:
      image: apache/hadoop:3.3.6
      hostname: namenode
      command: ["hdfs", "namenode"]
      ports:
        - 9870:9870
        - 8020:8020
      env_file:
        - ./config
      environment:
          ENSURE_NAMENODE_DIR: "/tmp/hadoop-root/dfs/name"
   datanode:
      image: apache/hadoop:3.3.6
      command: ["hdfs", "datanode"]
      env_file:
        - ./config      
   resourcemanager:
      image: apache/hadoop:3.3.6
      hostname: resourcemanager
      command: ["yarn", "resourcemanager"]
      ports:
         - 8088:8088
      env_file:
        - ./config
      volumes:
        - ./test.sh:/opt/test.sh
   nodemanager:
      image: apache/hadoop:3.3.6
      command: ["yarn", "nodemanager"]
      env_file:
        - ./config
   zoo1:
      image: zookeeper:3.9.2
      restart: always
      hostname: zoo1
      ports:
        - 2181:2181
        - 2888:2888
        - 3888:3888
      environment:
        ZOO_MY_ID: 1
   hbase:
      image: hbase:1.1
      ports:
        - 60010:60010
        - 16010:16010
        - 16000:16000
        - 16020:16020
        - 16030:16030
      volumes:
        - ./logs/hbase:/opt/hbase/logs

在同目录下创建conifg,内容为官方网站提供的如下

CORE-SITE.XML_fs.default.name=hdfs://namenode
CORE-SITE.XML_fs.defaultFS=hdfs://namenode
HDFS-SITE.XML_dfs.namenode.rpc-address=namenode:8020
HDFS-SITE.XML_dfs.replication=1
MAPRED-SITE.XML_mapreduce.framework.name=yarn
MAPRED-SITE.XML_yarn.app.mapreduce.am.env=HADOOP_MAPRED_HOME=$HADOOP_HOME
MAPRED-SITE.XML_mapreduce.map.env=HADOOP_MAPRED_HOME=$HADOOP_HOME
MAPRED-SITE.XML_mapreduce.reduce.env=HADOOP_MAPRED_HOME=$HADOOP_HOME
YARN-SITE.XML_yarn.resourcemanager.hostname=resourcemanager
YARN-SITE.XML_yarn.nodemanager.pmem-check-enabled=false
YARN-SITE.XML_yarn.nodemanager.delete.debug-delay-sec=600
YARN-SITE.XML_yarn.nodemanager.vmem-check-enabled=false
YARN-SITE.XML_yarn.nodemanager.aux-services=mapreduce_shuffle
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.maximum-applications=10000
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.maximum-am-resource-percent=0.1
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.queues=default
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.capacity=100
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.user-limit-factor=1
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.maximum-capacity=100
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.state=RUNNING
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.acl_submit_applications=*
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.acl_administer_queue=*
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.node-locality-delay=40
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.queue-mappings=
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.queue-mappings-override.enable=false
 

其中的 hbase为我自己制作的镜像

hbase制作镜像流程:

     1. 前往官方Apache HBase – Apache HBase Downloads下载对应的压缩包,我是基于hadoop3制作的,所以下载的版本是hbase-2.6.0-hadoop3-bin.tar.gz 

     2.撰写dockerfile,我的dockfile如下,由于是一开始调试,使用了ubuntu全镜像,如果想继续优化,优化思路如下1.可以基于alpine,或者直接基于java构建。使用aipine需要注意,由于alpine用的是musl libc,可能得添加glibc,这边没测试过。故有兴趣的可以自己尝试下。2.先解压缩,然后直接修改里面的配置文件,复制文件夹而不是压缩包进去,可以稍微加快打包速度。

    未优化过的dockerfile如下

# 使用基础镜像,这里以Ubuntu为例
FROM ubuntu:20.04

# 更新apt源并安装基本软件包
RUN apt-get update && apt-get install -y  openjdk-8-jdk telnet vim && rm -rf /var/lib/apt/lists/*

# 这里是设置了jdk的环境 
ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
ENV PATH="$JAVA_HOME/bin:$PATH"

# 下载HBase的二进制包,这里以HBase 2.6.0为例
ARG HBASE_VERSION=2.6.0
COPY hbase-${HBASE_VERSION}-hadoop3-bin.tar.gz /tmp/

# 解压HBase到/opt/hbase目录
RUN tar xzf /tmp/hbase-${HBASE_VERSION}-hadoop3-bin.tar.gz -C /opt/ \
    && mv /opt/hbase-${HBASE_VERSION}-hadoop3 /opt/hbase \
    && rm -f /tmp/hbase-${HBASE_VERSION}-hadoop3-bin.tar.gz

# 设置HBase的环境变量
ENV PATH="/opt/hbase/bin:$PATH"
ENV HBASE_HOME="/opt/hbase"
ENV HBASE_MANAGES_ZK=false

# 暴露HBase的端口
EXPOSE 60010 16010


# 复制模板配置文件
COPY hbase-site.xml /opt/hbase/conf/hbase-site.xml

# 在容器启动时生成配置文件

CMD ["tail", "-f", "/dev/null"]
 

        这里还装了telnet和vim用于调试。

     3.hbase配置文件如下

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- HBase Configuration Template -->

<configuration>

  <!-- ZooKeeper quorum -->
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>zoo1:2181</value>
    <!-- Optional ZooKeeper client port -->
    <description>
      A comma-separated list of host:port pairs pointing to the ZooKeeper Quorum.
      The port defaults to 2181 if not specified.
    </description>
  </property>

  <!-- ZooKeeper client port -->
  <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
    <description>
      The port at which the clients will connect.
    </description>
  </property>

  <!-- ZooKeeper session timeout -->
  <property>
    <name>hbase.zookeeper.session.timeout.upper.limit</name>
    <value>60000</value>
    <description>
      The maximum value for the ZooKeeper session timeout, in milliseconds.
    </description>
  </property>

  <!-- HBase root directory -->
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://namenode:8020/hbase</value>
    <description>
      The root directory where HBase stores its data.
    </description>
  </property>

  <!-- HFile block cache size -->
  <property>
    <name>hfile.block.cache.size</name>
    <value>0.4</value>
    <description>
      The fraction of heap space to use for the HFile block cache.
    </description>
  </property>

  <!-- RPC timeout -->
  <property>
    <name>hbase.rpc.timeout</name>
    <value>30000</value>
    <description>
      The default timeout for RPC calls, in milliseconds.
    </description>
  </property>

  <!-- HBase master address -->


  <!-- HBase region server handler count -->
  <property>
    <name>hbase.regionserver.handler.count</name>
    <value>60</value>
    <description>
      The number of request handlers per region server.
    </description>
  </property>
<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.tmp.dir</name>
    <value>./tmp</value>
  </property>
  <property>
    <name>hbase.unsafe.stream.capability.enforce</name>
    <value>false</value>
  </property>
  <!-- More properties can be added as needed -->

</configuration>

接着就是打包 docker build -t hbase:1.1 

二.启动集群

docker compose up -d

 启动集群后,以交互模式进入hdfs的namenode,修改权限,否则需要以对应用户启动hbase

docker exec -it <namenode的容器id> /bin/bash

# 这里为了学习用,授予了其他用户写入权限,生产不可以这样,应该引入Kerberos或者管理好用户及用户组

hdfs dfs -chmod o+w /   

 接着进入hbase容器启动hbase

docker exec -it <hbase的容器id> /bin/bash

sh -c /opt/hbase/bin/start-hbase.sh

三.检查是否启动成功 

hbase 管理是 127.0.0.1:16010

 hdfs

yarn

四 注意点

    1.如果本地idea测试应用,需要往host添加127.0.0.1 容器id

    2.集群外容器想访问,应该创建docker 网络,然乎在docker compose使用该网络。

标签:XML,capacity,hadoop,yarn,SITE,CAPACITY,hbase,docker
From: https://blog.csdn.net/weixin_42486564/article/details/140694787

相关文章

  • 在 EC2 上的 Docker 内使用 Boto3 时,无法使用隐式 IAM/基于角色的身份验证
    我遇到了令人沮丧的边缘情况,现在必须引入自定义逻辑来解决或正确解决。我正在EC2上的Docker容器内运行Django应用程序。我使用附加到实例的IAM角色来授予其对特定S3存储桶和一组操作的访问权限。这一切运行良好,我可以确认当Python直接在实例上运行时,Boto3可以使......
  • wsl docker 安装frp内网穿透出现error: dial tcp 127.0.0.1:xxxx: connect: connectio
    ​环境为win11+wsl2+dockerdesktop+frp镜像发生背景:wsl配置文件中我设置了networkingMode=mirrored所以一般情况下wsl2和主机ip一致,可互通原始配置文件为#frpc.toml配置文件端口映射部分[text]type=tcp#模式local_ip=127.0.0.1#本机iplocal_port=1234#本机端口rem......
  • 【Docker】CentOS7环境下的安装
    环境展示安装配置仓库sudoyuminstall-yyum-utils#docker官方key文件下载sudoyum-config-manager--add-repohttps://download.docker.com/linux/centos/docker-ce.repo#建议使用阿里云key文件下载sudoyum-config-manager--add-repohttps://mirrors.aliy......
  • Docker-compose
    介绍Compose是Docker公司推出的一个工具软件,可以管理多个Docker容器组成一个应用。你需要定义一个YAML格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动、关闭这些容器。核心组成1、一文件docker-compose.yml2、两要素服......
  • hbase SLF4J报错
    hbaseSLF4J报错HBaseSLF4J错误的解决方法介绍在使用HBase开发过程中,经常会遇到SLF4J报错的情况。SLF4J(SimpleLoggingFacadeforJava)是一个为Java应用程序提供日志记录接口的简单日志门面。本文将介绍如何解决HBase中常见的SLF4J报错问题。解决流程下面是解决HBaseSLF4......
  • Hadoop(5-1) HBase 提示SLF4J: Class path contains multiple SLF4J bindings.
    Hadoop(5-1)HBase提示SLF4J:ClasspathcontainsmultipleSLF4Jbindings.问题描述在使用hbaseversion命令时,出现下列的警告信息 。SLF4J:ClasspathcontainsmultipleSLF4Jbindings.SLF4J:Foundbindingin[jar:file:/usr/local/hadoop-3.3.6/share/hadoop/com......
  • Docker的一些知识点
    1.Docker中容器和镜像的区别镜像(Image):镜像是一个只读模板,包含了运行一个应用所需的所有内容:代码、运行时、库、环境变量和配置文件。镜像是构建容器的基础。你可以将它想象成是一个应用的“蓝图”。镜像通常是通过Dockerfile定义的,Dockerfile是一个文本文件,包含了一系列......
  • docker安装HANA数据库
    对于开发和测试场景,可以考虑安装hanaexpress,仓库地址为https://hub.docker.com/r/saplabs/hanaexpress安装步骤如下:1.修改/etc/sysctl.conf文件vim/etc/sysctl.conf在末尾填入以下信息fs.file-max=20000000fs.aio-max-nr=262144vm.memory_failure_early_kill=1vm.max......
  • Docker常用容器启动命令
    redisdockerrun-p6379:6379--nameredis2-vD:\Docker_Container\redis\conf\redis.conf:/etc/redis/redis.conf-vD:\Docker_Container\redis\data:/data-dredis:7.2.3redis-server/etc/redis/redis.conf--appendonlyyes-p6379:6379:将宿主机的6379端口......
  • 从 DOCKER 下的共享卷在 Linux 中执行 PyInstaller 生成的文件时出现 Python 子进程 F
    我已经使用PyInstaller生成了一个可执行文件,例如test(没有扩展名,因为它是Linux)并将其存储在一个目录中,例如data我有一个Python程序,如下所示:importsubprocessfrompathlibimportPath...defrun_exe():try:#getcurrentdirectory......