在RHEL/CentOS 6.5中使用CDH4安装Hadoop多节点集群
Hadoop是apache开发的一个用于处理大数据的开源编程框架。它使用HDFS(Hadoop分布式文件系统)以分布式方式存储集群中所有数据节点上的数据,并使用mapreduce模型来处理数据。
Namenode (NN) 是一个主守护进程,控制 HDFS 和 Jobtracker (JT ) 是 MapReduce 引擎的主守护进程。
要求
在本教程中,我使用两个 CentOS 6.3 VM“master”和“node”,即。 (master 和 node 是我的主机名)。 “主”IP 为 172.21.17.175,节点 IP 为“172.21.17.188”。以下说明也适用于 RHEL/CentOS 6.x 版本。
论大师
[root@master ~]# hostname
master
[root@master ~]# ifconfig|grep 'inet addr'|head -1
inet addr:172.21.17.175 Bcast:172.21.19.255 Mask:255.255.252.0
在节点上
[root@node ~]# hostname
node
[root@node ~]# ifconfig|grep 'inet addr'|head -1
inet addr:172.21.17.188 Bcast:172.21.19.255 Mask:255.255.252.0
如果您没有设置 DNS,首先请确保所有集群主机都位于 ‘/etc/hosts’ 文件中(在每个节点上)。
论大师
[root@master ~]# cat /etc/hosts
172.21.17.175 master
172.21.17.188 node
在节点上
[root@node ~]# cat /etc/hosts
172.21.17.197 qabox
172.21.17.176 ansible-ground
在CentOS中安装Hadoop多节点集群
我们使用官方 CDH 存储库在集群中的所有主机(Master 和 Node)上安装 CDH4。
第1步:下载安装CDH存储库
前往官方 CDH 下载页面并获取 CDH4(即 4.6)版本,或者您可以使用以下 wget 命令下载存储库并安装它。
在 RHEL/CentOS 32 位上
wget http://archive.cloudera.com/cdh4/one-click-install/redhat/6/i386/cloudera-cdh-4-0.i386.rpm
yum --nogpgcheck localinstall cloudera-cdh-4-0.i386.rpm
在 RHEL/CentOS 64 位上
wget http://archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.x86_64.rpm
yum --nogpgcheck localinstall cloudera-cdh-4-0.x86_64.rpm
在安装 Hadoop 多节点集群之前,请根据您的系统架构运行以下命令之一,将 Cloudera 公共 GPG 密钥添加到您的存储库。
## on 32-bit System ##
rpm --import http://archive.cloudera.com/cdh4/redhat/6/i386/cdh/RPM-GPG-KEY-cloudera
## on 64-bit System ##
rpm --import http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera
第2步:设置JobTracker和NameNode
接下来,运行以下命令在主服务器上安装和设置 JobTracker 和 NameNode。
[root@master ~]# yum clean all
[root@master ~]# yum install hadoop-0.20-mapreduce-jobtracker
[root@master ~]# yum clean all
[root@master ~]# yum install hadoop-hdfs-namenode
步骤 3:设置辅助名称节点
再次在主服务器上运行以下命令来设置辅助名称节点。
[root@master ~]# yum clean all
[root@master ~]# yum install hadoop-hdfs-secondarynam
第 4 步:设置 Tasktracker 和 Datanode
接下来,在除 JobTracker、NameNode 和辅助(或备用)NameNode 主机(本例中为节点)之外的所有集群主机(节点)上设置任务跟踪器和数据节点。
[root@node ~]# yum clean all
[root@node ~]# yum install hadoop-0.20-mapreduce-tasktracker hadoop-hdfs-datanode
第5步:设置Hadoop客户端
您可以在单独的计算机上安装 Hadoop 客户端(在本例中我已将其安装在 datanode 上,您可以将其安装在任何计算机上)。
[root@node ~]# yum install hadoop-client
第6步:在节点上部署HDFS
现在,如果我们完成了上述步骤,让我们继续部署 hdfs(在所有节点上完成)。
将默认配置复制到 /etc/hadoop 目录(在集群中的每个节点上)。
[root@master ~]# cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster
[root@node ~]# cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster
使用alternatives命令设置自定义目录,如下所示(在集群中的每个节点上)。
[root@master ~]# alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
reading /var/lib/alternatives/hadoop-conf
[root@master ~]# alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
[root@node ~]# alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
reading /var/lib/alternatives/hadoop-conf
[root@node ~]# alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
第7步:自定义配置文件
现在打开“core-site.xml”文件并更新集群中每个节点上的“fs.defaultFS”。
[root@master conf]# cat /etc/hadoop/conf/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master/</value>
</property>
</configuration>
[root@node conf]# cat /etc/hadoop/conf/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master/</value>
</property>
</configuration>
接下来更新集群中每个节点上的 hdfs-site.xml 中的“dfs.permissions.superusergroup”。
[root@master conf]# cat /etc/hadoop/conf/hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/var/lib/hadoop-hdfs/cache/hdfs/dfs/name</value>
</property>
<property>
<name>dfs.permissions.superusergroup</name>
<value>hadoop</value>
</property>
</configuration>
[root@node conf]# cat /etc/hadoop/conf/hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/var/lib/hadoop-hdfs/cache/hdfs/dfs/name</value>
</property>
<property>
<name>dfs.permissions.superusergroup</name>
<value>hadoop</value>
</property>
</configuration>
注意:请确保所有节点上都存在上述配置(在一个节点上执行此操作并运行 scp 以在其余节点上进行复制)的节点)。
步骤8:配置本地存储目录
更新 NameNode(在 Master 和 Node 上)上的“hdfs-site.xml”中的“dfs.name.dir 或 dfs.namenode.name.dir”。请更改突出显示的值。
[root@master conf]# cat /etc/hadoop/conf/hdfs-site.xml
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/1/dfs/nn,/nfsmount/dfs/nn</value>
</property>
[root@node conf]# cat /etc/hadoop/conf/hdfs-site.xml
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/1/dfs/dn,/data/2/dfs/dn,/data/3/dfs/dn</value>
</property>
第 9 步:创建目录并管理权限
执行以下命令在Namenode(Master)和Datanode(Node)机器上创建目录结构并管理用户权限。
[root@master]# mkdir -p /data/1/dfs/nn /nfsmount/dfs/nn
[root@master]# chmod 700 /data/1/dfs/nn /nfsmount/dfs/nn
[root@node]# mkdir -p /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn
[root@node]# chown -R hdfs:hdfs /data/1/dfs/nn /nfsmount/dfs/nn /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn
通过发出以下命令格式化 Namenode(在 Master 上)。
[root@master conf]# sudo -u hdfs hdfs namenode -format
步骤10:配置辅助NameNode
将以下属性添加到 hdfs-site.xml 文件中,并替换 Master 上显示的值。
<property>
<name>dfs.namenode.http-address</name>
<value>172.21.17.175:50070</value>
<description>
The address and port on which the NameNode UI will listen.
</description>
</property>
注意:在我们的例子中,值应该是主虚拟机的 IP 地址。
现在让我们部署 MRv1(Map-reduce 版本 1)。按照所示值打开“mapred-site.xml”文件。
[root@master conf]# cp hdfs-site.xml mapred-site.xml
[root@master conf]# vi mapred-site.xml
[root@master conf]# cat mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:8021</value>
</property>
</configuration>
接下来,使用以下 scp 命令将“mapred-site.xml”文件复制到节点计算机。
[root@master conf]# scp /etc/hadoop/conf/mapred-site.xml node:/etc/hadoop/conf/
mapred-site.xml 100% 200 0.2KB/s 00:00
现在配置本地存储目录以供 MRv1 守护进程使用。再次打开“mapred-site.xml”文件并对每个 TaskTracker 进行如下所示的更改。
<property>
 <name>mapred.local.dir</name>
 <value>/data/1/mapred/local,/data/2/mapred/local,/data/3/mapred/local</value>
</property>
在“mapred-site.xml”文件中指定这些目录后,您必须在集群中的每个节点上创建这些目录并为其分配正确的文件权限。
mkdir -p /data/1/mapred/local /data/2/mapred/local /data/3/mapred/local /data/4/mapred/local
chown -R mapred:hadoop /data/1/mapred/local /data/2/mapred/local /data/3/mapred/local /data/4/mapred/local
第10步:启动HDFS
现在运行以下命令在集群中的每个节点上启动 HDFS。
[root@master conf]# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done
[root@node conf]# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done
步骤 11:创建 HDFS /tmp 和 MapReduce /var 目录
需要创建具有适当权限的 /tmp ,如下所述。
[root@master conf]# sudo -u hdfs hadoop fs -mkdir /tmp
[root@master conf]# sudo -u hdfs hadoop fs -chmod -R 1777 /tmp
[root@master conf]# sudo -u hdfs hadoop fs -mkdir -p /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
[root@master conf]# sudo -u hdfs hadoop fs -chmod 1777 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
[root@master conf]# sudo -u hdfs hadoop fs -chown -R mapred /var/lib/hadoop-hdfs/cache/mapred
现在验证 HDFS 文件结构。
[root@node conf]# sudo -u hdfs hadoop fs -ls -R /
drwxrwxrwt - hdfs hadoop 0 2014-05-29 09:58 /tmp
drwxr-xr-x - hdfs hadoop 0 2014-05-29 09:59 /var
drwxr-xr-x - hdfs hadoop 0 2014-05-29 09:59 /var/lib
drwxr-xr-x - hdfs hadoop 0 2014-05-29 09:59 /var/lib/hadoop-hdfs
drwxr-xr-x - hdfs hadoop 0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache
drwxr-xr-x - mapred hadoop 0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred
drwxr-xr-x - mapred hadoop 0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred/mapred
drwxrwxrwt - mapred hadoop 0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
在启动 HDFS 并创建“/tmp”之后,但在启动 JobTracker 之前,请创建由“mapred.system.dir”参数指定的 HDFS 目录(默认情况下 $ {hadoop.tmp .dir}/mapred/system 并将所有者更改为 mapred。
[root@master conf]# sudo -u hdfs hadoop fs -mkdir /tmp/mapred/system
[root@master conf]# sudo -u hdfs hadoop fs -chown mapred:hadoop /tmp/mapred/system
第12步:启动MapReduce
要启动 MapReduce :请启动 TT 和 JT 服务。
在每个 TaskTracker 系统上
[root@node conf]# service hadoop-0.20-mapreduce-tasktracker start
Starting Tasktracker: [ OK ]
starting tasktracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-tasktracker-node.out
在JobTracker系统上
[root@master conf]# service hadoop-0.20-mapreduce-jobtracker start
Starting Jobtracker: [ OK ]
starting jobtracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-jobtracker-master.out
接下来,为每个 hadoop 用户创建一个主目录。建议您在NameNode上执行此操作;例如。
[root@master conf]# sudo -u hdfs hadoop fs -mkdir /user/<user>
[root@master conf]# sudo -u hdfs hadoop fs -chown <user> /user/<user>
注意:其中 是每个用户的 Linux 用户名。
或者,您可以按如下方式创建主目录。
[root@master conf]# sudo -u hdfs hadoop fs -mkdir /user/$USER
[root@master conf]# sudo -u hdfs hadoop fs -chown $USER /user/$USER
第13步:从浏览器打开JT、NN UI
打开浏览器并输入 URL http://ip_address_of_namenode:50070 来访问 Namenode。
在浏览器中打开另一个选项卡,然后输入 URL http://ip_address_of_jobtracker:50030 来访问 JobTracker。
此过程已在 RHEL/CentOS 5.X/6.X 上成功测试。如果您在安装中遇到任何问题,请在下面评论,我会帮助您解决。