Hadoop集群安装部署

单机部署参考Hadoop安装——单机

集群部署

  • 在每台主机配置好java环境,将hadoop安装到每台主机的/usr/local/hadoop目录下。

  • 修改每台主机Hadoop目录下etc/hadoop/hadoop-env.sh中的JAVA_HOME

# set to the root of your Java installation
export JAVA_HOME=/usr/local/jdk
  • 修改每台主机的主机名,并修改DNS
    #分别对应每台主机修改主机名,执行如下命令
     $  hostname master     #在10.0.30.70主机上执行
     $ hostname slave1      #10.0.30.64
     $ hostname slave2      #10.0.30.65
    
     #将三个主机上的/etc/hosts 文件修改成如下内容
     10.0.30.70 master
     10.0.30.64 slave1
     10.0.30.65 slave2
    
  • 设置各主机之间免密登录,参考Linux 下 的ssh免密登录
  • 在各主机下目录下 /usr/local/hadoop/,创建hdfs的存储目录tmp/dfs/datatmp/dfs/name,其中data目录用于存储hdfs的datanode数据,name目录用于存储hdfs的namnode数据
  • 配置文件
    NameodeResourceManger的文件配置,即在master的/usr/local/hadoop/etc/hadoop/目录下
    core-site.xml
    
        fs.defaultFS
        hdfs://master:9000
    

hdfs-site.xml,其中配置了namenode的存储位置,如果只作为namenode,data.dir不起作用,可不配置。

    
        dfs.replication
        1
    

    
        dfs.namenode.name.dir
        file:/usr/local/hadoop/tmp/dfs/name
    
    
    
       dfs.datanode.data.dir
       file:/usr/local/hadoop/tmp/dfs/data
    

mapred-site.xml,配置hadoop的mapreduce框架

    
        mapreduce.framework.name
        yarn
    

yarn-site.xml,配置yarn,ResourceManger

    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    

    
        yarn.resourcemanager.hostname
        master
    
    
        yarn.nodemanager.auxservices.mapreduce.shuffle.class
        org.apache.hadoop.mapred.ShuffleHandler
    
    
        yarn.resourcemanager.address
        master:8032
    
    
        yarn.resourcemanager.scheduler.address
        master:8030
    
    
        yarn.resourcemanager.resource-tracker.address
        master:8031
    
    
        yarn.resourcemanager.admin.address
        master:8033
    
    
        yarn.resourcemanager.webapp.address
        master:8088
    

slaves,从节点配置,即配置datanode

slave1
slave2

上述为datanode的文件配置,配置slave1和slave2的文几乎相同,将 core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml复制到slave1和slave2的配置文件中。

  • 在master下执行hdfs格式化 hadoop namenode -format

  • 启动hdfs ./sbin/start-dfs.sh , 之后通过jps命令可以查看hadoop的进程

  • 启动yarn ./sbin/start-yarn.sh

  • 启动job History Server ./sbin/mr-jobhistory-daemon.sh start historyserver

  • master和slave上的进程:

Hadoop集群安装部署_第1张图片

Hadoop集群安装部署_第2张图片

  • 在master下运行示例:
hadoop fs -mkdir /input               # 在hdfs上创建目录
hadoop fs -ls /                       # 显示hdfs上目录/下文件
hadoop fs -put input/*.xml /input     #将 input/*.xml 上传到 hdfs上的/input文件夹下
hadoop fs -ls /input                  #显示hdfs上目录下/input下文件
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar grep /input /output 'd[a-z.]+'   #运行example  输入为hdfs上的/input  输出在hdfs上的/output
hadoop fs -cat /output/*              #输出结果
hadoop fs -get /output ./output       #将hdfs上的 结果/output下载到 ./output
cat output/*                          #输出结果11
  • WebUI:ResourceManager - http://localhost:8088/
    WebUI:NameNode - http://localhost:50070/
    WebUI:MapReduce JobHistory Server-http://10.0.30.70:19888/jobhistory

安装过程中遇到的问题

  • datanode 进程未启动,hdfs初始化的原因,查看datanode和namenode的存储路径下的/current/VERSION中的clusterID,将datanode的设成和namenode的一致

  • 期间有一个问题,进程都能启动,单机情况下可以正常运行示例,集群之后运行时卡在 map(0%) reduce(0%),然后报错... connection refused,from localhost.domian to ...
    找了好久原因,最后发现是主机名没有设置,默认的主机名localhost.localdomain对应的ip是127.0.0.1,hadoop某个地方根据主机名获取域名ip,即127.0.0.1,单机情况下可以访问,但集群下127.0.0.1无法对外提供访问,所以报错connection refused,设置主机名,并在etc/hosts中将主机名对应本机的ip,注释掉localhost.localdomain即可

  • 报错hdfs.DFSClient:Exception in createBlockOutputStream [Java].net.NoRouteToHostException:No route to host,原因是未关闭防火墙,执行:service iptables stop

  • 各主机之间时间同步,若时间不同步运行示例时也会出现异常

service ntpd stop  #若报错the NTP socket is in use, exiting,则执行
ntpdate ntp.api.bz

你可能感兴趣的:(Hadoop集群安装部署)