注:本篇博客记录了安装中发生的所有问题,以下版本安装基本上不会再出现其他兼容问题
该集群为一主三从,需要先安装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.xml
、hdfs-site.xml
、mapred-site.xml
、yarn-site.xml
、hadoop-env.sh
、yarn-env.sh
、workers
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.cfg
为zoo.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.cfg
中dataDir
的路径和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.gz
到image
下
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.conf
vim编辑,在最后添加
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