Hadoop初窥学习笔记

本文是Hadoop初学者的学习笔记,涵盖了Hadoop核心组件Hive、HDFS、MapReduce和Hadoop在Windows下的安装经验,包括配置文件的常见问题和解决方法。介绍了Hadoop的文件系统特性、MapReduce计算框架的容错机制,以及Hadoop的分布式缓存概念。
摘要由CSDN通过智能技术生成

Hadoop核心组件 ver 1.2x

Hive

  • 功能:用于将SQL语句转化为可执行的Hadoop任务,降低了使用门槛

    Hbase

  • 类型:存储结构化数据的分布式数据库

  • 区别:放弃传统关系型数据库事务的特性,追求更高的扩展。并且提供对数据的随机读写和实时的访问,实现对表数据的读写功能

    Zookeeper

  • 功能:提供分布式一致性

HDFS

  • 概念:Hadoop的文件系统,将所有文件以块的形式存储,默认块大小是64MB(ver 2.0+是128MB 可在hdfs-site.xml中修改dfs-block-size的属性)
  • 特点:(1)适用于大文件 (2)流式读写,即一次写入多次读 (3)备份冗余,硬件容错
    (4)高冗余,高容错
  • 主要节点:NameNode和DataNode
  • NameNode:管理节点,用于存放文件元数据。包括文件->数据块的映射表;数据块->数据节点的映射表.
  • DataNode:工作节点,存放真正的数据块
  • 保证可用的策略:备份冗余、心跳检测、二级NameNode
  • 备份冗余:每份数据块都有两份备份,即一共三个数据块,防止文件的丢失。同时三份数据块的存放策略是在同一份机器上会有两个数据块,在另外一个机器上存放另外一个数据块。
  • 心跳检测:datanode定时向namenode发送心跳包,保证机器正常运转
  • 二级NameNode:冷备份NameNode,保证元数据映射文件和修改日志

MapReduce

  • 概念:Hadoop的计算框架,大多数的计算任务可以被抽象为:映射(分解)Map和规约Reduce过程。类似于JDK自带的Fork/Join框架
  • 容错机制:(1)尝试重试,最多重试4次,超过则放弃 (2)推测执行,如果出现一个节点的计算远远比其他节点慢,那么新建一个节点执行同样的任务。谁先执行完,则放弃另外一个节点。这样防止不会因为单个节点故障而拖累整个任务的进度。
  • 重要名词:Job&Task,JobTracker,TaskTracker 注:这些在2.0+被移除,而交付由Yarn平台的ResourceManager统一管理,同时2.0在支持MapReduce之外还提供对Spark/Storm的支持
  • Job&Task:Job是一个计算工作,一个Job可以被拆分为多个Task,任务。一般保证Job和Task与本机的dataNode对应,减少开销
  • JobTacker:(1)作业调度,类似于操作系统的调度算法,如FIFO,LRU。(2)分配并监控任务,用于将Job拆分为多个Task,同时观察各个任务的进度,防止有单个任务过慢(如出现单点故障)拖累整个计算进度。(3)监控TaskTacker
  • TaskTacker:(1)执行任务 (2)向JobTracker汇报任务执行进度
  • -

Hadoop Windows下安装踩过的坑

因为本身Hadoop在Linux环境下使用,移植到windows下面安装部署难免有多多少少的坑,将笔者遇到的坑写在这里供大家分享并提供解决的方案。

配置文件相关
  • core-site.xml:这个笔者只配置了一个参数,需要注意的是网上搜到的大多文章默认给的配置是localhost:9000,如果直接搬运过去,可能在后面输入hdfs namenode -format的时候会抛出call from xxxx/ to localhost:9000 refuse 的异常,因为这里的localhost实际上应该替换成自己电脑的hostname,在cmd中输入hostname即可查看。
<configuration>
    <property>

          <name>fs.defaultFS</name>

        <value>hdfs://dell-pc:9000</value> //就是这里

    </property>

</configuration>
  • hadoop-env.cmd:这里会让大家进行一个JAVA_HOME的设定,笔者开始也是觉得只是一个简单的步骤,但是在进行hdfs namenode -format操作的时候发生报错。抛出了”JAVA_HOME set incorrectly”的错误。但是在cmd输入java/javac都是正确的,证明本地的JAVA_HOME并没有错。
    原因:Linux环境下不分区,所以在它并不知道Windows环境下我们是分区的,所以Hadoop只能“看见”和它处在同一个盘符下的文件。
    解决方案:如果你的JAVA_HOME和笔者一样,都是和Hadoop的安装目录不在一个盘的,那么只需要将这一行配置文件里的JAVA_HOME改成和Hadoop安装路径同一个地方的JDK即可。
rem The java implementation to use.  Required.
@rem set JAVA_HOME=%JAVA_HOME%
set JAVA_HOME=D:\JDK\Java\jdk1.8.0_101
 -
  • hadoop-env.sh:如果上一个修改后还没有让它正确运转,那么你可能需要修改这个文件 的内容。再一次显式的告诉Hadoop你的JAVA_HOME路径

export JAVA_HOME=D:\JDK\Java\jdk1.8.0_101

  • hdfs-site.xml:这个文件主要是进行对namenode和datanode存放目录文件的配置。如果这里配置不小心,可能启动start-dfs.cmd之后很快就会shutdown并报错(start-all.cmd已经被标记为废弃)
    原因:Linux下的分隔符和Windows下不一样
    解决方式:分隔符如下面代码块所示,记得一定要在盘符面前再加上一个’/’
<configuration>
    <!-- Site specific YARN configuration properties -->
    <property>

        <name>dfs.replication</name>

        <value>1</value>

    </property>

    <property>

        <name>dfs.namenode.name.dir</name>//注意下面一行

        <value>/D:/codeWareCollections/hadoop-2.9.1/data/namenode</value>//一定要注意这里!!!


    </property>

    <property>

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

        <value>/D:/codeWareCollections/hadoop-2.9.1/data/datanode</value>

    </property>
</configuration>

Hadoop执行相关

Hadoop执行过程

  1. Split(分片):该阶段执行在输入文件之后,将文件按默认的块大小(1.0是64MB,2.0是128MB)分成多个块储存在dataNode中
  2. Map(映射)+Combine(组合):

    • map需要编码实现,对数据进行映射处理。每一个分片对应一个mapTask
      -Combine本质上是对Mapper缓冲区文件的合并,即一种本地的规约。为了减少过程中网络混洗的压力。在默认状态下,可以认为Combine是本地单击的reduce,执行的是reduce的逻辑;当然这个可以通过job.setCombinerClass进行设定。
  3. Shuffle(交换):通过交换,在前面步骤中相同key值的数据通过交换,从不同的mapper中进入相同的partition

  4. Partition+Reduce(规约):

    • partition发生在reduce之前。在默认状态下,如果有key值,那么输出结果会按照升序进行排序。相同的key值会进入同一个partition中。
    • reduce:规约输出最终结果的过程,在大数据量情况下不宜设计过少。partition,reducer和最终的输出文件(part-r-000XX)数量是1:1:1关系

Hadoop的分布式缓存

  • 概念:在执行mapreduce过程中,可能Mapper之间需要通信。在数据量不大的情况下,可以通过分布式缓存,将需要通信的文件从HDFS加载到本地内存中。笔者的个人理解,这实际上是一种类似于threadlocal的方式。
  • 发生时间:发生在job执行任务之前,保证能够读取需要的内容。本机上每个dataNode子节点都会缓存一份相同的共享数据。分布式缓存一般适用于较小的配置文件等等情形,如果文件过大,可以将文件分批缓存,重复执行作业
  • 使用方法:版本不同使用的方法不一致,只在这里提一下,可以使用#+名字的方式为缓存的文件设置别名。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值