Hadoop集群一般需要三个节点
计算机集群的安装
部署三台节点(克隆两台)
- 在node1上点击管理 => 克隆 出来两台虚拟机
配置节点内存和CPU
-
需要多少内存?
总内存 / 4 每台虚拟机需要的内存数
-
设置每台虚拟机的内存
编辑虚拟机属性 -> 内存 调整
-
设置 MAC 地址
MAC 就是网卡中唯一标识,路由优化 mac 找到你 家庭地址
IP 就是在互联网中找到你的位 个人的位置信息 会变化
如何修改MAC
- 网络编辑器 -> 高级 -> mac 自动生成唯一编码
-
设置每台节点的IP地址(静态ip)
设置的三台节点分别是
192.168.88.161 node1
192.168.88.162 node2
192.168.88.163 node3
配置网关
如何设置ip
vim /etc/sysconfig/network-scripts/ifcfg-ens32
重启服务
systemctl restart network
判断是否设置成功
ping www.baidu.com
-
设置主机名称
主机别名
如何设置主机名
vim /etc/hostname
-
域名映射
vim /etc/hosts 192.168.88.161 node1 node1.itcast.cn 192.168.88.162 node2 node2.itcast.cn 192.168.88.163 node3 node3.itcast.cn
-
关闭防火墙和selinux
防火墙: 配置屏蔽(开放)规则,ip和port
如何关闭防火墙
systemctl stop firewalld systemctl disable firewalld systemctl status firewalld
关闭selinux
vim /etc/selinux/config SELINUX=enforcing 改成 disabled
-
重启服务器
reboot
-
设置三台节点之间的免密登录
- 首先生成一个密钥对,公钥拷贝给连接的节点,node2
- ssh 连接node2,node2会随机生成一个文本串,用公钥进行加密
- 将加密的数据发送给node1,node1会通过私钥进行解密
- 解密之后的数据会发送给node2,node2会将解密的数据和生成的数据进行比对
- 如果比对成功允许免密登录,不需要输入密码。
-
如何操作免密登录
-
三台节点都生成一对秘钥对
ssh-keygen -t rsa
-
将三台节点的公钥全部先拷贝给node1
ssh-copy-id node1
-
将node1中三台的公钥在拷贝分发到另外两台 node2 node3
scp -r authorized_key root@~/.ssh/
scp /root/.ssh/authorized_keys node2:/root/.ssh scp /root/.ssh/authorized_keys node3:/root/.ssh
-
-
时钟同步
主要保证不同的服务器之间的时间一致,状态一致。
如何进行操作?
- 都连接到外部服务器
crontab -e * * * * * /usr/sbin/ntpdate ntp4.aliyun.com;
- 同时连接同一台内网主机
yum install -y ntp # 设置参数 vim /etc/ntp.conf # 设置哪些节点能够同步当前node1 restrict 192.168.88.0 mask 255.255.255.0 nomodify notrap # 如果连接不上外网 就使用当前时间 server 127.127.1.0 fudge 127.127.1.0 stratum 10 # 禁用当前节点连接外网 #server 0.centos.pool.ntp.org #server 1.centos.pool.ntp.org #server 2.centos.pool.ntp.org #server 3.centos.pool.ntp.org # 设置 BIOS和系统时间保持同步 # 主板上的基本输入输出部件 vim /etc/sysconfig/ntpd SYNC_HWLOCK=yes
补充内容: 定时任务(linux)
# 12点半执行脚本
30 12 * * * 脚本 参数
# 每三个小时跑一次
* */3 * * * 脚本 参数
# 1-3 跑一次
* 1-3 * * * 脚本 参数
-
node2 node3如何同步node1时间
# 将node1同步到node2 和node3 */1 * * * * /usr/sbin/ntpdate 192.168.88.161
-
本次所用的安装包
-
链接:https://pan.baidu.com/s/1rn8XfXe0AOUM5AfFADd40Q
提取码:nedw -
安装JDK1.8_241 版本
- 解压缩
tar -zxvf /export/software/jdk1.8_241 -C /export/server
- 配置环境变量
#不建议之间修改 /etc/profile 文件 vim /etc/profile.d/my_env.sh export JAVA_HOME=/export/software/jdk1.8_241 export PATH=:$PATH:$JAVA_HOME
- 立即生效
source /etc/profile
- 执行java
java -version
javac -version
-
虚拟机镜像快照
保存一个快照,快速进行数据的恢复。
hadoop安装
hadoop的发行版
- cloudera cloudera manager cm 监控集群的机器的CPU 内存 IO 网络 吞吐 服务
- hotonworks(被收购)
- fusionInsight 华为
- 星环科技
- 社区开源版本 apache 版本
- 如果集群遇到问题,专业团队帮助解决
- 集成的版本更加稳定,开源社区版升级快兼容差
hadoop集群部署
-
角色部署
HDFS:
namenode datanode secondarynamenode
YARN:
resourcemanager nodemanager
-
hadoop 的部署方式
- 独立模式 standalone
- 伪分布式模式(学习)
- 完全分布式模式或集群模式
hadoop重新编译
-
有第三的插件 hadoop官网提供的是不支持的,需要进行重新编译
-
snappy 和bzip2 openssl 三个插件没有,需要对hadoop重新编译
-
编译之后的hadoop 支持本地
-
openssl
yum install -y openssl-devel
目录介绍
hadoop安装步骤
-
解压缩hadoop-2.7.5 到指定的目录
-
修改 etc/hadoop 配置文件
-
创建配置文件中需要用到的目录 需要修改七个配置文件
-
hadoop-env.sh
-
介绍
-
文件中设置的是Hadoop运行时需要的环境变量。JAVA_HOME是必须设置的,即使我们当前的系统中设置了JAVA_HOME,它也是不认识的,因为Hadoop即使是在本机上执行,它也是把当前的执行环境当成远程服务器。
-
#配置 cd /export/server/hadoop-2.7.5/etc/hadoop vim hadoop-env.sh #添加以下内容: export JAVA_HOME=/export/server/jdk1.8.0_241
-
-
core-site.xml
-
介绍:hadoop的
核心配置文件
,有默认的配置项core-default.xml。
core-default.xml与core-site.xml的功能是一样的,如果在core-site.xml里没有配置的属性,则会自动会获取core-default.xml里的相同属性的值。 -
在该文件中的<configuration>标签中添加以下配置,
<configuration>
在这里添加配置
</configuration> -
cd /export/server/hadoop-2.7.5/etc/hadoop vim core-site.xml 配置内容如下:
-
<!-- 用于设置Hadoop的文件系统,由URI指定 --> <property> <name>fs.defaultFS</name> <value>hdfs://node1:8020</value> </property> <!-- 配置Hadoop存储数据目录,默认/tmp/hadoop-${user.name} --> <property> <name>hadoop.tmp.dir</name> <value>/export/server/hadoop-2.7.5/hadoopDatas/tempDatas</value> </property> <!-- 缓冲区大小,实际工作中根据服务器性能动态调整: 根据自己的虚拟机的内存大小进行配置即可, 不要小于1GB, 最高配置为 4gb --> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> <!-- 开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟 --> <property> <name>fs.trash.interval</name> <value>10080</value> </property>
-
-
hdfs-site.xml
-
1、介绍
HDFS的核心配置文件,主要配置HDFS相关参数,有默认的配置项hdfs-default.xml。
hdfs-default.xml与hdfs-site.xml的功能是一样的,如果在hdfs-site.xml里没有配置的属性,则会自动会获取hdfs-default.xml里的相同属性的值。 -
2、配置
-
在该文件中的<configuration>标签中添加以下配置,
<configuration>
在这里添加配置
</configuration> -
cd /export/server/hadoop-2.7.5/etc/hadoop vim hdfs-site.xml
-
<!-- 指定SecondaryNameNode的主机和端口 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>node2:50090</value> </property> <!-- 指定namenode的页面访问地址和端口 --> <property> <name>dfs.namenode.http-address</name> <value>node1:50070</value> </property> <!-- 指定namenode元数据的存放位置 --> <property> <name>dfs.namenode.name.dir</name> <value>file:///export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas</value> </property> <!-- 定义datanode数据存储的节点位置 --> <property> <name>dfs.datanode.data.dir</name> <value>file:///export/server/hadoop-2.7.5/hadoopDatas/datanodeDatas</value> </property> <!-- 定义namenode的edits文件存放路径 --> <property> <name>dfs.namenode.edits.dir</name> <value>file:///export/server/hadoop-2.7.5/hadoopDatas/nn/edits</value> </property> <!-- 配置检查点目录 --> <property> <name>dfs.namenode.checkpoint.dir</name> <value>file:///export/server/hadoop-2.7.5/hadoopDatas/snn/name</value> </property> <property> <name>dfs.namenode.checkpoint.edits.dir</name> <value>file:///export/server/hadoop-2.7.5/hadoopDatas/dfs/snn/edits</value> </property> <!-- 文件切片的副本个数--> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 设置HDFS的文件权限--> <property> <name>dfs.permissions</name> <value>false</value> </property> <!-- 设置一个文件切片的大小:128M--> <property> <name>dfs.blocksize</name> <value>134217728</value> </property> <!-- 指定DataNode的节点配置文件 --> <property> <name>dfs.hosts</name> <value>/export/server/hadoop-2.7.5/etc/hadoop/slaves</value> </property>
-
-
mapred-site.xml
-
介绍
MapReduce的核心配置文件
,Hadoop默认只有个模板文件mapred-site.xml.template
,需要使用该文件复制出来一份mapred-site.xml文件 -
cd /export/server/hadoop-2.7.5/etc/hadoop cp mapred-site.xml.template mapred-site.xml vim mapred-site.xml #配置以下内容:
-
<!-- 指定分布式计算使用的框架是yarn --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 开启MapReduce小任务模式,hadoop2.0实现针对MR小作业的优化机制 --> <property> <name>mapreduce.job.ubertask.enable</name> <value>true</value> </property> <!-- 设置历史任务的主机和端口 --> <property> <name>mapreduce.jobhistory.address</name> <value>node1:10020</value> </property> <!-- 设置网页访问历史任务的主机和端口 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node1:19888</value> </property>
-
-
mapred-env.sh
-
在该文件中需要指定JAVA_HOME,将原文件的JAVA_HOME配置前边的注释去掉,然后按照以下方式修改:
-
cd /export/server/hadoop-2.7.5/etc/hadoop vim mapred-env.sh export JAVA_HOME=/export/server/jdk1.8.0_241
-
-
yarn-site.xml
-
YARN的核心配置文件,在该文件中的<configuration>标签中添加以下配置,
-
cd /export/server/hadoop-2.7.5/etc/hadoop vim yarn-site.xml
-
<!-- 配置yarn主节点的位置 --> <property> <name>yarn.resourcemanager.hostname</name> <value>node1</value> </property> <!-- NodeManager上运行的附属服务,其值需要配置成mapreduce_shuffle才可以运行MapReduce程序 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 开启日志聚合功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置聚合日志在hdfs上的保存时间 7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> <!-- 设置yarn集群的内存分配方案 --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>20480</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>2048</value> </property> <property> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>2.1</value> </property>
-
-
配置hadoop 的安装目录的环境变量
mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/tempDatas mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/datanodeDatas mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/nn/edits mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/snn/name mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/dfs/snn/edits
-
slaves
-
介绍
slaves文件里面记录的是集群主机名
。一般有以下两种作用:
一是:配合一键启动脚本如start-dfs.sh
、stop-yarn.sh
用来进行集群启动。这时候slaves文件里面的主机标记的就是从节点角色所在的机器。 -
二是:可以配合
hdfs-site.xml
里面dfs.hosts
属性形成一种白名单机制。- dfs.hosts指定一个文件,其中包含允许连接到NameNode的主机列表。必须指定文件的完整路径名,那么所有在slaves中的主机才可以加入的集群中。如果值为空,则允许所有主机。
-
配置
-
cd /export/server/hadoop-2.7.5/etc/hadoop vim slaves #删除slaves中的localhost,然后添加以下内容: node1 node2 node3
-
-
-
配置hadoop环境变量
#不建议之间修改 /etc/profile 文件
vim /etc/profile.d/my_env.sh
##HADOOP_HOME
export HADOOP_HOME=/export/server/hadoop-2.7.5
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
#保存后退出 :wq
#让修改后的文件生效
source /etc/profile
#测试是否安装成功
hadoop version
#重启(如果Hadoop命令不能用再重启)
#sync
#sudo reboot
-
格式化启动 hdfs namenode
hadoop namenode -format
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201227204738615.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NDg1NzIz,size_16,color_FFFFFF,t_70#pic_center)
7. 启动hadoop集群
1. 按照**角色**进行启动
一般情况下是在正在服役的集群中,又新增节点或者删除节点,会使用
2. 按照**脚本**进行启动
~~~shell
# 脚本启动 hdfs
start-dfs.sh
# 脚本启动 yarn
start-yarn.sh
hadoop初体验
-
hdfs上传
# hadoop1.x 脚本,3.x之后被弃用 hadoop fs -put 本地文件 hdfs文件目录 # hadoop2.x 脚本 hdfs dfs -put 本地文件 hdfs文件目录
-
yarn 跑 mapreduce任务
hadoop jar jar包路径 全路径类名 参数 yarn jar jar包路径 全路径类名 参数 # 通过mapreduce 跑 pi yarn jar /export/server/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar pi 2 10000000
在PC端访问 http://node1:8088/cluster 查看Yarn任务
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201227204339664.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NDg1NzIz,size_16,color_FFFFFF,t_70#pic_center)
安装部署完毕。
### 常见问题
1. datanode 或 namenode 启动不起来
~~~shell
# 安装完之后,重新格式 reformat,出现version不一致
# 1.先删除配置文件中指定的数据目录
rm -rf /export/server/hadoop-2.7.5/hadoopDatas/tempDatas
rm -rf /export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas
rm -rf /export/server/hadoop-2.7.5/hadoopDatas/datanodeDatas
rm -rf /export/server/hadoop-2.7.5/hadoopDatas/nn/edits
rm -rf /export/server/hadoop-2.7.5/hadoopDatas/snn/name
rm -rf /export/server/hadoop-2.7.5/hadoopDatas/dfs/snn/edits
# 重新格式化
hadoop namenode -format
# 2.尝试将version恢复一致
- datanode 或 namenode只能有一个