Docker搭建大数据集群 Hadoop Spark HBase Hive Zookeeper Scala
Docker搭建大数据集群
给出一个完全分布式hadoop+spark集群搭建完整文档,从环境准备(包括机器名,ip映射步骤,ssh免密,Java等)开始,包括zookeeper,hadoop,hive,spark,eclipse/idea安装全过程,3-4节点,集群部署自己确定,比如集群涉及的多种角色namenode,secondary namenode, datanode,resourcemanager等的节点分配,并用表格形式给出。给出可访问的ip,用户名密码。(阿里云直接给公网ip,校园网需给公网和校园网ip)。
(1)本机系统设置
电脑设置虚拟缓存(设置为自动管理)

虚拟机设置内存和CPU
内存设置为8G(或以上)

CPU稍微设置高一点(三个虚拟化能开就开)

虚拟机系统配置阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
虚拟机更新包
yum update
(2)安装Docker
移除以前docker相关包
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
添加yum源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
启动Docker
systemctl enable docker --now
配置docker下载镜像
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
(3)安装Hadoop
拉取hadoop镜像
docker pull registry.cn-shenzhen.aliyuncs.com/jonil/hadoop:base

(4)运行容器
指定docker内部网络
docker network create --driver=bridge --subnet=172.19.0.0/16 hadoop
创建时最好指定容器端口号映射。10000端口为hiveserver端口,后面本地客户端要通过beeline连接hive使用,有其他组件要安装的话可以提前把端口都映射出来,毕竟后面容器运行后再添加端口还是有点麻烦的。
建立Master容器
docker run -it --network hadoop -h Master --name Master -p 9870:9870 -p 8088:8088 -p 10000:10000 registry.cn-shenzhen.aliyuncs.com/jonil/hadoop:base bash
提示:CTRL + D 退出容器
docker exec -it [容器名] bash
建立Slave1容器
docker run -it --network hadoop -h Slave1 --name Slave1 registry.cn-shenzhen.aliyuncs.com/jonil/hadoop:base bash
建立Slave2容器
docker run -it --network hadoop -h Slave2 --name Slave2 registry.cn-shenzhen.aliyuncs.com/jonil/hadoop:base bash
三台机器修改hosts
vim /etc/hosts
//修改为以下格式
172.19.0.2 Master
172.19.0.3 Slave1
172.19.0.4 Slave2
提示:每个容器的ip都需要通过命令ifconfig查看,或者在创建的时候通过‘ --ip ’指定ip地址
docker查看运行中的容器
docker ps
确保三个容器都在运行,不然后续的步骤无法进行,最好每个容器开一个终端

进入Master容器
docker exec -it Master /bin/bash
格式化hdfs
hadoop namenode -format
启动hadoop所有服务
tart-all.sh
提示:虽然容器里面已经把 hadoop 路径配置在系统变量里面,但由于docker和linux的特殊性,每次进入需要运行以下命令才能生效使用。
source /etc/profile

小黄象页面

文件网站

查看分布式文件分布状态
hdfs dfsadmin -report
运行结果
Live datanodes (3):
Name: 172.19.0.2:9866 (Master)
Hostname: Master
Decommission Status : Normal
Configured Capacity: 19001245696 (17.70 GB)
DFS Used: 4096 (4 KB)
Non DFS Used: 7302295552 (6.80 GB)
DFS Remaining: 11698946048 (10.90 GB)
DFS Used%: 0.00%
DFS Remaining%: 61.57%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Sun Nov 07 02:27:39 GMT 2021
Last Block Report: Sun Nov 07 02:26:03 GMT 2021
Num of Blocks: 0
//其余节点省略
运行实例测试hadoop集群运行状况
分布式实例
//创建目录
hdfs dfs -mkdir -p /user/hadoop
//创建目录
hdfs dfs -mkdir /input
//放置文件
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml /input
//运行mapreduce实例
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep /input /output 'dfs[a-z.]+'
//查看结果
hdfs dfs -cat /output/*
运行结果
2021-11-07 02:45:31,924 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
1 dfsadmin
1 dfs.replication
1 dfs.namenode.name.dir
1 dfs.namenode.data.dir

(5)安装Hive
下载Hive-3.1.2
https://dlcdn.apache.org/hive/hive-3.1.2/
将文件复制到虚拟机后上传到容器内
docker cp apache-hive-3.1.2-bin.tar.gz Master:/usr/local
进入Master容器,解压文件
tar -zvxf apache-hive-3.1.2-bin.tar.gz
修改配置文件
cd /usr/local/apache-hive-3.1.2-bin/conf
cp hive-default.xml.template hive-site.xml
vim hive-site.xml
追加文件内容,保存后退出
<property>
<name>system:java.io.tmpdir</name>
<value>/tmp/hive/java</value>
</property>
<property>
<name>system:user.name</name>
<value>${user.name}</value>
</property>

配置hive相关环境变量
vim /etc/profile
export HIVE_HOME="/usr/local/apache-hive-3.1.2-bin"
export PATH=$PATH:$HIVE_HOME/bin
最后刷新配置文件
source /etc/profile
(6)配置MySQL作为元数据库
拉取MySQL镜像
docker pull mysql:8.0.22
建立mysql容器(注意:这里的ip对应mysql_hive的ip)
docker run --name mysql_hive -p 4306:3306 --net hadoop --ip 172.19.0.5 -v /root/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -d mysql:8.0.22
进入该容器
docker exec -it mysql_hive bash
进入mysql,密码是abc123456,可以在创建的时候通过“ -e MYSQL_ROOT_PASSWORD= ”更改
mysql -uroot -p
创建hive数据库
create database hive;
修改远程连接权限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'abc123456';

返回Master容器
docker exec -it Master bash
修改关联数据库的配置
vim /usr/local/apache-hive-3.1.2-bin/conf/hive-site.xml
提示:hive配置文件里面使用 & 作为分隔,高版本mysql需要SSL验证,在这里设置关闭
- 设置数据库驱动
- 设置数据库地址
- 设置数据库用户
- 设置数据库密码
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://172.19.0.5:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>abc123456</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
下载MySQL驱动
https://downloads.mysql.com/archives/c-j/
把下载的驱动解压,然后复制myslq驱动到hive的lib文件夹下
docker cp mysql-connector-java-8.0.22.jar Master:usr/local/apache-hive-3.1.2-bin/lib
确认jar包在对应的目录下

对hive的lib文件夹下部分文件做修改,防止初始化数据库的时候报错
slf4j这个包hadoop及hive两边只能有一个,这里删掉hive这边
cd /usr/local/apache-hive-3.1.2-bin/lib
rm log4j-slf4j-impl-2.10.0.jar
guava这个包hadoop及hive两边只删掉版本低的那个,把版本高的复制过去,这里删掉hive,复制hadoop的过去
cd /usr/local/hadoop/share/hadoop/common/lib
cp guava-27.0-jre.jar /usr/local/apache-hive-3.1.2-bin/lib
rm /usr/local/apache-hive-3.1.2-bin/lib/guava-19.0.jar
初始化元数据库
cd /usr/local/apache-hive-3.1.2-bin/bin
./schematool -dbType mysql -initSchema

验证hive是否正确搭建
创建测试数据文件
cd /usr/local
vim test.txt
//输入以下内容
1,jack
2,ben
3,sam
进入hive交互界面
hive
创建表格
create table test(
> id int,name string
> )
> row format delimited
> fields terminated by ',';

载入数据
load data local inpath '/usr/local/test.txt' into table test;
选择数据
select * from test;

(7)安装ZooKeeper
下载ZooKeeper
https://archive.apache.org/dist/zookeeper/zookeeper-3.7.0/
在容器外复制到容器内
docker cp apache-zookeeper-3.7.0-bin.tar.gz Master:/usr
解压zookeeper压缩包
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz
改名
mv apache-zookeeper-3.7.0-bin/ zookeeper
创建两个工作目录,并对两个工作目录进行权限开放
cd /usr/zookeeper
mkdir zkdata
mkdir zkdatalog
chmod 777 zkdata
chmod 777 zkdatalog
修改配置文件
cd /usr/zookeeper/conf
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg
//修改或追加以下内容
dataDir=/usr/zookeeper/zkdata
dataLogDir=/usr/zookeeper/zkdatalog
server.1=Master:2888:3888
server.2=Slave1:2888:3888
server.3=Slave2:2888:3888
进入zkdata文件夹,创建文件myid
cd zkdata
vim myid
1
Slave1的myid为2
Slave2的myid为3


修改环境变量
#zookeeper
export ZOOKEEPER_HOME=/usr/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
刷新环境变量
source /etc/profile
其他两个容器也执行以上操作
启动zookeeper集群
zkServer.sh start
查看zookeeper集群状态
zkServer.sh status
关闭zookeeper集群
zkServer.sh stop



至此zookeeper安装完成
(8)安装HBase
下载HBase
http://archive.apache.org/dist/hbase/2.2.6/
复制HBase镜像到Master容器
docker cp hbase-2.2.6-bin.tar.gz Master:/usr/local
配置HBase环境变量
docker exec -ti Master bash
vim /etc/profile
追加以下内容
#hbase
export HBASE_HOME=/usr/local/hbase
export PATH=$HBASE_HOME/bin:$PATH
刷新源文件
source /etc/profile

复制/usr/local/hadoop/etc/hadoop下的core-site.xml和hdfs-site.xml到/usr/local/hbase/conf文件夹下
cd /usr/local/hadoop/etc/hadoop
cp core-site.xml /usr/local/hbase/conf/
cp hdfs-site.xml /usr/local/hbase/conf/
cd /usr/local/hbase/conf
vim hbase-site.xml
配置hbase-site.xml
提示:hbase.zookeeper.property.dataDir这里配置自己的文件地址,不要直接复制这里的
<property>
<name>hbase.rootdir</name>
<value>hdfs://Master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>Master,Slave1,Slave2</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/zookeeper/zkdata</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<property>
<name>hbase.master</name>
<value>hdfs://Master:6000</value>
</property>

设置hbase的JAVA_HOME和zookeeper
cd /usr/local/hbase/conf
vim hbase-env.sh
//修改或追加以下内容
//如果你用自己安装的zookeeper,这里设置为false(反之为true),但是启动之前要先启动zookeeper集群
export HBASE_MANAGES_ZK=false
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64


移除冲突jar包,防止报错
cd /usr/local/hbase/lib/client-facing-thirdparty/
//可以直接rm删除,也可以mv改名,我这里选择改名
mv slf4j-log4j12-1.7.25.jar slf4j-log4j12-1.7.25.jar.bak
其他容器进行相同操作(省略)
调试一下hbase看看能不能运行
start-all.sh
start-hbase.sh
hbase shell
尝试创建个test表
hbase(main):001:0> create 'test','id'
Created table test
Took 3.9776 seconds
=> Hbase::Table - test
(9)安装Scala
下载scala
https://www.scala-lang.org/download/2.12.12.html
复制到docker容器内
docker cp scala-2.12.12.tgz Master:/usr/local/
解压scala压缩包
tar -zxvf scala-2.12.12.tgz
配置环境变量
vim /etc/profile
//追加以下内容
#scala
export SCALA_HOME=/usr/local/scala-2.12.12
export PATH=$SCALA_HOME/bin:$PATH

刷新环境变量
source /etc/profile
查看Scala版本
scala -version
Scala code runner version 2.12.12 -- Copyright 2002-2020, LAMP/EPFL and Lightbend, Inc.
(10)安装Spark
下载Spark
http://archive.apache.org/dist/spark/spark-3.0.1/
复制Spark压缩包到容器
docker cp spark-3.0.1-bin-hadoop3.2.tgz Master:/usr/local
进入容器,解压spark压缩包
tar -zxvf spark-3.0.1-bin-hadoop3.2.tgz
文件夹改名
mv spark-3.0.1-bin-hadoop3.2 spark-3.0.1
mv spark-3.0.1-bin-hadoop3.2 spark-3.0.1
cd /usr/local/spark-3.0.1/conf
cp spark-env.sh.template spark-env.sh
vim spark-env.sh
//修改或追加以下内容
#spark
export SPARK_MASTER_HOST=Master
export SPARK_MEM=1G
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_MEMORY=1G
#java
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export SCALA_HOME=/usr/local/scala-2.12.12
#hadoop
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
修改slaves文件
cp slaves.template slaves
vim slaves
//修改如下
Slave1
Slave2

配置Spark环境变量
vim /etc/profile
//追加以下内容
#spark
export SPARK_HOME=/usr/local/spark-3.0.1
export PATH=$SPARK_HOME/bin:$PATH
刷新源文件
source /etc/profile
其他节点也如上配置spark
最后在Master节点启动Spark
start-all.sh


运行简单操作
val textFile = sc.textFile("file:///usr/local/spark-3.0.1/README.md")
//scala操作
//获取RDD文件textFile的第一行内容
textFile.first()
//获取RDD文件textFile所有项的计数
textFile.count()
//抽取含有“Spark”的行,返回一个新的RDD
val lineWithSpark = textFile.filter(line => line.contains("Spark"))
//统计新的RDD的行数
lineWithSpark.count()
//找出文本中每行的最多单词数
textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b)
//退出spark-shell
:quit

关闭所有程序
stop-all.sh
到此本次大数据集群搭建完毕
(13)附录
软件清单:
Windows 11
VMware Workstation 16
CentOS 7
Docker-20.10.10
Hadoop-3.2.1
Hive-3.1.2
MySQL-8.0.22
HBase-2.2.6
Scala-2.12.12
Spark-3.0.1
Docker搭建大数据集群 Hadoop Spark HBase Hive Zookeeper Scala的更多相关文章
- 基于Docker搭建大数据集群(六)Hive搭建
基于Docker搭建大数据集群(六)Hive搭建 前言 之前搭建的都是1.x版本,这次搭建的是hive3.1.2版本的..还是有一点细节不一样的 Hive现在解析引擎可以选择spark,我是用spar ...
- 基于Docker搭建大数据集群(七)Hbase部署
基于Docker搭建大数据集群(七)Hbase搭建 一.安装包准备 Hbase官网下载 微云下载 | 在 tar 目录下 二.版本兼容 三.角色分配 节点 Master Regionserver cl ...
- 基于Docker搭建大数据集群(一)Docker环境部署
本篇文章是基于Docker搭建大数据集群系列的开篇之作 主要内容 docker搭建 docker部署CentOS 容器免密钥通信 容器保存成镜像 docker镜像发布 环境 Linux 7.6 一.D ...
- 基于Docker搭建大数据集群(四)Spark部署
主要内容 spark部署 前提 zookeeper正常使用 JAVA_HOME环境变量 HADOOP_HOME环境变量 安装包 微云下载 | tar包目录下 Spark2.4.4 一.环境准备 上传到 ...
- 基于Docker搭建大数据集群(三)Hadoop部署
主要内容 Hadoop安装 前提 zookeeper正常使用 JAVA_HOME环境变量 安装包 微云下载 | tar包目录下 Hadoop 2.7.7 角色划分 角色分配 NN DN SNN clu ...
- 基于Docker搭建大数据集群(五)Mlsql部署
主要内容 mlsql部署 前提 zookeeper正常使用 spark正常使用 hadoop正常使用 安装包 微云下载 | tar包目录下 mlsql-cluster-2.4_2.11-1.4.0.t ...
- 基于Docker搭建大数据集群(二)基础组件配置
主要内容 jdk环境搭建 scala环境搭建 zookeeper部署 mysql部署 前提 docker容器之间能免密钥登录 yum源更换为阿里源 安装包 微云分享 | tar包目录下 JDK 1.8 ...
- 关于在真实物理机器上用cloudermanger或ambari搭建大数据集群注意事项总结、经验和感悟心得(图文详解)
写在前面的话 (1) 最近一段时间,因担任我团队实验室的大数据环境集群真实物理机器工作,至此,本人秉持负责.认真和细心的态度,先分别在虚拟机上模拟搭建ambari(基于CentOS6.5版本)和clo ...
- CDH搭建大数据集群(5.10.0)
纠结了好久,还是花钱了3个4核8G的阿里云主机,且行且珍惜,想必手动搭建过Hadoop集群的完全分布式.HBase的完全分布式的你(当然包括我,哈哈),一定会抱怨如此多的配置,而此时CDH正是解决我们 ...
随机推荐
- Python入门-内置对象函数
1.callable() 查看函数知否可调用,可调用返回True,不可用返回False print("input函数:", callable(input)) #input函数: T ...
- AgileConfig 1.6.0 发布 - 支持服务注册与发现
大家好,好久没有输出博文了,一是因为比较忙,另外一个原因是最近主要的精力是在给 AgileConfig 添加一个新的功能:服务注册与发现. 先说说为什么会添加这个功能.我自己的项目是用 Consul ...
- GRPC-go版本
GRPC-go版本 1.安装GO,protobuf 只适合有梯子的 GO的安装没必要说了 protobuf :https://github.com/protocolbuffers/protobuf/r ...
- 9.1 Linux存储结构和文件系统
1. 存储结构 Linux系统中的一切文件都是从"根"目录(/)开始的,并按照文件系统层次标准(FHS)采用倒树状结构来存放文件,以及定义了常见目录的用途. 目录名称 应放置文件的 ...
- Java基础语法Day_02-03(数据类型、运算符、方法、循环结构)
第5节 数据类型转换 day02_01_数据类型转换_自动转换 day02_02_数据类型转换_强制转换 day02_03_数据类型转换_注意事项 day02_04_ASCII编码表 第6节 运算符 ...
- 数据结构篇(2) ts实现单循环链表
JS的class可以通过extends关键字实现类似其他语言的继承效果,比起使用一个extends关键字,在es5中实现继承要复杂一些,可以通过修改原型链的方法实现继承,让一个原型对象等于另一个类型的 ...
- .NET桌面程序集成Web网页开发的多种解决方案
系列目录 [已更新最新开发文章,点击查看详细] B/S架构的Web程序几乎占据了应用软件的绝大多数市场,但是C/S架构的WinForm.WPF客户端程序依然具有很实用的价值,如设计类软件 Au ...
- 各种查找算法的选用分析(顺序查找、二分查找、二叉平衡树、B树、红黑树、B+树)
目录 顺序查找 二分查找 二叉平衡树 B树 红黑树 B+树 参考文档 顺序查找 给你一组数,最自然的效率最低的查找算法是顺序查找--从头到尾挨个挨个遍历查找,它的时间复杂度为O(n). 二分查找 而另 ...
- 一篇文章教你搞懂日志采集利器 Filebeat
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 本文使用的Filebeat是7.7.0的版本,文章将从如下几个方面说明: Filebeat是什 ...
- 专门为小白准备的入门级mybatis-plus-generator代码自动生成器,提高开发效率。值得收藏
引入依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-g ...