部署Python3用于集群资源脚本调用

本文详细介绍了在CentOS7系统中安装Python3的步骤,包括安装必要的编译组件、下载和解压Python源码包、配置编译参数、创建软链接等,确保Python3能够与系统默认的Python2共存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

备注:在你使用的集群上都要做部署我这里默认bigdata241节点(检查节点上是否有git,没有的话yum下载)

CentOS7 默认已经安装了Python2.7.5

[root@bigdata241~]# python --version

Python 2.7.5

[root@bigdata241 ~]# which python

/usr/bin/python

[root@bigdata241 ~]#

CentOS7默认安装的Python2不能删除,因为有很多系统命令,比如yum都要用到。输

 

安装python3的方法(root 用户下)

(1).安装编译python需要的组件

# yum -y groupinstall "Development tools"

# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

手动下载安装sqlite-devel

# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/sqlite-devel-3.7.17-8.el7.x86_64.rpm

# rpm -ivh sqlite-devel-3.7.17-8.el7.x86_64.rpm

在命令行下输入sqlite3如果可以看到如下信息,则说明安装成功,输入.quit退出

[root@bigdata241~]# sqlite3

SQLite version 3.7.17 2013-05-20 00:56:22

Enter ".help" for instructions

Enter SQL statements terminated with a ";"

sqlite> .quit 退出

(2).下载解压

# mkdir /usr/local/python3

# cd /usr/local/python3

# wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz

# tar -xvJf Python-3.6.5.tar.xz

(3). 编译安装

# cd Python-3.6.5

# ./configure --prefix=/usr/local/python3

# make && make install

说明:–prefix 后面指定安装目录,即刚刚创建的目录,笔者的是/usr/local/python3

然后创建软连接

# ln -s /usr/local/python3/bin/python3 /usr/bin/python3

# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

(4).命令行输入python python3测试

[root@bigdata241 Python-3.6.5]# python

Python 2.7.5 (default, Jul 13 2018, 13:06:57)

[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> exit()

[root@bigdata241 Python-3.6.5]#

注意:在编写python脚本时,注意python解释器的路径,python2为 #!/usr/bin/python,python3为#!/usr/bin/python3

 

### 使用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]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值