一、关于Hadoop

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。

HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

Hadoop解决哪些问题?

  • 海量数据需要及时分析和处理

  • 海量数据需要深入分析和挖掘

  • 数据需要长期保存

海量数据存储的问题:

  • 磁盘IO称为一种瓶颈,而非CPU资源

  • 网络带宽是一种稀缺资源

  • 硬件故障成为影响稳定的一大因素

HDFS采用master/slave架构

Hadoop的三种运行模式 :

  1. 独立(本地)运行模式:无需任何守护进程,所有的程序都运行在同一个JVM上执行。在独立模式下调试MR程序非常高效方便。所以一般该模式主要是在学习或者开发阶段调试使用 。

  2. 伪分布式模式: Hadoop守护进程运行在本地机器上,模拟一个小规模的集群,换句话说,可以配置一台机器的Hadoop集群,伪分布式是完全分布式的一个特例。

  3. 完全分布式模式:Hadoop守护进程运行在一个集群上。

HDFS的主要模块

  1. NameNode:

    功能:是整个文件系统的管理节点。维护整个文件系统的文件目录数,文件/目录的源数据和每个文件对应的数据快列表。用于接受用户的请求。

  2. DataNode:

    是HA(高可用性)的一个解决方案,是备用镜像,但不支持热设备

注意:在本地模式下,将使用本地文件系统和本地MapReduce运行器。在分布式模式下,将启动HDFS和YARN守护进程。

二、hadoop本地模式

  1. 首先下载jdk和hadoop包。

    hadoop-2.6.0.tar.gz

    jdk-8u144-linux-x64.tar.gz

    百度云:https://pan.baidu.com/s/15QXS1ScOG1kOHBOCalgq7Q
    提取码:1dc7

  2. 上传包到虚拟机并解压

    使用ftp软件连接虚拟机,将下载的jdk和hadoop包上传到虚拟机中。

    将两个包解压到/root/hadoop_sft

    1
    2
    tar -zxvf hadoop-2.6.0.tar.gz -C /root/hadoop_sft
    tar -zxvf jdk-8u144-linux-x64.tar.gz -C /root/hadoop_sft
  3. 配置信息

    本地模式有2个文件修改配置

    1. 修改 .bash_profile

      1
      vim ~/.bash_profile

      修改如下:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      JAVA_HOME=/root/hadoop_sft/jdk1.8.0_144

      export JAVA_HOME

      HADOOP_HOME=/root/hadoop_sft/hadoop-2.6.0

      export HADOOP_HOME

      PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

      export PATH

      接下来使修改生效:

      1
      source ~/.bash_profile
    2. 修改hadoop-env.sh

      1
      2
      cd /root/hadoop_sft/hadoop-2.6.0/
      vim etc/hadoop/hadoop-env.sh

      修改第25行export JAVA_HOME=${JAVA_HOME},将${JAVA_HOME}替换成jdk的绝对路径

      1
      export JAVA_HOME=/root/hadoop_sft/jdk1.8.0_144
  4. 进行测试

    1. 先在/root/下建一个t1.txt 文本文件,往里面放入包含不同单词。

    2. cd切换到mapreduce目录下

      1
      cd /root/hadoop_sft/hadoop-2.6.0/share/hadoop/mapreduce/
    3. 执行jar包里的wordcount程序

      1
      hadoop jar hadoop-mapreduce-examples-2.6.0.jar wordcount /root/t1.txt ./out
    4. out目录生成part-r-00000和_SUCCESS两个文件,进入./out查看,part-r-00000文件可以看到分词情况

      1
      2
      cd ./out
      cat part-r-00000

三、伪分布式模式

​ 伪分布式模式在本地模式的基础上进行配置,本地模式已经做完一,二步,所有我们直接从第三步开始配置。

  1. 配置信息

    本地模式有6个文件修改配置

    1. 修改 .bash_profile(本地模式改过了此处忽略)

      1
      vim ~/.bash_profile

      修改如下:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      JAVA_HOME=/root/hadoop_sft/jdk1.8.0_144

      export JAVA_HOME

      HADOOP_HOME=/root/hadoop_sft/hadoop-2.6.0

      export HADOOP_HOME

      PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

      export PATH

      接下来使修改生效:

      1
      source ~/.bash_profile
    2. 修改hadoop-env.sh(本地模式改过了此处忽略)

      1
      2
      cd /root/hadoop_sft/hadoop-2.6.0/
      vim etc/hadoop/hadoop-env.sh

      修改第25行export JAVA_HOME=${JAVA_HOME},将${JAVA_HOME}替换成jdk的绝对路径

      1
      export JAVA_HOME=/root/hadoop_sft/jdk1.8.0_144
    3. 修改hdfs-site.xml

      1
      2
      cd /root/hadoop_sft/hadoop-2.6.0/
      vim etc/hadoop/hdfs-site.xml

      之间增加配置信息

      1
      2
      3
      4
      5
      6
      7
      8
      9
      <property>
      <name>dfs.replication</name>
      <value>2</value>
      </property>

      <property>
      <name>dfs.permissions</name>
      <value>false</value>
      <.property>
    4. 修改core-site.xml

      1
      2
      3
      4
      cd /root/hadoop_sft/hadoop-2.6.0/
      # 先在hadoop-2.6.0目录中创建tmp文件夹
      mkdir tmp
      vim etc/hadoop/core-site.xml

      之间增加配置信息

      1
      2
      3
      4
      5
      6
      7
      8
      9
      <property>
      <name>fs.defaultFS</name>
      <value>hdfs://(本机ip):9000</value>
      </property>

      <property>
      <name>hadoop.tmp.dir</name>
      <value>/root/hadoop_sft/hadoop-2.6.0/tmp</value>
      </property>
    5. 修改mapred-site.xml

      先将mapred-site.xml.template复制为mapred-site.xml放到同目录下,再编辑修改

      1
      2
      cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
      vim etc/hadoop/mapred-site.xml

      之间增加配置信息

      1
      2
      3
      4
      <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
      </property>
    6. 修改yarn-site.xml

      1
      2
      cd /root/hadoop_sft/hadoop-2.6.0/
      vim etc/hadoop/yarn-site.xml

      之间增加配置信息

      1
      2
      3
      4
      5
      6
      7
      8
      <property>
      <name>yarn.resourcemanager.hostname</name>
      <value>ip</value>
      </property>
      <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
      </property>
  2. 设置免密登录

    生成密钥

    1
    2
    ssh-keygen -t rsa
    ssh-copy-id -i ~/.ssh/id_rsa.pub

    测试免密登陆成功

    1
    ssh root@(本机ip)
  3. Hadoop的进行初始化

    1
    hadoop namenode -format
  4. 启动服务

    1
    2
    3
    cd /root/hadoop_sft/hadoop-2.6.0/
    start-dfs.sh
    start-yarn.sh
  5. 进行测试

    1. 先在/root/下建一个t1.txt 文本文件,往里面放入包含不同单词。

    2. cd切换到mapreduce目录下

      1
      cd /root/hadoop_sft/hadoop-2.6.0/share/hadoop/mapreduce/
    3. 执行jar包里的wordcount程序

      1
      hadoop jar hadoop-mapreduce-examples-2.6.0.jar wordcount /root/t1.txt ./out
    4. out目录生成part-r-00000和_SUCCESS两个文件,进入./out查看,part-r-00000文件可以看到分词情况

      1
      2
      3
      cd ./out
      ls
      cat part-r-00000

四、完全分布式

搭建分布式主要用三台虚拟机:hadoop01、hadoop02、hadoop03,所以我们将第一台虚拟机再克隆出两台,配置NAT网络,记下三台虚拟机的IP

1
2
3
192.168.171.129
192.168.171.130
192.168.171.131
  1. 配置虚拟机的hostname

    1
    vim /etc/sysconfig/network

    插入以下内容:

    1
    2
    NETWORKING=yes
    HOSTNAME=hadoop01

    修改hosts文件:

    1
    vim /etc/hosts

    添加以下内容:

    1
    2
    3
    4
    127.0.0.1       localhost
    192.168.171.129 hadoop01
    192.168.171.130 hadoop02
    192.168.171.131 hadoop03

    需要把以上hosts配置到windows的hosts文件中,不然在windows开发时连接不上hdfs

  2. 设置免密登录

    给每一台虚拟机都生成设置免密登录

    生成密钥

    1
    2
    ssh-keygen -t rsa
    ssh-copy-id -i ~/.ssh/id_rsa.pub

    测试免密登陆成功

    1
    ssh root@(本机ip)

    在.ssh文件夹下会有id_rsa与id_rsa.pub两个文件,执行:

    1
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    将公钥保存到认证文件中(认证文件名一定不能打错),最后将其余两台机器的公钥也复制进来,组成免密访问。

    余下待补充