最详细的Hadoop集群搭建

本文,针对hadoop的整体搭建过程,给予一个详细的介绍。

1:hadoop版本:采用hadoop-2.6.5版本,下载地址:下载地址

下载190M的tar包即可,该包是编译直接可用的。

2:我使用的机器版本:

Linux version 2.6.32-504.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Wed Oct 15 04:27:16 UTC 2014

3:jdk版本:1.8.0_111

下面是详细的安装步骤:

1:解压缩:创建目录,解压缩,目录自定义即可,我的是用户目录下直接命名为hadoop,方便使用。


大致可以看到,解压后的目录如上图:

从左到右,bin目录下是常用的一些执行任务的脚本,比如我们用的hdfs相关的shell,hadoop相关的一些提交任务的脚本,都在这里。

data是hadoop使用过程中一些临时数据存放的地方,这么说也不太合适,举个简单例子,hdfs作为文件存储系统,一些文件索引,当前使用块等信息,都是在该目录下;以及,yarn启动后NodeManager的本地目录,也在这里有一席之地。

etc下就只有一个目录,叫做hadoop,用途就是我们hdfs,mapreduce,yarn运行中的各种配置,非常重要,常用的一些调优,配置都在这里。

sbin目录,里面大部分是启动服务的脚本,与bin不同,这里是用于启动hdfs,启动yarn的,用于支撑我们其他服务的运行。

share文件夹,里面是我们hadoop常用的很多包,这就可以解释为什么我们执行任务时候直接以hadoop jar的方式就能够正常运行一些包了,因为很多的第三方的包,都已经由hadoop默认给我们加载了;这也启发我们,如果想要对hadoop底层一些东西进行修改的话,我们可以把这里面的jar包的源码下载下来,自己进行修改,然后重新打包运行,就可以达到满意的效果了。

2:重要的配置文件修改:前文说过,如下的配置文件均在etc/hadoop内。

1:hadoop-env.sh

纵观hadoop-env.sh,会发现里面的配置非常多,但是对于我们来说,通常需要修改的配置只有一个:

export JAVA_HOME=

定义我们本机的JAVA_HOME即可,找寻本地的JAVA_HOME,可以通过echo $JAVA_HOME查看。

必须注意,这个文件必须修改,否则启动服务会因为找不到Java虚拟机而停止运行。

2:core-site.xml

就狭义上来说,hadoop包含三大块:分布式文件系统HDFS,分布式计算模型MapReduce(这是个有点虚的东西,多写代码才能深有体会),YARN(资源调度和管理系统)。

而core-site.xml,就是HDFS的基本配置文件,里面的相关配置,都是针对于HDFS的。

通常来说,其内配置如下即可:

<configuration>
        <property>
              <name>fs.defaultFS</name>
              <value>hdfs://authsvr01:9000</value>
        </property>
        <property>
              <name>hadoop.tmp.dir</name>
              <value>/home/yuzhao.yang/hadoop/data</value>
        </property>
</configuration>

通常来说,配置如上即可,这里,我们可以看到,配置了hadoop.tmp.dir,对应于我上面的data,也就是hdfs运行时候的临时数据所在。

说一下这里的fs.defaultFS,通常来说,我们访问hdfs上文件的时候,都是通过该url产生数据流进行访问的,而其他通用配置如该链接:hdfs配置链接

3:hdfs-site.xml

<configuration>
	<property>
	        <name>dfs.namenode.http-address</name>
	        <value>authsvr01:50070</value>
	</property>

    <!-- 设置secondarynamenode的http通讯地址 -->
    <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>datasvr35:50090</value>
    </property>

    <!-- 设置namenode存放的路径 -->
    <property>
            <name>dfs.namenode.name.dir</name>
            <value>/home/yuzhao.yang/hadoop/name</value>
    </property>

    <!-- 设置hdfs副本数量 -->
    <property>
            <name>dfs.replication</name>
            <value>2</value>
    </property>
                            <!-- 设置datanode存放的路径 -->
    <property>
            <name>dfs.datanode.data.dir</name>
            <value>/home/yuzhao.yang/hadoop/data</value>
    </property>
</configuration>
在真正的集群中,这个文件也是必须要配置的,其中的配置相对于core-site来说,更加细致一些,具体参数含义,大家可以参照上文中的链接:

4:mapred-site.xml

如上文所述,本文件是为mapreduce计算模型准备的,我使用的版本,支持了使用YARN来进行运行时候的资源调度,所以配置文件内容如下:

<configuration>
<property>
        <name>mapreduce.framework.name</name>
                <value>yarn</value>
                </property>
</configuration>

简单的一句话,就指定了资源调度框架使用yarn,至于更具体的配置,可以参照上文提供的链接。

5:yarn-site.xml

既然指定了用yarn来做资源调度和管理的框架,那么,毫无疑问也要定义yarn相关的配置文件,即yarn-site.xml文件;具体的配置项很多,这里不予赘述,附上我的一个简单版本:

<configuration>
    <property>
            <name>yarn.resourcemanager.hostname</name>
                    <value>authsvr01</value>
                        </property>

    <!-- reducer取数据的方式是mapreduce_shuffle -->
    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>
    <property>
             <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
             <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>${yarn.resourcemanager.hostname}:10032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>${yarn.resourcemanager.hostname}:10030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>${yarn.resourcemanager.hostname}:10088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.https.address</name>
        <value>${yarn.resourcemanager.hostname}:10090</value>
    </property>
    <property>
            <name>yarn.resourcemanager.resource-tracker.address</name>
            <value>${yarn.resourcemanager.hostname}:10031</value>
    </property>
    <property>
            <name>yarn.resourcemanager.admin.address</name>
            <value>${yarn.resourcemanager.hostname}:10033</value>
    </property>
</configuration>

语义明晰,很好看懂。

关于这个配置,推荐董老师的博客:董的博客,里面介绍了非常详细的关于yarn的配置。

另外一篇文章,也介绍的很好,参照这两篇文章,基本出现的端口占用都能够解决了:

https://blog.csdn.net/qqq824908000/article/details/70790534

因为yarn相关配置的端口非常多,不太容易记得,网上这些介绍的比较详细的文章就很不错了。

这样,一台机器上的hadoop就配置完毕了,其中主要牵涉到四个配置文件:

  1. 整体的运行环境和参数的配置:hadoop-env.sh;主要配置JAVA_HOME。
  2. HDFS的相关配置,源自于core-site.xml文件。
  3. MapReduce计算模型的资源调度框架,在mapred-site.xml文件中配置。
  4. Yarn的相关配置:yarn-site.xml。

按照这个顺序,很好记住;更加详细的配置和调优,参数都在此处:hadoop-2.6.5配置

大家使用的其他版本,则可以参照http://hadoop.apache.org/docs/寻找各自版本的配置。

6:既然是集群搭建,那就需要清除hadoop的集群架构,遵从于master/slave的基本架构,所以,我们可以看到在etc/hadoop目录下看到一个slaves文件,其中指定datanode的host,然后把文件拷贝到对应的地址即可正常运行hdfs。

如此部署完毕后,将相同的配置拷贝到其他机器上运行即可。

最后,注意启动hdfs和yarn的时候,必须在自己的master机器上启动,否则可能会报错。

我的配置中,在slaves机器中同时指定了本机的host,这样就可以多启动一台datanode来使用。

猜你喜欢

转载自blog.csdn.net/u013384984/article/details/80222951