- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Hadoop、Spark、Hive到底是什么,做算法要不要学?由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
。
大家好,我是梁唐.
最近我发现,很多萌新说着想要做算法工程师,但是却对这个岗位的要求以及工作内容一无所知。以为学一个Python,再学一些机器学习、深度学习的模型就可以胜任了。工作就是用Python不停地写模型.
显然,这样的想法是有问题的,如果真这么干,即使通过了面试成功入职,也会干得非常痛苦。因为你会发现这也不知道那也不知道,做啥都很吃力,需要一段很长的时间学习。而这种为了应付工作临时抱佛脚的学习往往很难深入,有种不停打补丁的感觉.
今天就和大家聊聊算法工程师的几项基本功,看看除了算法和模型之外,还需要学些什么.
首先当然是hadoop,不过hadoop不是一门技术,而是一个大数据框架。它的logo是一只黄色的小象,据说是这个项目的创建者用女儿的玩具命名的.
经过了很多年的发展,现在hadoop框架已经非常成熟,衍生出了一个庞大的家族。有多庞大呢,我在google里给大家找了一张图,大家可以看看感受一下,这里面有多少是自己知道的,有多少没听说过.
当然对于算法工程师来说,hadoop家族并不需要全部了解,只需要着重关注几个就可以了.
首先是hdfs,hdfs是hadoop框架中的分布式文件系统。因为在工业场景当中,数据量是非常庞大的,动辄TB甚至是PB量级。如此庞大的数据,显然不可能存在一块磁盘里,必须要分布式存储,分成不同的部分,不同的部分分开存储。通过hdfs我们可以很方便地实现这一点,可以使用一些简单的shell命令管理大规模的数据.
hdfs的内部是分片(block)存储的,并且设计了严谨的容错机制,尽可能地保证了数据的准确性。一般我们用hdfs存储一些离线数据,也就是对延迟要求不高的数据,比如模型的训练数据。它的特点是存储能力很强,但是读取速度很慢,中间的延迟很长.
因为训练数据的规模往往也非常庞大,并且从用户线上的实时行为转化成模型需要的输入,中间需要大量的计算步骤。这会带来巨大的计算压力,因此对于这样的数据,我们往往都是借助于hdfs做离线处理。设计一套数据处理流程,进行若干步骤的处理,每一步处理的中间数据都存储在hdfs上.
模型训练的时候,也通过挂载hdfs的方式直接读取tensor进行训练.
hdfs是hadoop的存储系统,hadoop同样也推出过一套计算系统,就是MapReduce.
我在之前的文章曾经介绍过MapReduce的原理,其实非常简单,它将数据的计算过程抽象成了两个步骤。一个步骤叫map,一个步骤叫reduce.
map步骤做的数据的映射,比如我们从一个很大的json文件当中读取出我们想要的字段,在这个步骤当中,我们从json获得了几个字段.
reduce步骤做的是汇总,我们把刚刚map阶段得到的结果,按照我们的想法汇聚在一起,比如计算平均数、中位数等等.
这个想法巧妙的地方在于map和reduce都是可以分布式进行的,比如map阶段,我们可以对hdfs里的每一个文件都设置一个map读取文件进行处理。map阶段结束之后,我们也可以起多个reducer对map的结果进行加工,尽可能导致了整个过程都是并发进行的,也就保证了数据的处理速度.
虽然MapReduce的提出到现在已经十多年了,但仍然没有淘汰,还在很多场景当中广泛使用.
hive也是hadoop家族核心的一员,它的思想也很巧妙,做了一件非常有利于程序员的事情.
使用hdfs以及MapReduce其实就足够应付几乎所有大数据计算的场景了,但是足够应付并不代表应付起来很舒服。有些场景使用起来就不是很顺手,比如说我们要把两份数据关联在一起,一份是用户点击数据,一份是商品数据,我们想要得到用户点过的商品信息.
你会发现使用MapReduce去做这样一件事情会非常蛋疼,要写很多代码。所以有人突发奇想,我们能不能利用hdfs以及MapReduce做一套好用一点的数据处理系统,比如说将数据全部格式化,然后像是数据库一样使用SQL来进行数据的查询和处理?于是就有了hive.
hive底层的运算框架就是MapReduce,只不过有了表结构之后,很多之前很复杂的操作被大大简化了。尤其是数据表之间的join、group by等操作,之前需要写大量MapReduce的代码,现在几行SQL就搞定了.
不过hive毕竟不是数据库,它的使用还是有一些它自己专属的奇淫技巧。比如说避免数据倾斜的情况,比如说设置合理的内存分片,比如说udf的使用等等.
只是懂SQL的语法是写不好hive的,多少还需要做一些深入的了解.
说到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的用武之地,毕竟数据量太大了,不可能都放内存里,必须要借助大数据计算平台来解决.
好了,就说这么多吧,感谢大家的阅读.
原文链接:https://mp.weixin.qq.com/s/tEhT61XM9M3YKuWhV2SxVQ 。
最后此篇关于Hadoop、Spark、Hive到底是什么,做算法要不要学?的文章就讲到这里了,如果你想了解更多关于Hadoop、Spark、Hive到底是什么,做算法要不要学?的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在对一款流行游戏 (Minecraft) 进行一些修改,我在地形生成中看到了这些线条, double d4 = 1.0D; d4 *= d4; d4 *= d4; d4 = 1.0D - d4;
如何在没有浮点单元的处理器上执行 float 学运算?例如低端 8 位微 Controller 。 最佳答案 看看这篇文章:http://www.edwardrosten.com/code/fp_te
抱歉这个冗长的标题。我的代码针对没有浮点单元的微 Controller (msp430),但这应该适用于任何类似的 MCU。 如果我将一个大的运行时变量与通常被认为是浮点十进制数 (1.8) 相乘,M
我偶尔会在这个方法中遇到 stackoverflow 异常。 double norm_cdf(const double x) { double k = 1.0/(1.0 + 0.2316419
这是一个让我在过去几个小时里完全困惑的问题...... 我的程序中有一个硬编码的方程式: double s2; s2 = -(0*13)/84+6/42-0/84+24/12+(6*13)/42; 每
我知道 float 学充其量是丑陋的,但我想知道是否有人可以解释以下怪癖。在我测试的大多数编程语言中,将 0.4 添加到 0.2 会产生轻微错误,而 0.4 + 0.1 + 0.1 则不会。 两者计算
随着数据量持续增长,对合格数据专业人员的需求也会增长。具体而言,对SQL流利的专业人士的需求日益增长,而不仅仅是在初级层面。 因此,Stratascratch的创始人Nathan Rosidi以及我觉
当使用 c++ 或 -O0 编译时,以下 -O1 程序给出了数值不同的结果。 #include #include #include #include int main() { std::a
我正在尝试使用 SVG 在 map 上绘制飞行路径。我在 Leaflet 之上使用 d3,但所使用的框架不会对我的问题产生影响 - 这是三 Angular 关系。 http://fiddle.jshe
使用 IEEE754 float (在 JavaScript 中)时,与数学相关的精度损失风险是什么? 10*.1 即整数乘以有理数。 最佳答案 注意:该问题经过编辑,在发布此答案后很长时间添加了“t
我需要为网站 UI 做一些基本的 float 学运算(金钱的加法和乘法)。我知道 Javascript float 由于存储方式的原因并不准确,但我也知道以某种方式,可以获得我所需的准确度。我知道这一
我有一些像下面这样的宏: #define THING_LENGTH (512) #define MAX_COUNT (4096*8) #define MAX_LENGTH ((int32)((floa
我认为这是一个非常基本的问题 - 我正在执行此功能: private double convertMetersToFeet(double meters) { //function converts
我想在不损失太多精度的情况下替换这些函数中的 float 学,因为我没有 FPU。这可能吗?我认为逗号后的 3 个数字就足够了。 inline float smaller_f(float value,
我需要一个类来表示 double vector (在数学意义上)。 我需要的特殊功能: 任意维度 vector (我通常使用 10 - 100,000 维度) 高性能(用于受 CPU 限制的数字代码)
此社区 Wiki 问题的公认答案:What are best practices that you use when writing Objective-C and Cocoa?说 iPhone 不能
This question already has an answer here: Trouble with float on C [duplicate]
以下代码有问题: private const int movementMultiplier = 2; void Test() { XmlNode xnXCoordinate = xd.Sele
大家早上好 我在 float 学方面遇到了一些问题,完全迷失在“.to_f”、“*100”和“.0”中! 我希望有人能帮助我解决我的具体问题,并准确解释他们的解决方案为何有效,以便我下次理解这一点。
我的嵌入式 C 代码在具有单精度 FPU 的 Cortex M4F 上运行。我担心编译器多久将基于软件的 double 学放在诸如 ** float_var1 = 3.0 * int_var / fl
我是一名优秀的程序员,十分优秀!