Hadoop 2.4.0 分布式集群搭建教程

  • 配置说明

以在公司搭建的Hadoop为例。版本Hadoop2.4,存储在360云盘中。

所有的配置文件位于附件中,供后来参考。
Master(namenode):
hadoop-test1    192.168.*.*8(内网地址)    10.*.*.*5(外网地址)
 
Slaver(datanode):
hadoop-test2    192.168.*.*9(内网地址)    10.*.*.*6(外网地址)
 
操作系统为linux
  • 配置过程
1. ssh免密码访问
2. 安装Java和Hadoop(就是拷贝解压,过程省略)
3.配置系统变量和hosts
4.配置hadoop参数
5.启动和调试Hadoop
 
最后我会说下遇到的问题和注意事项。
 
  • SSH免密码访问
以A主机B主机为例:
A生成自己的公钥和私钥,并将公钥给B。B如果把公钥作为授权密码,那么A就可以免密码访问B。
因为A发送信息经过自己的私钥加密,B用公钥能打开的话,就可以确定是A。
在Linux下,生成公钥私钥的命令为:
  1. ssh-keygen -t rsa
一路回车下去,如果是root用户,会在/root目录下生成.ssh文件夹(普通用户则是/home/用户名/下)。
文件夹中的id_rsa是私钥,id_rsa.pub是公钥。新建authorized_keys文件(授权文件),并把公钥内容拷贝进去,那么这个主机就可以无密码访问自己了。试一试:
  1. ssh localhost
如果想要访问B主机,那就要在B主机上相同的位置创建authorized_keys,并把A的公钥拷贝进去。
ps,如果想要互访,那么在B上也要生成一遍公钥私钥。
ps2,authorized_keys以行为单位追加,每一行就是id_rsa.pub的全部内容。
 
  • 配置系统变量和hosts
系统变量主要是Java和hadoop的路径信息,它位于/etc/profile:
追加以下内容,其中加粗的是要改动的:
  1. # java path
  2. JAVA_HOME=/usr/java/jdk1.7.0_01
  3. CLASSPATH=.:$JAVA_HOME/lib/tools.jar:/lib/dt.jar
  4. PATH=$JAVA_HOME/bin:$PATH
  5. #hadoop path new
  6. HADOOP_HOME=/usr/hadoop-2.4.0
  7. PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  8. HADOOP_MAPARED_HOME=${HADOOP_HOME}
  9. HADOOP_COMMON_HOME=${HADOOP_HOME}
  10. HADOOP_HDFS_HOME=${HADOOP_HOME}
  11. YARN_HOME=${HADOOP_HOME}
  12. HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
  13. HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop
  14. YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
其中的目录都是总文件夹的位置。
hosts位于/etc/中,要添加master和slave的IP信息,由于两者都位于内网,所以用内网IP:
  1. 192.168.*.*8 hadoop-test1
  2. 192.168.*.*9 hadoop-test2
ps,master和slave都需要配置。
 
  • 配置Hadoop参数
进入最复杂的配置hadoo参数了。先介绍下Hadoop的目录结构:
bin和sbin就是常用的hadoop执行脚本了,如果我们将其添加到系统变量,就不用每次都到目录下才能运行。
logs是日志文件,运行过程中的错误可以到此来查。
etc/hadoop/文件下,都是配置文件。建议查阅相关的说明,或者直接使用附件配置文件并进行路径的的修改。以下对常用的和需要修改的进行说明:
 
core-site.xml:
    在里面需要配置hdfs的路径和tmp.dir的位置,加粗的是需要修改的:
  1. <property>
  2. <name>fs.defaultFS</name>
  3. <value>hdfs://192.168.*.*8:9000</value>
  4. </property>
  5. <property>
  6. <name>hadoop.tmp.dir</name>
  7. <value>/usr/temp</value>
  8. </property>
 
hadoop-env.sh:
    用于指定hadoop的运行环境,如果没有改动就是默认的运行环境(系统变量里面配置的)。需要进行检查。
 
hdfs-site.xml:
    hdfs的配置文件:
  1. <property>
  2. <name>dfs.namenode.name.dir</name>
  3. <value>/usr/hdfs/name</value>
  4.                   <final>true</final>
  5. </property>
  6. <property>
  7. <name>dfs.datanode.data.dir</name>
  8. <value>/usr/hdfs/data</value>
  9.                   <final>true</final>
  10. </property>
  11.          <property>
  12.                 <name>dfs.replication</name>
  13.                 <value>1</value>
  14.          </property>
  15. <property>
  16.     <name>dfs.permissions</name>
  17.     <value>false</value>
  18.     <description>
  19.        If "true", enable permission checking in HDFS.
  20.        If "false", permission checking is turned off,
  21.        but all other behavior is unchanged.
  22.        Switching from one parameter value to the other does not change the mode,
  23.        owner or group of files or directories.
  24.     </description>
  25.  </property>
    前两项分别是namenode和datanode的存放位置。
    ps,namenode中主要存放数据块的地址映射,数据块在datanode中。
 
mapred-env.sh:
    配置MapReduce的运行环境,一般就加入JDK的路径:
  1. export JAVA_HOME=/usr/java/jdk1.7.0_01
 
mapred-site.xml:
    mapreduce的配置文件,在2.0后的hadoop中,mapReduce都交由yarn处理,所以要配置(还有其它配置,此处只讲最基本的):
  1. <property>
  2. <name>mapreduce.framework.name</name>
  3. <value>yarn</value>
  4. </property>
 
slaves:
    slave的配置文件,以行为单位写上ip地址就可以了。(建议内网IP,不要master的ip)
 
yarn-env.sh:
    配置yarn的运行环境,一般就加入JDK的路径:
  1. export JAVA_HOME=/usr/java/jdk1.7.0_01
 
yarn-site.xml:
    yarn的配置文件,参数很多。附件中的配置为:
  1. <!-- Site specific YARN configuration properties -->
  2. <property>
  3.                 <name>yarn.nodemanager.aux-services</name>
  4.                 <value>mapreduce_shuffle</value>
  5.         </property>
  6.         <property>
  7.                <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
  8.                <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  9.         </property>
  10.         <property>
  11.                 <name>yarn.resourcemanager.address</name>
  12.                 <value>192.168.*.*8:8032</value>
  13.         </property>
  14.         <property>
  15.                 <name>yarn.resourcemanager.scheduler.address</name>
  16.                 <value>192.168.*.*8:8030</value>
  17.         </property>
  18.         <property>
  19.                 <name>yarn.resourcemanager.webapp.address</name>
  20.                 <value>192.168.*.*8:8088</value>
  21.         </property>
  22.         <property>
  23.                 <name>yarn.resourcemanager.resource-tracker.address</name>
  24.                 <value>192.168.*.*8:8031</value>
  25.         </property>
  26.         <property>
  27.                 <name>yarn.resourcemanager.admin.address</name>
  28.                 <value>192.168.*.*8:8033</value>
  29.         </property>
  30.         <property>
  31.                 <name>yarn.resourcemanager.hostname</name>
  32.                 <value>192.168.*.*8</value>
  33.         </property>
  34.         <property>
  35.                 <name>yarn.nodemanager.resource.memory-mb</name>
  36.                 <value>20480</value>
  37.         </property>
 
就此大体配置完毕,以上是在master中的配置。slave中只需要将所有hadoop文件拷贝过去,并清空slave中的内容。
 
  • 启动和调试Hadoop
hadoop的启动需要在namenode上进行。启动前,要清空一下namenode:
  1. hadoop namenode -format
然后分别start-dfs.sh和start-yarn.sh。
通过jps查看进程,如果master机器上有:
SecondaryNamenode
ResourceManager
Namenode
Jps
说明namenode机器运行正常。
如果slave机器上有:
Datanode
NodeManager
Jps
说明slave运行正常。
 
此时hadoop正常的跑起来了,可以通过web页面:
  1. http://10.*.*.*0:50070/
  2. http://10.*.*.*0:8088/
查看信息。
 
  • 问题及注意事项
namenode没有跑起来:
    关闭hadoop服务,执行hadoop namenode -format。再启动,如果还是跑不起来,则需要查看日志。
 
datanode没有跑起来:
    这种情况可能是多种问题导致,须查看日志。我遇到的有:
    1. datanode没有连上namenode:hosts没有配置
    2. NameNode 和 DataNode 的namespaceID或者ClusterID不一致:由于两次或者以上格式化NameNode造成的。解决方法一:删除所有DataNode的资料(dfs.datanode.data.dir和hadoop.tmp.dir的位置)。解决方法二:修改每个DataNode的namespaceID(位于$(dfs.data.dir)的current的VERSION中),也可以修改NameNode的该ID(位于$(dfs.data.dir)的current的VERSION中)。
 
安全模式:
    分布式文件系统启动时候会有安全模式,当处于安全模式时,文件系统内容不允许修改和删除。可以通过命令退出安全模式。
 
对Linux系统添加新用户后没有对应用户文件夹:
    useradd hadoop -m
    加了-m有的系统中才会有home下的文件夹,而这个文件夹的权限会影响SSH的免密码登录。
 
各种Permission Denied:
    将文件权限改成777:
    chmod 777 *.sh
    
 
参考教程:
 





附件列表

 

posted @ 2015-05-13 15:44  Goalish  阅读(295)  评论(0编辑  收藏  举报