hadoop集群环境搭建之完全分布式集群环境搭建
搭建集群的模式有三种
1.伪分布式:在一台服务器上,启动多个线程分别代表多个角色(因为角色在集群中使用进程表现的)
2.完全分布式:在多台服务器上,每台服务器启动不同角色的进程,多台服务器构成集群
3.高可用的完全分布式
这篇文章是对完全分布式集群的搭建,采用的是centOS6.5版本的系统
我使用了四台虚拟机,暂且称为node1,node2,node3,node4;
1.首先需要修改静态IP
1.因为我们一般是用远程连接来操作每台虚拟机,而不设置静态IP会导致你连接中途,因为IP动态获取,导致IP地址更换,从而导致远程连接
断开
2.操作:
修改:/etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth0
.
2.修改主机名以及IP地址与主机名的映射
1.Linux系统安装好后,都会有默认的主机名,我们可以根据自己的需要更改为自己想要的名字。
2.当在hosts文件中完成映射以后,不必输入IP直接输入映射的名字,此时映射的名字等价于IP,在这里需要在每台虚拟机
中的hosts文件中声明所有的映射.
设置完需要重启生效
vim /etc/sysconfig/network
HOSTNAME=XXX
vim /etc/sysconfig/network-scripts/ifcfg-eth0
.
3.ssh无密码登陆
1.我们假设node01为namenode节点,那么他需要通过SSH(Secure Shell)来启动和停止各个节点上的各种守护
进程的,这就需要在节点之间执行指令的时候是不需要输入密码的方式,故我们需要配置SSH使用无
密码公钥认证的方式
2.在所有的虚拟机上利用rsa算法生成各自的公钥和私钥
3.我们要实现namenode无需密码即可登陆其他三台虚拟机,所以需要将node01的公钥存储在其余三台机器的cd ~/.ssh/authorized_keys中
以下操作完成免密登陆:
所有节点上运行
ssh-****** -t rsa -P '' -f ~/.ssh/id_rsa
node1(namenode节点上运行)
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
.
4.jdk的安装
每台虚拟机都需要安装jdk的运行环境:
yum remove *openjdk*
tar -zxvf jdk-8u151-linux-x64.tar.gz(这里用你自己的)
vim /etc/profile
export JAVA_HOME=/opt/software/jdk1.8.0_151
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
java -version
.
5.集群的时间同步
1.由于Linux服务器运行时间久了,会造成时间的误差,需要配置时间同步。
2.网络时间协议(Network Time Protocol, NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟、GPS等等)做
同步化
3.若各个虚拟机时间不同步。差别太大,可能会判断某个命令无效
每台虚拟机上运行:
yum install ntp
ntpdate ntp1.aliyun.com
.
6.hadoop配置的修改
6.1修改hdfs-site.xml配置文件
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<!-- 指定secondaryNameNode -->
<name>dfs.namenode.secondary.http-address</name>
<value>node02:50090</value>
</property>
6.2修改core-site.xml配置文件
<property>
<!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
<name>fs.defaultFS</name>
<value>hdfs://node01:9000</value>
</property>
<!-- 指定hadoop运行时产生临时文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/var/abc/hadoop/local</value>
</property>
6.3修改slaves配置文件
<!-- 这是告诉hadoop进程哪些机器是从节点,必须竖着写,不能有空格,否则会无法识别 -->
node02
node03
node04
6.4hadoop-env.sh的Java_home修改
sudo vim ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh
# 修改JAVA_HOME的环境配置为如下所示:
export JAVA_HOME=/opt/software/jdk1.8.0_151
.
7.hadoop环境变量的修改
只需要修改namenode上的即可
cd ~
vim .bashrc
export HADOOP_HOME=/opt/software/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source .bashrc
将配置好的hadoop包发送至每个虚拟机
cd /opt/software
scp -r hadoop-2.6.5 node02:`pwd`
.
8.启动
1.关闭所有HDFS相关进程
2.格式化namenode
3.启动hdfs
stop-dfs.sh
hdfs namenode -format
start-dfs.sh
成功启动后可用jps命令查看当前虚拟机的进程从而得知他属于什么角色
可以用网页来查看当前hdfs的详情,若想用物理机来访问此页面,需要将上述几个虚拟机的防火墙关闭
chkconfig iptables off 关闭防火墙(重启后永久生效)
service ipables status 查看防火墙状态
service ipables status 停止防火墙(不永久生效)
.
9.总结遇到的问题
1.在格式化之前必须停止所有HDFS相关的进程 stop-dfs.sh
2.启动集群后出现问题纠错后必须严格按照以下步骤重新启动:
--.停止所有节点(关闭他们的进程)
--.删除节点生成的cluster文件
--.格式化namenode
--.开启hdfs
3.关闭所有节点的防火墙
4.配置好静态IP
--不设置时,远程连接中途,若动态IP改变,则会导致连接中断。
5.配置好主机名映射关系(hosts文件),hosts文件内容不要随便删除
--hosts文件内容被删除会造成启动hdfs后存活节点为0的情况
--主机名与IP映射不对时,会造成运行hdfs时无法打开对应节点(因为找不到)
6.配置好jdk,因为centOS6.5有默认的jdk1.6和1.7,删除后安装自己的