什么是hadooop,什么是hadoop-ha(高可用)

  1. hadoop

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。

用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

具有可靠、高效、可伸缩的特点。

Hadoop的核心是YARN,HDFS和Mapreduce

下图是hadoop生态系统,集成spark生态圈。在未来一段时间内,hadoop将于spark共存,hadoop与spark

都能部署在yarn、mesos的资源管理系统之上

hadoop 大数据安装 hadoop大数据项目_big data

2.hadoop高可用
hadoop-ha(高可用)就是在hadoop系统中配置两个甚至多个namenode,防止master崩溃,从而出现数据的丢失,这大大方便了我们的工作。

hadoop-ha(高可用)的配置

  1. core-site.xml
<property>
      <name>fs.defaultFS</name>
      <value>hdfs://ns</value>
 </property>
 <!--指定hadoop数据临时存放目录-->
 <property>
      <name>hadoop.tmp.dir</name>
      <value>/home/hadoop/app/hadoop-2.7.2/temp</value>
 </property>

 <property>
      <name>io.file.buffer.size</name>
      <value>4096</value>
 </property>
 <!--指定zookeeper地址-->
 <property>
      <name>ha.zookeeper.quorum</name>
      <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
 </property>
  1. hdfs-site.xml
<!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 -->
    <property>
        <name>dfs.nameservices</name>
        <value>ns</value>
    </property>
    <!-- ns下面有两个NameNode,分别是nn1,nn2 -->
    <property>
       <name>dfs.ha.namenodes.ns</name>
       <value>nn1,nn2</value>
    </property>
    <!-- nn1的RPC通信地址 -->
    <property>
       <name>dfs.namenode.rpc-address.ns.nn1</name>
       <value>192.168.106.11:9000</value>
    </property>
    <!-- nn1的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.ns.nn1</name>
        <value>192.168.106.11:50070</value>
    </property>
    <!-- nn2的RPC通信地址 -->
     <property>
        <name>dfs.namenode.rpc-address.ns.nn2</name>
        <value>192.168.106.12:9000</value>
    </property>
    <!-- nn2的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.ns.nn2</name>
        <value>192.168.106.12:50070</value>
    </property>
    <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
    <property>
         <name>dfs.namenode.shared.edits.dir</name>
         <value>qjournal://192.168.106.11:8485;192.168.106.12:8485;192.168.106.13:8485/ns</value>
    </property>
    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
    <property>
          <name>dfs.journalnode.edits.dir</name>
          <value>/home/hadoop/data/hadoop/journal</value>
    </property>
     <!-- 开启NameNode故障时自动切换 -->
    <property>
          <name>dfs.ha.automatic-failover.enabled</name>
          <value>true</value>
    </property>
    <!-- 配置失败自动切换实现方式 -->
    <property>
            <name>dfs.client.failover.proxy.provider.ns</name>
            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <!-- 配置隔离机制,如果ssh是默认22端口,value直接写sshfence即可 -->
    <property>
             <name>dfs.ha.fencing.methods</name>
             <value>sshfence</value>
    </property>
    <!-- 使用隔离机制时需要ssh免登陆 -->
    <property>
            <name>dfs.ha.fencing.ssh.private-key-files</name>
            <value>/root/.ssh/id_rsa</value>
    </property>
 <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/hadoop/data/hadoop/name</value>
    </property>

    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/hadoop/data/hadoop/data</value>
    </property>

    <property>
       <name>dfs.replication</name>
       <value>2</value>
    </property>
    <!-- 在NN和DN上开启WebHDFS (REST API)功能,不是必须 -->
    <property>
       <name>dfs.webhdfs.enabled</name>
       <value>true</value>
    </property>

3.mapred-site.xml

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



<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
 </property>
  1. yarn-site.xml
<!-- 指定nodemanager启动时加载server的方式为shuffle server -->
    <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>
     <!-- 指定resourcemanager地址 -->
     <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>192.168.106.11</value>
      </property>
      <property>
          <name>yarn.application.classpath</name>
          <value>192.168.106.11</value>
      </property>
      <property>
          <name>yarn.application.classpath</name>
          <value>/home/hadoop/app/hadoop/etc/hadoop:/home/hadoop/app/hadoop/share/hadoop/common/lib/*:/home/hadoop/app/hadoop/share/hadoop/common/*:/home/hadoop/app/hadoop/share/hadoop/hdfs:/home/hadoop/app/hadoop/share/hadoop/hdfs/lib/*:/home/hadoop/app/hadoop/share/hadoop/hdfs/*:/home/hadoop/app/hadoop/share/hadoop/mapreduce/lib/*:/home/hadoop/app/hadoop/share/hadoop/mapreduce/*:/home/hadoop/app/hadoop/share/hadoop/yarn:/home/hadoop/app/hadoop/share/hadoop/yarn/lib/*:/home/hadoop/app/hadoop/share/hadoop/yarn/*</value>
       </property>

启动hadoop

在启动hadoop之前首先要启动zookeeper
在三台机器上分别启动zookeeper

cd /home/hadoop/app/zookeeper
bin/zkServer.sh start

这是第一次启动需要的命令,在第一次启动正常后的启动命令为

start-all.sh

在第一个namenode创造命名空间

hdfs zkfc -formatZK

在三台机器上启动journalnode

hadoop-daemon.sh start journalnode

在主namenode节点上格式化namenode和journalnode目录

hdfs namenode -format ns

在主namenodee节点启动namenode

hadoop-daemon.sh start namenode

在备namenode节点执行第一行命令,这个是把备namenode节点的目录格式化并把元数据从主namenode节点copy过来,并且这个命令不会把journalnode目录再格式化了,然后用第二个命令启动备namenode进程!

hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode

在两个namenode节点执行以下命令

hadoop-daemon.sh start zkfc

在所有datanode节点都执行以下命令启动datanode

hadoop-daemon.sh start datanode

启动成功后在网页查看

hadoop 大数据安装 hadoop大数据项目_big data_02


这是第一台机器,可以看到状态是active,活跃状态

hadoop 大数据安装 hadoop大数据项目_xml_03


而第二台机器的状态是standy,待命状态