一、复制虚拟机
由于Hadoop的集群安装需要多台机器,由于条件有限,我是用虚拟机通过克隆来模拟多台机器,克隆方式如下图所示
点击克隆弹出下图的界面
点击下一步,弹出下图界面
在这里我们选择完整克隆,来创建一个单独的虚拟机,点击下一步,如下图所示
二、集群的概念
2.1 集群的概念
<1> 通过多台计算机完成同一个工作。达到更高的效率
<2> 两机或多机内容、工作过程等完全一样。如果一台死机,另一台可以起作用。在此,看一下Hadoop集群物理分布图,如下图所示
集群中有很多服务器,黄色表示主节点,主节点只在一台服务器上,绿色为从节点分布在多台服务器上。但由于条件有限,我们就设置1个主节点,两个从节点。在实际应用中我们则使用真正的服务器来搭建Hadoop环境,由于主节点负责调度管理,一般选择内存比较好的服务器作为主节点 。
2.2 分布式结构
主节点(1个,是hadoop0):NameNode、JobTracker、SecondaryNameNode
从节点(2个,是hadoop1、hadoop2):DataNode、TaskTracker
克隆两个虚拟机,分别为Centos_0,Centos_1,原来的虚拟机叫Centos,他们的配置如下图所示,所以在虚拟机克隆完成以后,要按照下图修改主机名,ip等。
2.3 修改配置
<1> 编辑各个节点的/etc/hosts,在该文件中含有所有节点的ip与hostname的映射信息命令如下:
vi /etc/sysconfig/network
vi /etc/hosts
reboot –h now
<2> 将主节点的下面内容复制到,从节点
/usr/local/hadoop/conf/core-site.xml
/usr/local/hadoop/conf/ mapred-site.xml
2.4 配置ssh
2.4.1 各节点重新产生ssh加密文件
<1> 操作如下:
vi /etc/hosts
添加:
192.1.14.24 hadoop
192.1.14.76 hadoop0
192.1.14.77 hadoop1
<2> 将该文件复制到其他节点(此时需要输入密码,设置ssh免密码登陆之后可免密码登录)
scp /etc/hosts hadoop0: /etc/hosts
scp /etc/hosts hadoop1: /etc/hostscd /root/.ssh/
ls
rm -rf *
lscd /usr/local/
rm –rf*
lsssh-keygen -t rsa
cd /root/.ssh/
cat id_rsa.pub >>authorized_keys
ssh localhost
exit
ssh 主机名
2.4.2 两两节点之间的SSH免密码登陆
要想集群中机器互相连通,就得实现机器之间免密码登录,但是现在我们的机器,只能免密码登陆自己的机器。还不能免密码登陆集群中其他机器,如当我们在hadoop主机免密码登陆主机hadoop0时,会显示如下图所示的界面
所以我们就要设置两两节点之间的SSH免密码登陆,以hadoop为例,hadoop登陆hadoop0时,hadoop0会给hadoop发一个字符串让hadoop的私钥来加密该字符串返回给hadoop0,然后hadoop0用自己的公钥也对该字符串做一次加密,然后比对这个经过加密的字符串,若相同则证明可登陆,hadoop免密码登陆hadoop0的过程如下图所示
所以hadoop主机要登录hadoop0,那么我们就要复制hadoop的公钥到hadoop0,这样就相当于用hadoop的公钥生成str2,这样就保证了str1和str2的相同,我们知道公钥存放在authorized_keys文件中,那么我们先看一下hadoop0主机的公钥钥信息,如下图所示
在hadoop终端执行以下命令:
ssh-copy-id -i hadoop0
将当前主机(hadoop)的公钥复制到hadoop0,一次类推将hadoop1的公钥也复制到hadoop0,然后hadoop0就拥有了三台主机的公钥,下面可以采用简便方法将hadoop0的authorized_keys文件复制到其他两台机器上。
scp /root/.ssh/authorized_keys hadoop1:/root/.ssh/
此时再次查看hadoop0的公钥中拥有了hadoop的公钥,如图(1)所示。然后在hadoop登陆hadoop,则登陆成功,如图(2)所示
图 (1)
图(2)
2.5 配置Hadoop
hadoop的基本安装步骤在请参照伪分布安装步骤。下面说一下安装完以后,需要的操作
<1> 把hadoop的hadoop目录下的logs和tmp删除
执行命令 :
cd /usr/local/hadoop
ls
rm -rf logs/
rm -rf tmp/
<2> 把hadoop中的jdk、hadoop文件夹复制到hadoop0和hadoop1节点
scp -r /usr/local/jdk hadoop0:/usr/local/ -r 表示文件类型为文件夹
<3> 把hadoop的/etc/profile复制到hadoop0和hadoop1节点,在目标节点中执行source /etc/profile
2.6设置主从节点
我设置hadoop为主节点,编辑hadoop的配置文件slaves,改为从节点的hostname,分别是hadoop0和hadoop1
执行命令:vi /usr/local/hadoop/conf/slaves
添加: hadoop0
hadoop1
2.7 格式化启动
格式化,在hadoop节点执行hadoop namenode -format
启动,在hadoop0节点执行start-all.sh,启动成功如图(3)所示。hadoop0和hadoop1的进程如图(4),(5)所示。
图 (3)
图 (4)
图(5)
注意:对于配置文件core-site.xml和mapred-site.xml在所有节点中都是相同的内容,因为这里分别配置的是NameNode和Jobtracker的端口号。
2.8 通过浏览器查看
首先在C:\Windows\System32\drivers\etc,目录下的hosts文件,添加如下内容:
192.1.14.24 hadoop
192.1.14.76 hadoop0
192.1.14.77 hadoop1
在浏览器输入http://hadoop:50070,如图2.11所示。
图 2.11
点击Live Nodes,如图2.12所示。
图 2.12
2.9 变更分布结构
<1> 将SecondaryNameNode移动到一个新的独立节点
执行命令:vi /usr/local/hadoop/conf/masters
里面的内容是SecondaryNameNode的主机名localhost,我们可以讲localhost修改为其他主机名。
<2> 将Namenode和JobTracker,分配到不同节点,在此我们要修改core-site.xml和mapred-site.xml两个文件,core-site.xml文件决定NameNode的端口地址和临时存放目录,mapred-site.xml决定JobTracker的端口地址。设置完之后,各节点要单独起进程。
三、动态的增加一个hadoop节点
在实际应用过程中,为了提高Hadoop集群的应用性能,会向Hadoop集群中增添节点,由于主节点只有一个可以换不会增加,所以在Hadoop集群当中一般是增加从节点,动态添加节点步骤如下:
<1> 配置新节点的环境,我再次克隆一个虚拟机名称为Centos_2,该机器的信息如下图3.1所示。
图 3.1
<2> 把新节点的hostname配置到主节点的slaves文件中
<3> 在新节点,启动进程
hadoop-daemon.sh start datanode
hadoop-daemon.sh start tasktracker
<4> 在主节点执行脚本 hadoop dfsadmin -refreshNodes
四、动态的下架一个hadoop节点
现在我们将,刚刚添加的节点hadoop2下架,在实际中,最简单的方式就是将服务器关闭即可,我用虚拟机模拟一下,把hadoop2节点上的hadoop对应的进程关闭即可,执行命令如下:hadoop-daemon.sh stop datanode
关闭以后我们会发现,NameNode的web端口上hadoop2节点的LastContact字段的值会不断增加。DataNode每次启动时都会向NameNode汇报,NameNode会记录他的访问时间,NameNode用当前访问时间减去上次访问时间,就得出LastContact的值,就是多长时间未访问。由于有可能是网络问题造成短暂掉线,所以NameNode会等待一段时间,默认等10分钟,十分钟之后,会将他视为死节点,为了防止数据丢失所以在实际中副本数一般不会设为1,会设为2以上,当某个节点死掉以后,可以通过副本找回数据。
图 4.1
五、安全模式
NameNode在启动的时候首先进入安全模式,如果datanode丢失的block达到一定的比例(1- dfs.safemode.threshold.pct),则系统会一直处于安全模式状态即只读状态。 dfs.safemode.threshold.pct(缺省值0.999f)表示HDFS启动的时候,如果DataNode上报的block个数达到了元数据记录的block个数的0.999倍才可以离开安全模式,否则一直是这种只读模式。如果设为1则HDFS永远是处于SafeMode。
hadoop dfsadmin -safemode enter | leave | get |wait