Hadoop之HDFS
学习一个框架,主要关注这个框架是什么、干什么、原理、怎么用、实地使用场景中可能存在的问题、原因及优化。
一.Hadoop学习要点
Hadoop 体系是我们学习大数据框架的基石,尤其是 MapReduce、HDFS、Yarn 三驾马车基本垫定了整个数据方向的发展道路。也是后面我们学习其他框架的基础,关于 Hadoop 本身我们主要应该掌握:
- HDFS架构理解(基础)
- HDFS源码/工作原理(高级)
- MapReduce架构理解(基础)
- MapReduce源码/原理/Shuffle原理(高级)
- MapReduce二次排序(编程,必选)
- YARN架构理解(基础)
- YARN源码/工作原理(高级)
其主要是三方面内容:
1)HDFS
- 十分熟悉 HDFS 的架构图和读写流程
- 十分熟悉 HDFS 的配置
- 熟悉 DataNode 和 NameNode 的作用
- NameNode 的 HA 搭建和配置,Fsimage 和 Edit Journal 的作用的场景
- HDFS 操作文件的常用命令
- HDFS 的安全模式
2)MapReduce
- 掌握 MapReduce 的工作原理
- 能用 MapReduce 手写代码实现简单的 WordCount 或者 TopN 算法
- 掌握 MapReduce Combiner 和 Partitioner的作用
- 熟悉 Hadoop 集群的搭建过程,并且能解决常见的错误
- 熟悉 Hadoop 集群的扩容过程和常见的坑
- 如何解决 MapReduce 的数据倾斜
- Shuffle 原理和减少 Shuffle 的方法
3)Yarn
- Yarn 的产生背景和架构
- Yarn 中的角色划分和各自的作用
- Yarn 的配置和常用的资源调度策略
- Yarn 进行一次任务资源调度的过程
二.Hadoop基础概述
关于大数据
什么是大数据?多大算是大数据?其有什么特点?
大数据(BigData) :指无法在一定时间范围内用常规软件工具进行捕捉、管理
和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程
优化能力的海量、高增长率和多样化的信息资产。
按顺序给出数据存储单位: bit.、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。
大数据的特点:4V
- volume 大量
- velocity 高速
- variety 多样
- value 低价值密度

关于Hadoop
Hadoop三大发行版本:Apache、Cloudera、Hortonworks。
- Apache版本最原始(最基础)的版本,对于入门学习最好(手动挡)。
- Cloudera内部集成了很多大数据框架。对应产品CDH(自动挡)。
- Hortonworks文档较好。对应产品HDP。
Hadoop的优势:4高
- 1)高可靠性:多个数据副本
- 2)高扩展性:节点方便扩展
- 3)高效性:MapReduce思想下的并行工作,加快任务处理速度
- 4)高容错性:能自动将失败任务重新分配
Hadoop官方网站:http://hadoop.apache.org/
Hadoop组成

- 1)Hadoop HDFS:一个高可靠、高吞吐量的分布式文件系统。
- 2)Hadoop MapReduce:一个分布式的离线并行计算框架。
- 3)Hadoop YARN:作业调度与集群资源管理的框架。
- 4)Hadoop Common:支持其他模块的工具模块。
Hadoop2.x 之后,将之前的MapReduce部分分为MapReduce与YARN两个部分,其目的是为了解耦。
解耦的一个好处就是可以实现MapReduce的可插拔,从而更加方便地替换计算框架。

MapReduce将计算过程分为两个阶段:Map和Reduce
- 1)Map阶段并行处理输入数据
- 2)Reduce阶段对Map结果进行汇总

YARN架构: - 1)ResourceManager(rm):处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资源分配与调度;
- 2)NodeManager(nm):单个节点上的资源管理、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令;
- 3)ApplicationMaster:数据切分、为应用程序申请资源,并分配给内部任务、任务监控与容错。
- 4)Container:对任务运行环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。

三.Hadoop实践操作*
1. 运行环境搭建
Hadoop的运行环境安装主要包括三大部分:基础的集群操作系统的准备、具体的运行环境安装——包括JDK和Hadoop两个部分。
1)虚拟机环境准备
①单台最小安装的虚拟机:内存4G,硬盘50G,并安装必要环境:
sudo yum install -y epel-release
sudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git
如果有需要,修改YUM源为国内镜像
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
③修改主机名
sudo hostnamectl --static set-hostname hadoop101
④配置主机名称映射,打开/etc/hosts
sudo vim /etc/hosts
⑤修改windows的hosts文件
- 路径:C:\Windows\System32\drivers\etc
⑥关闭虚拟机防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
⑦创建新用户,并重启
sudo useradd zxy
sudo passwd zxy
reboot
⑧配置atguigu用户具有root权限
visudo
修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
atguigu ALL=(ALL) ALL
⑨在/opt目录下创建下创建module、software文件夹;并修改module、software文件夹的所有者
sudo mkdir module
sudo mkdir software
sudo mkdir /opt/module /opt/software
sudo chown zxy:zxy /opt/module /opt/software
⑩关机照快照,再克隆两台虚拟机
- 修改其IP,主机名
2)安装JDK
①卸载现有JDK
rpm -qa | grep -i java | xargs -n1 sudo rpm -e –nodeps
- grep -i 或 --ignore-case : 忽略字符大小写的差别
- xargs是给命令传递参数的一个过滤器:
- -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的
②将JDK导入到opt目录下面的software文件夹下
③解压JDK到/opt/module目录下
tar -zxvf /opt/software/jdk-8u212-linux-x64.tar.gz -C /opt/module/
④配置JDK环境变量
- 新建/etc/profile.d/my_env.sh文件:一般用户对该文件夹只有只读权限,所以需要sudo
sudo vim /etc/profile.d/my_env.sh
- 在my_env.sh文件中添加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
- 保存后退出
- 重启xshell窗口,让环境变量生效,或者运行命令
source /etc/profile.d/my_env.sh
⑤测试JDK是否安装成功
java -version
如果能看到版本信息,则Java正常安装;否则试着重启。
3)安装Hadoop
Hadoop下载地址:
- https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3
①进入到Hadoop安装包的路径下,解压安装文件到/opt/module下面
[zxy@hadoop101 ~]$ cd /opt/software/
[zxy@hadoop101 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
[zxy@hadoop101 software]$ ls /opt/module/
hadoop-3.1.3
②添加Hadoop环境变量,并执行source命令
[zxy@hadoop101 hadoop-3.1.3]$ sudo vim /etc/profile.d/my_env.sh
在profile文件末尾添加JDK路径:(shift+g)
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
③测试是否安装成功
[zxy@hadoop101 hadoop-3.1.3]$ source /etc/profile.d/my_env.sh
[zxy@hadoop101 hadoop-3.1.3]$ hadoop version
Hadoop 3.1.3
Hadoop目录结构
[zxy@hadoop102 hadoop-3.1.3]$ ll
总用量 180
drwxr-xr-x. 2 zxy zxy 236 4月 2 15:50 bin
drwxrwxr-x. 4 zxy zxy 30 3月 23 10:16 data
drwxr-xr-x. 3 zxy zxy 20 9月 12 2019 etc
drwxr-xr-x. 2 zxy zxy 106 9月 12 2019 include
drwxr-xr-x. 3 zxy zxy 20 9月 12 2019 lib
drwxr-xr-x. 4 zxy zxy 288 9月 12 2019 libexec
-rw-rw-r--. 1 zxy zxy 147145 9月 4 2019 LICENSE.txt
drwxrwxr-x. 3 zxy zxy 4096 4月 2 15:46 logs
-rw-rw-r--. 1 zxy zxy 21867 9月 4 2019 NOTICE.txt
-rw-rw-r--. 1 zxy zxy 1366 9月 4 2019 README.txt
drwxr-xr-x. 3 zxy zxy 4096 9月 12 2019 sbin
drwxr-xr-x. 4 zxy zxy 31 9月 12 2019 share
- 1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本
- 2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
- 3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
- 4)sbin目录:存放启动或停止Hadoop相关服务的脚本
- 5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
2.Hadoop运行模式
Hadoop运行模式:
- 1)本地模式(默认模式):不需要启用单独进程,直接可以运行,测试和开发时使用。
- 2)伪分布式模式:等同于完全分布式,只有一个节点。
- 3)完全分布式模式:多个节点一起运行
3.完全分布式部署Hadoop集群
完全分布式模式配置流程:
- 1)准备3台客户机(关闭防火墙、静态ip、主机名称、hosts文件)
- 2)安装JDK,配置环境变量
- 3)安装Hadoop,配置环境变量
- 4)配置集群
- 5)单点启动
- 6)配置ssh
- 7)群起并测试集群
前三步配置完毕,现在需要后四步的操作。
4)准备工作
现在已经在第一台机器上安装完毕JDK与Hadoop,现在需要在另两台机器上配置同样的环境。
①使用rsync远程同步工具,编辑集群分发脚本
需求:
-
1)循环复制文件到所有节点的相同目录下
-
2)需求分析:
- a)rsync命令原始拷贝:
rsync -av /opt/module root@hadoop103:/opt/ -a 归档拷贝 -v 显示复制过程- b)期望脚本:
xsync要同步的文件名称
-
3)脚本实现
- a)在/home/zxy目录下创建xsync文件
cd /home/zxy vim xsync
在xsync文件中编写如下代码:
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
- b)修改脚本 xsync 具有执行权限
chmod +x xsync
- c)将脚本移动到/bin中,以便全局调用
sudo mv xsync /bin/
- d)分发xsync脚本
sudo xsync /bin/xsync
②配置SSH免密登陆
基本语法:
ssh 另一台电脑的ip地址
1)生成公钥和私钥:
ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
2)将公钥拷贝到要免密登录的目标机器上
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
注意:
- 还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;
- 还需要在hadoop103上采用普通账户配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
3).ssh文件夹下(~/.ssh)的文件功能解释
| 文件名 | 内容 |
|---|---|
| known_hosts | 记录ssh访问过计算机的公钥(public key) |
| id_rsa | 生成的私钥 |
| id_rsa.pub | 生成的公钥 |
| authorized_keys | 存放授权过的无密登录服务器公钥 |
③编辑jpsall脚本
-
vim jpsall
#!/bin/bash for i in hadoop102 hadoop103 hadoop104 do echo "==================== $i ========================" ssh $i "jps $@" | grep -v Jps done -
增加执行权限:+x
chmod +x jpsall -
放到/bin目录下
sudo mv jpsall /bin -
分发该脚本
xsync /bin/jpsall
5)配置集群
①最小集群部署规划
HDFS集群最低组成:
- NameNode × 1
- SecondaryNameNode × 1
- DataNode × 3
YARN集群最低组成:
- ResourceManager ×1
- NodeManager × 3 (与DataNode配套)
其中NameNode不能与SecondaryNameNode 安装在同一服务器上,同时ResourceManager 也很消耗内存所以也不能与两者安装在同一设备上。所以最小的Hadoop分布式集群部署规划可以是3台服务器,具体的节点配置如下:
| 组件 | hadoop102 | hadoop103 | hadoop104 |
|---|---|---|---|
| HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
| YARN | NodeManager | ResourceManager NodeManager | NodeManager |
②修改集群配置文件
配置文件目录地址:$HADOOP_HOME/etc/hadoop
Hadoop集群的配置文件主要包括:
- 核心配置文件:core-site.xml
- HDFS配置文件:hdfs-site.xml
- YARN配置文件:yarn-site.xml
- MapReduce配置文件:mapred-site.xml
官方文档:https://hadoop.apache.org/docs/r3.2.1/
a)核心配置文件:core-site.xml
官方文档:https://hadoop.apache.org/docs/r3.2.1/hadoop-project-dist/hadoop-common/core-default.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--1.必备配置-->
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<!-- 该属性在hadoopjar包的配置文件中会被使用到-->
<name>hadoop.data.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 2.代理权限设置 -->
<property>
<!-- 配置该superUser:zxy允许通过代理访问的主机节点 -->
<name>hadoop.proxyuser.zxy.hosts</name>
<value>*</value>
</property>
<property>
<!-- 配置该superUser允许代理的用户所属组 -->
<name>hadoop.proxyuser.zxy.groups</name>
<value>*</value>
</property>
<!--3.提供web端口的HDFS文件操作 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>zxy</value>
</property>
</configuration>
服务端需要在NameNode和ResourceManager的core- site.xmlI中进行代理权限相关配置。对于每一 个superUser用户,配置参数:
| 配置 | 说明 |
|---|---|
| hadoop.proxyuser.$superuser.hosts | 配置该superUser允许通过代理访问的主机节点 |
| nadoop.proxyuser.$superuser.groups | 配置该superUser允许代理的用户所属组 |
| hadoop.proxyuser.$superuser.users | 配置该superUser允许代理的用户 |
对于每个superUser用户,hosts必须进行配置,而groups和users至少需要配置一 个。
这几个配置项的<value>值都可以使用*来表示允许所有的主机/用户组/用户。
b)HDFS配置文件:hdfs-site.xml
官方文档:https://hadoop.apache.org/docs/r3.2.1/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 1.必配:指定Hadoop辅助名称节点主机配置:SecondaryNameNode地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
<!-- 2.配置各节点namenode\datanode的数据存储路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.data.dir}/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.data.dir}/data</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file://${hadoop.data.dir}/namesecondary</value>
</property>
</configuration>
c)YARN配置文件:yarn-site.xml
官方文档:https://hadoop.apache.org/docs/r3.2.1/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 1.必备配置: -->
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 容器可以覆盖的环境变量,而不是使用NodeManager的默认值 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- 2.配置日志的聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<!--3.其他配置-->
<!--The minimum allocation for every container request at the RM in MBs.-->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<!--The maximum allocation for every container request at the RM in MBs.-->
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<!--可以分配给容器的物理内存总量-->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<!--是否对容器实施物理内存限制-->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!-- 是否对容器实施虚拟内存限制 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
配置日志聚集:
- 日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上
- 日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试
d)MapReduce配置文件:mapred-site.xml
官方文档:https://hadoop.apache.org/docs/r3.2.1/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 1.必备:配置执行MapReduce作业的运行时框架 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 2.配置历史服务器 -->
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
</configuration>
配置历史服务器
- 作用:查看程序的历史运行情况
③分发安装文件到其他集群
分发JDK、Hadoop安装目录,以及配置好的环境变量文件:
[zxy@hadoop102 ~]$ xsync /opt/module/
[zxy@hadoop102 ~]$ sudo xsync /etc/profile.d/my_env.sh
6)单点启动
1)如果集群是第一次启动,需要格式化NameNode
[zxy@hadoop102 ~]$ hdfs namenode -format
2)在hadoop102上:启动\关闭NameNode
[zxy@hadoop102 ~]$ hdfs --daemon start namenode
[zxy@hadoop102 ~]$ jps
1353 NameNode
[zxy@hadoop102 ~]$ hdfs --daemon stop namenode
完成后执行jps命令(java process 查看java进程),看到如下结果(进程号可能不同):1353 NameNode
3)在hadoop102、hadoop103以及hadoop104上执行如下命令(三台都要执行)
[zxy@hadoop102 ~]$ hdfs --daemon start datanode
7)群起集群
①配置workers
配置群起文件workes,并同步到所有节点配置文件:
[zxy@hadoop102 ~]$ vim $HADOOP_HOME/etc/hadoop/workers
hadoop102
hadoop103
hadoop104
[zxy@hadoop102 ~]$ xsync $HADOOP_HOME/hadoop-3.1.3/etc/hadoop/workers
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
②启动集群
1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode
[zxy@hadoop102 ~]$ hdfs namenode -format
注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除/opt//opt/module/hadoop-3.1.3/ data和log文件夹数据,否则会导致启动失败。
2)启动HDFS
[zxy@hadoop102 ~]$ start-dfs.sh
3)在配置了ResourceManager的节点上启动YARN(hadoop103)
[zxy@hadoop103 ~]$ start-yarn.sh
3.集群启动/停止方式总结
1.各个服务组件逐一启动/停止
1)分别启动/停止HDFS组件
hdfs –daemon start/stop namenode/datanode/secondarynamenode
2)启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager
3)启动/停止HistoryServer
mapred --daemon start/stop historyserver
2.各个模块分开启动/停止(配置ssh是前提)常用
1)整体启动/停止HDFS
start-dfs.sh/stop-dfs.sh
2)整体启动/停止YARN
start-yarn.sh/stop-yarn.sh
4.Web端查看Hadoop运行情况
查看网络端口占用情况:
netstat –nltp
netstat –nltp | grep 进程号
默认web端口号:
- dfs.namenode.http-address—${hdfs.namenode.hostname}:9870
- yarn.resourcemanager.webapp.address—${yarn.resourcemanager.hostname}:8088
- mapreduce.jobhistory.webapp.address——0.0.0.0:19888
1)HDFS:

2)YARN:

3)JobHistory:

四.常见问题
DataNode和NameNode进程同时只能工作一个、或者是搭完集群,格式化成功但启动失败,重新格式化后启动又失败

五.虚拟机系统配置脚本
虚拟机系统配置准备工作包括:
- 安装必要系统软件
- 开启网络
- 关闭防火墙
- 设置主机编号
- 配置IP地址
- 添加hosts文件
- 添加新用户
- 添加sudoer权限
- 创建软件安装文件夹
- 重启
#!/bin/bash
#0. 获取必要变量
read -p '请输入这台机器的编号:' start
read -p '请输入你要设置的用户名:' username
read -p '请输入密码:' password
echo "设置进行中,完成后会自动重启..."
#1. 安装必要软件
yum install -y epel-release >/dev/null 2>&1
yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static >/dev/null 2>&1
#2. 开启网络
systemctl start network >/dev/null 2>&1
#3. 关闭防火墙
systemctl stop firewalld >/dev/null 2>&1
systemctl disable firewalld >/dev/null 2>&1
#3. 获取当前IP网段
LAN=$(ifconfig | grep broadcast | cut -d . -f 3)
#4. 设置主机编号
hostnamectl --static set-hostname hadoop$start
#5. 配置IP地址
cat > /etc/sysconfig/network-scripts/ifcfg-ens33 <<EOF
TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.$LAN.$start"
PREFIX="24"
GATEWAY="192.168.$LAN.2"
DNS1="192.168.$LAN.2"
EOF
#6. 添加hosts文件
for ((i=$start;i<$[$start+10];i++))
do
echo "192.168.$LAN.$i hadoop$i" >> /etc/hosts
done
#7. 添加新用户
userdel -r $username >/dev/null 2>&1
useradd $username >/dev/null 2>&1
echo $password | passwd $username --stdin >/dev/null 2>&1
#8. 添加sudoer权限
sed -i "/^root ALL/a$username ALL=(ALL) NOPASSWD:ALL" /etc/sudoers
#9. 创建文件夹
mkdir -p /opt/module /opt/software
chown -R $username:$username /opt/module /opt/software
reboot
参考:
2580



被折叠的 条评论
为什么被折叠?



