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集群 (三)

  • 相关阅读:
    LeetCode "Jump Game"
    LeetCode "Pow(x,n)"
    LeetCode "Reverse Linked List II"
    LeetCode "Unique Binary Search Trees II"
    LeetCode "Combination Sum II"
    LeetCode "Divide Two Integers"
    LeetCode "First Missing Positive"
    LeetCode "Clone Graph"
    LeetCode "Decode Ways"
    LeetCode "Combinations"
  • 原文地址:https://www.cnblogs.com/haibinyuan/p/5155449.html
Copyright © 2011-2022 走看看