准备工作
系统安装环境:Linux CentOS 32bit系统。
两台相同环境的Liunx虚拟机,Master IP:192.168.15.129,Slave IP:192.168.15.131。在进行单机上的Hadoop安装配置时,使用Master主机。
两台主机中都配置完成了SSH无密码登录,以满足配置Hadoop集群时的要求。Linux系统环境下配置SSH无密码登录,详见:CentOS6.4配置SSH无密码登录
Linux单机环境中Hadoop的安装与配置
1. 下载Hadoop安装文件
在之前的一片文章中提到过Hadoop各个版本的下载路径:Hadoop Releases。这里使用hadoop-2.6.4的版本,并将下载好的安装文件拷贝到linux Master虚拟机中,存放目录为:/home/hadoop/Desktop/hadoop-2.6.4.tar.gz
使用root用户登录Master主机,创建hadoop安装目录/usr/hadoop/:
sudo mkdir /usr/hadoop
解压hadoop安装文件到安装目录:
sudo tar -zxvf /home/hadoop/Desktop/hadoop-2.6.4.tar.gz -C /usr/hadoop
2. 单机hadoop配置
Hadoop默认配置是以非分布式模式运行,即单Java进程,方便进行调试。可以执行附带的例子WordCount来感受下Hadoop的运行。例子将Hadoop的配置文件作为输入文件,统计符合正则表达式dfs[a-z.]+
的单词的出现次数。
使用用户:root
工作目录:/usr/hadoop/hadoop-2.6.4/
cd /usr/hadoop/hadoop-2.6.4
mkdir input
cp etc/hadoop/*.xml input
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar grep input output 'dfs[a-z.]+'
cat ./output/*
执行成功后,在输出文件夹中查看相关信息,输出的结果是符合上述正则表达式的单词dfsadmin出现了一次。
在次运行会提示出错,需要删除:./output:
rm -R ./output
3. 单机hadoop伪分布式配置
这里将该部分内容单独的写成了一章,详情见:[Hadoop] Linux(CentOS6.4)单机Hadoop伪分布式配置
Hadoop集群的配置安装
Hadoop集群安装配置过程基本和单机版是一样的,主要是在配置文件方面有所区别,以及ssh无密登陆要求master和slave能够互相无密登陆。(!!!重要说明:因为之前作为Slave的主机192.168.15.131的网络配置异常,因此,之后的操作将使用IP:192.168.15.139的主机作为Slave,继续后面的设置,除了IP改变外,其他的配置均不变!!!)
Liunx虚拟机环境:
- master IP:192.168.15.129
- slave IP:192.168.15.139
准备工作:
分别修改master主机和slave主机中的hostname以方便区分集群的配置环境。在master主机中,修改/etc/hosts文件(需要root用户),添加集群中所有的主机信息(这里只有两台主机):
文件内容如下,高亮文本处为新增加的部分:
修改上述文件完成后,修改重新启动虚拟机才能生效。同时注意:同样的配置需要在集群中所有主机中进行!
提示:在有些修改主机hostname的方式中,需要修改/etc/hostname文件,将本机的ip和hostname添加到该文件中。但在我的实验环境下,该目录中不存在/hostname文件。但经过测试,只需要修改hosts文件即可满足要求,还有临时修改hostname的方式,详见页面最后的参考资料。
配置完成master主机和slave主机的hostname之后,对相互主机间的ssh无密码登录进行测试,保证相互的SSH无密码可以正常登录:
# master主机中
ssh slave
# slave主机中
ssh master
hadoop集群设置需要修改的配置文件(所在目录etc/hadoop/)如下:
- slaves
- core-site.xml
- hdfs-site.xml
- mapred-site.xml
- yarn-site.xml
实现步骤:首先在Master主机上,配置好需要修改的配置文件,在将Master主机上配置好的hadoop文件夹打包,发送至各个Slave主机上,进行解压安装。
1. Master主机Hadoop集群配置,master主机中修改hadoop配置文件如下:
工作目录:/usr/hadoop/hadoop-2.6.4/
登录用户:hadoop(保证/usr/hadoop目录下所有文件夹和文件的权限属于hadoop:hadoop)
(1) slave文件
slave
(2) core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/hadoop/hadoop-2.6.4/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
(3) hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/hadoop/hadoop-2.6.4/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/hadoop/hadoop-2.6.4/tmp/dfs/data</value>
</property>
</configuration>
(4) mapre-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(5) yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
2. 打包Master主机上配置完成的hadoop文件夹,发送至各个Slave机器上
Master主机中的hadoop配置完成之后,将所在的目录文件(/usr/hadoop)打包,使用scp命令发送至slave主机中,进行解压:
cd /usr
sudo tar -zcf ./hadoop.tar.gz ./hadoop
在slave主机中,解压hadoop.tar.gz文件至/usr/目录下(与master主机中的hadoop解压目录相同):
sudo tar -zxf /home/hadoop/tmp/hadoop.tar.gz -C /usr
sudo chown -R hadoop:hadoop /usr/hadoop
3. 在Master主机上启动hadoop集群
工作目录:/usr/hadoop/hadoop-2.6.4
(1) 初始化NameNode
bin/hdfs namenode -format
出现如下信息,说明初始化成功:
(2) 启动Hadoop守护进程
sbin/start-dfs.sh
(3) 启动集群管理器yarn
sbin/start-yarn.sh
4. 通过jps命令查看集群中各个节点所启动的进程:
在Master主机中:
在Slave主机中:启动了DataNode和NodeManager进程
5. 也可以使用bin/hdfs dfsadmin -report查看DataNode是否正常启动:
这里集群没有正常启动,同样,可以通过查看hadoop的日志记录,发现错误并解决:
也可以通过Web页面看到查看DataNode和NameNode的状态:http://master:50070/
发现问题:
通过查看slave主机(因为datanode的启动在slave节点上)中的/usr/hadoop/hadoop-2.6.4/logs/hadoop-hadoop-datanode-slave.log的日志文件,发现:
解决问题:
详细的解决方法见另一篇文章:
[Hadoop] 解决Hadoop集群启动时DataNode: Problem connecting to server的问题
解决问题后,Hadoop集群正常启动如下图:
6. 关闭hadoop集群也是在Master主机上运行:
sbin/stop-dfs.sh
sbin/stop-yarn.sh
至此,hadoop集群配置成功。之后,进行spark集群的配置详解。