CDH 由单机版本的扩容

  • 首先,我们是一台单机版本的CDH

  • 加入我们打算迁移namenode到其他的主机
    那么会得到提示,必须首先是HA
    稍后你还会得到提示,要想HA,必须得有三个JN,也就是JournalNode

升级完成后的集群,有两个NN,三个JN
这里写图片描述

升级的时候,会有服务重启的现象,导致HDFS有短暂不可用的时候,大概几分钟吧。
这里写图片描述

JN节点在扩容的时候,需要指定目录,虽然有默认,但是你不填是不会放你过去的
这里写图片描述

这里写图片描述

下面两张图是把单机版本扩容成三机版本的时候,需要扩容NN和JN的选择图片:

这里写图片描述

这里写图片描述

这里写图片描述

  • 扩容完了HDFS的HA,那么ZK也要扩容了,在主界面会有提示

这里写图片描述

### 使用Ansible和Python编写CDH集群扩容脚本 为了实现Cloudera Distribution Hadoop (CDH) 集群的自动扩容,可以通过结合Ansible和Python来完成这一任务。以下是详细的说明以及一个简单的示例。 #### 脚本设计思路 1. **Ansible Playbook**: 它用于定义目标服务器的操作流程,包括但不限于安装软件包、配置文件修改等操作。 2. **Python Script Integration**: Python 可以用来处理更复杂的逻辑或者调用 Cloudera Manager 的 REST API 来动态调整 CDH 集群的状态。 --- #### 示例Playbook (`cdh_cluster_expansion.yml`) ```yaml --- - name: Expand the CDH cluster using Ansible and Python hosts: all become: yes gather_facts: no tasks: - name: Ensure required packages are installed on new nodes apt: name: "{{ item }}" state: present loop: - python3-pip - ansible - name: Copy custom Python script to manage CDH expansion copy: src: ./expand_cdh.py dest: /tmp/expand_cdh.py mode: '0755' - name: Execute the Python script for expanding the CDH cluster command: python3 /tmp/expand_cdh.py --cluster_name={{ cluster_name }} --new_node_ips="{{ new_node_ips }}" --cm_api_key={{ cm_api_key }} ``` 此 playbook 将会执行以下动作: - 确保新节点上已安装必要的依赖项[^2]。 - 复制自定义的 Python 脚本到远程机器并赋予可执行权限。 - 执行该 Python 脚本来扩展 CDH 集群。 --- #### 自定义Python脚本 (`expand_cdh.py`) 下面是一个简化版的 Python 脚本,它利用 Cloudera Manager 提供的 REST API 进行集群扩容: ```python import argparse import requests def expand_cdh_cluster(cluster_name, new_node_ips, api_url, username, password): session = requests.Session() session.auth = (username, password) headers = {'Content-Type': 'application/json'} # Add new hosts to CM add_hosts_payload = {"items": [{"hostname": ip} for ip in new_node_ips]} response = session.post(f"{api_url}/hosts", json=add_hosts_payload, headers=headers) if response.status_code != 200: raise Exception("Failed to add hosts") # Assign roles to newly added hosts assign_roles_payload = { "roleTypeConfig": [ {"name": f"DATANODE-{ip}", "type": "DATANODE"} for ip in new_node_ips ] } response = session.post( f"{api_url}/clusters/{cluster_name}/roles", json=assign_roles_payload, headers=headers ) if response.status_code != 200: raise Exception("Failed to assign roles") if __name__ == "__main__": parser = argparse.ArgumentParser(description="Expand a CDH cluster via Cloudera Manager's API.") parser.add_argument("--cluster_name", type=str, help="Name of the target CDH cluster.", required=True) parser.add_argument("--new_node_ips", nargs="+", help="IP addresses of the new nodes being added.", required=True) parser.add_argument("--cm_api_key", type=str, help="API key or token used to authenticate with Cloudera Manager.", required=True) args = parser.parse_args() base_url = "http://cloudera-manager-host/api/v40" admin_username = "admin" admin_password = "admin" try: expand_cdh_cluster(args.cluster_name, args.new_node_ips, base_url, admin_username, admin_password) print("Cluster successfully expanded!") except Exception as e: print(f"Error during cluster expansion: {str(e)}") ``` 上述代码实现了以下几个功能: - 添加新的主机到 Cloudera Manager 中[^4]。 - 给这些新增加的主机分配角色(例如 DataNode 或 TaskTracker)。 注意:实际应用中可能还需要考虑更多细节,比如错误重试机制、日志记录等功能。 --- #### 测试与运行 测试前需确认所有变量均已正确定义好,如 `cluster_name`, `new_node_ips`, 和 `cm_api_key`。之后可通过如下命令启动整个过程: ```bash ansible-playbook cdh_cluster_expansion.yml \ -e "cluster_name=my-cdh-cluster" \ -e "new_node_ips=['192.168.1.10', '192.168.1.11']" \ -e "cm_api_key=your_cloudera_manager_api_token" ``` 以上方法展示了如何借助 Ansible 和 Python 实现 CDH 集群的自动化扩容[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值