现在在学习hadoop,熬了一两天,看了很多的博客,学到了很多的知识,是前人的无私奉献,让我在hadoop的安装部署上少走了不少弯路,特此感谢。如果你想尝试伪分布式的部署hadoop,可以参考以下面这篇博客:
http://www.cnblogs.com/myresearch/p/hadoop-Standalone-Pseudo-Distributed-operation.html
个人觉的写的很好,笔者也是参考的他们首先在单机上部署成功了伪分布式的hadoop,至于本篇文章,是我总结他人技术博客,加上自己在安装部署过程中遇到的问题,汇总而来,大神可以无视。
下面让我们一起在集群中来部署hadoop。
在MACOS上使用VMware Fusion 模拟的集群环境,本质上来说,两台机器和两台以上的机器的部署大同小异,只不过机器多了罢了,没特别大的区别。
OS: CentOS6.8 64位
hadoop version: 2.5.2
虚拟机选择桥接模式,在编辑->网络设置进入后,选择自己的网卡,而不要选择默认的自动。然后在centOS上,配置IP信息。
vim /etc/sysconfig/network
#进入之后,HOSTNAME=xxx,xxx修改为自己的主机名,可以默认。
vim vim /etc/sysconfig/network-scripts/ifcfg-eth0
#这里进行ip等信息的配置
network文件中的配置如下:
TYPE=Ethernet
ONBOOT=yes #是否启动时运行
NM_CONTROLLED=yes
BOOTPROTO=static #使用静态IP,而不是由DHCP分配IP
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
PEERDNS=yes
PEERROUTES=yes
IPADDR=192.168.1.4 #指定本机IP地址
NETMASK=255.255.255.0 #指定子网掩码
GATEWAY=192.168.1.1 #指定网关
#DNS的配置
vim /etc/resolv.conf
配置如下:
nameserver 8.8.8.8 #GOOGLE的DNS服务器
nameserver 61.144.56.100 #指定当前城市最近的DNS服务
nameserver 192.168.1.1 #指定经路由器上指定的DNS服务器
假若你的集群环境中有上百台机器,每次启动的时候,输入几百次的密码,我想是人都会疯掉,然后关于集群部署,个人觉得很多东西都是一台机器配置,其他机器直接copy就可以了,第一步配置ssh 无密码登录,对以后的工作会方便很多。
一般而言,centos 在安装的时候,默认安装了ssh的,我们也可以检测一下,使用如下命令:
rpm -qa | ssh
如果有输出,说明已经安装好了,要是还是不放心,那你就yum install ssh* 一下吧。
如果此时你使用
$ ssh localhost
是需要密码才能登录的,那么通过下面的配置,就可以实现无密码登录了。
首先在/root 目录下建立 .ssh 文件夹(.ssh 文件夹是隐藏的,使用ls -a 命令可以看到文件夹是否已经存在,存在不需要再自己建)。
$ mkdir /root/.ssh
$ cd ~/.ssh/
$ ssh-keygen -t rsa
$ cat id_rsa.pub >> authorized_keys
再次使用
ssh localhost
就可以无密码登录到本机了,下面将秘钥文件写到其他机器的authorized_keys文件中,使用下面命令可以简单实现
ssh-copy-id root@node1
这样安装提示操作以后呢,基本上就可以了。
首先去下载匹配的jdk,笔者下载的是jdk1.8的rpm包,这个没什么好说的,下载好了以后使用下面命令进行安装:
rpm -ivh jdk-xxxx.rpm
然后配置jdk的环境,配置方法如下(这里网上很多,都可以参考,会的略过吧)
vim /root/.bashrc
然后在最后面加上如下:
其中JAVA_HOME=XXX 后面是你的jdk安装目录。
在终端敲java -version 出现内容基本就是安装好了。
做完了以上几步后,现在可以克隆我们已经配置好的虚拟机了,因为很多都是重读的,这里有一个坑要注意一下,刚才配置网络的时候,如果直接克隆虚拟机,网卡配置那里的IP和MAC地址不会变,需要自己改过来,IP改成同一网段下不一样的就好了。
# 修改ip地址
vim /etc/sysconfig/network-scripts/ifcfg-eth0
这里需要注意一下,hadoop官网下载的编译好的文件是基于32位平台编译的,如果你的Linux版本是64位的,这里需要下载源码进行编译,否则在启动hadoop的时候会报平台错误。
编译hadoop的过程网上很多,而且不是很复杂,这里不多写,如果有人觉得麻烦,不想搞,我这里提供hadoop2.5.2编译好的包下载,下载链接:
http://pan.baidu.com/s/1dEPLAO5
hadoop不需要再install安装,只需要将其配置文件配置好了,然后用几个脚本就可以启动hadoop了,下面介绍下2.5.2的配置过程。配置文件在/hadoop/etc/hadoop/ 下
打开上述文件后,修改jdk的目录即可,如下:
export JAVA_HOME=/usr/java/jdk1.7.0_79
<configuration>
<property>
<name>fs.default.namename>
<value>hdfs://node1:9000value>
<final>truefinal>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/opt/hadoop/tmpvalue>
property>
<property>
<name>ds.default.namename>
<value>hdfs://node1:54310value>
<final>truefinal>
property>
<property>
<name>fs.checkpoint.periodname>
<value>3600value>
<description>The number of seconds between two periodic checkpoints.
description>
property>
<property>
<name>fs.checkpoint.sizename>
<value>67108864value>
property>
configuration>
<configuration>
<property>
<name>dfs.namenode.name.dirname>
<value>file:/opt/hadoop/dfs/namevalue>
<final>truefinal>
property>
<property>
<name>dfs.datanode.data.dirname>
<value>file:/opt/hadoop/dfs/datavalue>
<final>truefinal>
property>
<property>
<name>dfs.replicationname>
<value>3value>
property>
<property>
<name>dfs.http.addressname>
<value>node1:50070value>
<description>
The address and the base port where the dfs namenode web ui will listen on.
If the port is 0 then the server will start on a free port.
description>
property>
<property>
<name>dfs.namenode.secondary.http-addressname>
<value>node2:50090value>
property>
configuration>
这个文件是不存在的,可以利用mapred-site.xml.template复制一份,步骤如下:
cp mapred-site.xml.template mapred-site.xml
然后编辑mapred-site.xml,内容如下:
<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
<property>
<name>mapreduce.jobhistory.addressname>
<value>node1:10020value>
property>
<property>
<name>mapreduce.jobhistory.webapp.addressname>
<value>node1:19888value>
property>
configuration>
根据上面的配置,我们在hadoop的目录下创建几个目录
cd /hadoop/
mkdir tmp
mkdir -p /data/name
cd /hadoop/bin/
./hdfs namenode -format
cd /hadoop/sbin/
./start-dfs.sh
./start-yarn.sh
我为了偷懒,直接运行的是:
./start-all.sh
启动截图如下:
如果没有警告或者错误,说明已经成功了,我们可以使用jps命令查看,直接在终端键入jps然后回车看系统运行的hadoop进程:
1. NameNode 节点
2. SecondNameNode节点
3. 其他节点DataNode
配置过程参考过很多文件,总共搭建学习过两次,配置环境过程可以学到很多东西,感谢前辈的分享。上面的搭建过程可能不经详细,如有问题,欢迎大家指出。
下面就是开始学习如何写MapRduce程序了。