HDFS完全安装模式集群
完全分布式模式介绍
完全分布式,指的是在真实环境下,使用多台机器,共同配合,来构建一个完整的分布式系统。
在真实环境中,hdfs中的相关守护进程会分布在不同的机器中。
1、namenode守护进程尽可能的单独部署在一台硬件性能相对来说比较好的机器上
2、其他的每台机器上都会部署一个datanode守护进程,一般的硬件环境即可
3、seconddarynamenode守护进程最好不要 和namenode在同一台机器上
完全分布式环境搭建的前提
1、全部的机器的防火墙必须是关闭的
2、都是安装好hadoop和jdk并且配置好环境变量
3、确保全部机器的网络畅通(静态ip,主机名修改)
关闭防火墙
systemctl stop firewalld //关闭防火墙
systemctl disable firewalld //设置开机不自启
systemctl stop networkmanager //关闭networkmanager服务
systemctl disable networkmanager //设置开机不自启
//开启和开机自启
systemctl start firewalld //开启防火墙
systemctl enable firewalld //设置开机自启
networkmanager同上
NetworkManager服务是管理和监控网络设置的守护进程,CentOS7更加注重使用NetworkManager服务来实现网络的配置和管理,CentOS7以前是通过network服务管理网络,以后的版本所有网络管理和设置统一由NetworkManager服务来维护。它是一个动态的,事件驱动的网络管理服务
安装jdk并且配置环境变量
1、检查一下机器中是否安装过或者系统有内置的jdk,如果有内置的,将其卸载
rpm -qa | grep jdk //如果有,将其卸载
rpm -e xxxxx -nodeps //将查询到的内置jdk强制卸载
2、上传jdk(这里用的是jdk1.8)
将jdk-8u221-linux-x64.tar.gz 上传到 /root 目录中 (直接在mobax中把压缩包拖进去)
3、将jdk解压到安装路径下(这里安装到 /usr/local),并且改一个短一点的名字,后面配置文件方便些
tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local //解压到/usr/local
mv /usr/local/jdk1.8.0_221/ /usr/local/jdk //改名为jdk
4、配置jdk的环境变量
vi /etc/profile //进入配置文件
//在文件的最后增加配置环境变量的语句
export JAVA_HOEM=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
5、刷新环境变量
source /etc/profile
6、验证jdk环境
javac
java -version
安装hadoop并且配置环境变量
hadoop安装和jdk类似
1、上传hadoop(这里用的是hadoop2.7.6)
将hadoop-2.7.6.tar.gz 上传到 /root 目录中 (直接在mobax中把压缩包拖进去)
3、将hadoop解压到安装路径下(这里安装到 /usr/local),并且改一个短一点的名字,后面配置文件方便些
tar -zxvf hadoop-2.7.6.tar.gz -C /usr/local //解压到/usr/local
mv /usr/local/hadoop-2.7.6 /usr/local/hadoop //改名为hadoop
4、配置hadoop的环境变量
vi /etc/profile //进入配置文件
//在文件的最后增加配置环境变量的语句
export HADOOP_HOEM=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
5、刷新环境变量
source /etc/profile
6、验证jdk环境
hadoop version
静态ip和主机名修改
1、将全部的虚拟机的网络连接方式改为桥接模式(因为是在同一网段使用不同物理机上的虚拟机建立分布式集群,所以虚拟机要和物理机用同一网段才能和其他物理机上的虚拟机连接)
先在CentOS7中网络选项设置为桥接
点击编辑 ——> 虚拟网络编辑器 ——> 更改设置——>选择桥接模式——>确定
如果在创建虚拟机的时候配置网络选的是NAT模式还需要在虚拟机下修改网络适配器改为桥接模式
设置完这些后进入虚拟机设置静态ip
vi /etc/sysconfig/network-scripts/ifcfg-ens33 //进入配置文件
//进入之后所做的修改
............
BOOTPROTO=static #将dhcp改为static
............
ONBOOT=yes #将no改为yes
IPADDR=10.20.152.180 #添加IPADDR属性和ip地址
PREFIX=24 #添加NETMASK=255.255.255.0或者PREFIX=24
GATEWAY=10.20.152.1 #添加网关GATEWAY
DNS1=8.8.8.8 #添加DNS1
修改完成如下图
//修改完之后重启网络服务
systemctl restart network
//修改主机名
hostnamectl set-hostname bd0031
修改完主机名之后最好 reboot一下
配置hosts
在hosts中把全部机器的ip和hostname写上
代码如下:
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.20.152.180 bd0031
10.20.152.237 brccq04
10.20.152.238 brccq05
10.20.152.135 host05
10.20.152.136 host06
10.20.152.132 host02
10.20.152.137 host07
设置免密登录认证
cd~
ssh-keygen -t rsa
//1、使用rsa加密技术。生成公钥和私钥。一直回车就行
cd ~/.ssh
ssh-copy-id root@bd0031 //这里是namenode的hostname
//2、进入~/.ssh目录下,使用ssh-copy-id命令
ssh host05 //连接子节点,第一次执行需要输入yes ,之后再连接不用输yes或者密码即为成功
配置core-site.xml文件
cd $HADOOP_HOME/etc/hadoop/
vi core-site.xml
//在此文件中的两个<configuration>中加入配置文件,下面也一样
<configuration>
<!-- hdfs的地址名称:schame,ip,port-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://bd0031:8020</value>
</property>
<!-- hdfs的基础路径,被其他属性所依赖的一个基础路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
设置完毕 :wq 保存即可
配置hdfs-site.xml文件
//还是在之前的$HADOOP_HOME/etc/hadoop/路径下配置这个文件,下面的配置文件也一样
vi hdfs-site.xml
// 加入以下代码
<configuration>
<!-- namenode守护进程管理的元数据文件fsimage存储的位置-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name</value>
</property>
<!-- 确定DFS数据节点应该将其块存储在本地文件系统的何处-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>
<!-- 块的副本数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 块的大小(128M),下面的单位是字节-->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<!-- secondarynamenode守护进程的http地址:主机名和端口号。参考守护进程布局-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>brccq04:50090</value>
</property>
<!-- namenode守护进程的http地址:主机名和端口号。参考守护进程布局-->
<property>
<name>dfs.namenode.http-address</name>
<value>bd0031:50070</value>
</property>
</configuration>
配置mapred-site.xml文件
如果只是搭建hdfs,只需要配置core-site.xml和hdfs-site.xml文件就可以了,但是我们过两天要学习的
MapReduce是需要YARN资源管理器的,因此,在这里,我们提前配置一下相关文件。
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
//加入以下代码
<configuration>
<!-- 指定mapreduce使用yarn资源管理器-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value> </property>
<!-- 配置作业历史服务器的地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>bd0031:10020</value>
</property>
<!-- 配置作业历史服务器的http地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>bd0031:19888</value>
</property>
</configuration>
配置yarn-site.xml文件
vi yarn-site.xml
//加入以下代码
<configuration>
<!-- 指定yarn的shuffle技术-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定resourcemanager的主机名-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bd0031</value>
</property>
<!--下面的可选--> <!--指定shuffle对应的类 -->
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!--配置resourcemanager的内部通讯地址-->
<property>
<name>yarn.resourcemanager.address</name>
<value>bd0031:8032</value>
</property>
<!--配置resourcemanager的scheduler的内部通讯地址-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>bd0031:8030</value>
</property>
<!--配置resoucemanager的资源调度的内部通讯地址-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>bd0031:8031</value>
</property>
<!--配置resourcemanager的管理员的内部通讯地址-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>bd0031:8033</value>
</property>
<!--配置resourcemanager的web ui 的监控页面-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>bd0031:8088</value> </property>
</configuration>
配置slaves文件
此文件用于指定datanode守护进程所在的 机器节点主机名
vi slaves
//在这里加入全部机器(节点)的主机名
brccq04
brccq05
host05
host06
host07
host02
配置hadoop-env.sh脚本文件
vi hadoop-env.sh
//修改其中一行为jdk的绝对路径
.........
# The java implementation to use.
export JAVA_HOME=/usr/local/jdk
.........
配置yarn-env.sh脚本文件
此文件可以不配置,不过,最好还是修改一下yarn的jdk环境比较好
vi yarn-env.sh
............
# some Java parameters
# export JAVA_HOME=/usr/local/jdk //修改jdk路径
if [ "$JAVA_HOME" != "" ]; then
#echo "run java in $JAVA_HOME"
JAVA_HOME=$JAVA_HOME
fi
............
其他机器的配置(子节点(datanode))
格式化namenode
1、在namenode(老大)上运行的命令
hdfs namenode -format
启动集群
start-dfs.sh //用于启动hdfs集群
start-yra.sh //用于启动yarn守护进程
start-all.sh //用于启动hdfs和yarn
stop-dfs.sh //用于停止hdfs集群
stop-yarn.sh //用于停止yarn守护进程
stop-all.sh //用于停止hdfs和yarn
启动hdfs