hadoop集群搭建:Ubuntu 1 master 3 worker



注:本篇博客记录了安装中发生的所有问题,以下版本安装基本上不会再出现其他兼容问题
该集群为一主三从,需要先安装Ubuntu虚拟机、并下载以下压缩包(可以去官网)
如果还有遇到其他问题欢迎大家在评论区补充,提问

系统版本:

ubuntu-22.04-desktop-amd64.iso

组件版本:

hadoop-3.2.4.tar.gz
apache-flume-1.11.0-bin.tar.gz
kafka_2.12-3.3.2.tgz
spark-3.2.2-bin-hadoop3.2.tgz
sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
apache-hive-3.1.3-bin.tar.gz
hbase-2.5.1-bin.tar.gz
apache-zookeeper-3.8.0-bin.tar.gz
scala-2.12.17.tgz

架包

hive-jdbc-3.1.3-standalone.jar
mysql-connector-java-8.0.26.jar

搭建hadoop环境

首先来到 hadoop 官网 点击Download,选择下载版本(二进制)
下载`hadoop-3.2.4.tar.gz
文件层级关系
在这里插入图片描述

第一步:镜像制作

在image中新建Dockerfile

# 选择基础镜像
FROM ubuntu:20.04

# 再镜像中安装 程序 设置编码
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* && localedef -i zh_CN -c -f UTF-8 -A /usr/share/locale/locale.alias zh_CN.UTF-8

# 设置环境变量
ENV LANG zh_CN.UTF-8

# 安装 openssh-server 和 openjdk-8-jdk
RUN apt-get update -o Acquire-by-hash=yes && apt-get install -y openssh-server openjdk-8-jdk

# 将和当前dockerfile文件再同一个目录中的hadoop-3.2.4.tar.gz压缩包解压拷贝到镜像 的/usr/local/目录中
ADD hadoop-3.2.4.tar.gz /usr/local/

# 环境变量配置
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
ENV HADOOP_HOME=/usr/local/hadoop-3.2.4
ENV PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
ENV HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

# ssh 免密码登录
RUN ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' && cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

# 创建目录
RUN mkdir -p /data/hdfs/namenode && mkdir -p /data/hdfs/datanode

# 将编写好的 Hadoop 配置文件 覆盖到  $HADOOP_HOME/etc/hadoop 中
COPY config/* $HADOOP_CONF_DIR/

config中新建core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xmlhadoop-env.shyarn-env.shworkers

core-site.xml

<configuration>
    <!-- 定义分布式文件系统地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop-nn:9000</value>
    </property>
    <!-- 定义代理用户的访问权限 -->
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
    <!-- 启用 hdfs 回收站能力  -->
    <property>
        <name>fs.trash.interval</name>
        <value>1440</value>
        <description>Number of minutes between trash checkpoints.
            If zero, the trash feature is disabled.
        </description>
    </property>

</configuration>

hdfs-site.xml

<configuration>
    <!-- 定义 NameNode 数据存储目录 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///data/hdfs/namenode</value>
        <description>NameNode directory for namespace and transaction logs storage.</description>
    </property>

    <!-- 定义 DataNode 数据存储目录 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///data/hdfs/datanode</value>
        <description>DataNode directory</description>
    </property>

    <!-- 定义 数据存冗余的备份数 -->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>

</configuration>

mapred-site.xml

<configuration>
    <!-- 分布式计算 资源调度引擎 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- 配置 mr  历史服务 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop-nn:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop-nn:19888</value>
    </property>
    <!-- 配置 mr 安装目录 -->
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.4</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.4</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.4</value>
    </property>

</configuration>

yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->

    <!-- 洗牌 shuffle 设置 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 配置 yarn  resourcemanager 服务地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop-nn</value>
    </property>

    <!-- 禁用 虚拟内存的检查 -->
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>


</configuration>

hadoop-env.sh

export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-8-openjdk-amd64}
export HADOOP_HOME=${HADOOP_HOME:-/usr/local/hadoop-3.2.4}
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

yarn-env.sh

export YARN_REGISTRYDNS_SECURE_USER=$USER

workers

hadoop-dn1
hadoop-dn2
hadoop-dn3

第二步: 容器编排

在docker中创建hadoop-1m3w.yml

version: "3.8"
services:
  # 主节点
  hadoop-nn:
    image: hadoop09:latest
    container_name: hadoop-nn
    networks:
      bigdata-hadoop-net:
        ipv4_address: 172.30.0.10
    volumes:
      - ./data/nn:/data
    environment:
      HOSTNAME: hadoop-nn
      TZ: Asia/Shanghai
    stdin_open: true # -i interactive
    tty: true # -t tty
    entrypoint: [ "sh" ,"-c","service ssh start; bash" ]
    ports:
      - "9870:9870"
      - "8088:8088"
      - "19888:19888"
      - "2181:2181"
      - "10000:10000"
      - "10002:10002"
      - "16010:16010"
      - "9081:9081"
      - "4040:4040"

  hadoop-dn1:
    image: hadoop09:latest
    container_name: hadoop-dn1
    networks:
      bigdata-hadoop-net:
        ipv4_address: 172.30.0.11
    volumes:
      - ./data/dn1:/data
    environment:
      HOSTNAME: hadoop-dn1
      TZ: Asia/Shanghai
    stdin_open: true # -i interactive
    tty: true # -t tty
    entrypoint: [ "sh" ,"-c","service ssh start; echo 1 > /var/lib/zookeeper/myid ; zkServer.sh start ; bash" ]

  hadoop-dn2:
    image: hadoop09:latest
    container_name: hadoop-dn2
    networks:
      bigdata-hadoop-net:
        ipv4_address: 172.30.0.12
    volumes:
      - ./data/dn2:/data
    environment:
      HOSTNAME: hadoop-dn2
      TZ: Asia/Shanghai
    stdin_open: true # -i interactive
    tty: true # -t tty
    entrypoint: [ "sh" ,"-c","service ssh start; echo 2 > /var/lib/zookeeper/myid ; zkServer.sh start ; bash" ]

  hadoop-dn3:
    image: hadoop09:latest
    container_name: hadoop-dn3
    networks:
      bigdata-hadoop-net:
        ipv4_address: 172.30.0.13
    volumes:
      - ./data/dn3:/data
    environment:
      HOSTNAME: hadoop-dn3
      TZ: Asia/Shanghai
    stdin_open: true # -i interactive
    tty: true # -t tty
    entrypoint: [ "sh" ,"-c","service ssh start; echo 3 > /var/lib/zookeeper/myid ; zkServer.sh start ; bash" ]

  hadoop-mysql:
    container_name: hadoop-mysql
    image: mysql:8.0.26
    networks:
      bigdata-hadoop-net:
        ipv4_address: 172.30.0.14
    volumes:
      - ./data/mysql:/var/lib/mysql
    command: [
      'mysqld',
      '--innodb-buffer-pool-size=80M',
      '--character-set-server=utf8mb4',
      '--collation-server=utf8mb4_unicode_ci',
      '--default-time-zone=+8:00',
      '--lower-case-table-names=1',
      '--default-authentication-plugin=mysql_native_password',
    ]
    environment:
      MYSQL_ROOT_PASSWORD: root
      LANG: C.UTF-8
    ports:
      - "3306:3306"

  hadoop-zeppelin:
    container_name: hadoop-zeppelin
    image: apache/zeppelin:0.10.1
    networks:
      bigdata-hadoop-net:
        ipv4_address: 172.30.0.15
    user: "0:0"
    volumes:
      - ./data/zeppelin:/notebook
      - /opt/spark-3.2.2-bin-hadoop3.2:/opt/spark
      - /opt/hadoop-3.2.4:/opt/hadoop3
      - /opt/apache-hive-3.1.3-bin:/opt/hive3
    environment:
      ZEPPELIN_NOTEBOOK_DIR: /notebook
      LANG: C.UTF-8
      SPARK_HOME: /opt/spark
      HADOOP_HOME: /opt/hadoop3
      HADOOP_CONF_DIR: /opt/hadoop3/etc/hadoop
      HADOOP_USER_NAME: root
      HIVE_HOME: /opt/hive3
      
    ports:
      - "18080:8080"
      
  hadoop-redis:
    container_name: hadoop-redis
    image: redis
    networks:
      bigdata-hadoop-net:
        ipv4_address: 172.30.0.16
    volumes:
      - /etc/localtime:/etc/localtime:ro # 时区设置
      # - ./data/redis:/data  # redis 数据存储目录
      - ./image/redisconfig/redis.conf:/etc/redis/redis.conf # redis配置文件
    command: redis-server  /etc/redis/redis.conf
    environment: 
      REDIS_ROOT_PASSWORD: root
      LANG: C.UTF-8
    ports:
      - "6379:6379"

# 定义网络
networks:
  bigdata-hadoop-net:
    ipam:
      driver: default
      config:
        - subnet: "172.30.0.0/24"

第三步: 构建镜像 启动容器

做好一、二步后上传我们准备好的 各种组件压缩包 和 jar包 到 Linux系统

# image 中执行
docker build -t hadoop09 .
# 回到 hadoop-1m3w.yml 所在目录 执行
docker compose -f hadoop-1m3w.yml up -d

第四步: 启动Hadoop服务

# 进入到hadoop目录
cd /home/jiandan/bigdata09/hadoop/docker
cd /home/bigdata/hadoop/docker # 新
# 构建hadoop-1m3w.yml文件
docker compose -f hadoop-1m3w.yml up -d
# 还原上次容器状态
docker start $(docker ps -aq)

通过 docker exec -it hadoop-nn bash 进入容器执行以下操作

# 验证ssh 免密登录到各个节点
ssh  节点名称

# 确定再hadoop-nn上执行以下命令
echo $HOSTNAME

# namenode 格式化 对于Hadoop集群来说只执行一次
hdfs namenode -format

# 启动集群
# hdfs
start-dfs.sh
# yarn
start-yarn.sh
# jobhistory
mapred --daemon start historyserver

# 停止集群
# yarn
stop-yarn.sh
# hdfs
stop-dfs.sh
# jobhistory
mapred --daemon stop historyserver

第五步: 测试访问服务

配置主机的 hosts 映射Ctrl+Alt+T打开终端

执行sudo gedit /etc/hosts,打开/etc/hots

/etc/hots中加入

172.30.0.10 hadoop-nn 12f4343d2583
172.30.0.11 hadoop-dn1 fac671607631 hadoop-dn1.docker_bigdata-hadoop-net
172.30.0.12 hadoop-dn2 c4fb1a8c7bf4 hadoop-dn2.docker_bigdata-hadoop-net
172.30.0.13 hadoop-dn3 d7eb5547bb50 hadoop-dn3.docker_bigdata-hadoop-net
172.30.0.15 hadoop-zeppelin 2ba4d7a92941

332d882a6162 如何获取?
再打开一个终端执行:docker ps | grep hadoop查看

jps查看java 进程

卸载容器

来到hadoop1m3w.yml所在目录

# 卸载所有服务(删除hadoop容器)
docker compose -f hadoop-1m3w.yml down

# 把当前目录的data删除
rm -rf data

配置安装zookeeper

首先来到 zookeeper 官网找到Download,选择下载版本(运行程序)放到image包下

找到Learn about 中的 Getting Started 中的 Running Replicated ZooKeeper根据 提示 创建文件zoo.cfg 并粘贴内容 之后修改zoo1为自己的节点名称

# 嘀嗒(设置时间单位,毫秒)
tickTime=2000
# zookeeper存储数据时的目录
dataDir=/var/lib/zookeeper
# 连接zookeeper时的 通讯端口
clientPort=2181
# 初始化限时 嘀嗒个数
initLimit=5
# 滴答之间的间隔 滴答个数
syncLimit=2
# 代表了集群中要有几个节点
# 2888:3888是投票选举观察时用到的(是不变的)
server.1=hadoop-dn1:2888:3888
server.2=hadoop-dn2:2888:3888
server.3=hadoop-dn3:2888:3888

docker images:查看镜像

docker rmi id号:删除构建镜像的副本

之后执行 集群搭建的 第三步 -> 删除构建镜像的副本 -> 进入容器 -> 格式化namenode ->启动集群

最后做:在从节点容器 中的dataDir目录(/var/lib/zookeeper)中 创建文件myid内容为 节点容器序号

创建目录:mkdir -p /var/lib/zookeeper

创建文件并添加内容echo 1 > /var/lib/zookeeper/myid

启动zookeeper服务(在每个从节点执行):./zkServer.sh start

查看zookeeper服务是否启动成功:./zkServer.sh status

错误一、服务错误

是由于win创建zoo.cfg上传Ubuntu导致

解决:
进入每个从节点执行一次
查看当前所在容器echo $HOSTNAME

1、来到cd $ZOOKEEPER_HOME/conf删除zoo.cfg

2、重命名(mv)zoo_sample.cfgzoo.cfg

3、添加"server.1=节点1名称:2888:3888" >> zoo.cfg
"server.2=节点2名称:2888:3888" >> zoo.cfg
"server.3=节点3名称:2888:3888" >> zoo.cfg

4、按照zoo.cfg中的dataDir路径(/tmp/zookeeper)新建文件夹

5、添加内容echo 节点序号 > /var/lib/zookeeper/myid

错误二、zkServer.sh start`启动错误

zookeeper的安装目录bin下,将命令换成./zkServer.sh start

zookeeper的安装目录:cd $ZOOKEEPER_HOME

错误三、myid错误/没有

查看/usr/local/apache-zookeeper-3.8.0-bin/conf/zoo.cfgdataDir的路径和myid的路径是否一致

myid配置在/var/lib/zookeeper

hive环境搭建

# 来到hadoop-1m3w.yml存在的目录
cd home/jiandan/bigdata09/hadoop/docker

# 卸载所有服务(删除hadoop容器)
docker compose -f hadoop-1m3w.yml down

# 把当前目录的data删除
rm -rf data

编写配置文件

在Hadoop的基础上修改

1、拷贝apache-hive-3.1.3-bin.tar.gzimage

2、在image下创建hiveconfig文件夹并从apache-hive-3.1.3-bin/conf拷贝 以下 选中的 文件

3、将hive-default.xml.template重命名为hive-site.xml
并将内容替换为以下内容

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
--><configuration>
    <property>
        <name>hive.metastore.db.type</name>
        <value>DERBY</value>
        <description>
            Expects one of [derby, oracle, mysql, mssql, postgres].
            Type of database used by the metastore. Information schema & JDBCStorageHandler depend on it.
        </description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://hadoop-mysql:3306/have_metastore?createDatabaseIfNotExist=true</value>
        <description>
            JDBC connect string for a JDBC metastore.
            To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
            For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
        </description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.cj.jdbc.Driver</value>
        <description>Driver class name for a JDBC metastore</description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
        <description>Username to use against metastore database</description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>root</value>
        <description>password to use against metastore database</description>
    </property>
</configuration>

4、上传文件 构建镜像 docker build -t hadoop09 . 启动hadoop服务

start-dfs.sh
# 访问`hadoop-nn:9870`下的 Datanodes 查看节点(3个)是否启动

start-yarn.sh
# 访问`hadoop-nn:8088`

mapred --daemon start historyserver

5、测试连接数据库
IP是配置文件中设置的IP(172.30.0.14)

6、hive初始化数据库
ls $HIVE_HOME/bin查看是否有schematool
schematool -dbType mysql -initSchema创建数据库中源数据所用到的表
查看数据库中的表

错误1:架包不兼容

在这里插入图片描述

出错问题:架包不兼容,hive架包 版本 比hadoop低
解决办法:把hadoop的架包 拷贝 到hive
ls $HIVE_HOME/lib找到冲突的架包:guava-19.0.jar
查看hive架包:ls $HIVE_HOME/lib | grep guava
查看hadoop架包:ls $HADOOP_HOME/share/hadoop/common/lib | grep guava
删除低版本:rm -f $HIVE_HOME/lib/guava-19.0.jar
拷贝高版本:cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib/

回来再执行schematool -dbType mysql -initSchema
快捷键(查找刚才执行的命令):Ctrl+R输入initSchema回车

错误2:驱动类找不到

在这里插入图片描述
出现问题:驱动类找不到,因为驱动包不存在
想办法弄一个mysql-connector-java-8.0.26.jar上传到Ubuntu
echo $HIVE_HOME/lib:查看绝对路径
拷贝到容器docker cp mysql-connector-java-8.0.26.jar hadoop-nn:/usr/local/apache-hive-3.1.3-bin/lib
hadoop-nn:粘贴上面的绝对路径

回来再执行schematool -dbType mysql -initSchema

启动hive2

7、验证hive是否可以运行
(每次重构镜像先完成上面错误一二)
添加打印日志:hiveserver2 --hiveconf hive.root.logger=INFO,console
根据输出信息可以访问到网页(hadoop-nn:10002

终端访问beeline -u jdbc:hive2://localhost:10000 -n root -p
在这里插入图片描述
前面有完整路径说明链接成功,否则连接失败
查看共有多少库:show databases;

错误3

在这里插入图片描述

hive-site.xml添加
注:主机名通常位于@符号后:jiandan@jiandan-virtual-machine:例如这个的主机名就是jiandan-virtual-machine

<property>
  <name>hadoop.proxyuser.jiandan-virtual-machine.hosts</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.jiandan-virtual-machine.groups</name>
  <value>*</value>
 </property>

端口号参考博客

chown修改权限 -R递归
chown -R 权限(seal):权限 文件名

zeppelin

在Ubuntu执行docker pull apache/zeppelin:0.10.1拉去zeppelin镜像

hadoop-1m3w.yml中添加配置信息

hadoop-zeppelin:
  container_name: hadoop-zeppelin
  # 组织名:版本号
  image: apache/zeppelin:0.10.1
  networks:
    bigdata-hadoop-net:
      ipv4_address: 172.30.0.15
  # 0是root,1000是普通用户
  user: "0:0"
  volumes:
    - ./data/zeppelin:/notebook
  environment:
    ZEPPELIN_NOTEBOOK_DIR: /notebook
    LANG: C.UTF-8
  ports:
    - "18080:8080"

重启容器,浏览器可访问到端口号即为成功

zeppelin集成mysql

把mysql架包考入docker cp mysql-connector-java-8.0.26.jar hadoop-zeppelin:/opt/zeppelin/lib

hadoop-1m3w.yml中添加配置信息

hadoop-mysql:
  container_name: hadoop-mysql
  image: mysql:8.0.26
  networks:
    bigdata-hadoop-net:
      ipv4_address: 172.30.0.14
  volumes:
    - ./data/mysql:/var/lib/mysql
  command: [
    'mysqld',
    '--innodb-buffer-pool-size=80M',
    '--character-set-server=utf8mb4',
    '--collation-server=utf8mb4_unicode_ci',
    '--default-time-zone=+8:00',
    '--lower-case-table-names=1',
    '--default-authentication-plugin=mysql_native_password',
  ]
  environment:
    MYSQL_ROOT_PASSWORD: root
    LANG: C.UTF-8
  ports:
    - "3300:3306"

重启容器

创建mysql interpreter

与hive创建interpreter一致

访问http://192.168.37.129:18080
单击右上角anonymous下的Interpret中的Create创建
URL:jdbc:mysql://hadoop-mysql:3306/
驱动:com.mysql.cj.jdbc.Driver
架包路径:/opt/zeppelin/lib/mysql-connector-java-8.0.26.jar

最后Notebook - > Create New Note创建文本

zeppelin集成hive2

启动hadoop服务
启动hive2
把mysql架包考入docker cp mysql-connector-java-8.0.26.jar hadoop-nn:/usr/local/apache-hive-3.1.3-bin/lib(hive架包在bigdata09/lianxi下)

把hive架包考入docker cp hive-jdbc-3.1.3-standalone.jar hadoop-zeppelin:/opt/zeppelin/lib(hive架包在bigdata09/lianxi下)

来到nn启动hiveserver2 --hiveconf hive.root.logger=INFO,console

创建hive interpreter

网页

访问http://192.168.37.129:18080
单击右上角anonymous下的Interpret中的Create创建

在这里插入图片描述
在这里插入图片描述
URL:jdbc:hive2://192.168.37.129:10000/
驱动:org.apache.hive.jdbc.HiveDriver

在这里插入图片描述

架包路径:/opt/zeppelin/lib/hive-jdbc-3.1.3-standalone.jar

IDEA
下载Big Data Tools插件
右边栏打开右键Create Note 或 快捷键Alt+Insert
注:打开文件点击上方设置,选中hive2应用(Apply)
前提:hive架包拷贝进来了

DBOver

选中连接hive的数据库 - > 单击上方SQL编辑器 - > 新建编辑器
注:如果下载驱动 - > 右键编辑连接 - > 驱动设置 - > 库选择hive-jdbc-3.1.3-standalone.jar(在视频/文件中),再执行上面的操作

练习在MySQL/SQL语句中

HBase

官网下载架包:网址,拷贝到image下
修改文件Dockerfile并在image下创建hbaseconfig

# 添加以下内容
# 提取hbase-2.5.1-bin.tar.gz
ADD hbase-2.5.1-bin.tar.gz /usr/local/

# 配置hbase环境变量
ENV HBASE_HOME=/usr/local/hbase-2.5.1
ENV PATH=$PATH:$HBASE_HOME/bin

#将配置文件拷贝到$HBASE_HOME/conf/下
COPY hbaseconfig/* $HBASE_HOME/conf/

Ubuntu 解压tar zxf 文件名称

hbase-2.5.1文件下的conf中所有文件拷贝到hbaseconfig

来到 官网参考指南 找到hbase-site.xml修改hbaseconfig下的hbase-site.xml文件

<!--原文件中 hbase.cluster.distributed 重复,删掉-->
<property>
    <name>hbase.cluster.distributed</name>
    <value>false</value>
  </property>
<property>
    <name>hbase.zookeeper.quorum</name>
	<!--<value>example1,example2,example3</value>-->
	<!--这里修改为自己的从节点名称-->
	<value>hadoop-dn1,hadoop-dn2,hadoop-dn3</value>
    <description>The directory shared by RegionServers.
    </description>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/export/zookeeper</value>
    <description>Property from ZooKeeper config zoo.cfg.
    The directory where the snapshot is stored.
    </description>
  </property>
  <property>
    <name>hbase.rootdir</name>
	<!--<value>hdfs://example0:8020/hbase</value>-->
	<!--这里主节点及端口号修改为自己的-->
	<value>hdfs://hadoop-nn:9000/hbase</value>
	<value>hadoop-dn1,hadoop-dn2,hadoop-dn3</value>
    <description>The directory shared by RegionServers.
    </description>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    <description>The mode the cluster will be in. Possible values are
      false: standalone and pseudo-distributed setups with managed ZooKeeper
      true: fully-distributed with unmanaged ZooKeeper Quorum (see hbase-env.sh)
    </description>
  </property>

修改hbase-env.sh文件

在这里插入图片描述

默认是ture修改为false(记得解开注释)

在这里插入图片描述

修改为自己的jdk地址

修改regionservers文件
内容改为自己的从节点

hadoop-dn1
hadoop-dn2
hadoop-dn3

构建镜像,启动容器
启动:start-hbase.sh

本地搭建spark

spark官网下载spark架包

把spark架包考入Ubuntu,并解压至opt下tar -zxf spark-3.3.1-bin-hadoop3.tgz -C /opt

进入spark的bin目录下 执行spark-shell

配置scala环境

Scala官网下载安装包

wins
解压并配置Scala环境变量
编辑Path添加解压路径\bin,cmd窗口查看path是否添加成功

Ubuntu

# 将压缩包解压至opt下
tar -zxf scala-2.12.17.tgz -C /opt

# 配置Scala环境变量
# 图形用户界面 只需编辑以下文件
/home/jiandan/.bashrc

# 命令行方式
# 来到root 执行	解压路径:来到解压路径下pwd,获取路径
echo "export SCALA_HOME=解压路径" >> .bashrc
echo "export PATH=\$PATH:\$SCALA_HOME/bin" >> .bashrc
# 查看是否添加成功
tail .bashrc
# 最后加载文件
source .bashrc
# 查看是否配置成功	失败使用图形化界面查看
scala

整理hadoop集群环境

由于各个工具所支持的版本不同,所以要整理一下hadoop集群环境

在zeppelin配置hadoop

解压 hadoop 到 /opt/ 下tar -zxf hadoop-3.2.4.tar.gz -C /opt/
将 docker/config 下的所以文件拷贝到 hadoop-3.2.4/etc/hadoop 下cp config/* /opt/hadoop-3.2.4/etc/hadoop/
把 hadoop 通过 zeppelin 映射到宿主机,将/opt/hadoop-3.2.4:/opt/hadoop3添加至 hadoop-1m3w.yml 中的 hadoop-zeppelin 下的 volumes 下

冒号 后面是指 到容器中的哪个目录

再在environment下做环境变量,添加:
环境变量:HADOOP_HOME: /opt/hadoop3
配置环境变量:HADOOP_CONF_DIR: /opt/hadoop3/etc/hadoop
设置zeppelin权限:HADOOP_USER_NAME: root

执行hadoop环境部署 中的卸载容器 -> 第三步 -> 第五步

spark 集成 hive

来到image下
解压hive至opttar -zxf apache-hive-3.1.3-bin.tar.gz -C /opt/

拷贝配置文件sudo cp hiveconfig/* /opt/apache-hive-3.1.3-bin/conf/

- /opt/apache-hive-3.1.3-bin:/opt/hive3添加至 hadoop-1m3w.yml 中的 hadoop-zeppelin 下的 volumes 下

再在environment下做环境变量,添加:HIVE_HOME: /opt/hive3

在虚拟机/opt目录下
拷贝hive-size.xml文件cp apache-hive-3.1.3-bin/conf/hive-site.xml spark-3.2.2-bin-hadoop3.2/conf/

来到park-3.2.2-bin-hadoop3.2/conf/spark-defaults.conf.template重命名为spark-defaults.confvim编辑,在最后添加

spark.sql.hive.metastore.version        3.1.3
spark.sql.hive.metastore.jars           classpath
spark.sql.warehouse.dir /user/hive/warehous
spark.sql.hive.metastore.jars /opt/hive3/lib/*:/opt/hadoop3/etc/hadoop:/opt/hadoop3/share/hadoop/common/lib/*:/opt/hadoop3/share/hadoop/common/*:/opt/hadoop3/share/hadoop/hdfs:/opt/hadoop3/share/hadoop/hdfs/lib/*:/opt/hadoop3/share/hadoop/hdfs/*:/opt/hadoop3/share/hadoop/mapreduce/lib/*:/opt/hadoop3/share/hadoop/mapreduce/*:/opt/hadoop3/share/hadoop/yarn:/opt/hadoop3/share/hadoop/yarn/lib/*:/opt/hadoop3/share/hadoop/yarn/*

spark.sql.hive.metastore.jars.path的值来自zeppelin容器执行$HADOOP_HOME/bin/hadoop classpath获取 hadoop所以架包

配置宿主机 作为hadoop的终端

配置环境变量配置文件 打开隐藏文件gedit ~/.bashrc
在尾行添加

# 绝对路径:hadoop安装目录下pwd
export HADOOP_HOME=绝对路径
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_USER_NAME=root
export PATH=$PATH:$HADOOP_HOME/bin

重新加载配置文件source ~/.bashrc

验证是否正确echo $HADOOP_HOME

hdfs无效,执行sudo vim /etc/profile在最后面加source /etc/profile

flume安装

直接将压缩包解压到容器即可 tar zxf apache-flume-1.11.0-bin.tar.gz
创建软链接 ln -s apache-flume-1.11.0-bin flume

安装kafka

安装单节点kafka

将压缩包解压到任意容器 tar zxf kafka_2.12-3.3.2.tgz
创建软连接 ln -s kafka_2.12-3.3.2 kafka

检查zookeeper zkServer.sh status

编辑配置文件
sed '/#listeners=PLAINTEXT:\/\/:9092/s/#listeners=PLAINTEXT:\/\/:9092/listeners=PLAINTEXT:\/\/hadoop-dn2:9092/' config/server.properties

sed -i 's/localhost:2181/hadoop-dn1:2181,hadoop-dn2:2181,hadoop-dn3:2181/' config/server.properties

在kafka下启动kafka bin/kafka-server-start.sh config/server.properties
注:这是前端启动,加-deamon后端启动

创建储存事件 bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server hadoop-dn2:9092

查看储存信息 bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server hadoop-dn2:9092

写入信息 bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server hadoop-dn2:9092

读取信息 bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server hadoop-dn2:9092
注:--from-beginning 读取所有信息,没有则只读取后来添加的信息

安装多节点kafka

将压缩包在每个从节点中进行以下操作
解压到容器 tar zxf kafka_2.12-3.3.2.tgz
创建软连接 ln -s kafka_2.12-3.3.2 kafka

检查zookeeper zkServer.sh status

编辑配置文件
sed '/#listeners=PLAINTEXT:\/\/:9092/s/#listeners=PLAINTEXT:\/\/:9092/listeners=PLAINTEXT:\/\/hadoop-dn2:9092/' config/server.properties

sed -i 's/localhost:2181/hadoop-dn1:2181,hadoop-dn2:2181,hadoop-dn3:2181/' config/server.properties

将每个从节点的kafka/config/server.properties文件中的broker.id=0修改为不一致的(每个容器不一致)

并且将/tmp/kafka-logs/meta.properties中的broker.id=0修改为与kafka/config/server.properties文件中的broker.id=0一致

在kafka下启动kafka bin/kafka-server-start.sh config/server.properties
注:这是前端启动,加-deamon后端启动

kafka启停脚本

启动 ./zk.sh start
停止 ./zk.sh stop

可以放到hadoop-nn的root下

#./zk.sh start
if [ $# -lt 1 ]
then 
 echo "Usage: kf.sh {start|stop}"
 exit
fi
case $1 in 
start)
for i in hadoop-dn1 hadoop-dn2 hadoop-dn3
do
 echo "====================> START $i KF <===================="
 ssh $i /root/kafka/bin/kafka-server-start.sh -daemon /root/kafka/config/server.properties 
done
;;
stop)
for i in hadoop-dn1 hadoop-dn2 hadoop-dn3
do
 echo "====================> STOP $i KF <===================="
 ssh $i /root/kafka/bin/kafka-server-stop.sh
done
;;
esac
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值