hadoop

首先当然是hadoop,不过hadoop不是一门技术,而是一个大数据框架。它的logo是一只黄色的小象,据说是这个项目的创建者用女儿的玩具命名的。

经过了很多年的发展,现在hadoop框架已经非常成熟,衍生出了一个庞大的家族。有多庞大呢,我在google里给大家找了一张图,大家可以看看感受一下,这里面有多少是自己知道的,有多少没听说过。

当然对于算法工程师来说,hadoop家族并不需要全部了解,只需要着重关注几个就可以了。

hdfs

首先是hdfs,hdfs是hadoop框架中的分布式文件系统。因为在工业场景当中,数据量是非常庞大的,动辄TB甚至是PB量级。如此庞大的数据,显然不可能存在一块磁盘里,必须要分布式存储,分成不同的部分,不同的部分分开存储。通过hdfs我们可以很方便地实现这一点,可以使用一些简单的shell命令管理大规模的数据。

hdfs的内部是分片(block)存储的,并且设计了严谨的容错机制,尽可能地保证了数据的准确性。一般我们用hdfs存储一些离线数据,也就是对延迟要求不高的数据,比如模型的训练数据。它的特点是存储能力很强,但是读取速度很慢,中间的延迟很长。

因为训练数据的规模往往也非常庞大,并且从用户线上的实时行为转化成模型需要的输入,中间需要大量的计算步骤。这会带来巨大的计算压力,因此对于这样的数据,我们往往都是借助于hdfs做离线处理。设计一套数据处理流程,进行若干步骤的处理,每一步处理的中间数据都存储在hdfs上。

模型训练的时候,也通过挂载hdfs的方式直接读取tensor进行训练。

MapReduce

hdfs是hadoop的存储系统,hadoop同样也推出过一套计算系统,就是MapReduce。

我在之前的文章曾经介绍过MapReduce的原理,其实非常简单,它将数据的计算过程抽象成了两个步骤。一个步骤叫map,一个步骤叫reduce。

map步骤做的数据的映射,比如我们从一个很大的json文件当中读取出我们想要的字段,在这个步骤当中,我们从json获得了几个字段。

reduce步骤做的是汇总,我们把刚刚map阶段得到的结果,按照我们的想法汇聚在一起,比如计算平均数、中位数等等。

这个想法巧妙的地方在于map和reduce都是可以分布式进行的,比如map阶段,我们可以对hdfs里的每一个文件都设置一个map读取文件进行处理。map阶段结束之后,我们也可以起多个reducer对map的结果进行加工,尽可能导致了整个过程都是并发进行的,也就保证了数据的处理速度。

虽然MapReduce的提出到现在已经十多年了,但仍然没有淘汰,还在很多场景当中广泛使用。

hive

hive也是hadoop家族核心的一员,它的思想也很巧妙,做了一件非常有利于程序员的事情。

使用hdfs以及MapReduce其实就足够应付几乎所有大数据计算的场景了,但是足够应付并不代表应付起来很舒服。有些场景使用起来就不是很顺手,比如说我们要把两份数据关联在一起,一份是用户点击数据,一份是商品数据,我们想要得到用户点过的商品信息。

你会发现使用MapReduce去做这样一件事情会非常蛋疼,要写很多代码。所以有人突发奇想,我们能不能利用hdfs以及MapReduce做一套好用一点的数据处理系统,比如说将数据全部格式化,然后像是数据库一样使用SQL来进行数据的查询和处理?于是就有了hive。

hive底层的运算框架就是MapReduce,只不过有了表结构之后,很多之前很复杂的操作被大大简化了。尤其是数据表之间的join、group by等操作,之前需要写大量MapReduce的代码,现在几行SQL就搞定了。

不过hive毕竟不是数据库,它的使用还是有一些它自己专属的奇淫技巧。比如说避免数据倾斜的情况,比如说设置合理的内存分片,比如说udf的使用等等。

只是懂SQL的语法是写不好hive的,多少还需要做一些深入的了解。

spark

说到spark相信很多同学也是久仰大名,它是一个非常著名的开源集群计算框架,也可以理解成一个分布式计算框架。

spark在MapReduce的基础上对MapReduce当中的一些问题进行了优化,比如MapReduce每次运算结束之后都会把数据存储在磁盘上,这会带来巨大的IO开销。

而spark使用了存储器内运算技术,可以尽量减少磁盘的写入。这其中的技术细节看不懂没有关系,我们只需要知道它的运算性能比MapReduce快很多就可以了,一般来说运算速度是MapReduce的十倍以上。并且spark原生支持hdfs,所以大部分公司都是使用hdfs做数据存储,spark来进行数据运算。

在hadoop推出了hive之后,spark也推出了自己的spark SQL。不过后来hive也支持使用spark作为计算引擎代替MapReduce了,这两者的性能上差异也就很小了,我个人还是更喜欢hive一点,毕竟写起来方便。

另外spark除了计算框架之外,当中也兼容了一些机器学习的库,比如MLlib,不过我没有用过,毕竟现在机器学习的时代都快结束了。很少再有使用场景了,大家感兴趣也可以了解一下。

总结

最后做一个简单的总结,总体上来说想要成为一名合格的算法工程师,hadoop、MapReduce、hive这些或多或少都需要有所了解。不说能够精通到原理级,但至少需要会用,大概知道里面怎么回事。

这也是工业界和实验室里的最大区别,毕竟学校里的实验数据量也不会很大,直接放在内存里就完事了。所以数据处理一般都是numpy + pandas什么的,但是在公司里,几乎没有pandas的用武之地,毕竟数据量太大了,不可能都放内存里,必须要借助大数据计算平台来解决。

2021-09-09 Hadoop Hive Spark概览相关推荐

  1. hadoop+hive+spark搭建(一)

    1.准备三台虚拟机 2.hadoop+hive+spark+java软件包 传送门:Hadoop官网 Hive官网 Spark官网      一.修改主机名,hosts文件 主机名修改 hostnam ...

  2. Hadoop、Spark、Hbase、Hive的安装

    为什么80%的码农都做不了架构师?>>>    工作中需要使用Hadoop环境,在三节点上搭建了一套Hadoop环境,顺便做下笔记.因为机器内存较低,没有使用CDH,为保证和线上环境 ...

  3. 【Hadoop Summit Tokyo 2016】Hivemall: Apache Hive/Spark/Pig 的可扩展机器学习库

    本讲义出自 Makoto YUI与NTT Takashi Yamamuro在Hadoop Summit Tokyo 2016上的演讲,主要介绍了Hivemall的相关知识以及Hivemall在Spar ...

  4. 记录hiveonspark:Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask

    问题描述: 在部署hive on spark,测试时报错,执行建表操作成功,但是插入insert出现以下错误: Failed to execute spark task, with exception ...

  5. 大数据学习系列之八----- Hadoop、Spark、HBase、Hive搭建环境遇到的错误以及解决方法

    大数据学习系列之八----- Hadoop.Spark.HBase.Hive搭建环境遇到的错误以及解决方法 参考文章: (1)大数据学习系列之八----- Hadoop.Spark.HBase.Hiv ...

  6. 【Google Play】APK 扩展包 ( 2021年09月 最新处理方案 | 文件准备 | 拷贝文件至内置存储 | 解压及使用扩展文件 )

    文章目录 前言 一.文件准备 二.拷贝文件至内置存储 三.解压及使用扩展文件 四.博客资源 前言 在上一篇博客 [Google Play]APK 扩展包 ( 2021年09月02日最新处理方案 | 内 ...

  7. 2021.08.09【普及组】模拟赛C组比赛总结

    文章目录 2021.08.09[普及组]模拟赛C组比赛总结 写在前面: T1 :[普及模拟]生产武器 题目大意: 正解: T2 :[普及模拟]城市连接 题目大意: 正解: T3 :[普及模拟]抢救文件 ...

  8. 【Spark+Hadoop+Hive+MySQL+Presto+SpringBoot+Echarts】基于大数据技术的用户日志数据分析及可视化平台搭建项目

    目录 1.项目概述 1.1.项目背景 1.2.项目流程 2.功能需求描述 2.1.系统功能组成 2.2.数据描述 2.3.功能描述 2.3.1.流量概况分析 2.3.2.日新日活分析 2.3.3.交互 ...

  9. hdfs spark mysql环境_Mac上Hadoop, HDFS, Hive, Spark环境的安装和搭建

    安装前准备 jdk安装 java -version java version "1.8.0_181" Java(TM) SE Runtime Environment (build ...

  10. 纬创科技面试 2021.10.09 19:00

    纬创科技面试 面试时间:2021.10.09 19:00 面试方式:两个面试官 腾讯视频面试 面试总结:总体面试比较简单,但是问题较多,也很全面.总体上还是比较满意的 问题 基本情况: 介绍之前的项目 ...

最新文章

  1. 实战Nagios+Ganglia发送警告信息,短信,微信等
  2. Linux下安装mysql(2) 及常见问题解决(CentOS)
  3. PyQt4, class:mouseButtons用法
  4. C语言数组和指针的区别
  5. Vue源码剖析(一):抽离AST抽象语法树
  6. 实习僧[shixiseng.com]爬虫实战笔记
  7. Tell Me Where to Look: Guided Attention Inference Network论文翻译
  8. 一首能记住网线水晶头接法诗
  9. 预测:深度学习未来的6种可能
  10. 饮用水安全与水资源保护
  11. 网站WEB都有哪些攻击?
  12. 脉冲神经网络克服了类脑计算的硬件障碍,让AI更节能
  13. NTP时间同步服务器客户端、服务端的安装以及配置文件的配置
  14. 如何在SQL Server 2005中修复损坏的数据库
  15. 酷狗、QQ、天天动听——手机音乐播放器竞品对比
  16. python:四位玫瑰数
  17. opengrok搭建
  18. 花更少的钱住更大的房子,中国都市青年的租房爱与恨
  19. 机器学习:逻辑回归(logistics regression)
  20. linux控制台单人五子棋简书,实现一个质量过硬五子棋

热门文章

  1. whoosh读取+html,django-haystack+jieba+whoosh实现全文检索
  2. 【转】余弦相似度及基于python的三种代码实现、与欧氏距离的区别
  3. 【转】如何查找MySQL中慢查询的SQL语句
  4. ASP.NET的Session会导致的性能问题
  5. Oracle JOB 用法小结
  6. 如何添加、管理和删除PDF高亮文本?
  7. db2 reorg(转)
  8. Hibernate注解与JPA
  9. 《编程原本 》一1.8 总结
  10. Docker数据持久化与容器迁移