hadoop集群_hadoop集群搭建 - CSDN
  • Hadoop集群搭建教程(详细)

    万次阅读 多人点赞 2018-05-26 10:19:39
    需要的安装包: 1.jdk压缩包 2.hadoop压缩包请前往我的github上下载相关安装包开始搭建hadoop集群一.使用VMvare创建两个虚拟机,我使用的是ubuntu16.04版本的因为默认的虚拟机主机名都是ubuntu,所以为了便于...

    需要的安装包:

        1.jdk压缩包

        2.hadoop压缩包

    请前往百度云上上下载相关安装包(密码:8op1)


    开始搭建hadoop集群

    一.使用VMvare创建两个虚拟机,我使用的是ubuntu16.04版本的,并关闭全部虚拟机的防火墙

            1.因为默认的虚拟机主机名都是ubuntu,所以为了便于虚拟机的识别,创建完成虚拟机后我们对虚拟机名进行修改,我们把用于主节点的虚拟机名称设为master(按自己的喜好创建),把用于从节点的虚拟机名称设为slave1

    • 修改主机名的命令:sudo gedit /etc/hostname


    • 把原主机名ubuntu改为master(在从主机上则改为slave1)

            2.为了虚拟机之间能ping通,需要修改虚拟机的ip地址(这里以在master机器操作为例子,从节点的虚拟机也要进行一致的操作)

        命令:sudo gedit /etc/hosts


    把/etc/hosts中yangcx-virtual-machine修改为刚刚改过的主机名master,同时将前面的ip地址改为实际的ip地址


    怎么知道自己虚拟机的ip地址?

    命令:ifconfig -a



    上图红框标记的就是虚拟机的真实ip地址,因此我们把/etc/hosts中的内容修改为:


    slave1的ip地址就是从虚拟机slave1的真实ip地址。同样,我们在slave1虚拟机上也要进行这一步操作。

            3.关闭虚拟机的防火墙

                一般来说,ubuntu默认都是安装防火墙软件ufw的,使用命令 sudo ufw version,如果出现ufw的版本信息,则说明已有ufw

                使用命令 sudo ufw status查看防火墙开启状态:如果是active则说明开启,如果是inactive则说明关闭

                开启/关闭防火墙 (默认设置是’disable’)

                sudo ufw enable|disable

                 我们使用sudo ufw disble来关闭防火墙,并再次用sudo ufw status  查看防火墙是否关闭



    二.安装jdk(所有虚拟机都要安装配置)

    将jdk的压缩文件拖进master和slave1虚拟机中,压缩(右键文件,extract here),或者用命令行

    tar -zxvf  jdk1.8.0_161.tar.gz(使用自己的压缩文件名)

       配置环境jdk环境:

        命令:sudo gedit /etc/profile


    将jdk的路径添加到文件后面(根据自己的文件路径来,我这里jdk1.8.0_161文件夹的路径是/home/hadoop/java)

    export JAVA_HOME=/home/hadoop/java/jdk1.8.0_161
    export JRE_HOME=/home/hadoop/java/jdk1.8.0_161/jre
    export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH


    保存退出,为了使配置立即生效,键入命令:source /etc/profile,或者重启虚拟机,命令:shutdown -r now

    检查路径jdk是否安装成功,键入命令:java -version

    如果出现了版本信息,则恭喜配置成功;

    三.安装SSH服务

     1.首先确保虚拟机能连上网

     2.更新源列表:sudo apt-get update


    3.安装ssh:输入"sudo apt-get install openssh-server"-->回车-->输入"y"-->回车-->安装完成。

     4.查看ssh服务是否启动

    打开"终端窗口",输入"sudo ps -e |grep ssh"-->回车-->有sshd,说明ssh服务已经启动,如果没有启动,输入"sudo service ssh start"-->回车-->ssh服务就会启动。


    四、建立ssh无密码登录本机

     ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式。

    1、创建ssh-key,,这里我们采用rsa方式

    1. ssh-keygen -t rsa -""   //(P是要大写的,后面跟"")

     
    (注:回车后会在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub这两个文件是成对出现的)

    2、进入~/.ssh/目录下,将id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys文件的

    1. cd ~/.ssh

     

    1. cat id_rsa.pub >> authorized_keys

     

     
    完成后就可以无密码登录本机了。

     

    3、登录localhost

    1.  ssh localhost

     

    ( 注:当ssh远程登录到其它机器后,现在你控制的是远程的机器,需要执行退出命令才能重新控制本地主机。)

    4、执行退出命令

    1. exit​

     1~4步在master和slave1两台虚拟机上都是配置

     5.配置master无密码登陆slave1

        

    mater主机中输入命令复制一份公钥到home中

    cp .ssh/id_rsa.pub ~/id_rsa_master.pub
    • 1

    把master的home目录下的id_rsa_master.pub拷到slave1的home下(我的做法是先拖到windows桌面上,在拖进slave1虚拟机中)

    slave1的home目录下分别输入命令

    cat id_rsa_master.pub >> .ssh/authorized_keys
    • 1

    至此实现了mater对slave1的无密码登陆

    以下的步骤只在master上进行(除了hadoop的环境变量

    配置在slave1上也要进行)

    五.安装hadoop

    1.将hadoop压缩包拖进master虚拟机中,解压(我这里解压的路径是/home/hadoop/hadoop-2.7.3)

    2.在hadoop-2.7.3文件夹里面先创建4个文件夹:

    •     hadoop-2.7.3/hdfs
    •     hadoop-2.7.3/hdfs/tmp
    •     hadoop-2.7.3/hdfs/name
    •     hadoop-2.7.3/hdfs/data

    3.配置 hadoop的配置文件

    先进入配置文件的路径:cd /home/hadoop/hadoop-2.7.3/etc/hadoop(再次强调,使用自己的路径)


    输入:ls

    查看该路径下的文件列表


    被红框框住的文件是我们要进程配置的文件

        1.首先配置core-site.xml文件

    sudo gedit core-site.xml

        在<configuration></configuration>中加入以下代码:

    <property>
       <name>hadoop.tmp.dir</name>
       <value>file:/home/hadoop/hadoop-2.7.3/hdfs/tmp</value>
       <description>A base for other temporary directories.</description>
     </property>
     <property>
      <name>io.file.buffer.size</name>
       <value>131072</value>
     </property>
     <property>
       <name>fs.defaultFS</name>
       <value>hdfs://master:9000</value>
     </property>

    注意:第一个属性中的value和我们之前创建的/hadoop-2.7.3/hdfs/tmp路径要一致。

        2.配置 hadoop-env.sh文件

    sudo gedit hadoop-env.sh

       将JAVA_HOME文件配置为本机JAVA_HOME路径


      3.配置 yarn-env.sh

    sudo gedit yarn-env.sh

     将其中的JAVA_HOME修改为本机JAVA_HOME路径(先把这一行的#去掉)


     4.配置hdfs-site.xml

    sudo gedit hdfs-site.xml
    在<configuration></configuration>中加入以下代码
    <property>
     <name>dfs.replication</name>
       <value>1</value>
     </property>
     <property>
       <name>dfs.namenode.name.dir</name>
       <value>file:/home/hadoop/hadoop-2.7.3/hdfs/name</value>
       <final>true</final>
    </property>
     <property>
       <name>dfs.datanode.data.dir</name>
       <value>file:/home/hadoop/hadoop-2.7.3/hdfs/data</value>
       <final>true</final>
     </property>
     <property>
      <name>dfs.namenode.secondary.http-address</name>
       <value>master:9001</value>
     </property>
     <property>
       <name>dfs.webhdfs.enabled</name>
       <value>true</value>
     </property>
     <property>
       <name>dfs.permissions</name>
       <value>false</value>
     </property>

    注意(其中第二个dfs.namenode.name.dir和dfs.datanode.data.dir的value和之前创建的/hdfs/name和/hdfs/data路径一致;因为这里只有一个从主机slave1,所以dfs.replication设置为1)

    5 .复制mapred-site.xml.template文件,并命名为mapred-site.xml

    cp mapred-site.xml.template mapred-site.xml
       配置 mapred-site.xml,在标签<configuration>中添加以下代码
    <property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
     </property>

    6.配置yarn-site.xml

    sudo gedit yarn-site.xml

     在<configuration>标签中添加以下代码

    <property>
     <name>yarn.resourcemanager.address</name>
       <value>master:18040</value>
     </property>
     <property>
       <name>yarn.resourcemanager.scheduler.address</name>
       <value>master:18030</value>
     </property>
     <property>
       <name>yarn.resourcemanager.webapp.address</name>
       <value>master:18088</value>
     </property>
     <property>
       <name>yarn.resourcemanager.resource-tracker.address</name>
       <value>master:18025</value>
     </property>
     <property>
       <name>yarn.resourcemanager.admin.address</name>
       <value>master:18141</value>
     </property>
     <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
     </property>
     <property>
         <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
         <value>org.apache.hadoop.mapred.ShuffleHandler</value>
     </property>
    

    7.配置slaves 文件

    sudo gedit slaves

        把原本的localhost删掉,改为slave1

    8.配置hadoop的环境,就像配置jdk一样

    sudo gedit /etc/profile

    根据hadoop文件夹的路径配置,以我的路径/home/hadoop/hadoop-2.7.3 为例

    export HADOOP_HOME=/home/hadoop/hadoop-2.7.3
    export PATH="$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH"
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

    键入命令 source /etc/profile 使配置立即生效

    9.接下来,将hadoop传到slave1虚拟机上面去

    scp -r hadoop-2.7.1 hadoop@slave1:~/ 

    注意:hadoop是虚拟机的用户名,创建slave1时设定的

    传过去后,在slave1上面同样对hadoop进行路径配置,和第8步一样

    9.初始化hadoop

    hdfs name -format

    10.开启hadoop

      两种方法:

    • start-all.sh
    • 先start-dfs.sh,再start-yarn.sh

    如果在mater上面键入jps后看到


    在slave1上键入jps后看到


    则说明集群搭建成功

    六:最后用自带的样例测试hadoop集群能不能正常跑任务

    使用命令

    hadoop   jar   /home/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar  pi 10 10

    用来求圆周率,pi是类名,第一个10表示Map次数,第二个10表示随机生成点的次数(与计算原理有关)

    最后出现结果


    则,恭喜你,hadoop集群搭建完成

    展开全文
  • Hadoop集群概念设计

    千次阅读 2019-04-15 19:53:51
    什么是Hadoop集群 Hadoop能做什么 Hadoop是什么?   Hadoop是一种分析和处理大数据的软件平台,是Appach的一个用Java语言所实现的开源软件的加框,在大量计算机组成的集群当中实现了对于海量的数据进行的分布式计算...

    Hadoop是什么
    什么是Hadoop集群
    Hadoop能做什么

    Hadoop是什么?

      Hadoop是一种分析和处理大数据的软件平台,是Appach的一个用Java语言所实现的开源软件的加框,在大量计算机组成的集群当中实现了对于海量的数据进行的分布式计算。
      Hadoop的框架最核心的设计就是:Hadoop Distributed File System(以下简称HDFS)和MapReduce.HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
      Hadoop就是一个分布式计算的解决方案。

    什么是Hadoop集群

      先给出图,看下面两个图:Master节点和Slave1、2节点设计图和Hadoop集群设计图。

    Master节点和Slave1节点设计图
    在这里插入图片描述

    Hadoop集群设计图
    在这里插入图片描述
    看不懂没关系,请往下看。

      大数据在Hadoop处理的流程可以参照下面简单的图来进行理解:数据是通过了Hadoop的集群处理后得到的结果。
    在这里插入图在这里插入图片描述片描述
    HDFS,Hadoop的分布式文件系统:
      大文件被分成默认64M一块的数据块分布存储在集群机器中.如下图中的文件 data1被分成3块,这3块以冗余镜像的方式分布在不同的机器中。
    在这里插入图片描述
    HDFS的关键元素:
      1)Block:将一个文件进行分块,通常是64M。
      2)NameNode:保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一 一台主机专门保存,当然这台主机如果出错,NameNode就失效了。在 Hadoop2.* 开始支持 activity-standy 模式----如果主 NameNode 失效,启动备用主机运行 NameNode。
      3)DataNode:分布在廉价的计算机上,用于存储Block块文件。
    MapReduce:
    Hadoop为每一个input split创建一个task调用Map计算,在此task中依次处理此split中的一个个记录(record),map会将结果以key–value 的形式输出,hadoop负责按key值将map的输出整理后作为Reduce的输入,Reduce Task的输出为整个job的输出,保存在HDFS上。
    在这里插入图片描述
      在了解到Hadoop的框架最核心的两个设计之后,我们看下什么是Hadoop的集群。

      Hadoop的集群主要由 NameNode,DataNode,Secondary NameNode,JobTracker,TaskTracker组成.如下图所示:
    在这里插入图片描述
    ● NameNode中记录了文件是如何被拆分成block以及这些block都存储到了哪些DateNode节点.NameNode同时保存了文件系统运行的状态信息.

    ● DataNode中存储的是被拆分的blocks.

    ● Secondary NameNode帮助NameNode收集文件系统运行的状态信息.

    ● JobTracker当有任务提交到Hadoop集群的时候负责Job的运行,负责调度多个TaskTracker.

    ● TaskTracker负责某一个map或者reduce任务.

      全部了解完之后,我们回看一开始的两个图:Master节点和Slave1节点设计图和Hadoop集群设计图
    Master节点和Slave1节点设计图
    在这里插入图片描述
    Hadoop集群设计图
    在这里插入图片描述

    hadoop能做什么?

      hadoop擅长日志分析,facebook就用Hive来进行日志分析,2009年时facebook就有非编程人员的30%的人使用HiveQL进行数据分析;淘宝搜索中的自定义筛选也使用的Hive;利用Pig还可以做高级的数据处理,包括Twitter、LinkedIn上用于发现您可能认识的人,可以实现类似Amazon.com的协同过滤的推荐效果。淘宝的商品推荐也是!在Yahoo!的40%的Hadoop作业是用pig运行的,包括垃圾邮件的识别和过滤,还有用户特征建模。(2012年8月25新更新,天猫的推荐系统是hive,少量尝试mahout!)  
    下面举例说明:  
      设想一下这样的应用场景. 我有一个100M的数据库备份的sql 文件.我现在想在不导入到数据库的情况下直接用grep操作通过正则过滤出我想要的内容。例如:某个表中含有相同关键字的记录那么有几种方式,一种是直接用Linux的命令 grep 还有一种就是通过编程来读取文件,然后对每行数据进行正则匹配得到结果好了 现在是100M 的数据库备份.上述两种方法都可以轻松应对.  
      那么如果是1G , 1T 甚至1PB 的数据呢 ,上面2种方法还能行得通吗? 答案是不能.毕竟单台服务器的性能总有其上限.那么对于这种 超大数据文件怎么得到我们想要的结果呢?  
      有种方法就是分布式计算, 分布式计算的核心就在于利用分布式算法把运行在单台机器上的程序扩展到多台机器上并行运行.从而使数据处理能力成倍增加.但是这种分布式计算一般对编程人员要求很高,而且对服务器也有要求.导致了成本变得非常高.  
      Hadoop就是为了解决这个问题诞生的.Hadoop可以很轻易的把 很多linux的廉价pc组成分布式结点,然后编程人员也不需要知道分布式算法之类,只需要根据mapreduce的规则定义好接口方法,剩下的就交给Hadoop. 它会自动把相关的计算分布到各个结点上去,然后得出结果. 
      例如上述的例子 :Hadoop要做的事首先把1PB的数据文件导入到 HDFS中, 然后编程人员定义好map和reduce, 也就是把文件的行定义为key,每行的内容定义为value , 然后进行正则匹配,匹配成功则把结果 通过reduce聚合起来返回.Hadoop 就会把这个程序分布到N个结点去并行的操作.  
      那么原本可能需要计算好几天,在有了足够多的结点之后就可以把时间缩小到几小时之内.  
      这也就是所谓的大数据云计算了.如果还是不懂的话再举个简单的例子  
      比如1亿个1相加得出计算结果, 我们很轻易知道结果是 1亿.但是计算机不知道.那么单台计算机处理的方式做一个一亿次的循环每次结果+1  
      那么分布式的处理方式则变成 我用1万台 计算机,每个计算机只需要计算 1万个 1 相加 然后再有一台计算机把1万台计算机得到的结果再相加,从而得到最后的结果。 
      理论上讲, 计算速度就提高了1万倍. 当然上面可能是一个不恰当的例子.但所谓分布式,大数据,云计算 大抵也就是这么回事了.

    快速链接

    上一篇 汇总目录 下一篇
    5 搭建Hadoop 云计算数据平台-hadoop集群 5.2 安装Hadoop
    展开全文
  • 最详细的Hadoop集群搭建

    千次阅读 2018-05-07 13:50:18
    本文,针对hadoop的整体搭建过程,给予一个详细的介绍。1:hadoop版本:采用hadoop-2.6.5版本,下载地址:下载地址下载190M的tar包即可,该包是编译直接可用的。2:我使用的机器版本:Linux version 2.6.32-504.el6....

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

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

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

    2:我使用的机器版本:

    Linux version 2.6.32-504.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (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来使用。

    展开全文
  • 看懂Hadoop集群原理与实现方式

    千次阅读 2018-01-11 13:32:25
    这篇文章将会逐步介绍 Hadoop 集群的实现原理以及Hadoop集群的拓扑结构。并让大家通过拓扑图的形式直观的了解 Hadoop 集群是如何搭建、运行以及各个节点之间如何相互调用、每个节点是如何工作以及各个节点的作用是...
    这篇文章将会逐步介绍 Hadoop 集群的实现原理以及Hadoop集群的拓扑结构。并让大家通过拓扑图的形式直观的了解 Hadoop 集群是如何搭建、运行以及各个节点之间如何相互调用、每个节点是如何工作以及各个节点的作用是什么。明白这一点将会对学习 Hadoop 有很大的帮助。首先,我们开始了解 Hadoop 的基础知识,以及 Hadoop 集群的工作原理。
    看懂Hadoop集群原理与实现方式
           在Hadoop部署中,有三种服务器角色,他们分别是客户端、Masters节点以及Slave 节点。Master 节点,Masters 节点又称主节点,主节点负责监控两个核心功能:大数据存储(HDFS)以及数据并行计算(Map Reduce)。其中,Name Node 负责监控以及协调数据存储(HDFS)的工作,Job Tracker 则负责监督以及协调 Map Reduce 的并行计算。 而Slave 节点则负责具体的工作以及数据存储。每个 Slave 运行一个 Data Node 和一个 Task Tracker 守护进程。这两个守护进程负责与 Master 节点通信。Task Tracker 守护进程与 Job Tracker 相互作用,而 Data Node 守护进程则与 Name Node 相互作用。

           所有的集群配置都会存在于客户端服务器,但是客户端服务器不属于 Master 以及 Salve,客户端服务器仅仅负责提交计算任务给 Hadoop 集群,并当 Hadoop 集群完成任务后,客户端服务器来拿走计算结果。在一个较小的集群中(40个节点左右),可能一台服务器会扮演多个角色,例如通常我们会将 Name Node 与 Job Tracker安置在同一台服务器上。(由于 Name Node对内存开销非常大,因此不赞成将 Name Node 与 Secondary Name Node 安置在同一台机器上)。而在一个大型的集群中,请无论如何要保证这三者分属于不同的机器。

           在真实的集群环境中,Hadoop 最好运行在 Linux 服务器上。当然,Hadoop 也可以运行在虚拟机中,但是,这仅仅是用来学习的一种方法,而不能将其用在生产环境中。
    看懂Hadoop集群原理与实现方式
           上图是一个典型的 Hadoop 集群架构。这张图中,Hadoop 集群以机架为单位存在(而不是刀片机),而每个机架顶部都会有一个交换机通过千兆网与外部关联,如果你的服务器比较给力,请确保带宽足够数据的传输以免带宽影响运算(例如万兆以太网)。我们通过上行链路将所有的机架链接在一起形成一个集群。在一个机架中,有些服务器作为 Master 节点,例如 Name Node等等,而更多的则是 Slave Node。

            到这里,我们没有讨论更加详细的设计方案,我们暂且放在一边,下面开始看看程序是如何运行的。
    • 从集群中加载数据(HDFS writes)
    • 分析数据(Map Reduce)
    • 在集群中为结果排序(HDFS writes)
    • 从集群运算中读取结果(HDFS reads)
    应用场景:

            每天都有海量的邮件被客服收到,但是我怎么才能知道这些邮件中究竟有多少邮件包含了“退款”这个词?

            Hadoop 的存在价值是什么?Hadoop 解决的是哪些问题?简单来讲,大型企业和政府都可能会包含有大量数据, (我们可以看做是一块巨大的豆腐)例如马路卡口监控视频拍摄的机动车号牌,我们如果要对如此海量的数据进行复杂的分析,还要非常快速的得到结果,如果使用一台计算机,根本无法胜任这个工作。如果能将这个庞然大物分割成许多小的数据块,并将其分发给许许多多的服务器来协同计算,那么这个效率自然是很快的,所以,Hadoop 的存在价值就体现在这里。

            例如上面那个邮件的例子,经过日积月累,我们的服务器存有大量的邮件,我们可以将这些邮件打包成文本发送给Hadoop 集群,只需要编写一个简单的计算单词量的函数,并提交给集群,集群通过相互协调,在短时间内计算完毕之后返回一个结果。我就可以得到我想要的结果了。
    看懂Hadoop集群原理与实现方式
           Hadoop 集群有了数据之后,便开始工作。我们在此的目的是大量数据的快速并行处理,为了实现这个目标,我们应当利用尽可能多的机器,为此,客户端需要将数据分拣分成较小的块,然后将这些快在集群中不同的机器上并行计算。但是,这些服务器中的某些服务器可能会出现故障,因此,应当将每个数据块做几次拷贝,以确保数据不会被丢失。默认的拷贝次数是3次,但是我们可以通过 hdfs-site.xml 配置文件中 dfs.replication 这个参数来控制拷贝次数。

            客户端将 File.txt 切割成三块,并与Name Node协调,Name Node告知客户端将这些数据分发到哪些 Data Node 上,收到数据块的 Data Node 将会对收到的数据块做几次复制分发给其他的 Data Node 让其他的 Data Node 也来计算同样的数据(确保数据完整性)。此时,Name Node 的作用仅仅是负责管理数据,例如:哪些数据块正在哪个Data Node上计算,以及这些数据将会运行到哪里。(文件系统的元数据信息)
    看懂Hadoop集群原理与实现方式

            Hadoop 有“机架意识”的概念,作为 Hadoop 的管理者,你可以手动的在你的集群中为每一个Slave Data Node定义机架号。你可能会问,我为什么要做这个工作?这里有两个关键点:数据丢失防护以及网络性能。

            记住,每一个数据块将会被复制到多态服务器上以确保数据不会因某个服务器的宕机而造成数据丢失,但是如果不幸的是,所有的拷贝都存放于一台机架上,而这个机架由于种种原因造成了整个机架与外部断开连接或整体宕机。例如一个严重的错误:交换机损坏。因此,为了避免这种情况的发生,需要有人知道每一个 Data Node 在整个网络拓扑图中的位置,并智能的将数据分配到不同的机架中。这个就是 Name Node 的作用所在。

            还有一种假设,即两台机器在同一个机架和分属于不同的机架比起来有更好的带宽和更低的延迟。机架交换机上行链路带宽通常比下行带宽更少,此外,在机架内延迟通常比机架外的延迟要底。如果 Hadoop 有了相同机架优化的意识(提高网络性能),同时能够保护数据,这不是很酷吗?
    看懂Hadoop集群原理与实现方式
            这里的客户端已经准备好将 FILE.txt 分成三块添加到集群中。客户端会先告诉 Name Node 它将要把数据写入到集群中,从 Name Node处得到允许后,并受到 Name Node 为其分配的 Data Node 清单,Name Node分配 Data Node 的时候会有一个智能决策的步骤,以默认的拷贝次数来讲(3次), Name Node 会将其中两个副本放在同一个机架中,而剩下的一个副本会放在另外一个机架中,并将分配结果告诉给客户端,客户端将会遵循这个分配结果将数据分配给三个 Data Node。

            当客户端接收到 Name Node 给出的任务分配清单后,开始将数据传输给 Data Node,例如:Client 选择 Block A 打开 TCP 50010 端口,告诉 Data Node 1 说:“嘿,给你一个数据块 Block A,然后你去确保 Data Node 5 也准备好了,并让它问问 Data Node 6 是不是也准备好了”。如此,Data Node们会通过TCP 50010 端口原路返回并逐层告知自己准备好了,最终让客户端得知清单上所列出的 Data Node 都准备好了。当客户端得知都准备好之后,开始准备写数据块到集群中。
    看懂Hadoop集群原理与实现方式

           数据块被第一个 Data Node 接收后,会将其复制给下一个 Data Node 以此类推(复制次数由 dfs.replication 参数控制)。

            此处我们可以看到,Data Node 1 之所以在不同的机架上,是为了避免数据丢失,而 Data Node 5 和 Data Node 6 存在于同一个机架是为了保证网络性能和低延迟。直到 Block A 被成功的写入到第三个节点,Block B 才会开始继续写入。
    看懂Hadoop集群原理与实现方式


            当所有的 Data Node 已经成功的接收到了数据块,它们将会报告给 Name Node,同时也会告知客户端一切准备就绪并关闭回话,此时客户端也会返回一个成功的信息给 Name Node。Name Node 开始更新元数据信息将 Block A 在 File.txt 中的位置记录下来。

            然后重复以上操作,直到剩下的两个数据块 Block B和 Block C 也分别写入到其他的 Data Node 中。
    看懂Hadoop集群原理与实现方式
        通过以上步骤我们可以得知,如果我们有一个1TB的数据要做分析,那么我们所占用的网络流量和磁盘空间将如下:

            使用流量= 磁盘空间 = dfs.replication*数据大小

            例如我们默认的设置是拷贝三次,那么我们就需要消耗3TB的网络流量和3TB的磁盘空间。
    看懂Hadoop集群原理与实现方式

            这样,就如我们预期的那样,将一个大的数据分割成无数小的数据提交给多个Data Node 进行并行计算。在这里,我们可以通过横向扩展增加服务器的数量来提高计算性能,但同时,网络I/O 的吞吐也成为了计算性能瓶颈之一,因为如果横向扩展,会给网络吞吐带来巨大的压力,如何将 Hadoop 过渡到万兆以太网是即将到来的难题。(而且北京这房价,擦擦擦……)

            还有一种方法则是通过提高单个 Data Node 的配置来提高计算性能。此为纵向扩展。但通常不认为这样做是一个明智的选择(除非您的机房费用真的很高)。
    看懂Hadoop集群原理与实现方式
            Name Node 在整个 HDFS 中处于关键位置,它保存了所有的文件系统的元数据信息用来监控每个 Data Node 的健康状况。只有 Name Node 知道数据从哪里来、将要被分配到哪里去,最后返回给谁。

            Data Node 会每3秒钟一次通过 TCP 9000端口发送心跳给 Name Node。每10次心跳生成一个健康报告,心跳数据都会包含关于该Data Node所拥有的数据块信息。该报告让 Name Node 知道不同的机架上不同的Data Node上存在的数据快的副本,并为此建立元数据信息。

            Name Node的重要性不言而喻,没有它,客户端将不知道如何向HDFS写入数据和读取结果,就不可能执行 Map Reduce 工作,因此,Name Node 所在的服务器应当是一个比较牛逼的服务器(热插拔风扇、冗余网卡连接、双电源等)。

            如果 Name Node 没有接收到 Data Node 发送过来的心跳,那么它将会假定该 Data Node 已经死亡。因为有前面的心跳报告,因此 Name Node 知道该死亡的 Data Node 目前的工作内容以及进度,它将会将该 Data Node 所负责的内容分发给其他的 Data Node去完成。(同样根据机架意识来分发该任务)。
    看懂Hadoop集群原理与实现方式

            Secondary Name Node 在国内通常被称为辅助 Name Node 因为它并不是一个完整备份, Secondary Name Node 的存在虽然是为了确保 Name Node 在宕机后能够接手其职责,但是它与 Name Node 之间的元数据交互不是实时的。默认为每隔一小时,Secondary Name Node 会主动请求 Name Node,并从 Name Node 中拿到文件系统的元数据信息(同步)。这个间隔可以通过配置项来设置。

            因此,如果万一 Name Node 宕机,虽然 Secondary Name Node 能够接手参加工作,但是依然会造成部分的数据丢失。因此,如果数据非常重要,默认的一小时同步一次可能远远不足以保护数据的计算进度,我们可以缩短其同步时间来增加数据的安全性例如:每分钟同步一次。
    看懂Hadoop集群原理与实现方式

           当客户端打算从 HDFS 中取数据的时候,例如一个作业的结果,同样需要首先与 Name Node 打交道,的值想取的数据被存放在哪里,Name Node 同样会给客户端一个清单,然后客户端去 Name Node 指定的某个 Data Node 中拿数据(通过TCP 50010 端口)。

            客户端不会逐个 Data Node 去拿数据,而是由 Name Node 指定的那个 Data Node 分别去其他的 Data Node 那里拿数据。好像客户端在说:“Name Node,告诉我数据都在哪儿?”,Name Node 说“他们在 Data Node x、y、z,你去 Data Node x 拿数据吧”,客户端于是告诉 Data Node X,你把 y 和 z 的数据一起拿来并送到我这里来。
    看懂Hadoop集群原理与实现方式
           还有一种情况,其中一个 Data Node 的守护进程本身将需要读取HDFS的某些数据块,例如Data Node 被要求来处理数据,但是他本地没有,因此它必须从另一个数据节点中解锁数据并通过网络传输到本地开始处理。

            在这里,Name Node 同样会考虑“机架意识”,并通过机架意识来找到最近的 Data Node 并将数据传输过去。

            现在,我们已经知道 File.txt 被分发到不同的 Data Node上,也知道了他们是如何运转的了,现在我们就开始看看 Hadoop 是具体如何使用 Map Reduce 框架来进行快速运算的吧。

            第一步是 Map 阶段,在我们的例子中,我们要求我们的 Hadoop 集群计算出邮件中“Refund”单词的数量。

            在一开始,客户端会提交一个 Map Reduce 作业,例如:“在 File.txt 中有多少个 Refund?”当然,这句话是翻译自 Java 语言,通过 Java 编写好一个 Map Reduce 作业并提交作业给 Job Tracker。Job Tracker 与 Name Node 协调得到哪些 Data Node 包含 File.txt 的数据块。 然后 Job Tracker 开始在这些 Data Node 上激活 Task Tracker。 Task Tracker 开始 Map 作业并监视任务进度。Task Tracker同时也提供心跳和任务状态给 Job Tracker。

            当所有的 Map 任务完成后,每个节点都会存放一个结果在其本地物理磁盘上,这被称为“中间数据”。接下来,就是将这些中间数据通过网络发送给一个执行 Reduce 任务的节点。

    看懂Hadoop集群原理与实现方式
           Job Tracker 总会尽量挑选处理 Map 任务的节点来处理 Reduce 任务,因为 Map 处理的数据就在本地,不需要通过网络来传输,但是,Job Tracker 并不保证一定会挑选本地节点,因为可能 Map 任务较多,没有资源来运行 Reduce 任务,这样,就会挑选其他的节点来完成 Reduce 任务。

            同样,Job Tracker 会根据机架意识来挑选同一机架内的其他节点来完成 Reduce 任务。
    看懂Hadoop集群原理与实现方式
            第二步就是 Reduce,当 Map 生成了中间数据后,现在我们需要将所有的这些中间数据汇总计算生成最终的数据。

            Job Tracker 可能会挑选集群中任意一个节点来作为 Reduce 任务的处理服务器,此时可能会一次性有大量的数据涌向 Reduce 任务所在的节点服务器,这种情况通常被称为“Incast”或“fan-in”。这需要牛逼点的交换机以及内部流量管理和足够的缓冲区(不要太大,也不要太小)。缓冲区的大小最终可能会造成不必要的附带损害(流量相关)。但这是另外一个话题。

            现在 Reduce 已经收集到了所有从 Map 计算得到的中间数据,并可以开始最后阶段的计算,在本文的例子中,我们仅仅是简单的将各个结果相加即可得到“Refund”的数量。然后将结果写入到 Results.txt 文件。客户端可以从HDFS中读取Results.txt 文件,并将工作视为完成。

            这个例子并没有造成大量的中间数据和流量占用问题,但是实际生产环境可能会造成大量的中间数据和带宽瓶颈。这就是 Map Reduce 作业中代码如何计算的一门学问,如果用最优化的代码来完成作业是需要我们来决定的。
    看懂Hadoop集群原理与实现方式
            如果在 Hadoop 集群运算过程中添加了新的机架,那么数据的负载均衡就成为了一个问题所在,如何让新增加的机架迅速的融入到计算环境中来成为了一个很迫切的问题。
    看懂Hadoop集群原理与实现方式
            是的,Hadoop的确包含一个名为 Balancer 的工具。Balancer作业与节点,并试图提供计算平衡。但是默认的 Balancer 可利用的网络带宽是非常低的 1mb/s。不过此设置可以通过hdfs-site.xml 中的 dfs.balance.bandwidthPerSec 参数来设置。

            Balancer 可以很好的照顾你的集群。鉴于 Balancer 的默认带宽设置,他可能需要较长的时间来完成均衡的操作,可能几天,也可能几周。

    原作者:Brad Hedlund
    原文地址(英文):
    http://bradhedlund.com/2011/09/10/understanding-hadoop-clusters-and-the-network/

    译者:Alvin Ge
    原文地址(中文):http://www.uniorder.com/2014/04/04/一篇文章看懂 Hadoop 集群原理与实现方式/
    展开全文
  • 史上最简单详细的Hadoop完全分布式集群搭建

    万次阅读 多人点赞 2018-11-01 21:10:08
    一.安装虚拟机环境 Vmware12中文官方版 链接:https://pan.baidu.com/s/1IGKVfaOtcFMFXNLHUQp41w 提取码:6rep 激活秘钥:MA491-6NL5Q-AZAM0-ZH0N2-AAJ5A 这个安装就十分的简单了,只需要不断点击下一步,... 二....
  • hadoop集群搭建(超详细版)

    万次阅读 多人点赞 2019-04-23 15:10:43
    1.准备好需要安装的软件 虚拟机VMware12.pro 操作系统CentOS 6.5 远程控制虚拟机的终端SecureCRT8.1 2.在虚拟机中安装CentOS操作系统 安装好虚拟机,图形界面如下图 创建新的虚拟机,选择...设置虚...
  • 大数据hadoop集群搭建

    千次阅读 2018-09-07 20:43:05
    安装一个Linux系统 配置网卡 重启网络服务 ping baidu 修改主机名 关闭防火墙 安装ssh客户端 克隆Linux系统 ...- vi /etc/hadoop/hadoop-env.sh JAVA_HOME在哪里 - export JAVAHOME改为绝对路...
  • hadoop集群环境搭建之伪分布式集群环境搭建(一)

    万次阅读 多人点赞 2018-05-15 16:00:15
    hadoop集群环境搭建之伪分布式集群环境搭建(一) 1、Linux基本环境配置 1.1 虚拟机网络模式选择NAT 一般虚拟机默认是NAT模式 1.2 修改主机名 vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=zhang ...
  • Hadoop集群】-hadoop运行原理解析

    千次阅读 2019-02-11 12:09:13
    hadoop运行原理解析前言基本结构MapReduceMapper任务(分割及映射)输入拆分-Input Splits映射块-MappingReducer任务(重排,还原)ShuffleSortSecondary Sort...前两篇博客讨论了hadoop集群的搭建过程,并介绍了...
  • hadoop集群动态添加和删除节点说明

    万次阅读 2015-11-23 21:02:33
    上篇博客我已经安装了hadoop集群hadoop集群的安装步骤和配置),现在写这个博客我将在之前的基础上进行节点的添加的删除。 首先将启动四台机器(一主三从)组成的hadoop集群,还是要提醒一句,在启动集群的时候...
  • 本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。 如果你希望在单机上安装Hadoop玩玩,从这里能找到相关细节。 更多精彩内容 精彩内容点我学 先决...
  • Hadoop集群多用户部署

    2017-11-22 17:35:44
    1 引言之前曾用一个管理员账号A在用户目录下部署了一个hadoop集群。但是当新建一个账号的时候,新账号B就不能使用Hadoop集群,理由很简单,B不能访问A下面的目录和文件。因此,正确的做法是将hadoop集群部署到公告...
  • Hadoop集群配置(最全面总结)

    万次阅读 多人点赞 2014-02-12 12:04:54
    Hadoop集群配置(最全面总结) huangguisu  通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves\...
  • 基于Hadoop集群的Spark集群搭建

    千次阅读 2019-06-10 09:06:25
    基于Hadoop集群的Spark集群搭建 一. 单机版Spark搭建 (1)将下载下来的软件包拉至集群中(主节点上) (2)解压至指定目录 (3)将解压下的文件移至某个特定目录下并查看 (4)修改环境变量 (5)使环境变量生效并进入scala...
  • 查看整个Hadoop集群的进程

    千次阅读 2018-05-15 13:27:20
    hadoop集群工作状态查询时,需要ssh在每台机器上进行jps。可以使用了脚本查看集群各机器工作状态,比之前来回切换方便很多。以下是针对我个人搭建hadoop集群,具体业务需要具体分析。查看hadoop集群工作脚本#!/bin/...
  • Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)

    万次阅读 多人点赞 2017-05-18 09:30:11
    Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0) 版本:CentOS7 Hadoop2.8.0 JDK1.8
  • 阿里云搭建Hadoop集群

    千次阅读 2017-10-15 17:02:39
    这篇blog主要是讲如何搭建Hadoop集群,是继我上一篇手把手教你如何使用阿里云搭建Hadoop环境 环境下进行的,如果你还没看过上一篇blog,建议你先看一下如何搭建Hadoop环境,在继续往下看。如果你已经在自己的...
  • 通过公网IP访问云上的Hadoop集群

    千次阅读 2017-05-12 21:33:30
    背景:从公司内部网络中的Hadoop集群访问部署在亚马逊云的Hadoop集群1. IP、域名设置1.1 给云上每个实例设置一个内网IP(如上图10.0.0.5)1.2 给云上每个实例绑定一个Elastic IP(弹性IP,如上图X.X.X.1),并且与...
  • 基于树莓派的Hadoop集群搭建

    千次阅读 2016-07-15 13:17:11
     由于本人需求,所以在四个树莓派上搭建了一个极小的Hadoop集群,请勿喷我的工作无用,都说了是我需要才这样做的,手动再见!工作并非完全个人创造,在基于网上貌似唯一一篇介绍树莓派搭建Hadoop集群的过程文章后...
  • 使用docker搭建hadoop集群

    千次阅读 2019-08-28 10:44:19
    Hello小伙伴们,上一篇我们讲了怎么使用虚拟机搭建hadoop集群。 由于这种方式搭建起来,虚拟机较大,如果是从0开始搭建的话, 那是十分缓慢。下面就给大家伙讲讲怎么使用docker搭建hadoop集群。 docker简介 百度...
1 2 3 4 5 ... 20
收藏数 179,300
精华内容 71,720
关键字:

hadoop集群