zoukankan      html  css  js  c++  java
  • 搭建Hadoop集群 (二)

    前面的步骤请看  搭建Hadoop集群 (一)

    安装Hadoop

    解压安装

    登录master, 下载解压hadoop 2.6.2压缩包到/home/hm/文件夹. (也可以从主机拖拽或者psftp压缩包到master)

    [hm@master ~]$ tar -xzvf hadoop-2.6.2.tar.gz -C ~
    [hm@master ~]$ mv hadoop-2.6.2 hadoop
    [hm@master ~]$ cd hadoop/

    修改环境变量

    [hm@master hadoop]$ vi etc/hadoop/hadoop-env.sh 

    找到export JAVA_HOME=${JAVA_HOME}, 修改为绝对路径:

    # The java implementation to use.
    export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.95.x86_64

    建议同时把etc/hadoop/yarn-env.sh和mapred-env.sh的JAVA_HOME也相应修改.

    Optional - 修改$PATH

    方便在任何路径下执行hadoop命令和Java命令

    [hm@master hadoop]$ cd ~ 
    [hm@master ~]$ vi .bash_profile

    修改为:

    # User specific environment and startup programs
    export HADOOP_PREFIX=/home/hm/hadoop
    export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.95.x86_64
    PATH=$PATH:$HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin:$JAVA_HOME/bin
    
    export PATH

    使更改立即生效:

    [hm@master ~]$ source .bash_profile

    测试环境变量设置

    [hm@master hadoop]$ bin/hadoop

    可以看到hadoop命令的usage信息.

    [hm@master ~]$ jps

    可以看到jvm中的进程信息.

    配置分布式Hadoop集群

    修改配置文件

    hadoop/etc/hadoop/core-site.xml

    创建tmp目录, 用于放置hdfs产生的临时文件, 不配置的话, 默认位置是/tmp/hadoop-{username}/, 导致机器重启后每次都需要重新format NameNode.

    [hm@master hadoop]$ mkdir tmp
    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://master:9100</value>
        </property>
        <property>
          <name>hadoop.tmp.dir</name>
          <value>file:/home/hm/hadoop/tmp</value>
        </property>
    </configuration>

    file: 代表在本地文件系统中, hdfs: 则代表在分布式文件系统中.

    注意提前查看端口是否有被占用

    [hm@master hadoop]$ netstat -nap | grep 9100

    hadoop/etc/hadoop/hdfs-site.xml

    创建hdfs文件系统目录:

    [hm@master hadoop]$ mkdir dfs

    修改配置文件

    <configuration>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/home/hm/hadoop/dfs/name</value>
            <description>  </description>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:/home/hm/hadoop/dfs/data</value>
            <description> </description>
        </property>
        <property>
            <name>dfs.replication</name>
            <value>2</value>
        </property>
    </configuration>

    hadoop/etc/hadoop/mapred-site.xml

    默认不存在, 需要从template复制或者改名

    [hm@master hadoop]$ cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>

    hadoop/etc/hadoop/yarn-site.xml

    <configuration>
    <!-- Site specific YARN configuration properties -->
        <property>
            <description>The hostname of the RM.</description>
            <name>yarn.resourcemanager.hostname</name>
            <value>master</value>
        </property>
        <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>
    </configuration>

    添加master, slave节点的hostname, 或者ip

    该文件主要被hadoop的某些脚本调用, 作用是从master一次性向多台slave发生命令. 因此前提是ssh免密码登录必须配置好.

    [hm@master hadoop]$ vi etc/hadoop/slaves

    修改为:

    slave1
    slave2

    Optional - 实现机架感知 (rack-aware)

    http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/RackAwareness.html

    Logging

    通过修改etc/hadoop/log4j.properties可以自定义hadoop daemons的log设置

    更多配置

    比如NodeManagers的状态监控等等, 都可以在yarn-site.xml中配置, 详细参见官方文档: 
    http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html

    将配置好的Hadoop安装包拷贝到Slaves

    这样可以节省很多安装部署的时间, 但必须要保证slave和master拥有同样的文件目录结构, 用户和用户组的名字以及权限. 

    [hm@master hadoop]$ scp -r hadoop/ hm@slave1:~
    [hm@master hadoop]$ scp -r hadoop/ hm@slave2:~

    此外, 记得修改slave机器上的环境变量, e.g. .bash_profile文件, 内容和master保持一致.

    启动HDFS

    格式化分布式文件系统

    [hm@master hadoop]$ bin/hdfs namenode -format

    关闭防火墙

    CentOS 6.7, 默认会有防火墙开启, DataNode发给NameNode的心跳信息会被挡在防火墙外.

    需要去防火墙里设置master, slave对应的端口, 或者不考虑安全性的话, 直接关闭所有集群虚拟机的防火墙. 步骤:

    1. 检查防火墙状态

      [hm@master ~]$ sudo /etc/init.d/iptables status

    2. 停止防火墙

    [hm@master ~]$ sudo /etc/init.d/iptables stop

    可以把防火墙设置为开机不自启

    [hm@master hadoop]$ sudo chkconfig iptables off
    [hm@master hadoop]$ chkconfig --list iptables

    启动HDFS

    [hm@master hadoop]$ sbin/start-dfs.sh

    检查启动结果:

    在master上, 输入jps, 可以看到NameNode和SecondaryNameNode两个daemon

    [hm@master hadoop]$ jps
    24440 Jps
    24153 NameNode
    24325 SecondaryNameNode

    在slave1和slave2上, 输入jps, 可以看到DataNode的daemon

    [hm@slave1 hadoop]$ jps
    23852 DataNode
    23927 Jps

    检查集群状态

    [hm@master hadoop]$ bin/hdfs dfsadmin -report

    或者登录 http://master:50070 查看. Live DataNodes应该>0. 否则查看DataNode节点的log看具体原因.

    启动YARN

    [hm@master hadoop]$ sbin/start-yarn.sh

    此时查看jps结果, 在master上可以看到多了ResourceManager的daemon

    [hm@master hadoop]$ jps
    24153 NameNode
    24762 Jps
    24506 ResourceManager
    24325 SecondaryNameNode

    在slave上则多了NodeManager的daemon

    [hm@slave1 hadoop]$ jps
    23852 DataNode
    23971 NodeManager
    24082 Jps

    至此, 整个集群环境配置完成. 

    Web Interface

    http://master:50070 NameNode信息, 应该可以看到slave1, slave2的信息.

    http://master:8088 ResourceManager信息

    注意: 如果虚拟机启用了proxy, 必须把master加入到proxy的Ignored Hosts里面, 否则上述URL无法访问.

    运行MapReduce Job

    这里以自带的wordcount为例.

    准备工作

    在hdfs里创建input文件夹: (/user/hm是hm用户在hdfs的默认home)

    [hm@master hadoop]$ bin/hdfs dfs -mkdir -p /user/hm/input/wordcount

    创建一个测试文件, 添加些内容, 并上传到hdfs里

    [hm@master hadoop]$ vi tmp/helloworld
    hello hadoop
    hello master
    hello slave
    hello slave too
    [hm@master hadoop]$ bin/hdfs dfs -put tmp/helloworld input/wordcount

    查看内容是否成功上传到hdfs

    [hm@master hadoop]$ bin/hdfs dfs -ls input/wordcount

    或者想看看内容是否一致

    [hm@master hadoop]$ bin/hdfs dfs -text input/wordcount/helloworld

    重复上述步骤, 多上传几个文件.

    运行wordcount程序

    [hm@master hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.2.jar wordcount input/wordcount output/wordcount

    查看运行输出结果:

    [hm@master hadoop]$ bin/hdfs dfs -cat output/wordcount/*
    hadoop    1
    hello     4
    master    1
    slave     2
    too       1

    停止YARN和HDFS

    运行结束, 不再需要执行其他任务了, 就可以关闭守护进程:

    [hm@master hadoop]$ sbin/stop-yarn.sh
    [hm@master hadoop]$ sbin/stop-dfs.sh

    如果希望下次重新格式化hdfs, 最好把相关的文件删除, 然后重启机器. 也建议删除不再需要的log文件释放虚拟机空间.

    [hm@master hadoop]$ rm -rf dfs/
    [hm@master hadoop]$ rm -rf tmp/*
    [hm@master hadoop]$ rm -rf logs/*

    整个环境配置和java app运行都没有问题了. 接下来要进行debug, 参见 搭建Hadoop集群 (三)

  • 相关阅读:
    Git的使用---6. 分支管理
    Git的使用---5. 工作区、暂存区和仓库
    虚拟机中安装 win2012 r2 tools工具 提示需要安装kb2919355
    【实验】OSPF的基本配置
    【实验】 OSPF和BFD联动
    【实验】VRRP+链路跟踪+BFD联动
    【实验】基于接口和全局DHCP
    【实验】静态LACP的链路聚合
    【实验】手工负载分担链路聚合
    【实验】vxlan的静态配置
  • 原文地址:https://www.cnblogs.com/haibinyuan/p/5155449.html
Copyright © 2011-2022 走看看