参考多个文档,终于把hadoop2.4.1集群环境搭建成功。因参考文档大多是hadoop2.2版本,所以在这里重新整理一份hadoop2.4.1版本的与大家分享。文档中如有错误的地方,欢迎大家留言指出,我看到后会第一时间确认修改。
在centos6.5-64bit上部署hadoop2.4.1分布式环境。
我们不是土豪,没那么多机器给我们玩。没关系,我们使用虚拟机来部署。准备6台虚拟机,全部安装linux系统。centos、debian等都可以,但是这里用CentOS进行说明。1个maste节点,3个slave节点,另外加1个client节点用来部署nutch环境,给hdfs喂数据。最后1个monitor节点,后期用作部署监控平台,见下表:
主机名 | IP | 系统 | 角色 | 说明 |
master.hadoop | 192.168.122.100 | CentOS 6.5 64bit | NameNode | 负责总管分布式数据和分解任务执行 |
slave1.hadoop | 192.168.122.101 | CentOS 6.5 64bit |
DataNode | 负责分布式数据存储和任务的执行 |
slave2.hadoop |
192.168.122.102 | CentOS 6.5 64bit |
DataNode |
负责分布式数据存储和任务的执行 |
slave3.hadoop |
192.168.122.103 | Debian 7.5 64bit |
DataNode |
负责分布式数据存储和任务的执行 |
client.hadoop | 192.168.122.200 | CentOS 6.5 64bit |
nutch solr 中文分词 |
利用Nutch网络爬虫给hdfs喂数据 |
monitor.hadoop | 192.168.122.201 | Debian 7.5 64bit |
Ganglia Nagios |
监控 |
hadoop要求所有节点使用相同的用户、相同的目录结构部署(没有证实)。
不过我的理解:
1.使用相同的用户部署。这点比较好理解,master管理slave的时候需要登录slave节点执行脚本。如果用户不相同,脚本不能识别使用哪个用户登录slave节点。
2.不一定使用相同的路径。因为有环境变量来指向部署的路径,所以不用一定部署到相同的路径。但是如果部署路径不相同的话,管理部署不方便。所以还是尽量相同吧。
根据上面的表格配置虚拟机ip和hostname,配置好以后在/etc/hosts文件添加以下解析。有条件配置了自己的DNS服务器的话,这步可以改成在DNS服务器中增加以下解析,然后所有节点DNS地址指向自己的DNS服务器IP。只要保证所有节点主机名称解析IP一致就达到目的了。
192.168.122.100 master.hadoop 192.168.122.101 slave1.hadoop 192.168.122.102 slave2.hadoop 192.168.122.103 slave3.hadoop 192.168.122.104 client.hadoop 192.168.122.105 monitor.hadoop
完成后验证每个节点是否都能够正确解析。
所有节点创建hadoop用户,master节点与slave节点之间配置ssh无密码登录。
完成后,在master.hadoop上ssh slave1.hadoop看看能否无密码登录成功。同样的测试master.hadoop到所有节点是否能够无密码登录成功。
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
这里我们选择下载linux x64版本的tar压缩包。 jdk-7u60-linux-x64.tar.gz
tar -zxvf jdk-7u60-linux-x64.tar.gz mv jdk1.7.0_60/ /usr/lib/
vim /etc/profile 加入JAVA_HOME等环境变量
# JAVA export JAVA_HOME=/usr/lib/jdk1.7.0_60 export JRE_HOME=/usr/lib/jdk1.7.0_60/jre export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
source /etc/profile使环境变量生效,查看java版本。能够查看到版本号,说明JAVA环境配置成功了。
[root@master ~]#source /etc/profile [root@master ~]#java -version java version "1.7.0_55" OpenJDK Runtime Environment (rhel-2.4.7.1.el6_5-x86_64 u55-b13) OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)
所有机器都要安装JDK。所有节点服务器的JDK使用相同的版本。
slave节点的配置跟master节点是一样的。所以我们只要部署好master节点,slave节点等master节点配置好以后scp拷贝或者rsync同步到slave节点就可以了。
安装hadoop有两种方式,一种是下载hadoop二进制编译包。配置好环境变量。配置好hadoop配置文件就可以了。另外一种就是编译安装了。两种方式我都介绍一下,实际部署的时候选择其中一种就可以了。
下载tar包,并解压
#wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.4.1/hadoop-2.4.1.tar.gz #tar zxvf hadoop-2.4.1.tar.gz #mv hadoop-2.4.1/ /opt/ #cd /opt #chown -R hadoop.hadoop hadoop-2.4.1/
配置环境变量vim /etc/profile,加入HADOOP_HOME等环境变量,其中注释掉的HADOOP_ROOT_LOGGER=DEBUG,console在调试时可以打开,打开后输出的DEBUG日志比较详细。
# HADOOP export HADOOP_HOME=/opt/hadoop export HADOOP_PREFIX=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_PREFIX export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_PREFIX/lib/native export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop export HADOOP_HDFS_HOME=$HADOOP_PREFIX export HADOOP_MAPRED_HOME=$HADOOP_PREFIX export HADOOP_YARN_HOME=$HADOOP_PREFIX #export HADOOP_ROOT_LOGGER=DEBUG,console export LD_LIBRARY_PATH=$HADOOP_PREFIX/lib/native export PATH=$PATH:$HADOOP_HOME/bin
需要注意的是,apache官方提供的编译版中的native library是32bit的。运行在64bit系统启动集群时会报WARN提示,要解决这个WARN有两个方法,一个是编译源码包,得到64bit的nativ library文件后替换原来的32bit文件。 另一个方法就是网上找别人编译好的64bit native library库文件,下载替换。
首先需要安装一些依赖包
yum install lzo-devel zlib-devel gcc gcc-c++ autoconf automake libtool ncurses-devel openssl-devel cmake
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://master.hadoop:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> </configuration>
<configuration> <property> <name>dfs.nameservices</name> <value>hadoop-cluster1</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>master.hadoop:50090</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///home/hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///home/hadoop/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobtracker.http.address</name> <value>master.hadoop:50030</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master.hadoop:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master.hadoop:19888</value> </property> </configuration>
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master.hadoop:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master.hadoop:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master.hadoop:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master.hadoop:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master.hadoop:8088</value> </property> </configuration>
slave1.hadoop slave2.hadoop slave3.hadoop