配置前必看
本帖的主要目的是用最平实的语言描述配置的进程,同时在每个章节为可能涉及的知识点提供相应的网站以供读者学习。最重要的还是给我自己留个配置的日记。这样Linux玩崩了也能找到回家的路。
- 本帖主要涉及的目录一共有三个,如有需要,在根目录
/下创建export目录存放以下三个目录(建议)。(解压目录)servers、(软件安装目录)software、(数据/日志目录)data。如果自己的目录与本帖的目录不一样,请按照自己实际情况来 - 本帖基于centos 7.9配置,因此配置本帖软件请先安装好系统后将软件包上传并解压好
- 如若配置中报错,请第一时间查看前置软件是否正确安装配置并正常运行其次查看是否兼容性问题。
- 本帖所有命令都在
root用户下执行如果非root用户,请在命令前添加sudo
前置准备 {#前置准备}
镜像:
软件
环境
- 准备三台虚拟机,虚拟机主机名为
master、slave1、slave2
安装与配置 {#安装与配置}
1.解压 {#1-解压}
查看自己的虚拟机上是否已经上传好软件至software
将Hadoop与jdk解压至servers中依次执行以下命令
|---------------|------------------------------------------------------------------------------------------------------------|
| 1 2 3 | tar -zxvf hadoop-3.2.1.tar.gz /export/servers tar -zxvf jdk-8u231-linux-x64.tar.gz /export/servers |
2.配置环境变量 {#2-配置环境变量}
执行以下命令,将jdk与hadoop目录路径依次添加到/etc/profile底部
|-----------|-------------------------|
| 1 | vi /etc/profile |
|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | export JAVA_HOME=/export/servers/jdk1.8.0_231 export PATH=$PATH:$JAVA_HOME/bin export HADOOP_HOME=/export/servers/hadoop-3.2.1 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin |
刷新环境变量
|-----------|-----------------------------|
| 1 | source /etc/profile |
验证,如果出现版本号就证明安装成功
|---------------|--------------------------------------|
| 1 2 3 | java -version hadoop version |
环境搭建 {#环境搭建}
1.查看主机名与hosts文件 {#1-查看主机名与hosts文件}
查看自己的三台虚拟机主机名是否都已经更改、hosts文件是否都已经正确添加地址
|-----------|------------------|
| 1 | hostname |
如果没修改主机名请使用以下命令
|-----------|----------------------------------------|
| 1 | hostnamectl set-hostname 新的主机名 |
修改完后重启
|-----------|----------------|
| 1 | reboot |
查看与修改hosts文件
|-----------|-----------------------|
| 1 | vi /etc/hosts |
|---------------|---------------------------------------------------------------------------------------|
| 1 2 3 | 主机 192.168.100.128 master 从机 192.168.100.129 slave1 从机 192.168.100.130 slave2 |
如果没有添加,则输入命令 vim /etc/hosts进入文件,把东西写进去,键盘按i或者o进入编辑模式,编辑完毕,按esc输入:wq 保存退出
2.ssh配置 {#2-ssh配置}
配置密钥文件(三台都要做)
生成密钥文件输入命令,生成key,都不输入密码,一直按回车,/root就会生成.ssh的文件夹
|-----------|---------------------------|
| 1 | ssh-keygen -t rsa |
分发密钥到其他节点
|---------------|------------------------------------------------------------------|
| 1 2 3 | ssh-copy-id master ssh-copy-id slave1 ssh-copy-id slave2 |
测试登录,依次输入以下命令,退出输入exit
|---------------|------------------------------------------|
| 1 2 3 | ssh master ssh slave1 ssh slave2 |
3.命令同步脚本 {#3-命令同步脚本}
创建脚本存储目录
|-----------|-----------------------|
| 1 | cd /root/bin/ |
创建命令同步脚本文件
|-----------|------------------|
| 1 | vi xcall |
输入下列代码
|------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/bin/bash if(($#==0)) then echo "请输入参数" exit; fi echo "----------------master-----------------" ssh master $@ for((i=1;i<3;i++)) do echo "----------------slave$i-----------------" ssh slave$i $@ done echo "命令已执行完毕" |
保存退出:wq赋予脚本权限chmod 777 xcall
配置文件
|-----------|--------------------------|
| 1 | vi /root/.bashrc |
在文件末尾追加下列代码
|-----------|-----------------------------|
| 1 | source /etc/profile |
保存退出:wq
|-----------|-------------------------|
| 1 | vi /etc/profile |
在底部添加
|-----------|-------------------------------------|
| 1 | export PATH=/root/bin:$PATH |
保存退出:wq刷新文件source /etc/profile
注意:以上操作必须在三台机器都要执行。
检验实验脚本是否可以使用
|-----------|-------------------|
| 1 | xcall jps |
4.文件同步脚本 {#4-文件同步脚本}
创建脚本存储目录
|-----------|-----------------------|
| 1 | cd /root/bin/ |
创建命令同步脚本文件
|-----------|------------------|
| 1 | vi xsync |
输入下列代码
|------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/bin/bash if(($#!=1)) then echo "只能输入一个参数" exit; fi dirpath=$(cd -P `dirname $1`;pwd) filename=$(basename $1) echo "-----------------master--------------" rsync -rvlt $dirpath/$filename root@master:$dirpath for((i=1;i<3;i++)) do echo "-----------------slave$i----------------" rsync -rvlt $dirpath/$filename root@slave$i:$dirpath done echo "命令执行完毕" |
保存退出:wq赋予脚本权限chmod 777 xsync
使用文件同步脚本将文件同步脚本分发到另外两台机器
|-----------|---------------------|
| 1 | xsync xsync |
可以到其他节点的/root/bin目录下查看文件是否分发成功
如果提示rsync: 未找到命令,前提需要安装rsync,最小化安装系统的可能没有自带该命令包
|-----------|---------------------------|
| 1 | yum install rsync |
HDFS安装与配置 {#HDFS安装与配置}
1.修改HDFS配置文件 {#1-修改HDFS配置文件}
进入目录
|-----------|-----------------------------------------------------|
| 1 | cd /export/servers/hadoop-3.2.1/etc/hadoop/ |
设置JDK安装目录,编辑文件hadoop-env.sh,在文件末尾加上jdk的安装路径,jdk的安装路径根据实际情况更改
|-----------|--------------------------|
| 1 | vi hadoop-env.sh |
|-----------|-------------------------------------------------------|
| 1 | export JAVA_HOME=/export/servers/jdk1.8.0_231 |
2.指定HDFS主节点 {#2-指定HDFS主节点}
编辑文件core-site.xml,将如下内容嵌入此文件里最后两行的configuration标签之间(注意修改master名称为自己的名称,我的主机名就叫master)
|-----------|--------------------------|
| 1 | vi core-site.xml |
|-------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 | <property> <name>hadoop.tmp.dir</name> <value>/export/servers/hadoop-3.2.1/cloud</value> </property> <property> <name>fs.defaultFS</name> <value>hdfs://master:8020</value> </property> |
3.指定HDFS从节点 {#3-指定HDFS从节点}
编辑文件workers,将slave1与slave2的hostname主机名称添加到文件中,将下列代码追加到文件末尾,同时删除localhost
|-----------|--------------------|
| 1 | vi workers |
|---------------|------------------------------|
| 1 2 3 | master slave1 slave2 |
4.配置 yarn-site.xml {#4-配置-yarn-site-xml}
|-----------|--------------------------|
| 1 | vi yarn-site.xml |
输入如下代码,嵌入此文件里最后两行的configuration标签之间
|------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 | <!-- Reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> |
5.配置 mapred-site.xml {#5-配置-mapred-site-xml}
|-----------|----------------------------|
| 1 | vi mapred-site.xml |
添加下列代码添加在configuration标签之间
|------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> |
6.配置 hdfs-site.xml {#6-配置-hdfs-site-xml}
|-----------|--------------------------|
| 1 | vi hdfs-site.xml |
添加下列代码,添加在configuration标签之间
|------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <property> <name>dfs.namenode.secondary.http-address</name> <value>slave2:50090</value> </property> <property> <name>dfs.replication</name> <value>3</value> <description>2</description> </property> <!--配置namenode的web界面--> <property> <name>dfs.namenode.http-address</name> <value>master:50070</value> </property> |
7.配置 yarn-env.sh {#7-配置-yarn-env-sh}
|-----------|------------------------|
| 1 | vi yarn-env.sh |
在文件末尾添加(jdk是你自己版本)
|-----------|-------------------------------------------------------|
| 1 | export JAVA_HOME=/export/servers/jdk1.8.0_231 |
8.配置 mapred-env.sh {#8-配置-mapred-env-sh}
|-----------|--------------------------|
| 1 | vi mapred-env.sh |
在文件末尾添加(注意JDK的版本号)
|-----------|-------------------------------------------------------|
| 1 | export JAVA_HOME=/export/servers/jdk1.8.0_231 |
9.拷贝文件 {#9-拷贝文件}
将整个hadoop解压包至其它服务器slave1、slave2
xsync方法scp方法
|-----------|--------------------------------------------|
| 1 | xsync /export/servers/hadoop-3.2.1 |
|-----------|---------------------------------------------------------------------------------|
| 1 | scp -r /export/servers/hadoop-3.2.1 slave1:/export/servers/hadoop-3.2.1 |
|-----------|---------------------------------------------------------------------------------|
| 1 | scp -r /export/servers/hadoop-3.2.1 slave2:/export/servers/hadoop-3.2.1 |
集群环境格式化及启动 {#集群环境格式化及启动}
格式化主节点:在master服务器上,进入到hadoop安装包的bin目录下
|-----------|---------------------------------------------|
| 1 | cd /export/servers/hadoop-3.2.1/bin |
进行格式化
|-----------|---------------------------------|
| 1 | ./hdfs namenode -format |
在start-dfs.sh和stop-dfs.sh两个文件顶部添加以下参数
|---------------|------------------------------------------------------------------------------------------------------------|
| 1 2 3 | vi /export/servers/hadoop-3.2.1/sbin/start-dfs.sh vi /export/servers/hadoop-3.2.1/sbin/stop-dfs.sh |
添加下列内容
|-----------------|-------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 | HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root |
在start-yarn.sh和stop-yarn.sh两个文件顶部也需添加以下内容
|---------------|--------------------------------------------------------------------------------------------------------------|
| 1 2 3 | vi /export/servers/hadoop-3.2.1/sbin/start-yarn.sh vi /export/servers/hadoop-3.2.1/sbin/stop-yarn.sh |
添加下列内容
|---------------|---------------------------------------------------------------------------------------------|
| 1 2 3 | YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=roo |
用master结点启动Hadoop:在master结点中进入hadoop安装包的sbin目录下启动Hadoop
|-----------|--------------------------------------------------------|
| 1 | /export/servers/hadoop-3.2.1/sbin/start-all.sh |
查看进程并验证HDFS环境 {#查看进程并验证HDFS环境}
注意:这些东西一个都不能少
为了方便后续操作,我们可以把hadoop也添加到系统环境变量(三台节点上都要添加)
|-----------|-------------------------|
| 1 | vi /etc/profile |
将下述代码追加到文件末尾
|---------------|--------------------------------------------------------------------------------------------------------------|
| 1 2 3 | export HADOOP_HOME=/export/servers/hadoop-3.2.1 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin |
刷新文件
|-----------|-----------------------------|
| 1 | source /etc/profile |
退出集群
|-----------|---------------------|
| 1 | stop-all.sh |
51工具盒子