目录
Hadoop 平台部署步骤
1、前置工作
1.1、需求:
1.2、静态 ip 配置
1.3、关闭防火墙
1.4、配置主机名,编辑 hosts 文件
1.5 配置 SSH 免密登录
1.6、时间同步
1.7 安装配置 jdk
2、正式安装
2.1 、下载Hadoop包
2.2、修改Hadoop的配置文件
2.3、拷贝 Hadoop 文件夹到 slave1 和 slave2
3、配置 Hadoop 系统环境变量
4、启动集群
4.1、格式化
4.2、启动和停止服务
5、页面
Hadoop 平台部署步骤
1、前置工作
1.1、需求:
centos7 操作系统(或 ubuntu 也可以,都是类似的)
一台 master 和两台 slave,master 配置可以好一点,内存分配大一些
虚拟机的网络连接模式使用: NAT 模式
使用 root 用户登录操作系统
1.2、静态 ip 配置
注:每一台机子都要配置
在配置静态ip地址之前,可以先进行网络检测
首先可以检查一下网络连接是否正常,使用 ping 命令
ping www.baidu.com
如果网络没有打开,可以命令
service network restart
静态ip配置步骤
1、进入网卡配置目录
cd /etc/sysconfig/network-scripts/
使用ls命令查看网卡名称(如:ifcfg-ens33)
2、使用编辑对应网卡的配置文件
# 如果没有安装该命令可以使用 yum install vim -y 命令安装一下,或者使用 vi 命令进行编辑 vim ifcfg-ens33
首先,输入i进入编辑模式
将配置修改或添加成如下内容:
BOOTPROTO=static # 使用静态IP地址,默认为dhcp
onBOOT=yes #开机启动
IPADDR=192.168.50.10 # 设置的静态IP地址
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.50.2 # 网关地址 与虚拟网络编辑器中的保持一致
DNS1=233.5.5.5 # DNS服务器
DNS2=180.76.76.76 # 备用的DNS服务器
如果使用的是虚拟机,注意 ip 地址的网段跟宿主机保持一致
按下esc键,再输入:wq保存退出
3、重启网络服务
service network restart
4、使用ping命令测试一下网络连接是否正常
1.3、关闭防火墙
注:每一台机子都要配置
# 第一步,关闭防火墙(暂时) systemctl stop firewalld # 第二步,设置开机禁用防火墙(永久关闭防火墙) systemctl disable firewalld # 第三步,查看防火墙状态,确认防火墙已关闭 systemctl status firewalld
1.4、配置主机名,编辑 hosts 文件
注:每一台机子都要配置
1、修改主机名
hostnamectl set-hostname master
重启reboot后生效
2、编辑hosts文件
vim /etc/hosts
添加以下信息(相当于给对应 ip 地址的主机添加对应的名称)
192.168.50.10 master
192.168.50.20 slave1
192.168.50.30 slave2
三台都添加完后,测试是否能够互相ping通,如 master 下 ping slave1,直接使用命令ping slave1即可,能ping 通说明三台虚拟机之间是互联的。
1.5 配置 SSH 免密登录
注:每一台机子都要配置
1、使用以下命令生成公私钥对(三台都需要生成)
ssh-keygen -t rsa # 默认指定的是 rsa 算法,所以也可以没有-t rsa
一路默认直接回车就行
CentOS7 默认使用 RSA 加密算法生成密钥对,生成的公钥和私钥保存在 ~/.ssh 目录下,分别为 id_rsa(私钥)和 id_rsa.pub(公钥)。
2、将公钥拷贝到另外两台机子上的认证文件中
可以利用 ssh-copy-id 命令进行拷贝操作。(推荐使用,方便快捷)
注:还可以使用步骤 3 + 步骤 4 的方法进行拷贝,如果使用过了步骤 2 的方式,可以直接跳过步骤 3 和步骤 4
# master、slave1、slave2都执行三条命令 # 注意一定要都执行,比如 master 上也要执行 ssh-copy-id master 命令,否则在启动 Hadoop 的时候会需要手动输入密码 ssh-copy-id master ssh-copy-id slave1 ssh-copy-id slave2
3、先将公钥拷贝到另外两台机子上
(执行了步骤 2 可以直接跳过步骤 3 和 4)
# 将 master 下 ~/.ssh 目录中的 id_rsa.pub 这个文件拷贝到 slave1 和 slave2 的 ~/.ssh 目录中,在 master 上执行如下命令 scp ~/.ssh/id_rsa.pub slave1:~/.ssh/ scp ~/.ssh/id_rsa.pub slave2:~/.ssh/ # 同样 slave1 和 slave2 的公钥也需要拷贝到另外两台机子上,即 slave1 的公钥拷贝到 master 和 slave2 上,slave2 的公钥拷贝到 master 和 slave1 上。
slave1 和 slave2 同样执行1、2两步,即先生成公私钥对,并将自己的公钥拷贝到另外两台机子上
4、再将别的机子的公钥添加到自己的 authorized_keys 授权文件中(三台机子都要执行)
# 然后在三台机子上都运行以下命令来将公钥导入到 ~/.ssh/authorized_keys 这个文件中(不存在会创建文件) cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # authorized_keys文件中应该包含三台机子的公钥
5、验证免密登录(三台都验证一下,确保没有问题,如果验证失败,可能是文件权限问题,看第6点补充)
对于 master 验证是否可以免密登录 slave1 和 slave2
ssh slave1 ssh slave2
对于 slave1 验证是否可以免密登录 master 和 slave2
ssh master ssh slave2
对于 slave2验证是否可以免密登录 master 和 slave1
ssh master ssh slave1
退出使用exit命令
6、补充:设置文件权限(如果文件权限不满足要求无法实现免密登录,默认情况下是满足的)
# ~/.ssh 权限设置为 700 # ~/.ssh/authorized_keys 的权限设置为 600,使用 chmod 命令来进行设置 chmod 600 authorized_keys # 注:设置成更高的权限也行
实现原理(不想了解可以不看,跟操作无关):
一、serverA 免密登录 serverB 原理
首先在 serverA 上生成一对秘钥(ssh-keygen) 将公钥拷贝到 serverB,重命名 authorized_keys serverA 向 serverB 发送一个连接请求,信息包括用户名、ip serverB 接到请求,会从 authorized_keys 中查找,是否有相同的用户名、ip,如果有 serverB 会随机生成一个字符串 然后使用使用公钥进行加密,再发送个 serverA serverA 接到 serverB 发来的信息后,会使用私钥进行解密,然后将解密后的字符串发送给 serverB serverB 接到 serverA 发来的信息后,会给先前生成的字符串进行比对,如果一直,则允许免密登录
参考博客:Centos7 通过SSH使用密钥实现免密登录_好记性不如烂笔头-CSDN博客_centos 免密登录
1.6、时间同步
如果三台机子之间时间不同步,需要进行时间同步的配置
# 自动定时同步 crontab -e # 进入到可以使用vi编辑的画面 # 输入 0 1 * * * /usr/sbin/ntpdate cn.poolntp.org # 分 时 日 月 周 命令 参数 # 意义 :每小时都会从 cn.poolntp.org 上获取时间并更新 # 手动同步(一次性) /usr/sbin/ntpdate cn.poolntp.org
1.7 安装配置 jdk
注:每一台机子都要配置
1、下载
jdk 包:jdk-8u211-linux-x64.tar.gz
2、上传到机子上
3、解压
# -C 后面加上文件解压后保存的目标路径,不加默认保存在当前目录下 tar -xzvf jdk-8u211-linux-x64.tar.gz -C 目标路径 # 可以在每一台机子上执行相同的操作或者在一台机子上解压后使用 scp -r 命令 将 jdk 解压后的文件夹拷贝到另外两台机子上 scp -r /root/jdk1.8.0_211 slave1:/root/
4、配置 jdk 环境变量
编辑配置文件 /etc/profile
vim /etc/profile
在末尾添加如下配置
# java environment # JAVA_HOME 的路径是实际解压后的 JDK 的路径 export JAVA_HOME=/root/jdk1.8.0_211 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 /etc/profile
使配置生效,然后测试是否成功
java -version
2、正式安装
注:后续的操作只需要在 master 上完成
2.1 、下载Hadoop包
先下载 hadoop 包:hadoop-2.7.7.tar.gz
下载地址:Index of /dist/hadoop/common
再上传到 master
然后解压
# -C 后面加上文件解压后保存的目标路径,不加默认保存在当前目录下 tar -xzvf hadoop-2.7.7.tar.gz -C 目标路径
2.2、修改Hadoop的配置文件
首先,进入 hadoop-2.7.7/etc/hadoop 文件夹下
1、修改 hadoop-env.sh、yarn-env.sh 中的 JAVA_HOME
export JAVA_HOME=/root/jdk1.8.0_211 # 根据自己的jdk目录配置
2、配置 core-site.xml
在
fs.default.name hdfs://master:9000 hadoop.tmp.dir /root/hadoop-2.7.7/data/tmp
临时目录最好使用自己配置的目录,使用默认的临时目录,当操作系统重启时,内容会被清空,所以最好配置一下临时目录,配置后要确保临时目录是存在的,可以使用 mkdir 命令创建一个文件夹来充当临时目录。
3、配置 hdfs-site.xml
在
dfs.replication 2 dfs.namenode.secondary.http-address slave2:50090
4、配置mapred-site.xml
复制或者修改 mapred-site.xml.template 文件,命名为 mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
在
mapreduce.framework.name yarn
5、配置 yarn-site.xml
在
yarn.resourcemanager.hostname master yarn.nodemanager.aux-services mapreduce_shuffle
6、配置 slaves
添加如下内容
slave1 slave2
2.3、拷贝 Hadoop 文件夹到 slave1 和 slave2
# 根据自己的实际情况填写目录地址
scp -r /root/hadoop-2.7.7 slave1:/root/
scp -r /root/hadoop-2.7.7 slave2:/root/
3、配置 Hadoop 系统环境变量
将 Hadoop 的安装目录添加到 /etc/profile 文件中,具体配置如下:
export HADOOP_HOME=/root/hadoop-2.7.7 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
保存退出,并执行
source /etc/profile
4、启动集群
4.1、格式化
在 namenode 上执行初始化,因为 master 是 namenode,slave1 和 slave2 都是 datanode,所以只需要对master 进行初始化操作,也就是对 hdfs 进行格式化。
进入到 master 这台机子的 /root/hadoop-2.7.7/bin 目录,执行命令
hdfs namenode -format
返回状态为" 0 "即为格式化成功,注意只能执行一次。
NFO util.ExitUtil: Exiting with status 0
4.2、启动和停止服务
1、启动服务命令
start-all.sh # 如果提示输入密码,就是ssh没有配置好,可能是没有给master配置免密钥登录,即没有执行ssh-copy-id master
2、关闭服务命令
stop-all.sh
3、查看启动是否成功命令
jps
在 master 主节点上,输入 jps,出现 NameNode 即为启动成功;在 slave1、slave2 子节点上,输入 jps,显现 DataNode 即为启动成功。
4、测试是否安装成功
执行下列命令,计算 pi,也可以使用其他样例进行测试
hadoop jar /root/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar pi 5 5
如果执行完毕,最后输出 pi 的结果,说明 Hadoop 安装没有问题。
# 比如输出如下所示的结果 Estimated value of Pi is 3.68000000000000000000
5、页面
浏览器访问 http://master:50070/ 即可打开Hadoop Web 界面
注:不同版本端口号可能不一致,具体可以参考官方文档



