分享

Hadoop必看1-1:CentOS 6.4 Hadoop-2.2.0集群安装配置实践

问题导读:
1、Hadoop 1.x和Hadoop 2.x 有哪些不同 ?
2、我们在使用Hadoop 2.x的新特性中,该注意哪些 ?





Hadoop 2.x和1.x已经大不相同了,应该说对于存储计算都更加通用了。Hadoop 2.x实现了用来管理集群资源的YARN框架,可以面向任何需要使用基于HDFS存储来计算的需要,当然MapReduce现在已经作为外围的插件式的计算框架,你可以根据需要开发或者选择合适的计算框架。目前,貌似对MapReduce支持还是比较好的,毕竟MapReduce框架已经还算成熟。其他一些基于YARN框架的标准也在开发中。
YARN框架的核心是资源的管理和分配调度,它比Hadoop 1.x中的资源分配的粒度更细了,也更加灵活了,它的前景应该不错。由于极大地灵活性,所以在使用过程中由于这些配置的灵活性,可能使用的难度也加大了一些。另外,我个人觉得,YARN毕竟还在发展之中,也有很多不成熟的地方,各种问题频频出现,资料也相对较少,官方文档有时更新也不是很及时,如果我选择做海量数据处理,可能YARN还不能满足生产环境的需要。如果完全使用MapReduce来做计算,还是选择相对更加成熟的Hadoop 1.x版本用于生产环境。


下面使用4台机器,操作系统为CentOS 6.4 64位,一台做主节点,另外三台做从节点,实践集群的安装配置。


主机配置规划
修改/etc/hosts文件,增加如下地址映射:

  1. 10.95.3.48     m1
  2. 10.95.3.54     s1
  3. 10.95.3.59     s2
  4. 10.95.3.66     s3
复制代码
每台机器配置对应的hostname,修改/etc/sysconfig/network文件,例如s1节点内容配置为:

  1. NETWORKING=yes
  2. HOSTNAME=s1
复制代码


m1为集群主节点,s1、s2、s3为集群从节点。
关于主机资源的配置,我们这里面使用VMWare工具,创建了4个虚拟机,具体置情况如下所示:
一个主节点有1个核(core)
一个主节点内存1G
每个从节点有1个核(core)
每个从节点内存2G

目录规划
Hadoop程序存放目录为/home/shirdrn/cloud/programs/hadoop-2.2.0,相关的数据目录,包括日志、存储等指定为/home/shirdrn/cloud/storage/hadoop-2.2.0。将程序和数据目录分开,可以更加方便的进行配置的同步。
具体目录的准备与配置如下所示:
在每个节点上创建程序存储目录/home/shirdrn/cloud/programs/hadoop-2.2.0,用来存放Hadoop程序文件
在每个节点上创建数据存储目录/home/shirdrn/cloud/storage/hadoop-2.2.0/hdfs,用来存放集群数据
在主节点m1上创建目录/home/shirdrn/cloud/storage/hadoop-2.2.0/hdfs/name,用来存放文件系统元数据
在每个从节点上创建目录/home/shirdrn/cloud/storage/hadoop-2.2.0/hdfs/data,用来存放真正的数据
所有节点上的日志目录为/home/shirdrn/cloud/storage/hadoop-2.2.0/logs
所有节点上的临时目录为/home/shirdrn/cloud/storage/hadoop-2.2.0/tmp
下面配置涉及到的目录,都参照这里的目录规划。

环境变量配置
首先,使用Sun的JDK,修改~/.bashrc文件,配置如下:
  1. export JAVA_HOME=/usr/java/jdk1.6.0_45/
  2. export PATH=$PATH:$JAVA_HOME/bin
  3. export CLASSPATH=$JAVA_HOME/lib/*.jar:$JAVA_HOME/jre/lib/*.jar
复制代码

然后配置Hadoop安装目录,相关环境变量:
  1. export HADOOP_HOME=/home/shirdrn/cloud/programs/hadoop-2.2.0
  2. export PATH=$PATH:$HADOOP_HOME/bin
  3. export PATH=$PATH:$HADOOP_HOME/sbin
  4. export HADOOP_LOG_DIR=/home/shirdrn/cloud/storage/hadoop-2.2.0/logs
  5. export YARN_LOG_DIR=$HADOOP_LOG_DIR
复制代码


免密码登录配置
在每各节点上,执行如下命令:

  1. ssh-keygen
复制代码

然后点击回车一直下去即可。
在主节点m1上,执行命令:

  1. ssh m1
复制代码

保证不需要密码即可登录本机m1节点。
将m1的公钥,添加到s1、s2、s3的~/.ssh/authorized_keys文件中,并且需要查看~/.ssh/authorized_keys的权限,不能对同组用户具有写权限,如果有,则执行下面命令:

  1. chmod g-w ~/.ssh/authorized_keys
复制代码

这时,在m1节点上,应该保证执行如下命令不需要输入密码:

  1. ssh s1
  2. ssh s2
  3. ssh s3
复制代码



Hadoop配置文件
配置文件所在目录为/home/shirdrn/programs/hadoop-2.2.0/etc/hadoop,可以修改对应的配置文件。
配置文件core-site.xml内容
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4.         <property>
  5.                 <name>fs.defaultFS</name>
  6.                 <value>hdfs://m1:9000/</value>
  7.                 <description>The name of the default file system. A URI whose scheme
  8.                         and authority determine the FileSystem implementation. The uri's
  9.                         scheme determines the config property (fs.SCHEME.impl) naming the
  10.                         FileSystem implementation class. The uri's authority is used to
  11.                         determine the host, port, etc. for a filesystem.</description>
  12.         </property>
  13.         <property>
  14.                 <name>dfs.replication</name>
  15.                 <value>3</value>
  16.         </property>
  17.         <property>
  18.                 <name>hadoop.tmp.dir</name>
  19.                 <value>/home/shirdrn/cloud/storage/hadoop-2.2.0/tmp/hadoop-${user.name}</value>
  20.                 <description>A base for other temporary directories.</description>
  21.         </property>
  22. </configuration>
复制代码

配置文件hdfs-site.xml内容
  1. <font color="#404040" face="Ubuntu"><?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4.         <property><name>dfs.namenode.name.dir</name>
  5.                 <value>/home/shirdrn/cloud/storage/hadoop-2.2.0/hdfs/name</value>
  6.                 <description>Path on the local filesystem where the NameNode stores
  7.                         the namespace and transactions logs persistently.</description>
  8.         </property>
  9.         <property>
  10.                 <name>dfs.datanode.data.dir</name>
  11.                 <value>/home/shirdrn/cloud/storage/hadoop-2.2.0/hdfs/data</value>
  12.                 <description>Comma separated list of paths on the local filesystem of a DataNode where it should store its blocks.</description>
  13.         </property>
  14.         <property>
  15.                 <name>dfs.permissions</name>
  16.                 <value>false</value>
  17.         </property>
  18. </configuration></font>
复制代码

配置文件yarn-site.xml内容

  1. <?xml version="1.0"?>
  2. <configuration>
  3.         <property>
  4.                 <name>yarn.resourcemanager.resource-tracker.address</name>
  5.                 <value>m1:8031</value>
  6.                 <description>host is the hostname of the resource manager and
  7.                         port is the port on which the NodeManagers contact the Resource Manager.
  8.                 </description>
  9.         </property>
  10.         <property>
  11.                 <name>yarn.resourcemanager.scheduler.address</name>
  12.                 <value>m1:8030</value>
  13.                 <description>host is the hostname of the resourcemanager and port is
  14.                         the port
  15.                         on which the Applications in the cluster talk to the Resource Manager.
  16.                 </description>
  17.         </property>
  18.         <property>
  19.                 <name>yarn.resourcemanager.scheduler.class</name>
  20.                 <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
  21.                 <description>In case you do not want to use the default scheduler</description>
  22.         </property>
  23.         <property>
  24.                 <name>yarn.resourcemanager.address</name>
  25.                 <value>m1:8032</value>
  26.                 <description>the host is the hostname of the ResourceManager and the
  27.                         port is the port on
  28.                         which the clients can talk to the Resource Manager.
  29.                 </description>
  30.         </property>
  31.         <property>
  32.                 <name>yarn.nodemanager.local-dirs</name>
  33.                 <value>${hadoop.tmp.dir}/nodemanager/local</value>
  34.                 <description>the local directories used by the nodemanager</description>
  35.         </property>
  36.         <property>
  37.                 <name>yarn.nodemanager.address</name>
  38.                 <value>0.0.0.0:8034</value>
  39. <description>the nodemanagers bind to this port</description>
  40.         </property>
  41.         <property>
  42.                 <name>yarn.nodemanager.resource.cpu-vcores</name>
  43.                 <value>1</value>
  44.                 <description></description>
  45.         </property>
  46.         <property>
  47.                 <name>yarn.nodemanager.resource.memory-mb</name>
  48.                 <value>2048</value>
  49.                 <description>Defines total available resources on the NodeManager to be made available to running containers</description>
  50.         </property>
  51.         <property>
  52.                 <name>yarn.nodemanager.remote-app-log-dir</name>
  53.                 <value>${hadoop.tmp.dir}/nodemanager/remote</value>
  54.                 <description>directory on hdfs where the application logs are moved to </description>
  55.         </property>
  56.         <property>
  57.                 <name>yarn.nodemanager.log-dirs</name>
  58.                 <value>${hadoop.tmp.dir}/nodemanager/logs</value>
  59.                 <description>the directories used by Nodemanagers as log directories</description>
  60.         </property>
  61.         <property>
  62.                 <name>yarn.application.classpath</name>
  63.                 <value>$HADOOP_HOME,$HADOOP_HOME/share/hadoop/common/*,
  64.                $HADOOP_HOME/share/hadoop/common/lib/*,
  65.                $HADOOP_HOME/share/hadoop/hdfs/*,$HADOOP_HOME/share/hadoop/hdfs/lib/*,
  66.                $HADOOP_HOME/share/hadoop/yarn/*,$HADOOP_HOME/share/hadoop/yarn/lib/*,
  67.                $HADOOP_HOME/share/hadoop/mapreduce/*,$HADOOP_HOME/share/hadoop/mapreduce/lib/*</value>
  68.                 <description>Classpath for typical applications.</description>
  69. </property>
  70.         <!-- Use mapreduce_shuffle instead of mapreduce.suffle (YARN-1229)-->
  71.         <property>
  72.                 <name>yarn.nodemanager.aux-services</name>
  73.                 <value>mapreduce_shuffle</value>
  74.                 <description>shuffle service that needs to be set for Map Reduce to run </description>
  75.         </property>
  76.      <property>
  77.             <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  78.             <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  79.      </property>
  80.      <property>
  81.             <name>yarn.scheduler.minimum-allocation-mb</name>
  82.             <value>256</value>
  83.      </property>
  84.      <property>
  85.             <name>yarn.scheduler.maximum-allocation-mb</name>
  86.             <value>6144</value>
  87.      </property>
  88.      <property>
  89.             <name>yarn.scheduler.minimum-allocation-vcores</name>
  90.             <value>1</value>
  91.      </property>
  92.      <property>
  93.             <name>yarn.scheduler.maximum-allocation-vcores</name>
  94.             <value>3</value>
  95.      </property>
  96. </configuration>
复制代码

配置mapred-site.xml文件
  1. <font color="#404040" face="Ubuntu" size="2"><?xml version="1.0"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4.      <property>
  5.           <name>mapreduce.framework.name</name>
  6.           <value>yarn</value>
  7.           <description>Execution framework set to Hadoop YARN.</description>
  8.      </property>
  9.      <property>
  10.           <name>mapreduce.map.memory.mb</name>
  11.           <value>512</value>
  12.           <description>Larger resource limit for maps. default 1024M</description>
  13.      </property>
  14.      <property>
  15.           <name>mapreduce.map.cpu.vcores</name>
  16.           <value>1</value>
  17.           <description></description>
  18.      </property>
  19.      <property>
  20.           <name>mapreduce.reduce.memory.mb</name>
  21.           <value>512</value>
  22.           <description>Larger resource limit for reduces.</description>
  23.      </property>
  24.      <property>
  25.           <name>mapreduce.reduce.shuffle.parallelcopies</name>
  26.           <value>5</value>
  27.           <description>Higher number of parallel copies run by reduces to fetch outputs from very large number of maps.</description>
  28.      </property>
  29.      <property>
  30.           <name>mapreduce.jobhistory.address</name>
  31.           <value>m1:10020</value>
  32.           <description>MapReduce JobHistory Server host:port, default port is 10020.</description>
  33.   </property>
  34.      <property>
  35.           <name>mapreduce.jobhistory.webapp.address</name>
  36.           <value>m1:19888</value>
  37.           <description>MapReduce JobHistory Server Web UI host:port, default port is 19888.</description>
  38.      </property>
  39. </configuration>
  40. </font>
复制代码


配置hadoop-env.sh、yarn-env.sh、mapred-env.sh脚本文件
修改每个脚本文件的JAVA_HOME变量即可,如下所示:
  1. export JAVA_HOME=/usr/java/jdk1.6.0_45/
复制代码

配置slaves文件
  1. s1
  2. s2
  3. s3
复制代码

同步分发程序文件
在主节点m1上将上面配置好的程序文件,复制分发到各个从节点上:
  1. scp -r /home/shirdrn/cloud/programs/hadoop-2.2.0 shirdrn@s1:/home/shirdrn/cloud/programs/
  2. scp -r /home/shirdrn/cloud/programs/hadoop-2.2.0 shirdrn@s2:/home/shirdrn/cloud/programs/
  3. scp -r /home/shirdrn/cloud/programs/hadoop-2.2.0 shirdrn@s3:/home/shirdrn/cloud/programs/
复制代码


启动HDFS集群
经过上面配置以后,可以启动HDFS集群。
为了保证集群启动过程中不会出现问题,需要手动关闭每个节点上的防火墙,执行如下命令:

  1. sudo service iptables stop
复制代码

或者永久关闭防火墙:

  1. sudo chkconfig iptables off
  2. sudo chkconfig ip6tables off
复制代码



在主节点m1上,首先进行文件系统格式化操作,执行如下命令:
  1. <font color="#404040" face="Ubuntu">hadoop namenode -format</font>
复制代码


然后,可以启动HDFS集群,执行如下命令:
  1. start-dfs.sh
复制代码

可以查看启动日志,确认HDFS集群启动是否成功:
  1. tail -100f /home/shirdrn/cloud/storage/hadoop-2.2.0/logs/hadoop-shirdrn-namenode-m1.log
  2. tail -100f /home/shirdrn/cloud/storage/hadoop-2.2.0/logs/hadoop-shirdrn-secondarynamenode-m1.log
  3. tail -100f /home/shirdrn/cloud/storage/hadoop-2.2.0/logs/hadoop-shirdrn-datanode-s1.log
  4. tail -100f /home/shirdrn/cloud/storage/hadoop-2.2.0/logs/hadoop-shirdrn-datanode-s2.log
  5. tail -100f /home/shirdrn/cloud/storage/hadoop-2.2.0/logs/hadoop-shirdrn-datanode-s3.log
复制代码

或者,查看对应的进程情况:
  1. jps
复制代码


可以通过登录Web控制台,查看HDFS集群状态,访问如下地址:
  1. http://m1:50070/
复制代码


未完待续,请看后贴

已有(3)人评论

跳转到指定楼层
lanfen 发表于 2014-5-19 09:11:00
赞~~~~~~  mark 留名
回复

使用道具 举报

ml29108608 发表于 2014-8-6 14:47:26
谢谢分享!,hadoop初学者
回复

使用道具 举报

bluebaby2006 发表于 2015-2-22 17:22:09
好实例  赞一个!~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条