Hadoop配置主要事项
1、 保证Master和Slave能够ping通;
2、 配置/etc/hosts文件;
3、 能够ssh无密码切换各台主机;
4、 安装sun公司的jdk,在/etc/profile中设置好环境变量;
5、 下载Hadoop,安装、配置、搭建Hadoop集群;
1.Hadoop简介
Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。
对于Hadoop的集群来讲,可以分成两大类角色:Master和Salve。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。MapReduce框架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点的TaskTracker共同组成的。主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交时,JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。
从上面的介绍可以看出,HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。
2.环境说明
集群中包括4个节点:1个Master,3个Salve,节点之间局域网连接,可以相互ping通。节点IP地址分布如下:
机器名称 |
IP地址 |
Master.Hadoop |
192.168.1.2 |
Salve1.Hadoop |
192.168.1.3 |
Salve2.Hadoop |
192.168.1.4 |
Salve3.Hadoop |
192.168.1.5 |
四个节点上均是CentOS6.0系统,并且有一个相同的用户hadoop。Master机器主要配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行;3个Salve机器配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。其实应该还应该有1个Master机器,用来作为备用,以防止Master服务器宕机,还有一个备用马上启用。后续经验积累一定阶段后补上一台备用Master机器。
3.网络配置
Hadoop集群要按照1.2小节表格所示进行配置,我们在"Hadoop集群(第1期)"的CentOS6.0安装过程就按照提前规划好的主机名进行安装和配置。如果实验室后来人在安装系统时,没有配置好,不要紧,没有必要重新安装,在安装完系统之后仍然可以根据后来的规划对机器的主机名进行修改。
下面的例子我们将以Master机器为例,即主机名为"Master.Hadoop",IP为"192.168.1.2"进行一些主机名配置的相关操作。其他的Slave机器以此为依据进行修改。
1)查看当前机器名称
用下面命令进行显示机器名称,如果跟规划的不一致,要按照下面进行修改。
hostname命令查看主机名
2)修改当前机器名称
假定我们发现我们的机器的主机名不是我们想要的,通过对"/etc/sysconfig/network"文件修改其中"HOSTNAME"后面的值,改成我们规划的名称。
这个"/etc/sysconfig/network"文件是定义hostname和是否利用网络的不接触网络设备的对系统全体定义的文件。
设定形式:设定值=值
"/etc/sysconfig/network"的设定项目如下:
NETWORKING 是否利用网络
GATEWAY 默认网关
IPGATEWAYDEV 默认网关的接口名
HOSTNAME 主机名
DOMAIN 域名
用下面命令进行修改当前机器的主机名(备注:修改系统文件一般用root用户)
vim /etc/sysconfig/network
3)修改当前机器IP
假定我们的机器连IP在当时安装机器时都没有配置好,那此时我们需要对"ifcfg-eth0"文件进行配置,该文件位于"/etc/sysconfig/network-scripts"文件夹下。
在这个目录下面,存放的是网络接口(网卡)的制御脚本文件(控制文件),ifcfg- eth0是默认的第一个网络接口,如果机器中有多个网络接口,那么名字就将依此类推ifcfg-eth1,ifcfg-eth2,ifcfg- eth3,……。
这里面的文件是相当重要的,涉及到网络能否正常工作。
设定形式:设定值=值
设定项目项目如下:
DEVICE接口名(设备,网卡)
BOOTPROTOIP的配置方法(static:固定IP, dhcpHCP, none:手动)
HWADDRMAC地址
ONBOOT系统启动的时候网络接口是否有效(yes/no)
TYPE 网络类型(通常是Ethemet)
NETMASK网络掩码
IPADDR IP地址
IPV6INITIPV6是否有效(yes/no)
GATEWAY默认网关IP地址
查看"/etc/sysconfig/network-scripts/ifcfg-eth0"内容,如果IP不复核,就行修改。
修改ip:vim /etc/sysconfig/network-scripts/ifcgf-eth0
4.安装JDK,配置java环境变量
1.解压jdk-7u71-linux-i586.gz到/usr/java目录下
2.配置java环境变量
vi /etc/profile
在文件后面添加下列几句,配值java坏境变量
# setjava environment
exportJAVA_HOME=/usr/java/jdk1.6.0_31
exportCLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
exportPATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
输入source /etc/profile 让它生效;
验证是否成功
java –version
5.配置ssh无密码访问
设置master和slave之间ssh无密码访问
master #ssh-keygen -t rsa
slave #ssh-keygen -t rsa
master # scp .ssh/id_rsa.pub root@Slave1.Hadoop:/root/.ssh/authorized_keys
slave # scp .ssh/id_rsa.pub root@Master.Hadoop:/root/.ssh/authorized_keys
6.hadoop安装和配置
6.1 将Hadoop文件解压到/usr/hadoop
6.2 修改hadoop的文件所有者为hadoop用户chown –R hadoop:hadoop hadoop
最后在"/usr/hadoop"下面创建tmp文件夹,把Hadoop的安装路径添加到"/etc/profile"中,修改"/etc/profile"文件(配置java环境变量的文件),将以下语句添加到末尾,并使其有效:
# set hadoop path
exportHADOOP_HOME=/usr/hadoop
exportPATH=$PATH :$HADOOP_HOME/bin
重启"/etc/profile"
6.3 配置hadoop
1)配置hadoop-env.sh
hadoop1.x版本,该"hadoop-env.sh"文件位于"/usr/hadoop/conf"目录下,其他版本略有不同
在文件的末尾添加下面内容。
# setjava environment
exportJAVA_HOME=/usr/java/jdk1.6.0_31
说明:Hadoop配置文件在conf目录下,之前的版本的配置文件主要是Hadoop-default.xml和Hadoop-site.xml。由于Hadoop发展迅速,代码量急剧增加,代码开发分为了core,hdfs和map/reduce三部分,配置文件也被分成了三个core-site.xml、hdfs-site.xml、mapred-site.xml。core-site.xml和hdfs-site.xml是站在HDFS角度上配置文件;core-site.xml和mapred-site.xml是站在MapReduce角度上配置文件。
2)配置core-site.xml文件
修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS的地址和端口号。
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/tmp</value>
(备注:请先在 /usr/hadoop 目录下建立 tmp 文件夹)
<description>A base for other temporary directories.</description>
</property>
<!--file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.2:9000</value>
</property>
</configuration>
备注:如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被干掉,必须重新执行format才行,否则会出错。
3)配置hdfs-site.xml文件
修改Hadoop中HDFS的配置,配置的备份方式默认为3。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
(备注:replication是数据副本数量,默认为3,salve少于3台就会报错)
</property>
<configuration>
4)配置mapred-site.xml文件
修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>http://192.168.1.2:9001</value>
</property>
</configuration>
5)配置masters文件
vi master
在master中输入主服务器名称:master即可
6)配置slaves文件(Master主机特有)
有两种方案:
(1)第一种
去掉"localhost",每行只添加一个主机名,把剩余的Slave主机名都填上。
例如:添加形式如下
Slave1.Hadoop
Slave2.Hadoop
Slave3.Hadoop
(2)第二种
去掉"localhost",加入集群中所有Slave机器的IP,也是每行一个。
例如:添加形式如下
192.168.1.3
192.168.1.4
192.168.1.5
原因和添加"masters"文件一样,选择第二种方式。
master的配置到此结束了,剩下的就是slave的配置;
slave配置比较方便,可以选择解压hadoop安装文件,然后配置,在这里采用一个简单的方法,直接将master主机上的hadoop文件拷贝到slave的/usr/hadoop下即可;
使用命令:scp -r /usr/hadoop root@服务器IP:/usr/
chown -R hadoop:hadoop(用户名:用户组)hadoop(文件夹)
接着在"Slave1 .Hadoop"上修改"/etc/profile"文件(配置 java 环境变量的文件),将以下语句添加到末尾,并使其有效(source /etc/profile):
# set hadoopenvironment
exportHADOOP_HOME=/usr/hadoop
exportPATH=$PATH :$HADOOP_HOME/bin
如果不知道怎么设置,可以查看前面"Master.Hadoop"机器的"/etc/profile"文件的配置,到此为此在一台Slave机器上的Hadoop配置就结束了。
1)格式化HDFS文件系统
在"Master.Hadoop"上使用普通用户hadoop进行操作。(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh)
hadoopnamenode -format
2)关闭防火墙
service iptablesstop
3)启动hadoop
start-all.sh
3)验证hadoop
(1)验证方法一:用"jps"命令
在Master上用 java自带的小工具jps查看进程。
如果在查看Slave机器中发现"DataNode"和"TaskTracker"没有起来时,先查看一下日志的,如果是"namespaceID"不一致问题,采用"常见问题FAQ6.2"进行解决,如果是"No route to host"问题,采用"常见问题FAQ6.3"进行解决。
(2)验证方式二:用"hadoopdfsadmin -report"
用这个命令可以查看Hadoop集群的状态。
1)访问"http:192.168.1.2:50030"
2)访问"http:192.168.1.2:50070"
hadoop 1.0.0版本,安装完之后敲入hadoop命令时,老是提示这个警告:
Warning:$HADOOP_HOME is deprecated.
经查hadoop-1.0.0/bin/hadoop脚本和"hadoop-config.sh"脚本,发现脚本中对HADOOP_HOME的环境变量设置做了判断,笔者的环境根本不需要设置HADOOP_HOME环境变量。
解决方案一:编辑"/etc/profile"文件,去掉HADOOP_HOME的变量设定,重新输入hadoop fs命令,警告消失。
解决方案二:编辑"/etc/profile"文件,添加一个环境变量,之后警告消失:
exportHADOOP_HOME_WARN_SUPPRESS=1
解决方案三:编辑"hadoop-config.sh"文件,把下面的"if - fi"功能注释掉。