知识储备
- 计算机网络基本概念
- Linux基本操作命令
- Java环境变量配置
学习目标
- 掌握集群安装过程原理
- 理解3种网络连接方式原理
- 熟悉SSH免密码登录原理
- 了解Hadoop的关键配置选项
- 掌握动态管理节点方法
这一章主要以实验为主,在了解前面知识点的情况下搭建一个Hadoop集群。
2.1 实验准备
通过物理机器虚拟化4台虚拟机:1个Master,3个Slave节点,节点之间在局域网中相互连通。为了实现节点间在同一局域网上定向通信,配置使用静态地址,各节点的IP的分布如表2-1所示。
Master机器主要配置NameNode和JobTracker角色,总体负责分布式数据和分解任务的执行;3个Slave节点机器配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。
安装过程中用到的所有软件如图2-1所示。
以上软件的下载地址如表2-2所示。
用户信息如表2-3所示,所有虚拟节点都一样。
2.2 配置一个单节点环境
2.2.1 运行一个虚拟环境CentOS
首先在计算机上安装虚拟机。下载VMWare10后,解压CentOS到指定文件夹下,打开VMWare10,单击菜单栏“文件”- “打开”,选择CentOS文件,如图2-2所示。
用鼠标右键单击CentOS选择“设置”,弹出设置窗口。里面是虚拟系统的主要硬件参数信息,读者可以根据自己机器性能进行配置,这里选默认配置,如图2-3所示。
2.2.2 配置网络
VMWare提供了3种工作模式,它们是bridged(桥接)模式、NAT(网络地址转换)模式和host-only(仅主机)模式。在学习VMWare虚拟网络时,建议选择host-only方式。原因有两个:一是如果用的是笔记本电脑,从A网络移到B网络环境发生变化后,只有host-only方式不受影响,其他方式必须重新设置虚拟交换机配置;二是可以将真实环境和虚拟环境隔离开,保证了虚拟环境的安全。下面将简单了解bridged模式和NAT模式,详细学习host-only模式。
1.bridged
在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器。同时在桥接模式下,需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信。
2.NAT
使用NAT模式,就是让虚拟系统借助NAT功能,通过宿主机器所在的网络来访问公网。也就是说,使用NAT模式可以实现在虚拟系统中安全的访问互联网。采用NAT模式最大的优势就是虚拟系统接入互联网非常简单,不需要进行任何其他的配置,只需要宿主机器能访问互联网即可。
3.host-only
在某些特殊的网络调试环境中,要求将真实环境和虚拟环境隔离开,这时可采用host-only模式。在host-only模式中,所有的虚拟系统是可以相互通信的,但虚拟系统和真实的网络是被隔离开的。
在host-only模式下,虚拟系统的TCP/IP配置信息(如IP地址、网关地址、DNS服务器等),都可以由VMnet1(host-only)虚拟网络的DHCP服务器来动态分配。
如果想利用VMWare创建一个与网内其他机器相隔离的虚拟系统,进行某些特殊的网络调试工作,可以选择host-only模式,如图2-4所示。
使用host-only方式,A、A1、A2可以互访,但A1、A2不能访问B,也不能被B访问。
主机上安装VMware Workstation或VMware Server的时候,默认会安装3块虚拟网卡,这3块虚拟网卡的名称分别为VMnet0、VMnet1、VMnet8,其中VMnet0的网络属性为“物理网卡”,VMnet1与VMnet8的网络属性为“虚拟网卡”。在默认情况下,VMnet1虚拟网卡的定义是“仅主机虚拟网络”,VMnet8虚拟网卡的定义是“NAT网络”,同时,主机物理网卡被定义为“桥接网络”,主机物理网卡也可以称为VMnet0。
在安装完虚拟机后,默认安装了两个虚拟网卡,VMnet1和VMnet8。其中VMnet1是host-only网卡,用于host方式连接网络的。VMnet8是NAT网卡,是用NAT方式连接网络的。它们的IP地址是默认的,如果要用虚拟机做实验的话,最好将VMnet1到VMnet8的IP地址改了。此处采用的是host-only模式,所以下面将改写VMnet1的IP地址。
(1)按绿色箭头启动虚拟机,角色选择Other,输入root角色名,如图2-5所示。
(2)在Windows网络连接中打开VMnet1网络,然后设置IPv4,如图2-6所示。
(3)在Linux桌面环境中用鼠标右键单击任务栏右侧的电脑图标,选中“Edit Connection”进行如下配置,步骤如图2-7所示。
(4)打开终端,重启网络服务使配置生效,当出现3个“OK”说明网络配置成功,用ifconfig查看配置情况,如图2-8所示。
常用远程登录工具还有putty、XShell等,但PieTTy相比之下操作更加简单,功能更加强大,并且软件只有300多KB。因此以下是使用PieTTy连接到Linux上的步骤。
(1)打开PieTTy客户端软件后,填写“目标IP地址”,端口是SSH模式的访问端口22。单击Open,输入角色和密码登录,如图2-9所示。
这时会弹出提示“潜在安全缺口”,如图2-10所示,由于首次使用PieTTy登录Linux虚拟机,PieTTy缓存里面并没有该Linux虚拟机的rsa2公钥信息,因此会提示是否信任次机器,选择“是”。具体原理会在2.4.2节分析。
2)进去后输入用户名和密码,即可进入命令窗口,如图2-11所示。
2.2.3 创建新的用户组和用户
大家看到这个题目可能会产生疑问:Hadoop本身有root用户了为什么还要创建新用户?因为一方面,对Linux不是很熟悉的人很可能会误操作而损坏操作系统核心内容;另一方面方便同一个组的用户可以共享Hadoop集群。实现思路是使用root登录,创建自定义用户,并为这个用户分组。
1.创建hadoopGroup组
添加用户时,可以将用户添加到现有的用户组(Linux内置很多默认用户组),或者创建一个新的用户组。可以在/etc/group文件中看到所有的用户组信息。使用groupadd命令创建用户组的语法结构:groupadd [-g gid [-o]] [-r] [-f] groupname。每个选项的含义如表2-4所示。
如果不指定选项,系统将使用默认值。如创建一个hadoopGroup用户组命令:groupadd hadoopGroup,可以看出它就没有可选项和参数。
2.添加Hadoop用户
添加用户可以使用useradd命令,语法为
useradd [-d homedir] [-g groupname] [-m -s shell] [-u userid] [accountname]每个选项的含义如表2-5所示。
如创建用户组hadoopGroup,并创建Hadoop用户加入这个组,用户主目录为/home/hadoop,命令如图2-12所示。
用户被创建后,可以使用passwd命令来设置密码,如:
2.2.4 上传文件到CentOS并配置Java和Hadoop环境
新建完用户后,就可以安装JDK和Hadoop了。
1.使用WinSCP传输文件
WinSCP是Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议。它的主要功能是在本地与远程计算机间安全的复制文件。
在root用户下,执行命令:rm -rf /usr/local/*,删除目录下所有内容(当前内容无用)。使用WinSCP把JDK文件从Windows复制到/usr/local目录下,以下是WinSCP使用传输文件的步骤。
(1)打开WinSCP后,单击“新建”按钮,输入IP地址和用户信息后单击“确定”按钮。如图2-13所示。
(2)输入Linux的用户名和密码,如图2-14所示。
(3)WinSCP窗口左侧是Windows端,右侧是Linux端,可以直接通过鼠标拖动传输文件。具体步骤如图2-15所示。
2.解压文件
输入解压命令:tar -zvxf jdk-7u67-linux-x64.tar.gz到当前目录。参数z代表调用gzip压缩程序的功能,v代表显示详细解压过程,x代表解压文件参数指令,f参数后跟解压的文件名,如图2-16所示。
为了后面写环境变量方便,更改文件名为jdk1.7,如图2-17所示。
同样,解压命令tar -zvxf hadoop-2.2.0-x64.tar.gz到当前目录,并通过命令mv hadoop-2.2.0 /home/hadoop/hadoop2.2移动到Hadoop用户的主目录下,如图2-18所示。
3.目录规划
Hadoop程序存储的目录为/home/hadoop/hadoop2.2,相关的数据目录,包括日志、存储等指定为该程序目录下的data、log等。将程序和数据目录分开,可以更加方便地进行配置的管理和同步。
具体目录的准备与配置如下所示。
(1)创建程序存储目录/home/hadoop/hadoop2.2,用来存储Hadoop程序文件。
(2)创建数据存储目录/home/hadoop/hadoop2.2/hdfs,用来存储集群数据。
(3)创建目录/home/hadoop/hadoop2.2/hdfs/name,用来存储文件系统元数据。
(4)创建目录/home/hadoop/hadoop2.2/hdfs/data,用来存储真正的数据。
(5)创建日志目录为/home/hadoop/hadoop2.2/logs,用来存储日志信息。
(6)创建临时目录为/home/hadoop/hadoop2.2/tmp,用来存储临时生成的文件。
执行命令:mkdir –p /home/hadoop/hadoop2.2/hdfs,为还不存在目录的Hadoop程序创建目录,mkdir是make directory的缩写,参数p可以创建多级目录。
给hadoopGroup组赋予权限,凡是属于hadoopGroup组的用户都有权利使用hadoop2.2,方便多用户操作。
首先,把Hadoop2.2加入到hadoopGroup组,可以在Hadoop2.2当前目录下执行命令:chgrp -R hadoopGroup hadoop2.2。chgrp是change group的缩写,R参数可以将作用域扩展到后面目录里所有文件和子目录。
给这个组赋予权限chmod -R g=rwx hadoop2.2。chmod是change model的缩写,g=rwx表示给后面的文件赋予用户的读(r)写(w)执行(x)权限。
4.导入JDK环境变量
执行cd /etc命令后执行vi profile,对profile文件进行编辑,如图2-19所示,在行末尾添加:
vi编辑器的具体使用可以参见http://c.biancheng.net/cpp/html/2735.html。
执行命令source profile,使其配置立即生效。
执行命令java –version,查看是否安装成功。若出现图2-20所示的信息,代表安装成功。
5.导入Hadoop环境变量
同上面一样,修改profile,如图2-21所示。
执行hadoop命令,如Hadoop,查看Hadoop环境配置成功是否成功,若出现图2-22所示信息,说明Hadoop环境配置成功。
2.2.5 修改Hadoop2.2配置文件
Hadoop没有使用java.util.Properties管理配置文件,也没有使用Apache Jakarta Commons Configuration管理配置文件,而是使用了一套独有的配置文件管理系统,并提供自己的API,即使org.apache.hadoop.conf.Configuration处理配置信息,让用户也可以通过Eclipse工具分析源码,并利用这些API修改配置文件。
由于Hadoop集群中每个机器上面的配置基本相同,所以先在主节点上面进行配置部署,然后再复制到其他节点。主要涉及Hadoop的脚本文件和配置文件如下。
(1)配置~/hadoop2.2/etc/hadoop下的hadoop-env.sh、yarn-env.sh、mapred-env.sh修改JAVA_HOME值(export JAVA_HOME=/usr/local/jdk1.7/),如图2-23所示。
(2)配置~/hadoop2.2/etc/hadoop/slaves,这个文件里面保存所有slave节点,如图2-24所示。
(3)配置~/hadoop-2.2.0/etc/hadoop/core-site.xml,添加以下代码到文件中。
其配置选项的详细说明可参见:
http://hadoop.apache.org/docs/r2.2.0/hadoop-project-dist/hadoop-common/core-default.xml。
(4)配置~/hadoop-2.2.0/etc/hadoop/hdfs-site.xml,添加如下代码。
其详细配置说明可参见:
http://hadoop.apache.org/docs/r2.2.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml。
(5)配置~/hadoop-2.2.0/etc/hadoop/mapred-site.xml,添加如下代码。
其详细配置说明可参见:
http://hadoop.apache.org/docs/r2.2.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml。
(6)配置~/hadoop-2.2.0/etc/hadoop/yarn-site.xml,添加代码如下。
其详细配置说明可参见:
http://hadoop.apache.org/docs/r2.2.0/hadoop-yarn/hadoop-yarn-common/yarn-default.xml。
2.2.6 修改CentOS主机名
修改当前会话中的主机名,执行命令hostname node,如图2-25所示。
但是这种配置只对当前状态有效,一旦重新启动虚拟机,主机名未变,因此只能在配置文件里修改。要想修改配置文件中的主机名,执行命令vi /etc/sysconfig/network。重启生效,由于第一步已经在当前会话中配置了hostname,所以不用重启,如图2-26所示。
2.2.7 绑定hostname与IP
执行命令:vi /etc/hosts,增加内容如下。
192.168.10.100 node
192.168.10.101 node1
192.168.10.102 node2
192.168.10.103 node3
通过ping node,检验是否修改成功,如图2-27所示。
2.2.8 关闭防火墙
如果不关闭防火墙,可能会有以下3种情况的出现。
(1)HDFS的Web管理页面,打不开该节点的文件浏览页面。
(2)后台运行脚本(如HIVE),会出现莫名其妙的假死状态。
(3)在删除和增加节点的时候,会让数据迁移处理时间增长,甚至不能正常完成相关操作。
执行命令service iptables stop关闭防火墙,验证防火墙关闭service iptables status,如图2-28所示。
执行上面操作可以关闭防火墙,但重启后还会继续运行,所以还要设置关闭防火墙的自动运行,执行命令chkconfig iptables off,验证命令chkconfig --list |grep iptables,结果如图2-29所示。
2.3 节点之间的免密码通信
2.3.1 什么是SSH
SSH是Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定。SSH是建立在应用层和传输层基础上的安全协议,专为远程登录会话和其他网络服务提供安全性的协议,即利用SSH协议可以有效防止远程管理过程中的信息泄露问题,目前SSH较可靠。
从客户端来看,SSH提供两种级别的安全验证。第一种级别是基于口令的安全验证,只要知道账号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证正在连接的服务器就是想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。第二种级别是基于密匙的安全验证,这种验证需要依靠密匙,也就是必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。这里私钥只能自己拥有,所以称为私钥,公钥可以解开私钥加密的信息,同样私钥可以解开公钥加密的信息。如果要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用密匙进行安全验证。服务器收到请求之后,先在该服务器上相应的主目录下寻找相应的公用密匙,然后把它和发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用这个公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用私人密匙解密再把它发送给服务器完成安全认证。用这种方式,必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的,因为它没有私人密匙,但是整个登录的过程耗时较长。
2.3.2 复制虚拟机节点
关闭当前CentOS,然后右击CentOS,选择“管理” “克隆”,如图2-30所示。
分别完成CentOS1、CentOS2、CentOS3的克隆工作,然后分别启动,重复前面步骤修改网络,更改会话中的主机名(hostname X),然后用PieTTy登录测试连接。
如果发现各节点hosts文件不一致,可以登录node节点,把node节点上的hosts文件远程复制到其他节点,这样就不需要对每个节点单独修改hosts文件了。
使用scp命令scp fromAdd toAdd,即把fromAdd文件复制到toAdd中,如图2-31所示。
注意:复制过程会出现前面第一次连接时出现的提示:“The authenticity of host 'node1 (192.168.10.101)' can't be established.”无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?所谓“公钥指纹”,是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。首先确认连接方安全,输入“yes”按“Enter”键,输入node1密码连接成功,打开known_hosts可以看到生成的公钥,如图2-32所示。
以后再与node1连接时不会再出现以上提示,因为在known_hosts已经加入了node1,但仍然需要输入密码,后面依次完成其他节点的hosts复制(node2、node3)后,就需要解决免密码登录的问题了。
2.3.3 配置SSH免密码登录
Hadoop集群之间的交互是不用密码的,否则如果每次都必须输入密码会非常麻烦。SSH还提供了公钥登录,可以省去输入密码的步骤。
所谓“公钥登录”,原理很简单,就是用户将自己的公钥存储在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回去。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个。建议直接用创建的Hadoop用户进行SSH设置,因为设置只对当前用户有效,一般Hadoop主程序权限是哪个用户,就对哪个用户进行SSH设置。这里用户以root为例,登录root后进行SSH设置,当然也可以登录创建的用户进行设置,如图2-33所示。
运行上面的命令以后,系统会出现一系列提示,可以一路按“Enter”键。运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是公钥,后者是私钥。
远程主机将用户的公钥保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中,使用下面命令,如图2-34所示,在本机上生成authorized_keys,并验证能否对本机进行SSH无密码登录。
对其他所有节点重复上述操作后都生成自己的authorized_keys,通过ssh-copy-id命令复制各自的公钥到node2节点(可以随机指定某个存在的节点),图2-35所示是以node1节点为例,ssh-copy-id命令把node1节点的公钥复制到node2节点的authorized_keys文件,并验证是否配置成功。
图2-36所示是node2节点完成其他所有节点公钥复制后的authorized_keys文件。
由此可见,所有节点的公钥都已经加入了这个文件,也就是说其他节点可以免密码登录到node2节点,那么只要把这个文件远程复制到其他所有节点中去,那么节点之间就可以实现免密码登录了。即在node2节点上执行远程复制,如图2-37所示。
这样,节点之间的免密码登录就完成了。
2.4 Hadoop的启动和测试
2.4.1 格式化文件系统
就像新买的硬盘需要使用NTFS文件系统或者FAT32文件系统格式化一样,Hadoop文件系统也需要格式化在node节点上。
首先格式化namenode,执行命令hdfs namenode -format,在出现提示信息的最后第2行出现“Exiting with status 0”表示格式化成功,如图2-38所示。在linux中0表示成功,1表示失败,因此如果返回“Exiting with status 1”,就应该好好分析下前面的错误提示信息,一般来说是前面配置文件和hosts文件的问题,修改后同步到其他节点上以保持相同环境,再接着执行格式化操作。
注意:如果用的是Hadoop1.2或者更靠前的版本,会习惯用hadoop namenode -format格式化,这个时候会弹出一条WARNING信息,警告脚本已过时,但不会影响结果,因为Hadoop2.2版本对之前的Hadoop命令几乎都兼容。
格式化前也可以使用命令:hadoop namenode -format -clusterid clustername,先自定义集群名字;如果未定义,系统将自动生成。
2.4.2 启动HDFS
使用start-dfs.sh脚本命令开启Hadoop HDFS服务,如图2-39所示。
启动HDFS后,可以发现node节点作为namenode,node1、node2、node3作为datanode,而node1也作为Secondarynamenode。可以通过jps命令在各节点上进行验证。jps也是Windows上面的命令,表示开启的Java进程当出现如下结果,表示验证成功,如图2-40所示。
同样,也可以通过网络验证HDFS情况,如在Linux环境下,通过Web浏览器中输入http://node:50070,如图2-41所示。当然也可以在Windows环境中通过该URL访问,只需修改如下文件:C:\Windows\System32\drivers\etc\hosts,在其中添加192.168.10.100 node即可。
2.4.3 启动Yarn
在主节点node上,执行命令start-yarn.sh,如图2-42所示。通过下面的输出,可以看到node节点已经作为了一个resourcemanager,而其他3个节点分别作为nodemanager。
和验证HDFS一样,可以通过jps查看各个节点启动的进程,当然最方便的是输入地址:http://node:8088/,如图2-43所示。
2.4.4 管理JobHistory Server
启动JobHistory Server,通过Web控制台查看集群计算的任务的信息,执行如下命令:mr-jobhistory-daemon.sh start historyserver,如图2-44所示。
通过访问http://node:19888/,可以查看任务执行历史信息,如图2-45所示,因现在没有运行过任何任务,所以显示为空。
JobHistory Server是个后台进程,不使用的情况下可以关闭以节约资源,终止JobHistory Server执行如下命令:mr-jobhistory-daemon.sh stop historyserver。
2.4.5 集群验证
可以使用Hadoop自带的WordCount例子进行集群验证。这个例子为/share/Hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar,下面的命令都会在本书后面章节讲到,可以先不用理会具体意思。
首先,在HDFS上创建目录,执行命令:
目录/data/wordcount用来存储Hadoop自带的WordCount例子的数据文件,运行这个MapReduce任务的结果输出到/output/wordcount目录中。
将本地文件上传到HDFS中(这里上传一个配置文件),执行:
可以查看上传后的文件情况,执行如下命令:
下面,运行WordCount案例,执行如下命令:
通过http://node:8088/,可以监视节点的运行情况,如图2-46所示。
运行结束后可以通过命令hdfs dfs -cat /output/wordcount/part-r-00000,查看结果。
2.4.6 需要了解的默认配置
在Hadoop2.2.0中,Yarn框架有很多默认的参数值,但在机器资源不足的情况下,需要修改这些默认值来满足一些任务需要。如可以根据实际修改下单节点所用物理内存,申请的CPU资源等。
NodeManager和ResourceManager都是在yarn-site.xml文件中配置的,而运行MapReduce任务时,是在mapred-site.xml中进行配置的。
表2-6所示为相关的参数及其默认值情况。
2.5 动态管理节点
2.5.1 动态增加和删除datanode
管理大型集群时,有些机器可能会出现异常,这个时候就需要把它从集群中清除。等待修复好后加入集群中去。如果每次都是通过修改slaves文件,然后格式化集群,这不但浪费大量时间,也会影响正在执行的任务。
总的来说,正确的做法是优先在主节点上做好配置工作,然后在具体机器上进行相应进程的启动/停止操作。HDFS默认的超时时间为10分30秒。这里暂且定义超时时间为timeout,计算公式:
Hadoop上的心跳监控进程(HeartbeatMonitor)会定期的检测已注册的数据节点的心跳包,每一次检测间隔heartbeatRecheckInterval,默认的heartbeat.recheck.interval大小为5分钟,心跳间隔(dfs.heartbeat.interval)默认的大小为3秒,NameNode节点是根据数据节点上一次发送的心跳包时间和现在的时间差是否超出timeout来判断它是否已处于dead状态。需要注意的是hdfs-site.xml配置文件中的heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat. interval的单位为秒。
下面是动态增删datanode的步骤。
1.修改配置文件
在namenode下修改配置文件,如果集群版本是Hadoop0.x,配置存储在文件conf/hadoop-site.xml中;在Hadoop2.x中变化很大,文件位置为conf/hdfs-site.xml,需配置的参数名为dfs.namenode.hosts和fs.namenode.hosts.exclude。
参数说明:
dfs.hosts,定义了允许与namenode通信的datanode列表文件,如果值为空,所有slaves中的节点都会被加入这个许可列表。
dfs.hosts.exclude,定义了不允许与namenode通信的datanode列表文件,如果值为空,slaves中的节点将没有一个会被阻止通信。
如修改hdfs-site.xml,添加:
如果不需要允许列表,就不要创建对应项了,这样就表示所有slaves节点都允许通信。datanode-allow.list与datanode-deny.list分别为允许列表和阻止列表,需要用户自己创建,一行写一个主机名。后者优先级比前者大,也就是说最重要的是datanode-deny.list。
2.添加一个节点
(1)新的datanode节点做好相关配置工作(SSH配置、Hadoop配置、IP配置等)。
(2)主节点上的slaves文件列表加入该datanode的主机名(非必须,方便以后重启cluster用)。
(3)若有datanode-allow.list文件,在主节点的datanode-allow.list中加入该datanode的主机名,没有的话可以自己创建后加入。
(4)在该datanode上启动datanode进程,运行:hadoop-daemon.sh start datanode。
3.删除一个节点
(1)在主节点上修改datanode-deny.list(同上,没有的话可以自己创建),添加要删除的机器名。
(2)在主节点上刷新节点配置情况:hadoop dfsadmin –refreshNodes。
(3)此时在Web UI上就可以看到该节点变为Decommissioning状态,过一会就变为Dead了。也可以通过hadoop dfsadmin -report命令查看。
(4)在slave上关闭datanode进程(非必须),运行:hadoop-daemon.sh stop datanode。
4.重新加入各个删除的节点
(1)在主节点上的datanode-deny.list删除相应机器。
(2)在主节点上刷新节点配置情况:hadoop dfsadmin –refreshNodes。
(3)在欲加入的节点上重启datanode进程:hadoop-daemon.sh start datanode。
注意:如果之前没有关闭该slave上的datanode进程,需要先关闭再重新启动。
2.5.2 动态修改TaskTracker
以下步骤为动态修改TaskTracker的步骤。
1.修改配置文件
对于Hadoop2.x下在namenode下修改配置文件conf/mapred-site.xml。关键参数mapred. hosts和mapred.hosts.exclude。
参数说明:
mapreduce.jobtracker.hosts.filename,定义允许与Jobtracker节点通信的节点列表文件,如果为空,所有节点都可以与之通信。
mapreduce.jobtracker.hosts.exclude.filename,定义不允许与Jobtracker节点通信的节点列表文件,如果为空,没有一个节点会被阻止与之通信。
如修改mapred-site.xml,添加参数:
同前面一样,创建value所指定的文件,一行写一个主机名。
2.添加
(1)在新的从节点上做好相关配置工作(SSH配置、Hadoop配置、IP配置等)。
(2)主节点上的slaves列表文件加入该从节点(非必须,方便以后重启集群用)。
(3)在tasktracker-allow.list中加入该从节点主机名,若没有可以自建。
(4)在这个从节点上启动tasktracker进程。运行hadoop-daemon.sh start tasktracker。
3.删除
不建议直接在slave上通过hadoop-daemon.sh stop tasktracker命令关掉tasktracker,这会导致namenode认为这些机器暂时失联,因在一个超时时间内(默认10min+30s)依然假设它们是正常的,还会将任务发送给它们。正常删除步骤应为
(1)在主节点上修改tasktracker-deny.list,(同上,没有的话自建),添加相应机器。
(2)在主节点上刷新节点配置情况,执行命令hadoop mradmin -refreshNodes。
(3) 在slave上关闭tasktracker进程(非必须),执行命令hadoop-daemon. shstoptasktracker。
4.重新加入各个删除的节点
(1)在主节点的tasktracker-deny.list删除相应机器。
(2)在主节点上刷新节点配置情况,执行命令hadoop mradmin –refreshNodes。
(3)在slave上重启tasktracker进程,执行命令hadoop-daemon.sh start tasktracker。
注意:如果之前没有关闭该slave上的tasktracker进程,需要先关闭再重新启动。
2.6 小结
本章主要介绍了如何部署和配置一个Hadoop集群,最重要的是网络配置和集群参数配置。要注意搭建这个集群的步骤顺序不可颠倒,并且养成做好一步就检验一下的习惯。在了解主要配置参数的基础上能够根据实际情况调整配置参数,也能根据实际情况增删节点,对于Hadoop任务要知道如何在集群上提交和运行。