当前位置: 首页 > news >正文

CDH安装与配置及相关大数据组件实践

CDH安装与配置及相关大数据组件实践

一、CDH 介绍

CDH(Cloudera’s Distribution Including Apache Hadoop)是一个基于 Web 用户界面的大数据平台版本。它支持大多数 Hadoop 组件,包括 HDFS、MapReduce、Hive、Pig、HBase、Zookeeper、Sqoop 等。其优点是大大简化了大数据平台的安装过程,使用起来也较为简单。

二、Cloudera Manager 的功能

  1. 管理
    可以对集群进行管理操作,例如添加、删除节点等。
  2. 监控
    全面监控集群的健康情况,包括各种设置的指标和系统运行状况。
  3. 诊断
    当集群出现问题时,能够对问题进行诊断,并给出相应的建议解决方案。
  4. 集成
    将多个组件进行整合。

三、国内大数据开发环境平台方案对比

  1. 手动安装各个软件(如学习时的方式,hadoop 开源免费)
    • 问题:安装过程繁琐,存在版本差异问题,并且缺少集群软、硬件监控功能。
  2. 使用 CDH、HDP、星环等大数据平台
    • 优势:能够快速搭建软件环境。
    • 劣势:收费。
  3. 使用阿里云(dataworks / e - mapreduce)、华为云、腾讯云、亚马逊云等云平台

四、CDH 安装步骤

(一)安装依赖包

yum install -y cyrus - sasl - plain cyrus - sasl - gssapi portmap fuse - libs bind - utils libxslt fuse
yum install -y /lib/lsb/init - functions createrepo deltarpm python - deltarpm
yum install -y mod_ssl openssl - devel python - psycopg2 MySQL - python

(二)安装 httpd(仅在部署本地 yum 源的机器上安装)

yum install httpd
yum install createrepo

(三)修改主机名,配置 hosts

  1. 修改主机名
hostnamectl set - hostname hadoop01
  1. 配置 hosts 文件
vi /etc/hosts
172.16.35.101 hadoop01

(四)关闭防火墙和配置免密登录

  1. 关闭防火墙
    • 查看防火墙状态
systemctl status firewalld.service
- 执行关闭命令
systemctl stop firewalld.service
- 再次查看防火墙状态
systemctl status firewalld.service
- 执行开机禁用防火墙自启命令
systemctl disable firewalld.service
  1. 配置免密登录
ssh - keygen
ssh - copy - id hadoop01

(五)关闭 selinux(在配置文件中第一次设置时需重启服务器)

setenforce 0
vim /etc/selinux/config
将 SELINUX=enforcing 改为 SELINUX=disabled

(六)安装 httpd 服务、启动 httpd 服务

systemctl start httpd.service
cd /var/www/html/
mkdir - p cm6/6.2.1/redhat7/yum/RPMS/x86_64/
#上传 cm6 中的文件到/var/www/html/cm6/6.2.1/redhat7/yum/RPMS/x86_64 目录
#上传 allkeys.asc 文件到/var/www/html/cm6/6.2.1/目录下cd /var/www/html/
mkdir - p cdh6/6.2.1/parcels/
#上传 cdh6 中的文件到此目录 /var/www/html/cdh6/6.2.1/parcels/#在 windows 系统访问测试:http://hadoop01/cm6/6.2.1/redhat7/yum/RPMS/x86_64/#配置 windows 系统的本地 hosts
C:\Windows\System32\drivers\etc#CDH 伪分布式
172.16.35.101  hadoop01

(七)生成 repodata 目录

cd /var/www/html/cm6/6.2.1/redhat7/yum
createrepo.

(八)配置本地 yum 源

cd /etc/yum.repos.d/
vi cloudera - manager.repo
[cloudera - manager]
name=Cloudera Manager
baseurl=http://hadoop01/cm6/6.2.1/redhat7/yum/
gpgcheck=0
enabled=1yum clean all
yum list | grep cloudera

(九)创建 cloudera - scm 用户

#创建一个用户名,用户名是 cloudera - scm
useradd cloudera - scm
#给 cloudera - scm 用户添加一个密码
passwd cloudera - scm
#输入的密码
test123456#免密钥登录
echo "cloudera - scm ALL=(root)NOPASSWD:ALL" >> /etc/sudoers
su - cloudera - scm
exit

(十)安装 mysql 服务(略)

(十一)创建数据库,作为 CDH 的元数据库

登录 mysql 数据库,执行以下命令

create database scm DEFAULT CHARACTER SET utf8;
grant all PRIVILEGES on *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
grant all PRIVILEGES on *.* TO 'root'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;
grant all PRIVILEGES on *.* TO 'root'@'hadoop01' IDENTIFIED BY '123456' WITH GRANT OPTION;
flush privileges;

(十二)安装 Server 服务

yum install -y oracle - j2sdk1.8 - 1.8.0+update181 - 1.x86_64
yum install -y enterprise - debuginfo - 6.2.1 - 1426065.el7.x86_64
yum install -y cloudera - manager - server - 6.2.1 - 1426065.el7.x86_64
yum install -y cloudera - manager - server - db - 2 - 6.2.1 - 1426065.el7.x86_64

注意事项:如果在 yum 源中添加了新的包:

  1. 需要删除之前的 repodata 文件后,重新生成。
  2. 重启 httpd 服务。
  3. 清除 yum 缓存 yum clean all
    如果是集群,3 个节点都要执行:yum install -y oracle - j2sdk1.8 - 1.8.0+update181 - 1.x86_64
    配置 JDK 的环境变量:
# yum install -y oracle - j2sdk1.8 - 1.8.0+update181 - 1.x86_64 
# 上述命令可以安装 JDK
修改/etc/profile 增加下面的内容
JAVA_HOME=/usr/java/jdk1.8.0_181 - cloudera/
PATH=$PATH:$JAVA_HOME/bin

(十三)设置元数据库为 mysql

需要上传 mysql 驱动包(mysql - connector - java - 8.0.26.jar)jar 到/opt/cloudera/cm/lib 目录下。
设置元数据库为 mysql(前提是安装 ClouderaManager Server 服务)

/opt/cloudera/cm/schema/scm_prepare_database.sh - h localhost mysql scm root 123456
查看:cat /etc/cloudera - scm - server/db.properties

(十四)启动 server 服务进程(查看 7180 端口)

systemctl start cloudera - scm - server
查看启动日志:
tail - f /var/log/cloudera - scm - server/cloudera - scm - server.log
查看启动状态:
systemctl status cloudera - scm - server
查看端口
yum install net - tools
netstat - an | grep 7180

(十五)配置本地 parcel 包

注意:必须要在数据库初始化后,将 parcel 文件放置到/opt/cloudera/parcel - repo 目录中。

上传 cdh6 的 parcel 等文件到/opt/cloudera/parcel - repo
mv /var/www/html/cdh6/6.2.1/parcels/* /opt/cloudera/parcel - repo 
重命名密钥文件名
cd /opt/cloudera/parcel - repo/
mv CDH - 6.2.1 - 1.cdh6.2.1.p0.1425774 - el7.parcel.sha1 CDH - 6.2.1 - 1.cdh6.2.1.p0.1425774 - el7.parcel.sha

(十六)开始安装

访问 Server:http://hadoop01:7180/cmf/login,账号密码均为 admin

(十七)swappiness 和透明化

  1. 临时生效
sysctl - w vm.swappiness=10
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
  1. 永久生效
echo "vm.swappiness=10" >> /etc/sysctl.conf
echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >> /etc/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local

五、CM 的图形化安装

(一)登录后首先要做的工作

设置 Parcel 更新频率为 1 分钟。登录后,在新的页面中点击小包裹,再点击配置,将更新频率设置为一分钟。

(二)进行新建集群的操作

在跳转的欢迎界面,点击继续,接收协议,选择免费社区版。指定软件包的位置:http://hadoop01/cm6/6.2.1http://hadoop01/cdh6/6.2.1/parcels/。如果中途出现问题(如安装一半内存不足报错)再次安装时,需要删除安装锁:

rm - rf /tmp/scm_prepare_node.*
rm - rf /tmp/.scm_prepare_node.lock

等待安装后,选择要安装的套餐。

(三)新服务的安装

  1. zookeeper 的安装
    在服务的选择页面中选择 zookeeper,然后在安装页面中直接点击【继续】按钮。安装好之后,如果要在服务器中测试 zookeeper 的运行情况,可以通过以下方式访问 zk 的客户端:
[root@hadoop01 ~]# find / - name zkCli.sh
find: ‘/proc/87190’: 没有那个文件或目录
/opt/cloudera/parcels/CDH - 6.2.1 - 1.cdh6.2.1.p0.1425774/lib/zookeeper/bin/zkCli.sh
[root@hadoop01 ~]# /opt/cloudera/parcels/CDH - 6.2.1 - 1.cdh6.2.1.p0.1425774/lib/zookeeper/bin/zkCli.sh
  1. HDFS
    • 将 HDFS 配置项 dfs.permissions 改为 false,否则会因权限问题不能在 hdfs 中创建目录和文件。将 dfs.replication 设置为 1(因为安装的伪分布式,所以副本个数设置为 1)。
    • 关闭 safemode 模型:
[root@hadoop01 ~]# hdfs dfsadmin - safemode get
Safe mode is OFF
[root@hadoop01 ~]# hdfs dfsadmin - safemode leave
Safe mode is OFF
- 测试 HDFS:
hdfs dfs - mkdir /test
  1. yarn 的安装
    与 zk 一样,选择 yarn 安装,然后点击【继续】。yarn 安装之后需要设置参数:
yarn.nodemanager.resource.memory - mb = 4G
yarn.scheduler.maximum - allocation - mb = 2G

测验 yarn 的安装情况:
- 通过官方例子来处理,先查找 hdfs - site.xml 文件位置:

find / - name hdfs - site.xml
#大致的位置:
/opt/cloudera/parcels/CDH - 6.2.1 - 1.cdh6.2.1.p0.1425774/etc/hadoop/conf.pseudo/hdfs - site.xml
/opt/cloudera/parcels/CDH - 6.2.1 - 1.cdh6.2.1.p0.1425774/etc/hadoop/conf.impala/hdfs - site.xml
/opt/cloudera/parcels/CDH - 6.2.1 - 1.cdh6.2.1.p0.1425774/etc/hadoop/conf.empty/hdfs - site.xml
- 取上述目录中的主目录:
cd /opt/cloudera/parcels/CDH - 6.2.1 - 1.cdh6.2.1.p0.1425774/
- 官方例子在以下目录:
/opt/cloudera/parcels/CDH - 6.2.1 - 1.cdh6.2.1.p0.1425774/jars  hadoop - mapreduce - examples - 3.0.0 - cdh6.2.1.jar
- 测试步骤:

创建测试文件:

vim testinput.txt
I love BeiJing
I love China
Beijing is the capital of China

创建 HDFS 目录并上传文件:

hadoop fs - ls /
hadoop fs - mkdir  /input
hadoop fs - put testinput.txt /input

运行 wordcount:

yarn jar /opt/cloudera/parcels/CDH/jars/hadoop - mapreduce - examples - 3.0.0 - cdh6.2.1.jar wordcount /input /output
hadoop fs - ls /output  //完成后查看输出目录
hadoop fs - cat /output/part - r - 00000   //查看输出结果
  1. hive 的安装
    • 创建数据库
mysql - uroot - p
create database hive;
- 需要上传 mysql 驱动包 jar 到/opt/cloudera/cm/lib 目录下(之前已传过则不用传),并复制到 hive 相关目录:
cp /opt/cloudera/cm/lib/mysql - connector - java - 8.0.26.jar /opt/cloudera/parcels/CDH/lib/hive/lib/

如果忘记导入,导入驱动包之后,点击 Resume 重新安装。如果出现错误:Cannot find hadoop installation: $HADOOP_HOME or $HADOOP_PREFIX must be set,则需要变更 hive 的配置:

cd /etc/hive/conf
vim hadoop - env.sh
# 添加以下内容:
export HADOOP_HOME=/opt/cloudera/parcels/CDH - 6.2.1 - 1.cdh6.2.1.p0.1425774
source hadoop - env.sh

可以使用 Datagrip 或者 Dbeaver 连接 hive。
5. sqoop
- 创建数据库和表

mysql - uroot - p
create database test1;
create table t_user
(id bigint auto_increment,name varchar(127) not null,age bigint null,class varchar(255) null,primary key (id)
);

创建测试文件:

vim text.txt
leo|12|class1
leo1|13|class2
leo2|14|class3
leo3|15|class4
leo4|16|class5
leo5|17|class6

复制 mysql 驱动包到 sqoop 相关目录:

cp /opt/cloudera/cm/lib/mysql - connector - java - 5.1.40.jar /opt/cloudera/parcels/CDH/lib/sqoop/lib/

执行数据导出操作:

sqoop export \
--connect jdbc:mysql://hadoop01:3306/test1 \
--username root \
--password 123456 \
--table t_user \
--columns 'name,age,class' \
--export - dir /data \
--input - fields - terminated - by '|' \
--num - mappers 1

相关文章:

CDH安装与配置及相关大数据组件实践

CDH安装与配置及相关大数据组件实践 一、CDH 介绍 CDH(Cloudera’s Distribution Including Apache Hadoop)是一个基于 Web 用户界面的大数据平台版本。它支持大多数 Hadoop 组件,包括 HDFS、MapReduce、Hive、Pig、HBase、Zookeeper、Sqoo…...

fastapi 调用ollama之下的sqlcoder模式进行对话操作数据库

from fastapi import FastAPI, HTTPException, Request from pydantic import BaseModel import ollama import mysql.connector from mysql.connector.cursor import MySQLCursor import jsonapp FastAPI()# 数据库连接配置 DB_CONFIG {"database": "web&quo…...

YOLO系列基础(六)YOLOv1原理详解,清晰明了!

系列文章地址 YOLO系列基础(一)卷积神经网络原理详解与基础层级结构说明-CSDN博客 YOLO系列基础(二)Bottleneck瓶颈层原理详解-CSDN博客 YOLO系列基础(三)从ResNet残差网络到C3层-CSDN博客 YOLO系列基础…...

LeetCode100之环形链表(141)--Java

1.问题描述 给你一个链表的头节点 head ,判断链表中是否有环 示例1 输入:head [3,2,0,-4], pos 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点 示例2 输入:head [1,2], pos 0 输出&#xf…...

【ict基础软件赛道】真题-50%openEuler

以下哪个命令可用于查看当前shell的后台任务在openeuler中哪个符号用于创建后台执行进程在openeuler中使用哪个命令查看软件包的详细信息在openeuler中如果想要查看本机的主机名可以使用下面哪个命令在openeuler中使用的包管理器是在openeuler系统中要配置防火墙以允许ssh连接应…...

<AI 学习> 下载 Stable Diffusions via Windows OS

注意: 不能使用 网络路径 不再支持 HTTPS 登录,需要 Token 1. 获得合法的授权 Stability AI License — Stability AI 上面的链接打开,去申请 许可 2. 拥有 HuggingFace 账号 注册:https://huggingface.co/ 3. 配置 Tok…...

计算机图形学在游戏开发中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 计算机图形学在游戏开发中的应用 计算机图形学在游戏开发中的应用 计算机图形学在游戏开发中的应用 引言 计算机图形学的基本概念…...

【CubeMX-HAL库】STM32H743II——SDRAM配置所遇问题

推荐的博客和视频: 1、【CubeMX-HAL库】STM32H743—FMC配置SDRAM_stm32h743 sdram 速度-CSDN博客 2、【【STM32CubeMX教程】STM32全外设原理、配置和常用HAL、LL库API使用详解】 3、在百度网盘里有STM32H743的例程:【通过网盘分享的文件:S…...

mac上使用docker搭建gitlab

在 Mac 上搭建 GitLab 可以使用 Docker 来简化安装过程 一、安装详细步骤 1. 安装 Docker 如果你尚未安装 Docker,可以通过以下步骤安装: 下载并安装 Docker Desktop for Mac.安装完成后,启动 Docker Desktop,确保 Docker 运行…...

二维数组操作

代码结构 main.c #include <stdio.h> #include <stdlib.h>#define LEN 100int main() {//通过指针引用多维数组# if 1//定义多维数组int a[3][5] {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};int row sizeof(a) /sizeof(a[0]);int colum sizeof(a[0]) / sizeof(a[0…...

uniapp设置tabBar高斯模糊并设置tabBar高度占位

1、设置tabBar高斯模糊 2、设置tabBar高度占位 &#xff08;1&#xff09;需要先在App.vue中获取一下 uni.getSystemInfoSync().windowBottom; //返回值是tabBar的高度&#xff08;2&#xff09;在app.vue中定义一个全局样式 3、在需要的页面底部&#xff0c;加上一个view&…...

上市公司代理成本数据大全(第一类和第二类代理成本均有)1991-2023年

一、计算方式&#xff1a; &#xff08;1&#xff09; 第一类代理成本 AC1:经营费用率&#xff0c;参考顶刊《管理世界》李文贵和余明桂(2015)老师的研究构建代理成本 AC2:管理费用率&#xff0c;参考C刊《经济管理》彭雅哲和汪昌云(2021) 老师的研究构建代理成本 AC3:资产周转…...

CA-Markov模型概述及其MATLAB实现

CA-Markov模型概述及其MATLAB实现 1 Markov模型2 CA-Markov模型2.1 元胞自动机(Cellular Aumatomata, 简称CA)2.1.1 构成2.2 准确度评估(Accuracy assessment)2.2.1 Kappa coefficient参考1.参考文献2.其它参考资料1 Markov模型 Markov模型是一种数学模型,用于描述系统在不…...

《生成式 AI》课程 第3講 CODE TASK执行文章摘要的机器人

课程 《生成式 AI》课程 第3講&#xff1a;訓練不了人工智慧嗎&#xff1f;你可以訓練你自己-CSDN博客 任务1:总结 1.我们希望你创建一个可以执行文章摘要的机器人。 2.设计一个提示符&#xff0c;使语言模型能够对文章进行总结。 model: gpt-4o-mini,#gpt-3.5-turbo, import…...

HCIP-HarmonyOS Application Developer 习题(二十二)

1、用户将手机导航迁移至智能手表之后&#xff0c;智能手表如果需要获取手机传过来的数据&#xff0c;从下列哪个方法中获取? A、onCompleteContinuation() B、onStartContinuation() C、onRestoreData() D、onSaveData() 答案&#xff1a;C 分析&#xff1a;FA发起迁移后&am…...

c++原型模式(Prototype Pattern)

原型模式&#xff08;Prototype Pattern&#xff09; 原型模式是一种创建型设计模式&#xff0c;它允许你通过复制现有对象来创建新的对象&#xff0c;而不是通过类实例化来创建对象。这种模式在开发时需要大量类似对象的情况下非常有用。原型模式的核心是一个具有克隆方法的接…...

联通大数据面试题及参考答案

Flink 是怎么使用的? Flink 是一个分布式流批一体的开源平台,以下是其一般使用步骤及相关要点: 环境搭建 首先要根据需求选择合适的部署模式,比如本地模式用于开发测试,集群模式(如 Standalone、YARN、Kubernetes 等)用于生产环境。安装相应的 JDK 版本(Flink 基于 Ja…...

MySQL数据库:SQL语言入门 【3】(学习笔记)

目录 5&#xff0c;TCL —— 事务控制语言&#xff08;Transaction Control Language&#xff09; &#xff08;1&#xff09;事务的概念作用 &#xff08;2&#xff09;事务的特性 【1】原子性 【2】一致性 【3】隔离性 【4】持久性 &#xff08;3&#xff09;并发事务带来…...

uniapp 实现tabbar分类导航及滚动联动效果

思路&#xff1a;使用两个scroll-view&#xff0c;tabbar分类导航使用scrollleft移动&#xff0c;内容联动使用页面滚动onPageScroll监听滚动高度 效果图 <template><view class"content" ><view :class"[isSticky ? tab-sticky: ]">…...

华为数字化转型的本质为何是管理变革

随着全球经济的加速数字化转型&#xff0c;企业纷纷进入了数字化时代的大潮。华为作为数字化转型的领军者&#xff0c;已经成功实践了从传统企业向数字化企业的蜕变。对于企业而言&#xff0c;数字化转型不仅仅是新技术的应用&#xff0c;更是一场管理变革。在这场变革的背后&a…...

【数据库】深入解析慢 SQL 的识别与优化策略

文章目录 什么是慢 SQL&#xff1f;慢 SQL 的危害如何检测分析慢 SQL使用 MySQL 慢查询日志利用 EXPLAIN 分析执行计划通过 Profiling 获取详细执行信息借助慢 SQL 收集分析平台 实际案例解析&#xff1a;600秒的慢 SQL 优化之旅问题描述初步分析优化步骤1. 优化 SQL 语句结构2…...

Linux从入门到精通

远程连接linux操作系统 Linux的图形化界面并不稳定&#xff0c;因此往往使用命令行去接触Linux操作系统 远程连接到Linux操作系统需要借助一个叫做finalshell的软件&#xff0c;官方地址如下&#xff1a; finalshell官方下载 在linux的terminal终端中输入指令 ifconfig就可以…...

代码随想录算法训练营第四十四天|Day44 动态规划

1143.最长公共子序列 视频讲解&#xff1a;https://www.bilibili.com/video/BV1ye4y1L7CQ https://programmercarl.com/1143.%E6%9C%80%E9%95%BF%E5%85%AC%E5%85%B1%E5%AD%90%E5%BA%8F%E5%88%97.html 思路 #define max(a, b) ((a) > (b) ? (a) : (b)) int longestCommonSu…...

C++初阶——优先队列

一、什么是优先队列 优先队列是一个容器适配器&#xff0c;存储于优先队列中的元素按照某种优先级自动排序。优先队列类似于堆&#xff0c;元素可以随时插入&#xff0c;但是只能弹出优先级最高的元素。默认是一个大根堆&#xff0c;也就是元素越大&#xff0c;优先级越高。 二…...

10月月报 | Apache DolphinScheduler进展总结

各位热爱 Apache DolphinScheduler 的小伙伴们&#xff0c;社区10月份月报更新啦&#xff01;这里将记录 DolphinScheduler 社区每月的重要更新&#xff0c;欢迎关注&#xff01; 月度Merge之星 感谢以下小伙伴10月份为 Apache DolphinScheduler 所做的精彩贡献&#xff08;排…...

WSL--无需安装虚拟机和docker可以直接在Windows操作系统上使用Linux操作系统

安装WSL命令 管理员打开PowerShell或Windows命令提示符&#xff0c;输入wsl --install&#xff0c;然后回车 注意&#xff1a;此命令将启用运行 WSL 和安装 Linux 的 Ubuntu 发行版所需的功能。 注意&#xff1a;默认安装最新的Ubuntu发行版。 注意&#xff1a;默认安装路径是…...

《AI 之影》

《AI 之影》 城市的喧嚣如同一幅永不停息的画卷&#xff0c;在钢筋水泥的丛林中&#xff0c;人们匆忙地穿梭&#xff0c;追逐着各自的梦想与欲望。而在这看似平凡的都市之中&#xff0c;一场悄然的变革正在酝酿。 他叫佑介&#xff0c;一个孤独的城市漫步者。每天&#xff0c;他…...

QT5.14*解决QSslSocket::connectToHostEncrypted: TLS initialization faile

qDebug()<<"QSslSocket"<<QSslSocket::sslLibraryBuildVersionString();通过上述代码在QT控制台查看对应需要的SSL版本&#xff0c;QT5.14.*输出的内容为&#xff1a; OpenSSL 1.1.1d 10 Sep 2019从官方下载openssl安装包即可&#xff0c;在官网找了很…...

高效分支管理规范

一、目的 通过标准化的流程和最佳实践&#xff0c;确保代码组织清晰、版本控制高效、变更管理有序&#xff0c;从而提高软件开发的质量、效率和可维护性&#xff0c;支持团队协作和持续集成/持续部署流程&#xff0c;最终实现项目的长期成功和发展 二、分支命名规范 简洁明了…...

跟我学C++中级篇——RAII

一、什么是RAII Resource Acquisition Is Initialization&#xff0c;资源获取即初始化。C/C的开发者都知道&#xff0c;在这类语言的开发中&#xff0c;内存需要手动来控制。也就是说&#xff0c;释放和回收内存得开发者亲历亲为。从某种角度看&#xff0c;能够把控内存的细节…...