记一次CDH集群磁盘扩容(热插拔)详细步骤--转载

记一次CDH集群磁盘扩容(热插拔)详细步骤

    <div id="blogColumnPayAdvert">
        <div class="column-group">
            <div class="column-group-item column-group0 column-group-item-one">
                <div class="item-l">
                    <a class="item-target" href="https://blog.csdn.net/weixin_39445556/category_9532468.html" target="_blank" title="日常工作问题记录" data-report-click="{&quot;spm&quot;:&quot;1001.2101.3001.6332&quot;}">
                        <img class="item-target" src="https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="">
                        <span class="title item-target">
                            <span>
                            <span class="tit">日常工作问题记录</span>
                                <span class="dec">专栏收录该内容</span>
                            </span>
                        </span>
                    </a>
                </div>
                <div class="item-m">
                    <span>27 篇文章</span>
                    <span>5 订阅</span>
                </div>
                <div class="item-r">
                        <a class="item-target article-column-bt articleColumnFreeBt" data-id="9532468">订阅专栏</a>
                </div>
            </div>
        </div>
    </div>
<article class="baidu_pl">
    <div id="article_content" class="article_content clearfix">
    <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/kdoc_html_views-de46651acf.css">
    <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-6e43165c0a.css">
            <div id="content_views" class="htmledit_views" deep="6">
                <p><span style="background-color:#efedf6;">前言:</span></p> 

        如果CDH集群搭载的是Hadoop3,支持单节点内磁盘的数据均衡,那给集群节点增加磁盘是可行的。若搭载的是Hadoop2.x版本,请注意,2.x版本的Hadoop没有单节点内磁盘均衡的功能,增加的新磁盘可能只会写入很少的数据,不能实际解决集群磁盘空间不足的问题,谨记!

正文:

        数据仓库的其中一个作用是保存公司完整的业务或其他数据,在RDB如mysql/Oracle中,数据太多可以进行归档,但数仓不可以.这就导致了数仓中的磁盘占用率越来越高,终归有一天,磁盘不足,那给CDH集群增加磁盘就不能避免.

        以下是我实际工作中一次增加磁盘的记录.分享出来希望可以帮到有缘人.

分为以下三个部分描述

    1-磁盘热插拔的注意事项

    2-具体操作步骤

    3-增加磁盘后的效果

注意事项

  • 热插拔只能添加具有空数据目录的磁盘。
  • 卸下磁盘不会将数据移出磁盘,这可能会导致数据丢失。
  • 不要同时在多个主机上执行热交换。
  • 每次更改单独机器的HDFS配置信息,不要更改角色组的信息,即便是统一每台机器都增加同样数量的磁盘且磁盘mount路径都相同

因此次我们是操作增加磁盘,所以注意事项第二条可以忽略掉.

操作步骤

准备阶段:

准备阶段主要是磁盘硬件添加和挂载,这些工作都是IT部门同事帮忙做的,最终给一台机器增加10块磁盘,分别挂载在/u06和/u07 ..../u15目录下.

a-登录CDH主界面,点击HDFS角色

b-点击"实例"选项卡

此时我们可以看到所有DataNode节点的列表,选择要添加磁盘的机器,点击它对应的DATA NODE

点进去后,我们看到的就是这台机器单独的界面,点击配置.

绿色框部分为该机器现有的磁盘挂载目录.只需要点击加号按钮添加磁盘路径即可.添加后截图如下

更改完毕,点击保存更改.此时DN处于使用过期配置的情况,更新配置界面如下

勾选上这两个选项,只重新启动单台DN,对集群影响降低到最小.不会影响正在运行的各种服务.重启过程如下

增加后的效果

重启后,在CDH界面查看该机器信息,发现磁盘容量从4T+变为了25T+,此时登录服务器导磁盘挂载目录下,发现创建好了对应的dfs数据文件夹.

扩容完成.其他应用没有受到影响

以上,为CDH机器增加磁盘的过程,请注意,不要一次性操作多台机器.感谢耐心阅读.

2019-12-06=================================================

在集群页面找到了一个直接更新数据目录的按钮.截图如下

也就是说,在添加完数据存储目录的时候,直接在右上角找到操作->刷新数据目录即可完成数据目录的更改和添加,该步骤执行结果如下

</article>
### 使用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、付费专栏及课程。

余额充值