Hadoop中的集群配置和使用技巧

其实参看Hadoop官方文档已经能够很容易配置分布式框架运行环境了,不过这里既然写了就再多写一点,同时有一些细节需要注意的也说明一下,其实也就是这些细节会让人摸索半天。Hadoop可以单机跑,也可以配置集群跑,单机跑就不需要多说了,只需要按照Demo的运行说明直接执行命令即可。这里主要重点说一下集群配置运行的过程。

环境

7台普通的机器,操作系统都是Linux。内存和CPU就不说了,反正Hadoop一大特点就是机器在多不在精。JDK必须是1.5以上的,这个切记。7台机器的机器名务必不同,后续会谈到机器名对于MapReduce有很大的影响。

部署考虑

正如上面我描述的,对于Hadoop的集群来说,可以分成两大类角色:Master和Slave,前者主要配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行,后者配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。本来我打算看看一台机器是否可以配置成Master,同时也作为Slave使用,不过发现在NameNode初始化的过程中以及TaskTracker执行过程中机器名配置好像有冲突(NameNode和TaskTracker对于Hosts的配置有些冲突,究竟是把机器名对应IP放在配置前面还是把Localhost对应IP放在前面有点问题,不过可能也是我自己的问题吧,这个大家可以根据实施情况给我反馈)。最后反正决定一台Master,六台Slave,后续复杂的应用开发和测试结果的比对会增加机器配置。

实施步骤 在所有的机器上都建立相同的目录,也可以就建立相同的用户,以该用户的home路径来做hadoop的安装路径。例如我在所有的机器上都建立了/home/wenchu。 下载Hadoop,先解压到Master上。这里我是下载的0.17.1的版本。此时Hadoop的安装路径就是/home/wenchu/hadoop-0.17.1。 解压后进入conf目录,主要需要修改以下文件:hadoop-env.sh,hadoop-site.xml、masters、slaves。

Hadoop的基础配置文件是hadoop-default.xml,看Hadoop的代码可以知道,默认建立一个Job的时候会建立Job的Config,Config首先读入hadoop-default.xml的配置,然后再读入hadoop-site.xml的配置(这个文件初始的时候配置为空),hadoop-site.xml中主要配置你需要覆盖的hadoop-default.xml的系统级配置,以及你需要在你的MapReduce过程中使用的自定义配置(具体的一些使用例如final等参考文档)。

以下是一个简单的hadoop-site.xml的配置:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="https://www.linuxidc.com/configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
   <name>fs.default.name</name> <!-- 你的namenode的配置,机器名加端口 -->
   <value>hdfs://10.2.224.46:54310/</value>
</property>
<property>
   <name>mapred.job.tracker</name> <!-- 你的JobTracker的配置,机器名加端口 -->
   <value>hdfs://10.2.224.46:54311/</value>
</property>
<property>
   <name>dfs.replication</name> <!-- 数据需要备份的数量,默认是三 -->
   <value>1</value>
</property>
<property>
    <name>hadoop.tmp.dir</name> <!-- Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。 -->
    <value>/home/wenchu/hadoop/tmp/</value>
</property>
<property>
   <name>mapred.child.java.opts</name> <!-- java虚拟机的一些参数可以参照配置 -->
   <value>-Xmx512m</value>
</property>
<property>
<name>dfs.block.size</name> <!-- block的大小,单位字节,后面会提到用处,必须是512的倍数,因为采用crc作文件完整性校验,默认配置512是checksum的最小单元。 -->
<value>5120000</value>
<description>The default block size for new files.</description>
</property>
</configuration>
 

hadoop-env.sh文件只需要修改一个参数:

# The java implementation to use. Required.
export JAVA_HOME=/usr/ali/jdk1.5.0_10
 

配置你的Java路径,记住一定要1.5版本以上,免得莫名其妙出现问题。

Masters中配置Masters的IP或者机器名,如果是机器名那么需要在/etc/hosts中有所设置。Slaves中配置的是Slaves的IP或者机器名,同样如果是机器名需要在/etc/hosts中有所设置。范例如下,我这里配置的都是IP:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/pxpjp.html