zoukankan      html  css  js  c++  java
  • Hadoop学习------Hadoop安装方式之(三):分布式部署

    这里为了方便直接将单机部署过的虚拟机直接克隆,当然也可以不这样做,一个个手工部署。

    创建完整克隆——>下一步——>安装位置。等待一段时间即可。

    我这边用了三台虚拟机,分别起名master,slave1.slave2

    1、修改主机名、ip

    1.1关闭防火墙

    CentOS系统默认开启了防火墙,在开启 Hadoop 集群之前,需要关闭集群中每个节点的防火墙。有防火墙会导致 ping 得通但 telnet 端口不通,从而导致 DataNode 启动了,但 Live datanodes 为 0 的情况。

    在 CentOS 6.x 中,可以通过如下命令关闭防火墙:

      service iptables stop   # 关闭防火墙服务

    chkconfig iptables off  # 禁止防火墙开机自启,就不用手动关闭了

    若用是 CentOS 7,需通过如下命令关闭(防火墙服务改成了 firewall): 

    systemctl stop firewalld.service    # 关闭firewall

    systemctl disable firewalld.service # 禁止firewall开机启动

    1.2 修改主机名

    在 CentOS 6.x 中  vi /etc/sysconfig/network

    在CentOS 7或者Ubuntu 中  vi  /etc/hostname

    在其他两节点同样如此。分别改为slave1.slave2

    1.3 修改ip地址

    vi /etc/sysconfig/network-scripts/ifcfg-eth0  修改ip 地址 然后重启网卡

    service network restart 发现重启失败

    这是因为基本系统的网络相关配置都是基于eth0的,如果基于此克隆虚拟机继续克隆或复制新的虚拟机,网卡的标识每一次都会自动加1变成eth1(第二次克隆会变成eth2),dmesg却显示内核只识别到网卡eth0。

    解决办法: 打开/etc/udev/rules.d/70-persistent-net.rules 记录下,eth1网卡的mac地址00:0c:29:50:bd:17

    接下来  vi//etc/sysconfig/network-scripts/ifcfg-eth0

    将 DEVICE="eth0"  改成  DEVICE="eth1"  ,

    将 HWADDR="00:0c:29:8f:89:97" 改成上面的mac地址  HWADDR="00:0c:29:50:bd:17"

    最后,重启网络   service network restart   然后就能重启成功

    1.4 修改hosts 使所用节点IP映射

    在每台虚拟机上进行如下操作。

      vi  /etc/hosts

    修改完成后需要重启一下   reboot

    2、打通master到slave节点的SSH无密码登录

    2.1设置本机无密码登录(各节点都要)

    之前在单机部署时已经设置过了,这里再说一遍,没有设置的可以看下

    第一步:产生密钥

     ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

    第二部:导入authorized_keys

     cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

    第二部导入的目的是为了无密码等,这样输入如下命令:

    ssh localhost

    2.2 设置远程无密码登录

    我这边偷懒用的是root用户,正规应该用hadoop用户

    进入slave1的.ssh目录  cd /root/.ssh

    复制公钥文件到master

     scp authorized_keys root@master:~/.ssh/authorized_keys_from_master

    进入到master的.ssh目录 将文件导入到authorized_keys

    cat authorized_keys_from_master  >>  authorized_keys

     此时 slave1 可以无密码远程登录master

    同理

    进入slave2的.ssh目录  cd /root/.ssh

    复制公钥文件到master

     scp authorized_keys root@master:~/.ssh/authorized_keys_from_master

    进入到master的.ssh目录 将文件导入到authorized_keys

    cat authorized_keys_from_master  >>  authorized_keys

    然后 将master 的authorized_keys文件复制到slave1和slave2中,他们之间就可以互相无密码远程访问。

    scp authorized_keys root@salve1:~/.ssh/authorized_keys

    scp authorized_keys root@salve2:~/.ssh/authorized_keys

    ssh root@slave1   不需要密码就直接进去了

    3、修改配置文件

    集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。

    3.1 文件slaves

    文件 slaves,将作为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode。分布式配置可以保留 localhost,也可以删掉让 Master 节点仅作为 NameNode 使用。

    这里让 Master 节点仅作为 NameNode 使用,因此将文件中原来的 localhost 删除,只添加两行内容:slave1。slave2

      cd  /usr/local/hadoop/etc/hadoop/

    vi slaves

    3.2  core-site.xml 

    cd  /usr/local/hadoop/etc/hadoop/

     vi core-site.xml

    在其中的<configuration>添加以下内容

          <property>

                 <name>hadoop.tmp.dir</name>

                 <value>file:/usr/local/hadoop/tmp</value>

                 <description>Abase for other temporary directories.</description>

            </property>

            <property>

                 <name>fs.defaultFS</name>

                 <value>hdfs://master:9000</value>

            </property>

    3.3 hdfs-site.xml

    dfs.replication 的值是副节点个数,有几个就写几个,这边设为2

    cd  /usr/local/hadoop/etc/hadoop/

     vi hdfs-site.xml

    其中的<configuration>添加以下内容

    <property>

                    <name>dfs.namenode.secondary.http-address</name>

                    <value>master:50090</value>

            </property>

            <property>

                    <name>dfs.replication</name>

                    <value>1</value>

            </property>

            <property>

                    <name>dfs.namenode.name.dir</name>

    <value>file:/usr/local/hadoop/tmp/dfs/name</value>

            </property>

            <property>

                    <name>dfs.datanode.data.dir</name>

                    <value>file:/usr/local/hadoop/tmp/dfs/data</value>

            </property>

    3.4 mapred-site.xml

    cd  /usr/local/hadoop/etc/hadoop/

    需要将mapred-site.xml.template 文件改名或者复制一份

    mv  mapred-site.xml.template  mapred-site.xml

    或  cp mapred-site.xml.template mapred-site.xml

    然后在进行编辑   vi mapred-site.xml

    <property>

                    <name>mapreduce.framework.name</name>

                    <value>yarn</value>

            </property>

            <property>

                    <name>mapreduce.jobhistory.address</name>

                    <value>master:10020</value>

            </property>

            <property>

                    <name>mapreduce.jobhistory.webapp.address</name>

                    <value>master:19888</value>

            </property>

    3.5 yarn-site.xml

    cd  /usr/local/hadoop/etc/hadoop/

     vi yarn-site.xml

    在其中的<configuration>中 添加以下内容

    <property>

                    <name>yarn.resourcemanager.hostname</name>

                    <value>master</value>

            </property>

            <property>

                    <name>yarn.nodemanager.aux-services</name>

                    <value>mapreduce_shuffle</value>

          </property>

    3.6 启动并检验

    配置好后,按照以上步骤在各个节点均执行一边,或者将 master 上的 /usr/local/Hadoop 文件夹复制到各个节点上。

    在master

     cd /usr/local

    sudo rm -r ./hadoop/tmp     # 删除 Hadoop 临时文件

    sudo rm -r ./hadoop/logs/*   # 删除日志文件

    tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先压缩再复制

    scp ./hadoop.master.tar.gz slave1:/usr/local

    在slave1

    tar -zxf ~/hadoop.master.tar.gz -C /usr/local

    chown -R hadoop /usr/local/hadoop

    在slave2上执行同样操作。就能将Hadoop部署好。

    每个节点部署好后

     在节点上执行NameNode 的格式化

       hdfs namenode –format   或者 hadoop namenode format

    启动hdfs   在master节点上执行  start-dfs.sh

    启动yarn   在master节点上执行  start-yarn.sh

    启动job history server   在master节点上执行     mr-jobhostory-daemon.sh start historyserver

    通过命令 jps 可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程

    在 Slave 节点可以看到 DataNode 和 NodeManager 进程

    缺少任一进程都表示出错。另外还需要在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功。

    同样我们可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://master:50070/。如果不成功,可以通过启动日志排查原因。

    3.7执行分布式实例

    创建 HDFS 上的用户目录

    hdfs dfs -mkdir -p /user/hadoop

    将 /usr/local/hadoop/etc/hadoop 中的配置文件作为输入文件复制到分布式文件系统中

    hdfs dfs -mkdir input

    hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

    通过查看 DataNode 的状态(占用大小有改变),输入文件确实复制到了 DataNode 中

    接着就可以运行 MapReduce 作业了

    hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

    运行时的输出信息与伪分布式类似,会显示 Job 的进度。

    可能会有点慢,但如果迟迟没有进度,比如 5 分钟都没看到进度,那不妨重启 Hadoop 再试试。若重启还不行,则很有可能是内存不足引起,建议增大虚拟机的内存,或者通过更改 YARN 的内存配置解决。

    同样可以通过 Web 界面查看任务进度 http://master:8088/cluster,在 Web 界面点击 “Tracking UI” 这一列的 History 连接,可以看到任务的运行信息

    4 、关闭Hadoop集群

    同样关闭Hadoop集群也是在Master节点上执行的

      stop-yarn.sh

      stop-dfs.sh

      mr-jobhistory-daemon.sh stop historyserver

  • 相关阅读:
    VIJOS-P1340 拯救ice-cream(广搜+优先级队列)
    uva 11754 Code Feat
    uva11426 GCD Extreme(II)
    uvalive 4119 Always an Interger
    POJ 1442 Black Box 优先队列
    2014上海网络赛 HDU 5053 the Sum of Cube
    uvalive 4795 Paperweight
    uvalive 4589 Asteroids
    uvalive 4973 Ardenia
    DP——数字游戏
  • 原文地址:https://www.cnblogs.com/lk-fxtx/p/7491034.html
Copyright © 2011-2022 走看看