centos7.5的搭建
-
官网https://www.centos.org/
-
下拉进入Older Version
-
往下拉找到Base Distribution,选择自己的版本,点击Tree
-
选择CentOs的ISO镜像文件(isos目录)
-
选择对应电脑的版本进行下载
-
选择你需要的,一般下载DVD标准安装版就行
各个版本的ISO镜像文件说明:
CentOS-7-x86_64-DVD-1810.iso 标准安装版(推荐)
CentOS-7-x86_64-Everything-1810.iso 完整版,集成所有软件(以用来补充系统的软件或者填充本地镜像)
CentOS-7-x86_64-LiveGNOME-1810.iso GNOME桌面版
CentOS-7-x86_64-LiveKDE-1810.iso KDE桌面版
CentOS-7-x86_64-Minimal-1810.iso 精简版,自带的软件最少
CentOS-7-x86_64-NetInstall-1810.iso 网络安装版(从网络安装或者救援系统)
国内阿里云镜像下载:https://mirrors.aliyun.com/centos/7/isos/x86_64/
VM虚拟机的安装
处理器数量(P):
1、启用了超线程或具有双核CPU的单处理器主机可视为拥有两个逻辑处理器。
2、只有拥有至少两个逻辑处理器的主机才支持指定多个虚拟处理器。
3、具有两个CPU的多处理器主机无论是否为双核处理器或是否启用了超线程,均视为拥有至少两个逻辑处理器。
4、物理CPU个数×每颗核数就等于逻辑CPU的个数。
每个处理器的核心数量(C):
1、多内核(multicore chips)是指在一个处理器(CPU)中集成两个或多个完整的计算引擎(内核)。
2、一个CPU中可以包括多个核,相当于逻辑上的多个CPU在工作。
分区配置 /45 /swap4 /boot1
图形化、安全策略看自己需求
分区方案描述
必须的分区
boot分区:
作用:引导分区,包含了系统启动的必要内核文件,即使根分区顺坏也能正常引导启动 一般这些文件所占空间在200M以下,
分区建议:分区的时候可选100M-500M之间,如果空间足够用,建议分300-500M。避免由于长期使用的冗余文件塞满这个分区。
分区格式:建议ext4,按需求更改
/分区(根分区):
作用:所有的文件都从这里开始,你可以比喻为Windows的C盘,但其实有区别。如果你有大量的数据在根目录下(比如FTP等)可以划分大一点的空间
分区建议:建议15G以上。看需求,根分区和home分区的大小就类似C盘和D盘的空间分布一样,主要占空间在哪儿就在那里分大容量
分区格式:建议ext4,按需求更改
swap分区:
作用:类似于Windows的虚拟内存,在内存不够用时占用硬盘的虚拟内存来进行临时数据的存放,而对于linux就是swap分区
分区建议:建议是物理内存大小的2倍,比如你电脑是4G的物理内存,swap分区可以是8G
分区格式:swap格式
可选的分区
home分区
作用:存放用户数据,HOME的结构一般是 HOME/userName/userFile,如果不分则默认在/目录下
分区建议:如果用户数据多可以将此分区适当增大,请参考“根分区”分区建议;一般硬盘的主要容量几乎都在Home分区和根分区下
分区格式:建议ext4,按需求更改
var分区
作用:用于log日志的文件的存放,如果不分则默认在/目录下
分区建议:如果你安装的linux是用于服务器或者经常做日志分析,请划分var分区,避免日志文件不断膨胀塞满导致根分区而引发问题。
分区格式:建议ext4,按需求更改
ip配置
vm
虚拟网络把08改为192.168.10.0
网关是192.168.10.2
win10
打开网络Internet选项
VMnet8属性,然后如图操作
centos7.5
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改BOOTPROTO后
在末尾加上ip地址,网关,域名解析器
IPADDR=192.168.10.100
GATEWAY=192.168.10.2
DNS1=192.168.10.2
vim /etc/hostname
hadoop100
主机名称映射
vim /etc/hosts
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108
修改windows主机映射文件hosts文件
C:\Windows\System32\drivers\etc
打开hosts文件并添加映射内容并保存
如果文件设为只读一定把只读选项去掉
没有权限就修改获得权限
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108
**
1、centos配置
**
1)测试网络
ifconfig
2)安装epel-release
yum install -y epel-release
3)最小化安装还需要的东西
ne-tools vim
yum install -y ne-tools/vim
2、关闭防火墙,关闭防火墙开机自启
systemctl stop firewalld
systemctl disable firewalld.service
3、给atguigu用户配置使其具有root权限
vim /etc/sudoers
4、卸载自带的jdk,最小化不用管
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
5、安装jdk
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
6、配置生效
sudo cd /etc/profile.d
cd /etc/profile.d
[atguigu@hadoop102 profile.d]$ sudo vim my_env.sh
#JAVA_HOME配置java环境
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
生效
source /etc/profile
7、安装Hadoop
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
8、配置
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
词频统计(单机版)
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput/ wcoutput
cat part-r-00000
搭建完全分布式
1)集群部署规划
注意:
➢ NameNode 和 SecondaryNameNode 不要安装在同一台服务器
➢ ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在
同一台机器上。
2)配置文件说明
Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认
配置值时,才需要修改自定义配置文件,更改相应属性值。
(1)默认配置文件:
要获取的默认文件 文件存放在 Hadoop 的 jar 包中的位置
[core-default.xml] hadoop-common-3.1.3.jar/core-default.xml
[hdfs-default.xml] hadoop-hdfs-3.1.3.jar/hdfs-default.xml
[yarn-default.xml] hadoop-yarn-common-3.1.3.jar/yarn-default.xml
[mapred-default.xml] hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml
(2)自定义配置文件:
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在$HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。
3)配置集群
(1)核心配置文件
配置 core-site.xml
[atguigu@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[atguigu@hadoop102 hadoop]$ vim core-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>atguigu</value>
</property>
</configuration>
(2)HDFS 配置文件
配置 hdfs-site.xml
[atguigu@hadoop102 hadoop]$ vim hdfs-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
(3)YARN 配置文件
配置 yarn-site.xml
[atguigu@hadoop102 hadoop]$ vim yarn-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
</property>
</configuration>
(4)MapReduce 配置文件
配置 mapred-site.xml
[atguigu@hadoop102 hadoop]$ vim mapred-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
4)在集群上分发配置好的 Hadoop 配置文件
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop3.1.3/etc/hadoop/
5)去 103 和 104 上查看文件分发情况
[atguigu@hadoop103 ~]$ cat /opt/module/hadoop3.1.3/etc/hadoop/core-site.xml
[atguigu@hadoop104 ~]$ cat /opt/module/hadoop3.1.3/etc/hadoop/core-site.xml
3.2.5 群起集群
1)配置 workers
[atguigu@hadoop102 hadoop]$ vim /opt/module/hadoop3.1.3/etc/hadoop/workers
hadoop102
hadoop103
hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc
2)启动集群
(1)如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode(注意:格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。)
[atguigu@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
(2)启动 HDFS
[atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
(3)在配置了 ResourceManager 的节点(hadoop103)启动 YARN
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
(4)Web 端查看 HDFS 的 NameNode
浏览器中输入:
http://hadoop102:9870
查看 HDFS 上存储的数据信息
(5)Web 端查看 YARN 的 ResourceManager
浏览器中输入
:http://hadoop103:8088
查看 YARN 上运行的 Job 信息
3)集群基本测试
(1)上传文件到集群
➢ 上传小文件
[atguigu@hadoop102 ~]$ hadoop fs -mkdir /input
[atguigu@hadoop102 ~]$ hadoop fs -put
$HADOOP_HOME/wcinput/word.txt /input
➢ 上传大文件
[atguigu@hadoop102 ~]$ hadoop fs -put /opt/software/jdk-8u212-
linux-x64.tar.gz /
(2)上传文件后查看文件存放在什么位置
➢ 查看 HDFS 文件存储路径
[atguigu@hadoop102 subdir0]$ pwd
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1436128598-
192.168.10.102-1610603650062/current/finalized/subdir0/subdir0
➢ 查看 HDFS 在磁盘存储文件内容
[atguigu@hadoop102 subdir0]$ cat blk_1073741825
hadoop yarn
hadoop mapreduce
atguigu
atguigu
(3)拼接
-rw-rw-r--. 1 atguigu atguigu 134217728 5 月 23 16:01 blk_1073741836
-rw-rw-r--. 1 atguigu atguigu 1048583 5 月 23 16:01 blk_1073741836_1012.meta
-rw-rw-r--. 1 atguigu atguigu 63439959 5 月 23 16:01 blk_1073741837
-rw-rw-r--. 1 atguigu atguigu 495635 5 月 23 16:01 blk_1073741837_1013.meta
[atguigu@hadoop102 subdir0]$ cat blk_1073741836>>tmp.tar.gz
[atguigu@hadoop102 subdir0]$ cat blk_1073741837>>tmp.tar.gz
[atguigu@hadoop102 subdir0]$ tar -zxvf tmp.tar.gz
(4)下载
[atguigu@hadoop104 software]$ hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./
(5)执行 wordcount 程序
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar
wordcount /input /output
编写集群分发脚本
1)xsync集群分发脚本
(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析:
期望脚本:
xsync 要同步的文件名称
期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
[atguigu@hadoop102 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/atgu
igu/.local/bin:/home/atguigu/bin:/opt/module/jdk1.8.0_212/bi
n
(3)脚本实现
(a)在/home/atguigu/bin 目录下创建 xsync 文件
[atguigu@hadoop102 opt]$ cd /home/atguigu
[atguigu@hadoop102 ~]$ mkdir bin
[atguigu@hadoop102 ~]$ cd bin
[atguigu@hadoop102 bin]$ vim xsync
在该文件中编写如下代码
```css
#!/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 具有执行权限
[atguigu@hadoop102 bin]$ chmod +x xsync
(c)测试脚本
[atguigu@hadoop102 ~]$ xsync /home/atguigu/bin
(d)将脚本复制到/bin 中,以便全局调用
[atguigu@hadoop102 bin]$ sudo cp xsync /bin/
(e)同步环境变量配置(root 所有者)
[atguigu@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh
注意:如果用了 sudo,那么 xsync 一定要给它的路径补全。
让环境变量生效
[atguigu@hadoop103 bin]$ source /etc/profile [atguigu@hadoop104 opt]$
source /etc/profil
ssh免密登录
1)配置 ssh
(1)基本语法
ssh 另一台电脑的 IP 地址
(2)ssh 连接时出现 Host key verification failed 的解决方法
[atguigu@hadoop102 ~]$ ssh hadoop103
➢ 如果出现如下内容
Are you sure you want to continue connecting (yes/no)?
➢ 输入 yes,并回车
(3)退回到 hadoop102
[atguigu@hadoop103 ~]$ exit
2)无密钥配置
(1)生成公钥和私钥
[atguigu@hadoop102 .ssh]$ pwd
/home/atguigu/.ssh
[atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
(2)将公钥拷贝到要免密登录的目标机器上
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104
注意:
还需要在 hadoop103 上采用 atguigu 账号配置一下无密登录到 hadoop102、hadoop103、hadoop104服务器上。
还需要在 hadoop104 上采用 atguigu 账号配置一下无密登录到
hadoop102、hadoop103、hadoop104 服务器上。
还需要在 hadoop102 上采用 root账号,配置一下无密登录到 hadoop102、hadoop103、hadoop104;
数据存放路径
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1701184409-192.168.10.102-1620908306361/current/finalized/subdir0/subdir0
集群开启
hdfs
sbin/start-dfs.sh
yarn(103)
sbin/start-yarn.sh
Web 端查看 HDFS 的 NameNode
(a)浏览器中输入:http://hadoop102:9870
(b)查看 HDFS 上存储的数据信息
Web 端查看 YARN 的 ResourceManager
(a)浏览器中输入:http://hadoop103:8088
(b)查看 YARN 上运行的 Job 信息
集群常用知识点
1.各个模块分开启动/ 停止 (配置 ssh 是前提) 常用
(1)整体启动/停止 HDFS(102)
start-dfs.sh/stop-dfs.sh
(2)整体启动/停止 YARN(103)
start-yarn.sh/stop-yarn.sh
启动 NodeManager 、ResourceManage
[leokadia@hadoop103 ~]$ start-yarn.sh
启动 HistoryServer
[leokadia@hadoop102 ~]$ mapred --daemon start historyserver
2.各个服务组件逐一启动/ 停止
(1)分别启动/停止 HDFS 组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
(2)启动/停止 YARN
yarn --daemon start/stop resourcemanager/nodemanager
虽然上面的命令不是很复杂,但每次启动都要输入,比较麻烦,因此想到把他们封装成脚本
3.编写 Hadoop 集群常用脚本
1 )Hadoop 集群启停脚本(包含 HDFS ,Yarn ,Historyserver ):
myhadoop.sh
[leokadia@hadoop102 hadoop-3.1.3]$ cd /home/atguigu/bin
进入bin目录,将脚本放在这里
[leokadia@hadoop102 bin]$ vim myhadoop.sh
➢ 输入如下内容
记住:写脚本的时候能写绝对路径,千万不要写相对路径!
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop 集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop 集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
➢ 保存后退出,然后赋予脚本执行权限
[atguigu@hadoop102 bin]$
chmod +x myhadoop.sh
chomod 777 myhadoop.sh //赋予文件读写执行所有权
4.查看三台服务器 Java 进程脚本:jpsall
由于每次查看进程都得到每台服务器上输入jps查看,比较麻烦,且如果服务器较多,十分耗时,于是想到编写一个脚本,查看所有服务器的进程情况。
[leokadia@hadoop102 ~]$
cd /home/atguigu/bin
[leokadia@hadoop102 bin]$
vim jpsall
➢ 输入如下内容
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
➢ 保存后退出,然后赋予脚本执行权限
[leokadia@hadoop102 bin]$
chmod +x jpsall
chomod 777 jpsall //赋予文件读写执行所有权
3 )分发/home/atguigu/bin 目录,保证自定义脚本在三台机器上都可以使用
[leokadia@hadoop102 ~]$ xsync /home/atguigu/bin/
在hadoop103、104上测试下能否正常使用