Apache Bigtop 助力 Hadoop 集群部署与集成验证
1. Hadoop 集群部署准备
1.1 同步工作目录
首先,需要确保所有节点的 /work 文件夹内容一致。可以通过以下命令实现:
export SSH_OPTS="ssh -p 22 -i /root/.ssh/id_dsa.pub -l root"
pdsh -w node[2-5].my.domain rsync $SSH_OPTS -avz --delete node1.my.domain:/work /
1.2 配置 Puppet Hiera
Puppet Hiera 必须能够从工作区读取配置文件和其他文件。可以按以下步骤操作:
1. 编辑 bigtop-deploy/puppet/hiera.yaml 文件:
vi bigtop-deploy/puppet/hiera.yaml
- 将
:datadir指向工作区:
:datadir: /work/bigtop-deploy/puppet/hieradata
- 复制
hiera.yaml文件到/etc/puppet/hiera:
cp bigtop-deploy/puppet/hiera.yaml /etc/puppet/hiera
- 同步
hiera.yaml文件到其他节点:
pdsh -w node[2-5].my.domain rsync $SSH_OPTS -avz --delete node1.my.domain:/etc/puppet/hiera.yaml /etc/puppet/
1.3 安装 Puppet 模块
确保所有节点都安装了所需的 Puppet 模块:
pdsh -w node[1-5].my.domain 'cd /work && \
puppet apply --modulepath="bigtop-deploy/puppet/modules" -e "include bigtop_toolchain::puppet-modules"'
1.4 进行部署
最后,执行以下命令完成 Hadoop 集群的部署:
pdsh -w node[1-5].my.domain 'cd /work && \
puppet apply -d --modulepath="bigtop-deploy/puppet/modules:/etc/puppet/modules" bigtop-deploy/puppet/manifests/site.pp'
部署完成后,将得到一个功能齐全的 Hadoop 集群,包括格式化的 HDFS、具有正确权限的用户目录以及其他配置好并运行的组件。
1.5 Apache Bigtop 仓库文件
每个 Apache Bigtop 版本都会为各种操作系统生成仓库文件。例如,版本 1.0.0 的仓库文件可在 https://cwiki.apache.org/confluence/display/BIGTOP/Index 找到;版本 1.1.0 的仓库文件在候选版本正式接受后,将发布在 https://dist.apache.org/repos/dist/release/bigtop/bigtop-1.1.0/repos/ 。
2. 集群配置管理
2.1 集群编排与管理的区别
在分布式集群中,集群编排和管理是两个不同的概念,但常被混淆使用。集群编排由架构、工具和流程组成,用于交付预定义的服务;而管理则提供自动化、监控和控制的工具及信息。
2.2 Hadoop 供应商工具的局限性
Hadoop 供应商提供了一些管理工具,包括免费开源和商业专有工具。但不建议主要依赖这些工具,原因如下:
| 原因 | 详情 |
| ---- | ---- |
| 兼容性问题 | 与标准 Linux init.d(或 systemd)生命周期管理不兼容,采用自定义方式启动、配置和管理集群服务。 |
| 脚本和自动化困难 | 基于 WebUI 交互,使得围绕它们进行脚本编写和自动化变得困难或几乎不可能。 |
| 忽视经验 | 有自定义的系统管理实现,忽视了 Chef 和 Puppet 开发者积累的数十年操作经验。 |
2.3 专业解决方案
专业的系统管理员或 DevOps 工程师可以采用版本控制系统(VCS)和 Puppet 来管理集群配置。建议使用分布式 VCS,如 Git,将不同的配置分离并独立更新。具体实现步骤如下:
1. 每个节点的 crontab 中添加以下内容:
cd /work
git pull origin/node-$ROLE-branch
puppet apply manifests/site.pp
- 环境变量
$ROLE可在操作系统初始配置时设置。通过 cron 定期执行上述命令,确保集群节点根据指定配置保持一致状态。
以下是该过程的 mermaid 流程图:
graph LR
A[开始] --> B[切换到工作目录]
B --> C[拉取指定分支代码]
C --> D[应用 Puppet 配置]
D --> E[结束]
3. 集成验证概述
3.1 验证的重要性
当 Hadoop 集群部署完成后,需要验证其是否按预期工作,以及各组件之间是否能良好协作。可以通过运行一些工作负载来进行验证,确保各组件在二进制和 API 层面兼容。
3.2 Bigtop 的验证方式
Bigtop 提供了两种验证方式:集成测试和冒烟测试。这两种测试都可以使用任何 JVM 语言编写。
3.3 Groovy 语言的应用
Bigtop 中的许多测试以及 iTest 框架都使用 Groovy 语言编写。Groovy 结合了动态能力和强类型语言的特点,是一种多语言编程工具。Bigtop 的构建系统 Gradle 是一种 Groovy DSL,并且 bigtop-groovy 是 Apache Bigtop 堆栈的标准包。
3.4 构建系统的过渡
Bigtop 正在从 Maven 构建系统向 Gradle 过渡。过渡完成后,将使用 Gradle 多项目构建,但对用户的概念影响不大。目前,冒烟测试由 Gradle 构建控制,而传统的集成测试仍依赖 Maven,不过已被集成到顶级 Gradle 构建中。
4. iTests 和验证应用
4.1 验证应用的组成
Bigtop 中的所有测试都被视为一等公民,可看作是针对特定软件栈的验证应用。每个应用由两部分组成:
| 部分 | 详情 |
| ---- | ---- |
| 应用代码 | 位于 test-artifacts/ 目录下,包含构建环境,设置目标依赖并使用特定 API。 |
| Maven 执行器 | 位于 test-execution/ 目录下的简单 Maven 模块,用于启动应用,检查和设置必要的环境。 |
4.2 Bigtop 集成测试框架(iTest)
集成验证应用可以使用 Bigtop 集成测试框架(iTest)提供的辅助功能。iTest 是标准 JUnit v4 的扩展,具有测试顺序执行、直接从 JAR 文件运行测试等功能。
以下是 iTest 相关流程的 mermaid 流程图:
graph LR
A[开始] --> B[应用代码开发]
B --> C[Maven 执行器配置]
C --> D[使用 iTest 辅助功能]
D --> E[执行验证应用]
E --> F[结束]
5. 堆栈集成测试开发
5.1 开发步骤
开发新的集成应用主要包含两个部分:代码更改和工件部署。具体步骤如下:
1. 创建模块结构 :在 bigtop-tests/test-artifacts/ 文件夹下创建模块结构,并在顶级 bigtop-tests/test-artifacts/pom.xml 中列出该模块。
2. 定义依赖和资源 :模块的项目对象模型(POM)需要定义所有依赖和资源,通常可在 <dependencies> 部分列出需求,版本会自动从父 POM 继承。
3. 编写代码 :验证应用的代码可以有多种编写方式,例如直接调用组件 API(如 Hadoop 和 HBase)、调用命令行实用程序或两者结合。
5.2 不同测试方式的优缺点
| 测试方式 | 优点 | 缺点 |
|---|---|---|
| 基于组件 API | 更有可能捕获意外和不兼容的更改,对于公共集成层的 API 测试尤为重要 | 维护成本较高,可能偶尔会失败 |
| 基于命令行工具 | 更稳定,对开发者的负担较小 |
5.3 代码运行与部署
- 本地安装 :在项目顶级目录运行以下命令进行本地安装:
./gradlew install-hadoop
该命令会安装所有额外的辅助模块和 POM 文件,并将所有工件 JAR 推送到本地 Maven 仓库,用于运行集成应用。
- 远程部署 :使用以下命令将工件部署到远程仓库服务器:
mvn deploy -f bigtop-tests/test-artifacts/hadoop/pom.xml
部署前需要使用 ~/.m2/settings.xml 配置仓库位置和凭据。
5.4 集成应用执行器
集成应用执行器位于 test-execution 目录下,例如 Hadoop 的执行器由 smokes/hadoop/pom.xml 管理。执行器是 Maven 模块,包含更复杂的构建逻辑,使用多个插件和公共模块,用于定义系统属性,如测试包含和排除模式等。
5.5 集成应用开发流程
- 开发代码 :像其他软件开发过程一样开发应用代码。
- 共享工件 :使用 Maven 安装/部署功能将应用工件或执行器共享到本地或共享 Maven 仓库。
- 启动执行器 :使用以下命令启动应用执行器:
mvn verify -f bigtop-tests/test-execution/smokes/hadoop/pom.xml
- 控制执行行为 :可以通过设置系统属性来控制执行器的行为,例如:
-
-Dorg.apache.maven-failsafe-plugin.testInclude='**/IncludingTestsMask*'仅运行部分测试。 -
-Dorg.apache.maven-failsafe-plugin.testExclude='**/ExcludingTests*'避免运行某些验证应用。
-
- 设置日志级别 :通过设置
Dorg.apache.bigtop.itest.log4j.level=TRACE可以将日志级别设置为 TRACE,方便跟踪代码或逻辑问题。
以下是集成应用开发流程的 mermaid 流程图:
graph LR
A[开发代码] --> B[共享工件]
B --> C[启动执行器]
C --> D[控制执行行为]
D --> E[设置日志级别]
E --> F[结束]
6. 验证堆栈
6.1 选择验证节点
建议在非工作节点(如网关节点)上运行集成应用进行验证,原因如下:
- 工作节点可能位于防火墙后面或在验证期间负载过高,难以进行调试。
- 网关节点通常拥有所有客户端二进制文件和库,方便集成应用获取所需资源。
- 便于与持续集成(CI)基础设施集成,例如使用 Jenkins 进行测试结果收集和分析。
6.2 验证步骤
假设 node5.my.domain 是配置为集群网关的节点,且 Bigtop 源仓库位于 /work 目录下,验证步骤如下:
1. 安装验证工件:
cd /work
./gradles install-hadoop
- 运行 Hadoop 集成应用验证:
mvn verify -f bigtop-tests/test-execution/smoke/hadoop/pom.xml
运行上述命令时,可能会收到 Maven 强制器的错误消息,要求设置某些环境变量,至少需要设置以下变量:
export HADOOP_HOME=/usr/lib/hadoop
export HADOOP_CONF_DIR=/etc/hadoop/conf
- 验证其他组件:可以通过以下命令验证其他组件:
mvn verify -f bigtop-tests/test-execution/smoke/hive/pom.xml
mvn verify -f bigtop-tests/test-execution/smoke/ignite-hadoop/pom.xml
也可以使用 mvn verify 运行测试堆栈中的所有可用应用。测试完成后,结果将保存在组件的 target/ 文件夹中。
以下是验证堆栈的步骤列表:
1. 选择合适的验证节点。
2. 安装验证工件。
3. 运行 Hadoop 集成应用验证,处理可能的环境变量设置问题。
4. 验证其他组件。
5. 查看测试结果。
综上所述,通过以上步骤可以完成 Apache Bigtop 助力下的 Hadoop 集群部署、配置管理和集成验证,确保集群的正常运行和组件之间的良好协作。
超级会员免费看
396

被折叠的 条评论
为什么被折叠?



