一,系统的基本配置
1,主机名的修改
修改/etc/sysconfig/network文件中HOSTNAME=hadoop1
2、IP地址配置
注意:如果虚拟机可以连接网络,可以跳过这个步骤
修改/etc/sysconfig/network-scripts/ifcfg-eth0,修改后的信息如下:
DEVICE="eth0"
#BOOTPROTO="dhcp"
BOOTPROTO="static"
HWADDR="00:0C:29:59:35:85"
IPV6INIT="no"
IPADDR=10.254.231.185 #本机ip,可用ifconfig查看
NETMASK=255.255.0.0 #子网掩码,可用ifconfig查看
GATEWAY=10.254.0.1 #网关,使用ip route show查看
DNS1=10.254.0.1 #可以与GATEWAY保持一致
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="9a604f00-87f1-4d6d-8cb3-6eac05a8ac01"
说明:仅加粗部分需要改动
3、主机名与ip地址做映射
修改/etc/hosts文件,修改后的信息如下:
#127.0.0.1 localhostlocalhost.localdomain localhost4 localhost4.localdomain4
#::1localhostlocalhost.localdomain localhost6 localhost6.localdomain6
10.254.231.185 hadoop1
用途:通过映射之后,局域网中,可以通过这个名字定位具体的计算机,集群各台服务器之间相互访问更方便。
4、防火墙关闭
chkconfig --level 0123456 iptables off
方便局域网中不同计算机之间的通信。(没有关闭防火墙的话,部分服务不能跨计算机进行访问,即部分端口是关闭的)
5、selinux关闭
(1)检查selinux状态
执行getenforce命令,如果结果显示 permissive 或disabled,你可以跳过这一步
(2)打开/etc/selinux/config文件,修改SELINUX=enforcing 为SELINUX=permissive
(3)重启系统
方便局域网中不同计算机之间的通信。
注意:SELinux 是部署在 Linux 系统中的安全增强功能模块,它通过对进程和文件资源采用 MAC(强制访问控制方式)为 Linux 系统提供了改进的安全性。
6、JDK安装
从网上下载jdk1.7以上64位linux版本。在此,我们安装jdk-7u60-linux-x64.rpm版本,下载后执行rpm -ivh jdk-7u60-linux-x64.rpm命令进行安装。然后用java -version 查看,如果显示下边信息,说明安装成功。
rpm -ivh jdk-7u60-linux-x64.rpm #安装jdk命令
[root@hadoop1 ~]# java -version
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)
在/etc/profile文件里添加JDK的环境变量:
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
二、 安装Hadoop
1、Hadoop的下载和解压
我从网上下载Hadoop的安装包,然后在所有的主机上解压即可(本次我们下载的hadoop-2.6.0-cdh5.10.1.tar.gz)。解压命令如下:
tar –xvf hadoop-2.6.0-cdh5.10.1.tar.gz
2、Hadoop系统环境变量的配置
在所有主机的/etc/profile文件中添加下边的信息
export HADOOP_HOME=/root/hadoop-2.6.0-cdh5.10.1
export PATH=$PATH:$HADOOP_HOME/bin
注释:/root/hadoop-2.6.0-cdh5.10.1实我们Hadoop的解压路径
四、 配置Hadoop
在所有的主机上做以下配置(也可以在一台主机上配置完后,拷贝到其他主机)。所有配置的都在/root/hadoop-2.6.0-cdh5.10.1/etc/hadoop目录下(Hadoop解压后目录里的etc/hadoop里)。
注意:去到自己安装Hadoop安装目录里的/etc/hadoop里面打开下面文件
1、core-site.xml的配置
<configuration>
<property>
<name>fs.defaultFS</name> #hdfs访问的唯一入口
<value>hdfs://hadoop1:8020</value>
</property>
</configuration>
2、hdfs-site.xml文件的配置
<configuration>
<property>
<name>dfs.permissions.superusergroup</name>
<value>root</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/nn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/dn</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop1:50070</value>
<description>
The address and the base port on which the dfsNameNode Web UI will listen.
</description>
</property>
<property>
<name>dfs.secondary.http-address</name>
<value>hadoop2:50070</value> #因为我们是装分布式,不改动这里,如果是伪分布式可以将这部分删除
<description>
The address and the base port on which the dfsNameNode Web UI will listen.
</description>
</property>
</configuration>
3、mapred-site.xml配置
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
4、yarn-site.xml配置
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop3</value>
</property>
<property>
<description>Classpath for typical applications.</description>
<name>yarn.application.classpath</name>
<value>
$HADOOP_CONF_DIR,
$HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
$HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
$HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
$HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*
</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data/yarn/local</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/data/yarn/logs</value>
</property>
<property>
<name>yarn.log.aggregation-enable</name>
<value>true</value>
</property>
<property>
<description>Where to aggregate logs</description>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/var/log/hadoop-yarn/apps</value>
</property>
</configuration>
6、 添加JAVA_HOME到hadoop-env.sh文件里
添加内容如下:
export JAVA_HOME=/usr/java/default
7、 添加所有的主机名到slaves文件里,如下所示:
hadoop1
hadoop2
hadoop3
三,分布式安装配置
1、创建新的虚拟机
在前边的伪分布式中我们已经有一台虚拟机hadoop1,接下来我们可以在hadoop1的基础之上克隆两台虚拟机。废话不多说我们可是克隆新的虚拟机,克隆前先关闭hadoop1。
(1)右击上图中的hadoop1,在下拉框中点击“管理”,然后再点击“克隆”,进入克隆虚拟机向导界面:
(2)点击“下一步”按钮,结果如下图:
(3)点击“下一步”按钮,结果如下图:
(4)选择“创建完整克隆”,然后点击“下一步按钮”,结果如下图:
(5)在虚拟机名称栏,设置虚拟机名称,此处我们设置为hadoop2,位置栏设置虚拟机创建的位置,此处我们设置为G:\vm\hadoop2,然后点击“完成”按钮,等待创建。结果如下图。
(6)创建完成后,如下图:
7、点击“关闭”按钮。这个时候我们进入到G:\vm目录会看到多了一个hadoop2目录,此目录就是我们刚才创建的hadoop2虚拟机。
2、hadoop2虚拟机配置和整理
(1)设置hadoop2的内存为1G(根据自己电脑配置进行设置,因为我的电脑内存为8G,所以hadoop1配置2G,hadoop2和hadoop3分别配置1G)。
右击hadoop1,选择设置,进入如下界面
(2)进入hadoop2虚拟机,需要清除DataNode数据写入目录信息(因为目录里有DataNode的编号信息,如不清除,DataNode只能启动一个)。登陆hadoop2后切换到root账号,root密码为:cloudera(我们在创建hadoop1时设定的密码)。然后执行删除命令:
切换到root账号的命令:
su root
然后输入你的账号密码就可以切换到root账号
清楚DataNode数据写入目录信息命令:
rm -rf /data/dn/*
(3)修改hadoop2系统内部的主机名为hadoop2
详细步骤参考本文档第一大项中的第1小项。
(4)设置hadoop2的mac地址
因为是克隆hadoop1,克隆后的eth0的MAC地址跟hadoop1一样,所以我们需要重新设定mac地址。详细步骤如下:
执行下边命令删除/etc/udev/rules.d/70-persistent-net.rules,然后重启hadoop2。
rm -rf /etc/udev/rules.d/70-persistent-net.rules
Hadoop重启后
修改/etc/sysconfig/network-scripts/ifcfg-eth0 中HWADDR
跟/etc/udev/rules.d/70-persistent-net.rules中的ATTR{address}一样。
也就修改mac地址一样。
(5)修改主机IP地址
详细修改方法参考本文档第一大项中第2小项。
同样的方法克隆hadoop3。
四、SSH免密码登陆配置
(1)在hadoop1、hadoop2和hadoop3的root账户下分别执行
ssh-keygen -t rsa
(2)在hadoop1上执行以下命令
cat /root/.ssh/id_rsa.pub>>/root/.ssh/authorized_keys
(3)把hadoop1上/root/.ssh/authorized_keys文件拷贝到hadoop2 /root/.ssh/目录里
在hadoop1上执行以下命令,回车后输入密码:cloudera
scp /root/.ssh/authorized_keys root@192.168.1.152:/root/.ssh
注释:192.168.1.152代表hadoop2的ip地址
(4)hadoop2上执行以下命令
cat /root/.ssh/id_rsa.pub>>/root/.ssh/authorized_keys
(5)把hadoop2上的/root/.ssh/authorized_keys再拷贝到hadoop3上,在hadoop2上行下边命令,回车后输入密码:cloudera
scp /root/.ssh/authorized_keys root@192.168.1.153:/root/.ssh
注释:192.168.1.153代表hadoop3的Ip地址
(6)hadoop3上执行以下命令
cat /root/.ssh/id_rsa.pub>>/root/.ssh/authorized_keys
(7)把hadoop3上的/root/.ssh/authorized_keys文件分别拷贝到hadoop1和hadoop2上,然后在hadoop3上执行以下命令
scp /root/.ssh/authorized_keys root@192.168.1.151:/root/.ssh
scp /root/.ssh/authorized_keys root@192.168.1.152:/root/.ssh
5、配置主机名和IP地址映射
hadoop是以主机名进行通信的,所以我们需要配置主机名与IP地址的映射。
在hadoop1、hadoop2和hadoop3的/etc/hosts文件里分别添加以下信息:
192.168.1.151 hadoop1
192.168.1.152 hadoop2
192.168.1.153 hadoop3
6、进程禁用
(1)前边我们在hadoop1上搭建了伪分布式,上边安装了hadoop集群所有的进程。根据我们分布式规划,我们需要关闭SecondaryNameNode和ResourceManager进程。
在hadoop1执行下边命令:
chkconfig hadoop-hdfs-secondarynamenode off
chkconfig hadoop-yarn-resourcemanager off
(2)hadoop2是从hadoop1上克隆过来的,根据我们分布式规划,我们需要关闭NameNode、ResourceManager和JobHistoryServer。
chkconfig hadoop-hdfs-namenode off
chkconfig hadoop-yarn-resourcemanager off
chkconfig hadoop-mapreduce-historyserver off
(3)hadoop3也是从hadoop1上克隆过来的,根据我们分布式规划,我们需要关闭NameNode、SecondaryNameNode和JobHistoryServer。
chkconfig hadoop-hdfs-namenode off
chkconfig hadoop-hdfs-secondarynamenode off
chkconfig hadoop-mapreduce-historyserver off
7、修改resourcemanager的主机名
修改/etc/hadoop/yarn-site.xml中的yarn.resourcemanager.hostname为hadoop3(因为我们的resourcemanager在hadoop3上部署着)。
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop3</value>
</property>
注释:因为我们是直接克隆hadoop1所以需要做这些修改
8、格式化Namode
在hadoop1上执行下边命令:
hadoop namenode -format
首次格式化只需要执行上述命令即可;再次格式化时,namenode会产生新的文件系统版本,与datanode目录下文件系统版本不一致(/data/dn/current))。
解决办法:
1、 先执行第九步的操作,然后再执行该格式化命令。
2、 将所有datanode中的文件/data/dn/current/VERSION中cluster的值改成与/data/nn/current/VERSION中的cluster一致。
9、删除DataNode本地路径数据
在hadoop1、hadoop2和hadoop3上分别删除/data/dn/current,执行以下命令
rm -rf /data/dn/current
10、启动服务
(1),单独启动
hadoop1:
cd /root/hadoop-2.6.0-cdh5.10.1/sbin
./hadoop-daemon.sh start namenode
./hadoop-daemon.sh start datanode
./yarn-daemon.sh start nodemanager
hadoop2:
cd /root/hadoop-2.6.0-cdh5.10.1/sbin
./hadoop-daemon.sh start secondarynamenode
./hadoop-daemon.sh start datanode
./yarn-daemon.sh start nodemanage
hadoop3:
cd /root/hadoop-2.6.0-cdh5.10.1/sbin
./hadoop-daemon.sh start datanode
./yarn-daemon.sh start resourcemanager
./yarn-daemon.sh start nodemanager
(2)、 批量启动
在任一主机上(所在主机上的slaves文件必须配置)进入/root/hadoop-2.6.0-cdh5.10.1/sbin目录后执行./ start-dfs.sh和./start-yarn.sh。
五、 验证集群是否成功
通过web界面来查看集群
在浏览器中输入http://hadoop1:50070和http://hadoop3:8088
,能够看到如下界面,说明机器启动成功。
只要在网页上看到hadoop的页面,说明集群配置成功
不一定需要两个网页都打开,只要有一个网页可以打开即可