动手实现第一个Hadoop程序的扩展

自己动手写爬虫 一:全面剖析网络爬虫URI: web上各种可用的资源,如HTML文档,图像,视频,程序等都由一个通用资源标志符(URI)进行定位。 URI通常三部分组成: 1.访问资源的命令机制 2.存放资源的主机名 3.资源自身的名称,由路径表示 文件的URL: 用URL表示文件时,服务器方式用file表示,后面要有IP地址,文件的存取路径(即目录)和文件名等信息。有时可省略目录和文件名,但“/”符 阅读详情

上篇文章简单总结了一下,在独立模式下实现测试第一个MapReduce程序,下面算是对上篇文章的一个补充吧。

主要 分为  Hadoop横向扩展、combiner函数、Hadoop Streaming 三个部分。

1 Hadoop横向扩展

    前面介绍了 MapReduce针对少量数据是如何工作的,当我们有大量的输入数据流时,为了实现横向扩展,我们需要把数据存储在分布式分拣系统中(典型的是HDFS),通过使用Hadoop资源管理系统YARN,Hadoop可以将MapReduce计算转移到存储有部分数据的各台机器上。

我们可以通过数据流查看具体过程。

    MapReduce作业(job):客户端需要执行的一个工作单元,包括输入数据、MapReduce程序、配置信息。

                                            作业又可分为若干个任务(task)来执行,包括map 任务和reduce任务。

    输入分片(input split):Hadoop将MapReduce的输入数据划分成等长的小数据块。一个分片对应一个map任务。

如何决定输入分片的大小?

一般来说,分片切分的越细,集群的负载平衡的质量会更高。但是,反过来讲,如果分片太小,那么管理分片的总时间和构建map任务的总时间将决定整个执行时间。对于大多数作业来说,一个合理的分片大小趋向于一个HDFS数据块的大小,默认是128M,不过可以调整。

为什么最佳大小应该与块大小相同?

因为它是确保可以存储在单个节点上的最大输入块的大小。如果分片跨越两个数据块,那么对于任何一个HDFS节点,基本上都不太可能同时存储这两个数据块,因此分片中的部分数据可能需要网络传输到map任务运行的节点,这违背了“数据本地化优化”原则(Hadoop在存储有输入数据(HDFS中的数据)的节点上运行map任务,可以获得最佳性能,因为这样无需使用宝贵的集群带宽资源)。

为何map任务将其输出写入本地硬盘而非HDFS?

因为map的输出是中间结果,该结果由reduce任务处理后才产生最终结果,而且一旦作业完成,map的输出结果就可以删除。因此,如果把它存储在HDFS中并实现备份,难免小题大做。如果运行map的任务在将输出纯送给reduce任务之前失败,那么Hadoop经在另一个节点上重新运行map任务以再次获得map任务中间结果。

reduce任务并不具备数据本地化的优势,因为其输入通常来自于所有map任务的输出。排过序的 map输出需要通过网络传输发送到reduce任务的节点。数据在reduce端合并,然后有用户定义的reduce函数处理,reduce的输出通常存储在HDFS以实现可靠存储,对于每个reduce输出的HDFS块,第一个副本存储在本地节点上,其他节点处于可靠性考虑存储在其他机架的节点中。

注意,reduce任务的数量并非输入数据的大小决定,相反是独立指定的。

若果有多个reduce任务,那么map任务会针对输出进行分区(partition),即为每一个reduce任务建一个分区。分区可由用户定义的分区函数控制,但通常用默认的partitioner通过哈希函数分区 ,很高效。

默认的partitioner是HashPartitioner,它对每条记录的键进行哈希操作,以决定该条记录属于哪个分区。每个分区由一个reduce任务处理,所以分区数等于作业的reduce任务数。

public class HashPartitioner<K,V> extends Partitioner<K,V>{
    public int getPartition(K key,V value,int numPartitions){
        return (key.hashCode() & Integer.MAX_VALUE) % numPartitions;
    }
}

可以看出,键的哈希码被转换为一个非负整数,它由键的哈希值与最大的整数值做一次按位与操作获得,然后用分区数进行取模操作,得到记录属于哪个分区。默认情况下,只有一个reducer,因此也只有一个分区。

为一个作业选择多少reducer,由于并行化程度的提高,增加reducer的数量能缩短reduce的过程,然而,如果做过了,小文件将会更多,这又不够优化,一条经验法则是:目标reduce保持在每个运行5分钟左右,且产生至少一个HDFS块的输出比较合适。

下面是 一个reduce任务的MapReduce数据流、多个reduce任务的数据流、无reduce任务的MapReduce数据流

其中,虚线框表示节点,虚线箭头表示节点内部的数据传输,而实线箭头表示不同节点之间的数据传输。



  图1 .一个reduce任务的MapReduce数据流

  

  图2. 多个reduce任务的数据流

  

  图3. 无reduce任务的MapReduce数据流 

2 combiner函数

集群中的可用带宽限制了MapReduce作业的数量,因此应尽量避免map和reduce任务之间的数据传输。Hadoop允许用户针对map任务的输出指定一个combiner,combiner的输出作为reduce函数的输入。

举例说明:(还是之前那个测试程序的例子)

假设第一个map的输出如下:

(1950,0)

(1950,20)

(1950,10)

第二个map的输出如下:

(1950,25)

(1950,15)

reduce函数被调用时,输入如下:

(1950,[0,20,10,25,15])

因为25是输入数据中最大的,所以输出 25

我们可以像使用reduce函数那样,使用combiner函数找到每个map输出的最大值,然后传递给reduce任务,如此,reduce函数将接受如下:

(1950,[20,25])

可以发现,reduce的输出还是和之前一致 25.可以通过以下表达式说明函数调用:

max(0,20,10,25,15) = max(max(0,20,10),max(25,15)) = max(20,25) = 25

注意,并不是所有函数都具有这样的性质。例如。如果求平均气温,就不能用mean函数作为combiner:

mean(0,20,10,25,15) = 14

但是 mean(mean(0,20,10),mean(25,15))  = mean(10,20) = 15

combiner不能取代reduce。因为我们仍需要reduce处理不同map输出的相同键的记录。

指定一个combiner

可以通过job对象的setCombinerClass()方法实现为作业指定combiner,例如,我们上篇的测试程序可以指定reduce函数作为

combiner:

job.setCombinerClass(MaxTemperatureReducer.class);
3 Hadoop Streaming

Hadoop 提供了 MapReduce的API,允许使用非java的其他语言实现自己的map和reduce函数。

Hadoop Streaming 使用 UNIX标准流作为 Hadoop和 应用程序之间的接口,所以我们可以使用任何编程语言通过标准输入输出流来写MapReduce程序。

Streaming 天生适合文本处理,map的输入数据通过标准输入流传递给map函数,并且是一行一行的传输,最后将结果行写到标准输出。map输出的键-值对是以制表符分割的行,reduce函数的输入与之相同。reduce函数通过标准输入流读取数据,注意,该输入已由Hadoop框架根据键拍过序,最终将结果写入标准输出。

下面按Streaming重写按年份查找最高气温的MapReduce程序(输出结果应该和上篇的结果一致)

本人对python比较熟悉,故只展示了Python版(书中另附有Ruby版)

查找最高气温的map函数:(max_temperature_map.py)

#!/usr/bin/python

import sys
import re

for line in sys.stdin:
    val = line.strip()
    (year,temp,q) = (val[15:19],val[87:92],val[92:93])
    if (temp != "+9999" and re.match("[01459]",q)):
        print "%s\t%s" % (year,temp)


查找最高气温的reduce函数:(max_temperature_reduce.py)

#!/usr/bin/python

import sys

(last_key,max_val) = (None,-sys.maxint)
for line in sys.stdin:
	(key,val) = line.strip().split("\t")
	#存储最后一个键以及迄今为止看到的该键的最高气温,MapReduce框架决定了键的有序性,所以当遇到一个不同的键时,就需要开始处理一个新的键组
	if last_key and last_key != key:
		print "%s\t%s" % (last_key,max_val)
		(last_key,max_val) = (key,int(val))
	else:
		(last_key,max_val) = (key,max(max_val,int(val)))
#确保处理完最后一个键组时会有一行输出
if last_key:
	print "%s\t%s" % (last_key,max_val)

测试运行:(sample.txt还是之前那个测试样例,并且和两个Python程序放在同一目录下)

cat sample.txt | ./max_temperature_map.py | sort | ./max_temperature_reduce.py


可以看到结果与上一篇的测试结果相同。

可以看到 ,map和reduce之间与sort处理,这也是MapReduce框架需要保证键的有序性。



参考:《Hadoop权威指南》






ChatGPT Windows桌面版:从安全下载到高效配置的全流程指南 WebView封装技术是将网页应用转化为独立桌面程序的核心方法,它通过嵌入浏览器内核实现跨平台功能复用。其原理在于利用Electron或Tauri等框架,将Web内容打包进原生应用外壳,同时注入系统级API调用能力。这项技术的工程价值在于显著提升了Web应用的系统集成度和用户体验,使其能够支持全局快捷键、独立进程和本地数据存储等原生特性。在AI助手深度集成工作流的应用场景中,这种封装模式解决了浏览器多标签页切换繁琐、会话管理不便等痛点。本文以ChatGPT桌面客户端为例,详细解析了基于开源项目的安全下载路径 阅读详情

相关推荐

【Labview与SQL Server互联(labview可以引用数据库)】

Labview与SQL Server互联

Magize的博客 3585

Hadoop之HDFS扩容方法

HDFS就是用来存取数据的,那么当数据太多的时候存不下,我们必需扩充硬盘容量,或者换个更大的硬盘。 由于它是分布式文件系统,有两种扩充HDFS集群容量的方法:横向扩容和纵向扩容 横向扩容 横向扩容就是往集群添加一个节点:https://www.cnblogs.com/lyx666/p/12361906.html 纵向扩容 纵向扩容就是往节点增加一块硬盘:步骤如下 1.虚拟机添加一块20G的硬盘 2.查看添加虚拟机的硬盘 这台添加的第二块硬盘 所以硬盘文件是sdc 3.使用fdisk创建分区...

gman344的博客 1241

jetson agx orin开箱及接口介绍

jetson agx orin开箱及接口介绍

qq_58728069的博客 1万+

大数据技术之Hadoop(MapReduce)

MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。1)什么是序列化序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象。2)为什么要序列化。

成长过程 2090

Verilog仿真时读取bin文件模拟输入数据流,将输出数据流写入bin文件

需要关注的是,一般会省略文件起始地址和读取长度,那么mem为多大,就会从文件中读取多大的数据出来填充mem。如果只需要读取一次文件,那么代码到此就结束了,但是如果还需要每一帧都读取该文件转换为数据流,则在循环里判断新的一帧信号是否到来,在新的一帧再次打开一次文件,从头开始读取数据。

qq_41137205的博客 2772

Androiud安卓链接sqllite的代码使用案例

【代码】Androiud安卓链接sqllite的代码使用案例。

laterstage的博客 1328

HDFS容量究竟来自何处?以及在节点内部“横向”扩容

今天在Ambari web界面中注意到警告: 我去,使用了92%,这还得了?还让不让人学习了? 最开始我认为是一前朋友将namenode节点也设置为了datanode节点的原因,导致namenode“压力”大。但是细一看,不对啊,也不可能才52.7GB总容量啊,开玩笑呢。 于是乎怀疑Ambari。。。去50070一看: 纳闷了,怎么这么少?然后查看了各个机器的硬盘信息 发现两个

王某的博客 1326

【MFiX后处理】MFiX中使用des_usr_var输出颗粒的传热量(2020-11-27更新变更输出变量名方法)

参考之前Yin的那一篇博客 https://www.cnblogs.com/Jay-CFD/p/10621274.html 输出一下颗粒传热量 使用的算例是fluid_bed_dem_2d 打开des scalar tracking 前面都和Yin那篇一样,打开enable user scalar tracking 输入2 因为第一个用来测试Y加速度了 第二个输出传热量 然后在output vtk中勾选好 更改源代码 源代码为des_thermo_newvalues.f 在mfix-GUI自带的ed

beidou111的博客 1532

关系型数据库横向扩展的三种方法

本文是 Oracle Coherence 3.5一书,第一章: Achieving Performance, Scalability, and Availability Objectives,第二节:Achieving scalability中,数据库横向扩展部分的读书笔记。传统的关系型数据库很难扩展,通常是纵向扩展,但到达一定程度时只能横向扩展。数据库的横向扩展支持三种方法,即主从复制,集群和分片

In-Memory Computing Technology 1万+

YOLOv5改进系列(4)——添加ECA注意力机制

手把手教你在YOLOv5中加入ECA注意力机制,文内含两种方法,小白也能看懂!

路人贾的博客 8546

17、深入分析Freebase数据集:特征、挑战与类型系统构建

本文深入分析了Freebase数据集的特征、数据建模的挑战以及类型系统的构建方法。Freebase作为知识图谱的重要资源,以RDF三元组形式提供了丰富的结构化知识。文章重点探讨了反向三元组、中介节点(CVT节点)以及非主题三元组对链接预测任务的影响,并通过实验展示了不同类型处理策略对模型性能的作用。此外,文章详细介绍了如何构建一个显式的类型系统,以提升链接预测的准确性,并展望了未来可能的研究方向。

css33的专栏 287

hadoop集群动态扩展

Hadoop集群节点的动态增加与删除 Hadoop集群节点的动态增加 1. 安装配置节点 具体过程参考 《Hadoop集群实践 之 (1) Hadoop(HDFS)搭建》 2. 在配置过程中需要在所有的Hadoop服务器上更新以下三项配置 $ sudo vim /etc/hadoop/conf/slaves hadoop-node-1 hadoop-node-2 hadoop-

neutrojan的专栏 8503

手把手教你RK3588 NPU驱动与RKNN Toolkit,AI开发不迷路!

本文详细介绍了RK3588 NPU驱动安装与RKNNToolkit使用方法。首先阐述了RK3588芯片在嵌入式AI领域的优势,包括6TOPS算力和混合量化支持。随后分步骤讲解了NPU驱动安装流程,包括准备工作、编译安装、验证调试及常见问题解决。接着全面介绍了RKNNToolkit的环境搭建、基本使用流程和图像分类实战案例,涵盖模型转换、推理优化等关键环节。最后展望了RK3588在智能安防、工业自动化等领域的应用前景,为开发者提供了完整的嵌入式AI开发指南。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 433

hadoop之mapreduce的wordcount程序(10)

目录MapReduce入门1.MapReduce定义2.MapReduce优缺点优点缺点3. MapReduce核心思想4.MapReduce进程5.MapReduce编程规范 开局一把刀,装备全靠打。 我们开局先讲概念,然后执行下hadoop自带的一个wordcount程序,相当于我们java中的hello word。 然后自己动手写个wordcount程序,在win10下看下效果,最后部署到服...

baidu_21349635的专栏 728

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

我是怎么玩hadoop的(一)--运行自己的mapreduce

单拿标题来讲,看来有点装x,但是没有恶意,知识记录自己的学习过程,希望能碰到一些志同道合的人,一起讨论。 首先,我们要理解:什么是hadoop?给人的第一感觉就一个字“云”,似乎带着点神奇的色彩,不可否认hadoop有他独特的地方,但也没那么神乎其神。他是一个开源框架,可以编写和运行分布式应用处理大规模数据,通过建立hadoop集群和运行一些mapred例子,我所感到只有就个字:“方便”、“健壮...

数据库天地 268

Hadoop组成架构

Hadoop组成架构 Hadoop是apache用来“处理海量数据存储和海量数据分析”的分布式系统基础架构,更广义的是指hadoop生态圈。 Hadoop的优势   高可靠性:hadoop底层维护多个数据副本,即使某个计算单元故障,也不会导致数据丢失。   高扩展性:天然支持分布式,可方便的扩展至几千个节点。   高容错性:能够自动将失败的任务重新分配。   高效性:在mapReduce的思想下,hadoop是并行工作处理任务的。 Hadoop1.x和Hadoop2.x的区别 MapReduce架构概述

LL0911的博客 517

python写的hadoop实战_hadoop实战 pdf

hadoop实战手册为3个部分,深入浅出地介绍了Hadoop 框架、编写和运行Hadoop 数据处理程序所需的实践技能及Hadoop之外更大的生态系统。本书适合需要处理大量离线数据的云计算程序员、架构师和项目经理阅读参考。hadoop实战手册目录第1章 Hadoop简介1.1 为什么写《Hadoop 实战》1.2 什么是Hadoop1.3 了解分布式系统和Hadoop1.4 比较SQL 数据库和H...

weixin_39580748的博客 351

惊了!!! 小白零基础学java (月薪过万是你的梦想嘛) 手把手教学 就怕你不动手【一】

1. 如何 从零基础入门学好Java! 可能你心里在想啊 好难啊! 没关系 你跟随我的脚步走。 2. 认识单词很重要 但是你别怕 (我们可以一天学5个 或者10个) 初始Java 1.1 程序是什么? 生活中的程序:为了达成某个目的,所执行的固定的一系列步骤和流程。 例如:银行办卡 医院看病 大象放进冰箱 请假 结婚 … 计算机中的程序: 计算机指令的集合,为了达成某个目的,将一...

dwwen的博客 4775

java hadhoop如门pdf_《Hadoop实战》PDF 下载

《Hadoop实战》PDF 下载转载自:https://download.youkuaiyun.com/download/xieze9994/10860623下载地址:版权归出版社和原作者所有,链接已删除,请购买正版图书简介:作为云计算所青睐的分布式架构,Hadoop 是一个用Java语言实现的软件框架,在由大量计算机组成的集群中运行海量数据的分布式计算,是谷歌实现云计算的重要基石。本书分为3个部分,深入浅出...

weixin_42398130的博客 236

[Hadoop in Action] 第1章 Hadoop简介

编写可扩展、分布式的数据密集型程序和基础知识 理解Hadoop和MapReduce 编写和运行一个基本的MapReduce程序 1、什么是Hadoop Hadoop是一个开源的框架,可编写和运行分布式应用处理大规模数据。 Hadoop与众不同之处在于以下几点: 方便——Hadoop运行在由一般商用机器构成的大型集群上,或者云计算服务之上; 健壮——H...

weixin_33895695的博客 171

揭开Hadoop的面纱

Written by chenxiaochen32 ,SCUTMSTechClub Hadoop Special Interest Group. 一个hadoop集群拥有许多并行的计算机,用以存储和处理大规模数据集,分布式系统是向外扩展的,当客户端计算机发送作业到计算云时,计算云将会把任务划分到多个节点进行计算,然后节点将计算结果返回到主节点进行统计,再把结果输送给客户端。这也同时说明了,h...

weixin_30399055的博客 73

使用Echatrts+Flask实现新能源车辆数据可视化及学习Hadoop的学习心得

基于Flask+Echarts+Mysql制作分析新能源车辆数据可视化这是一个基本的MySQL、Flask和ECharts结合的图表绘制过程。学习Hadoop是一个令人兴奋和富有挑战性的过程。深入理解分布式计算原理:Hadoop是一个分布式计算框架,学习Hadoop需要深入理解分布式计算的基本原理和概念,如数据分片、数据复制、容错处理等。这对于充分发挥Hadoop的能力至关重要。掌握Hadoop核心组件。

TSKxxx的博客 784
上一篇: 动手实现第一个Hadoop程序(VMware)
下一篇: spark 基于分区操作 mapPartitions
ITrue的天空
博客等级 码龄14年 4粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值