lab的项目:将流批一体化的DB扩充到分布式的集群。
TODO:k8s,测试
基础层
- hadoop(yarn):包含存储层HDFS,基础调度层YARN
- zookeeper:分布式协调服务
- HBase:大规模吞吐的NoSQL
计算层 - Spark:批式计算
- Flink:流式计算
- Geomesa:时空数据处理
服务层 - Livy:restful接口简化spark任务处理
其他 - 安全
让我们开始吧!
preliminary
Docker init:编写构建脚本
(这里好像不能用,但暂且记录一下。
用于快速将一个项目容器化打包。
在项目中执行docker init
后,会进入交互式配置cli,按提示选择:
- 应用类型(如 Python、Node.js、java 等)。
- 项目配置(如端口、依赖文件路径等)。
- 是否生成 compose.yaml(用于多服务编排)。
生成文件:
├── Dockerfile # 容器构建配置
├── compose.yaml # 多容器编排配置(可选)
└── .dockerignore # 忽略文件列表
好像目前不能用于分布式……
ssh
集群节点间要使用ssh进行通信。
使用sudo service ssh start
就能开启系统(我这里用的ubuntu2204)的ssh服务。
script
主要需要进行以下配置:
- bash:服务启动脚本,根据需求合并或者分离。
- dockerfile:每个服务有单独的dockerfile。因为服务要在docker中部署,所以使用dockerfile指定镜像构建规则。比如解压安装、环境变量、网络、用户等配置。
- docker-compose:所有服务共用一个compose文件,所以用来编排多容器,指定容器间依赖关系。它会调用dockerfile。
- config:每个服务有单独的config文件。
在所有dockerfile之前做一个基础的dockerfile,创建操作系统环境,安装wget、ssh-server等,配置jdk和环境变量,配置用户、端口等等基础的东西。
k8s
TODO
基础层
Hadoop(yarn)配置
集群规划
服务/节点 | 01 | 02 | 03 |
---|---|---|---|
HDFS | NameNode,DataNode | DataNode | SecondaryNameNode,DataNode |
Yarn | NodeManager | NodeManager,ResourceManager | NodeManager |
Mapreduce | JobHistoryServer | - | - |
写脚本
- dockerFile:下载hadoop——>上传Hadoop到Linux——>解压安装——>设置环境变量——>配置Hadoop的SSH文件(先设为免密)
确保hadoop可以无密码ssh其他节点。bin:用户操作;sbin:管理员操作。
- .sh:预先防止出现权限问题——>启动ssh——>NameNode上格式化HDFS——>启动HDFS(——>启动yarn)——>启动JobHistoryServer
最一开始再刷新一下权限,防止出问题。格式化:创建空白元数据存储,如果第一次就格式化,不是第一次就跳过。
ResourceManager启动yarn,HistoryServer启动JobHistoryServer。其他不鸟。
- compose:hadoop每个节点:镜像,主机名,网络,端口,环境,volume挂载,启动命令。
只需要启动,容器会将服务自动分发到各个节点。
镜像:dockerfile中构建过。
主机:按照.sh中解析之后的。
网络:所有加入自定义网络的容器可以通过主机名和IP地址通信。为容器分配固定ip防止变化产生问题。
端口:外部与docker的端口映射。格式为HOST:CONTAINER。
环境:在这里确定要启动哪些服务(yarn?mapreduce?……)。
volume挂载:bash——>/opt/startup,config/hadoop——>etc/hadoop,namenode-data——>dfs/data。(主要是config和data和log)
启动命令:.sh的路径。