云计算与大数据——部署Hadoop集群并运行MapReduce集群(超级详细!)

news2024/11/24 12:50:55

云计算与大数据——部署Hadoop集群并运行MapReduce集群(超级详细!)

Linux搭建Hadoop集群(CentOS7+hadoop3.2.0+JDK1.8+Mapreduce完全分布式集群)

本文章所用到的版本号: CentOS7 Hadoop3.2.0 JDK1.8

基本概念及重要性

很多小伙伴部署集群用hadoop用mapreduce,却不知道到底部署了什么,有什么用。在部署集群之前先给大家讲一下Hadoop和MapReduce的基本概念,以及它们在大数据处理中的重要性:

-Hadoop 是一个由Apache基金会开发的开源软件框架,用于在大规模数据集上进行分布式处理和存储。Hadoop的核心组件包括Hadoop Distributed File System (HDFS)和MapReduce。

  • HDFS 是一个分布式文件系统,可以在普通的硬件上存储大量的数据。HDFS将数据分割成多个块,然后在集群中的多个节点上进行分布式存储,从而提供了高容错性和高吞吐量。

  • MapReduce 是一种编程模型,用于处理和生成大数据集。MapReduce任务包括两个阶段:Map阶段和Reduce阶段。在Map阶段,输入数据被分割成多个独立的块,然后并行处理。在Reduce阶段,处理结果被合并成一个最终的输出。

Hadoop和MapReduce在大数据处理中的重要性主要体现在以下几点:

  1. 可扩展性:Hadoop可以在数百或数千台机器上运行,处理PB级别的数据。

  2. 容错性:Hadoop可以自动处理节点故障,保证数据的可靠性和完整性。

  3. 成本效益:Hadoop可以在普通的硬件上运行,降低了大数据处理的成本。

  4. 灵活性:MapReduce编程模型可以处理结构化和非结构化的数据,适应各种类型的数据处理任务。

下面正式进入正题话!

一、直接选择root用户登录并关闭防火墙

在这里插入图片描述

直接选择root用户登录,避免了普通用户授权和切换用户导致的一些环境问题,简单来说就是高效、方便。

然后关闭防火墙:

systemctl stop firewalld  //关闭防火墙

在这里插入图片描述

systemctl disable firewalld  //关闭开机自启

在这里插入图片描述

systemctl status firewalld  //查看防火墙状态

在这里插入图片描述
让防火墙处于关闭状态。

二、实现ssh免密码登录

配置ssh的无密码访问

ssh-keygen -t rsa

连续按回车
在这里插入图片描述

cd ~/.ssh
cat id_rsa.pub >> authorized_keys

在这里插入图片描述
设置ssh服务器自动启动

vi ~/.bashrc 

在文件的最末尾按O进入编辑模式,加上:

/etc/init.d/ssh start

在这里插入图片描述
按ESC返回命令模式,输入:wq保存并退出。
让修改即刻生效

source ~/.bashrc

在这里插入图片描述
查看ssh服务状态。

systemctl status sshd

在这里插入图片描述

三、CentOS7 安装jdk1.8

1、yum安装

  1. 安装之前先查看一下有无系统自带jdk,有的话先卸载。
    在这里插入图片描述
    卸载自带的jdk:
    rpm -e --nodeps 上步查询出的所有jdk
    例如:
[root@master ~]# rpm -e --nodeps copy-jdk-configs-3.3-10.el7_5.noarch

验证是否已经卸载干净:

java -version

在这里插入图片描述
卸载完之后开始安装jdk1.8:

查看可安装的版本

yum list java*

在这里插入图片描述
安装1.8.0版本openjdk

yum -y install java-1.8.0-openjdk*

在这里插入图片描述
在这里插入图片描述
安装位置查看:

rpm -qa | grep java
rpm -ql java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64

在这里插入图片描述
添加用户环境变量
添加:

export JAVA_HOME=/usr/lib/jvm/java-openjdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

在这里插入图片描述
然后执行

source ~/.bashrc

在这里插入图片描述
验证安装:

which java

查看java版本信息

java -version

在这里插入图片描述
说明JDK配置完成。

四、下载hadoop

这个链接也有更多3.2.0版本其它的hadoop文件:
https://archive.apache.org/dist/hadoop/common/hadoop-3.2.0/
下载hadoop文件:
在这里插入图片描述
然后上传文件并解压缩
1.在opt目录下新建一个名为hadoop的目录,并将下载得到的hadoop-3.2.0.tar上传到该目录下
mkdir /opt/hadoop

解压安装:

tar -zxvf hadoop-3.2.0.tar.gz

在这里插入图片描述
配置Hadoop环境变量:

vim ~/.bashrc

在这里插入图片描述
添加hadoop环境变量:

export JAVA_HOME=/usr/lib/jvm/java-openjdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:/opt/hadoop/hadoop-3.2.0/bin:/opt/hadoop/hadoop-3.2.0/sbin
export HADOOP_HOME=/opt/hadoop/hadoop-3.2.0
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

在这里插入图片描述
然后我们执行

source  ~/.bashrc

使修改的配置文件生效。
在这里插入图片描述

五、Hadoop配置文件修改

新建几个目录:

mkdir /root/hadoop
mkdir /root/hadoop/tmp
mkdir /root/hadoop/var
mkdir /root/hadoop/dfs
mkdir /root/hadoop/dfs/name
mkdir /root/hadoop/dfs/data

在这里插入图片描述
修改etc/hadoop中的一系列配置文件
vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/core-site.xml
在节点内加入配置:

<configuration>
 <property>
        <name>hadoop.tmp.dir</name>
        <value>/root/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
   </property>
   <property>
        <name>fs.default.name</name>
        <value>hdfs://master:9000</value>
   </property>
   </configuration>

在这里插入图片描述
修改hadoop-env.sh

vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/hadoop-env.sh

将 export JAVA_HOME=${JAVA_HOME}
修改为: export JAVA_HOME=/usr/lib/jvm/java-openjdk
说明:修改为自己的JDK路径
在这里插入图片描述

修改hdfs-site.xml
vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/hdfs-site.xml
在节点内加入配置:

<configuration>
<property>
   <name>dfs.name.dir</name>
   <value>/root/hadoop/dfs/name</value>
   <description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.
   </description>
</property>

<property>
   <name>dfs.data.dir</name>
   <value>/root/hadoop/dfs/data</value>
   <description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.
   </description>
</property>

<property>
   <name>dfs.replication</name>
   <value>2</value>
</property>

<property>
   <name>dfs.permissions</name>
   <value>false</value>
   <description>need not permissions</description>
</property>
</configuration>

在这里插入图片描述
新建并且修改mapred-site.xml:
vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/mapred-site.xml
在节点内加入配置:

<configuration>
<!-- 配置mapReduce在Yarn上运行(默认本地运行) -->
<property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
</property>
</configuration>

在这里插入图片描述
修改workers文件:

vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/workers

将里面的localhost删除,添加以下内容(master和node1节点都要修改):

master
node1

在这里插入图片描述
修改yarn-site.xml文件:

vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/yarn-site.xml

在这里插入图片描述
配置hadoop-3.2.0/sbin/目录下start-dfs.sh、start-yarn.sh、stop-dfs.sh、stop-yarn.sh文件
服务启动权限配置

cd /opt/hadoop/hadoop-3.2.0

配置start-dfs.sh与stop-dfs.sh文件

vi sbin/start-dfs.sh
vi sbin/stop-dfs.sh
加入下面内容
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

在这里插入图片描述

配置start-yarn.sh与stop-yarn.sh文件

vi sbin/start-yarn.sh
vi sbin/stop-yarn.sh

加入下面内容

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

在这里插入图片描述
在这里插入图片描述
配置好基础设置(SSH、JDK、Hadooop、环境变量、Hadoop和MapReduce配置信息)后,克隆虚拟机,获得从机node1节点。
在这里插入图片描述
克隆master主机后,获得从机node1节点。
然后开始修改网卡信息:

vim /etc/sysconfig/network-scripts/ifcfg-ens33

修改node1节点ip信息:
在这里插入图片描述

修改node1节点主机名:

vi /etc/hostname

在这里插入图片描述
修改node1节点对应的ip 和主机名(主从节点保持一致)

vim /etc/hosts  

在这里插入图片描述
主从节点互连ssh试试:
先试试在master节点连接node1节点

ssh node1

在这里插入图片描述
再试试node1节点连接master节点:

ssh master

在这里插入图片描述
OK,互连成功。(按exit可以退出

六、启动Hadoop

因为master是namenode,node1是datanode,所以只需要对master进行初始化操作,也就是对hdfs进行格式化。
进入到master这台机器/opt/hadoop/hadoop-3.2.0/bin目录:

  cd /opt/hadoop/hadoop-3.2.0/bin

执行初始化脚本

  ./hadoop namenode -format

在这里插入图片描述
在这里插入图片描述

然后执行启动进程:

./sbin/start-all.sh

在这里插入图片描述
查看启动进程情况。

jps

在这里插入图片描述
master是我们的namenode,该机器的IP是192.168.95.20,在本地电脑访问如下地址:

http://192.168.95.20:9870/

在这里插入图片描述
在本地浏览器里访问如下地址:

http://192.168.95.20:8088/cluster

自动跳转到cluster页面
在这里插入图片描述
在hdfs上建立一个目录存放文件

./bin/hdfs dfs -mkdir -p /home/hadoop/myx/wordcount/input

查看分发复制是否正常

./bin/hdfs dfs -ls /home/hadoop/myx/wordcount/input

在这里插入图片描述

七、运行MapReduce集群

Mapreduce运行案例:
在hdfs上建立一个目录存放文件
例如

./bin/hdfs dfs -mkdir -p /home/hadoop/myx/wordcount/input

可以先简单地写两个小文件分别为text1和text2,如下所示。
file:text1.txt

hadoop is  very good 
mapreduce is very good
vim text1

在这里插入图片描述

然后可以把这两个文件存入HDFS并用WordCount进行处理.

./bin/hdfs dfs -put text1 /home/hadoop/myx/wordcount/input

在这里插入图片描述
查看分发情况
在这里插入图片描述
运行MapReduce用WordCount进行处理

./bin/hadoop jar ![在这里插入图片描述](https://img-blog.csdnimg.cn/81fe96bc9823429d8263e450ba417363.png)
/opt/hadoop/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar  wordcount /home/hadoop/myx/wordcount/input /home/hadoop/myx/wordcount/output

在这里插入图片描述

在这里插入图片描述
最终结果会存储在指定的输出目录中,查看输出目录里面可以看到以下内容。

./bin/hdfs dfs -cat /home/hadoop/myx/wordcount/output/part-r-00000*

运行输出结果也可以在web端查看,里面有详细信息:

http://192.168.95.20:9870/explorer.html#/home/hadoop/myx/wordcount/output

在这里插入图片描述
在这里插入图片描述
以上输出结果为每个单词出现的次数。

再来试试第二个案例:
file:text2.txt

vim text2
hadoop is  easy to learn 
mapreduce is  easy to learn

在这里插入图片描述
在浏览器端查看新建的input2目录:
在这里插入图片描述
运行MapReduce进行处理,设置输出的目录为output2(输出结果目录不用提前创建,Mapreduce运行过程中会自动生成output2输出目录)。

./bin/hadoop jar /opt/hadoop/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar  wordcount /home/hadoop/myx/wordcount/input2 /home/hadoop/myx/wordcount/output2

在这里插入图片描述
在这里插入图片描述
运行结束后,查看text2的输出结果

./bin/hdfs dfs -cat /home/hadoop/myx/wordcount/output2/part-r-00000*

在这里插入图片描述

运行输出结果也可以在web端查看,里面有详细信息:

http://192.168.95.20:9870/explorer.html#/home/hadoop/myx/wordcount/output2

在这里插入图片描述
在这里插入图片描述
以上输出结果为每个单词出现的次数。

我们再自己试试运行测试程序WordCount
先在hadoop当前用户目录下新建文件夹WordCount,在其中建立两个测试文件分别为file1.txt,file2.txt。自行在两个文件中填写内容。
新建文件夹WordCount。

mkdir WordCount
ls

在这里插入图片描述

cd WordCount
vim file1.txt

在这里插入图片描述
file1.txt文件内容为:

This is the first hadoop test program!

在这里插入图片描述

vim file2.txt

file2.txt文件内容为:

This  program is not very difficult,but this program is a common hadoop program!

在这里插入图片描述
然后在Hadoop文件系统HDFS中/home目录下新建文件夹input,并查看其中的内容。具体命令如下。

cd /opt/hadoop/hadoop-3.2.0
./bin/hadoop fs -mkdir /input
./bin/hadoop fs -ls /

在这里插入图片描述
在浏览器端查看:

http://192.168.95.20:9870/explorer.html#/input

在这里插入图片描述
将WordCount文件夹中file1.txt\file2.txt文件上传到刚刚创建的“input”文件夹。具体命令如下。

./bin/hadoop fs -put /opt/hadoop/hadoop-3.2.0/WordCount/*.txt  /input

在这里插入图片描述
运行Hadoop的示例程序,设置输出的目录为/output(输出结果目录不用提前创建,Mapreduce运行过程中会自动生成/output输出目录)。

./bin/hadoop jar /opt/had![在这里插入图片描述](https://img-blog.csdnimg.cn/abf75678cb6943698c1a26d250317caf.png)
oop/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar  wordcount  /input /output

在这里插入图片描述

在这里插入图片描述
查看输出结果的文件目录信息和WordCount结果。
使用如下命令查看输出结果的文件目录信息。

./bin/hadoop fs -ls /output

在这里插入图片描述

使用如下命令查看WordCount的结果。

./bin/hdfs dfs -cat /output/part-r-00000*

输出结果如下所示
在这里插入图片描述
运行输出结果也可以在web端查看,里面有详细信息:

http://192.168.95.20:9870/explorer.html#/output

在这里插入图片描述
以上输出结果为每个单词出现的次数。
至此Centos搭建hadoop集群和运行3个MapReduce集群案例完成!

在这里给大家扩展一下优化Hadoop集群性能和MapReduce任务效率的一些技巧和建议:

  1. 硬件优化:选择适合的硬件配置是提高Hadoop集群性能的关键。例如,使用更快的CPU,更大的内存,更快的硬盘(如SSD),以及高速的网络连接。

  2. 配置优化:Hadoop和MapReduce的配置参数可以根据具体的工作负载进行调整。例如,可以增加HDFS的块大小以提高大文件的处理速度,或者调整MapReduce的内存设置以适应更大的任务。

  3. 数据本地化:尽可能在数据所在的节点上运行MapReduce任务,以减少网络传输的开销。

  4. 并行处理:通过增加MapReduce任务的并行度,可以更充分地利用集群的资源。

  5. 编程优化:在编写MapReduce程序时,应尽可能减少数据的传输和排序。例如,可以使用Combiner函数来减少Map和Reduce阶段之间的数据传输。

  6. 使用高级工具:一些高级的数据处理工具,如Apache Hive和Apache Pig,可以自动优化MapReduce任务,使其更高效。

  7. 监控和调试:使用Hadoop自带的监控工具,如Hadoop Web UI和Hadoop Metrics,可以帮助你发现和解决性能问题。

以上只是一些基本的优化技巧和建议,具体的优化策略需要根据具体需求和环境进行调整。小马同学在这里祝各位部署一切顺利!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1037019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++设计模式_06_Decorator 装饰模式

本篇将会介绍Decorator 装饰模式&#xff0c;它是属于一个新的类别&#xff0c;按照C设计模式_03_模板方法Template Method中介绍的划分为“单一职责”模式。 “单一职责”模式讲的是在软件组件的设计中&#xff0c;如果责任划分的不清晰&#xff0c;使用继承得到的结果往往是随…

HT for Web (Hightopo) 使用心得(2)- 2D 图纸、节点、连线 与基本动画

概括来说&#xff0c;用 HT for Web 做可视化主要分为两部分&#xff0c;也就是 2D 和 3D。这两部分需要单独创建。在它们被创建完成后&#xff0c;我们再把它们集成到一起。 HT for Web 的 2D 部分主要是指 ht.graph.GraphView (简称 GraphView&#xff0c;也就是 2D 图纸)。…

Java项目:SSM的食堂点餐系统

作者主页&#xff1a;Java毕设网 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 一、相关文档 系统中的核心用户是系统管理员&#xff0c;管理员登录后&#xff0c;通过管理员菜单来管理后台系统。主要功能有&#xff1a;个人中心、用户管理…

自动发现、zabbix_proxy代理

自动发现&#xff1a;自己去发现被监控的主机 它能够根据用户事先定义的规则自动添加监控的主机或服务等。 优点 加快Zabbix部署&#xff08;agent&#xff09; 简化管理 在快速变化的环境中使用Zabbix&#xff0c;而不需要过度管理 部署自动发现(新机子) rpm -Uvh https://re…

OSI 七层网络协议最全的图

OSI 七层网络协议最全的图 文章出处&#xff1a;https://www.shuzhiduo.com/A/RnJWawowdq/

DINO(ICLR 2023)

DINO&#xff08;ICLR 2023&#xff09; DETR with Improved deNoising anchOr box DINO发展&#xff1a; Conditional DETR->DAB-DETR&#xff08;4D,WH修正&#xff09; DN-DETR&#xff08;去噪训练&#xff0c;deNoising 稳定匹配过程&#xff09; Deformable DETR&…

后端大厂面试-16道面试题

1 java集合类有哪些&#xff1f; List是有序的Collection&#xff0c;使用此接口能够精确的控制每个元素的插入位置&#xff0c;用户能根据索引访问List中元素。常用的实现List的类有LinkedList&#xff0c;ArrayList&#xff0c;Vector&#xff0c;Stack。 ArrayList是容量…

基于同名面片的TLS测站点云配准

1、原理介绍 2、代码介绍 基于C++编写的程序代码如下,其依赖eigen矩阵运算库,在创建工程时包含库目录中使用了相对路径,因此其下载下来直接可以运行,不用单独在设置环境,非常方便。

Java项目:SpringBoot高校宿舍管理系统

作者主页&#xff1a;Java毕设网 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 一、相关文档 宿舍是大学生学习与生活的主要场所之一&#xff0c;宿舍管理是高校学工管理事务中尤为重要的一项。随着我国高校招生规模的进一步扩大&#xff0…

异步回调

Future 设计的初衷&#xff1a;对将来的某个事件的结果进行建模 package com.kuang.future;import com.kuang.pc.C;import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.uti…

ubuntu | 安装NVIDIA套件:驱动、CUDA、cuDNN

CUDA 查看支持最高的cuda版本 nvidia-smiCUDA Version:12.2 区官网下在12.2.x最新的版本即可CUDA Toolkit Archive | NVIDIA Developer 下载安装 wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run sudo…

《开发实战》16 | 缓存设计:缓存可以锦上添花也可以落井下石

不要把 Redis 当作数据库 Redis 的确具有数据持久化功能&#xff0c;可以实现服务重启后数据不丢失。这一点&#xff0c;很容易让我们误认为 Redis 可以作为高性能的 KV 数据库。Redis 的特点是&#xff0c;处理请求很快&#xff0c;但无法保存超过内存大小的数据。第一&#…

leetcode 22. 括号生成

2023.9.24 看到组合两个字&#xff0c;想到了回溯。 大致思路是将所有可能的组合列出来&#xff0c;通过中止条件筛选掉无效的括号。 第一个中止条件&#xff1a;如果右括号数量大于左括号&#xff0c;那括号肯定无效。 第二个中止条件&#xff1a;当左右括号数量相等&#x…

swiper使用

介绍 Swiper&#xff08;swiper master&#xff09;是一个第三方的库&#xff0c;可以用来实现移动端、pc端的滑动操作。&#xff0c;swiper应用广泛&#xff0c;使用频率仅次于jquery, 轮播图类排名第一&#xff0c;是网页设计师必备技能&#xff0c;众多耳熟能详的品牌在使用…

Keil 无法烧写程序

问题描述&#xff1a; Keil MDK V5.38 按 F8 键无法烧录程序&#xff0c;提示: Error: Flash Download failed - "Cortex-M7", No Algorithm found for: 08000000H - 080013D3H 解决办法&#xff1a; Debug 工具改为&#xff1a;ST-Link Debugger Debug 的 Conne…

mac怎么把两张图片拼在一起

mac怎么把两张图片拼在一起&#xff1f;在如今的生活中&#xff0c;喜欢摄影的朋友们越来越多。拍照已经成为我们的一种习惯&#xff0c;因为当我们遇到美景或迷人的人物时&#xff0c;总是忍不住按下快门&#xff0c;将它们定格。随着时间的推移&#xff0c;我们渐渐发现自己的…

[Java | Web] JavaWeb——JSON与AJAX简介

目录 一、JSON 简介 1、什么是 JSON 2、JSON 的定义和访问 3、JSON 在 JS 中两种常用的转换方法 4、JSON 在 Java 中的使用 5、匿名内部类 二、AJAX 简介 1、什么是 AJAX 2、原生 JS 的 AJAX 请求示例 3、JQuery 中的 AJAX 请求 一、JSON 简介 1、什么是 JSON JSON…

Elasticsearch:什么是向量和向量存储数据库,我们为什么关心?

Elasticsearch 从 7.3 版本开始支持向量搜索。从 8.0 开始支持带有 HNSW 的 ANN 向量搜索。目前 Elasticsearch 已经是全球下载量最多的向量数据库。它允许使用密集向量和向量比较来搜索文档。 矢量搜索在人工智能和机器学习领域有许多重要的应用。 有效存储和检索向量的数据库…

马尔可夫链预测举例——钢琴销售的存贮策略

问题概述 一家钢琴专卖店&#xff0c;根据以往的销售经验&#xff0c;平均每周只能售出一架钢琴&#xff0c;现在经理指定的存贮策略是&#xff0c;每周末检查库存存量&#xff0c;仅当库存量为零时&#xff0c;才订购3架供下周销售&#xff1b;否则就不订购。试估计这种策略下…

Linux环境变量配置说明(配置jdk为例-摘录自尚硅谷技术文档)

配置环境变量的不同方法 Linux的环境变量可在多个文件中配置,如/etc/profile&#xff0c;/etc/profile.d/.sh&#xff0c;~/.bashrc&#xff0c;~/.bash_profile等&#xff0c;下面说明上述几个文件之间的关系和区别。 bash的运行模式可分为login shell和non-login shell。 例…