一、复制虚拟机
由于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
将当前主机(hadoop)的公钥复制到hadoop0,一次类推将hadoop1的公钥也复制到hadoop0,然后hadoop0就拥有了三台主机的公钥,下面可以采用简便方法将hadoop0的authorized_keys文件复制到其他两台机器上。
scp
此时再次查看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
五、安全模式
安全模式, 当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结 束。 安全模式主要是为了系统启动的时候 检查各个DataNode上数据块的有效性,同时根据策略必要的 复制或者删除部分数据块。 运行时通过命令也可以进入 安全模式。在实践过程中,系统 启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。
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