`
文章列表
1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的。而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的技巧。 本文首先介绍了Hadoop上通常的JOIN实现方法,然后给出了几种针对不同输入数据集的优化方法。 2. 常见的join方法介绍 假设要进行join的数据分别来自File1和File2. 2.1 reduce side join reduce side join是一种最简单的join方式,其主要思想如下: 在map阶段,map函数同时读取两个 ...
  Hadoop的DistributedCache,可以把HDFS中的文件加载到DistributedCache中,当我们需要这些文件时,DistributedCache自动把这些文件下载到集群中节点的本地存储上(mapred.local.dir)。这样就不需要一一布置第三方的Jar包,并且Hadoop集群增加节点也不需要再上传了。 此外DistributedCache对于Read-Only的数据(即边数据)也有用处,这点可以扩展我们编写MapReduce程序的思路。   关于的参考可见: 1、http://hadoop.apache.org/common/docs/r0.20 ...
  1.迭代式mapreduce 一些复杂的任务难以用一次MapReduce处理完成,需要多次 MapReduce 才能完成任务,例如Pagrank,K-means算法都需要多次的迭代,关于 MapReduce 迭代在Mahout中运用较多。有兴趣的可以参考一下Mahout的源码。       在MapReduce的迭代思想,类似for循环,前一个 MapReduce的输出结果,作为下一个 MapReduce的输入,任务完成后中间结果都可以删除。
单一MapReduce对一些非常简单的问题提供了很好的支持。但是如果处理过程变得更加复杂,这种复杂性应该体现为更多地MapReduce工作,而不是更加复杂的map函数和reduce函数。   在hadoop 中一个Job中可以按顺序运行多个mapper对数据进行前期的处理,再进行reduce,经reduce后的结果可经个经多个按顺序执行的mapper进行后期的处理,这样的Job是不会保存中间结果的,并大大减少了I/O操作。   例如:在一个Job中,按顺序执行 Map1->Map2->Reduce->Map3->Map4 ,在这种链式结构中,要将Map2与Re ...

杨氏矩阵查找

 
问题描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字6,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。 1 2 8 9   2 4 9 12   4 7 10 13   6 8 11 15     杨氏矩阵的二分查找: 首先直接定位到最右上角的元素,如果比要找的数(6)大,则往左走, 如果比要找的数(6)小,则往下走,直到找到要找的数 ...
社交网络中的图模型经常需要构造一棵树型结构:从一个特定的节点出发,例如,构造mary的朋友以及mary朋友的朋友的一棵树。 为构造这样的一棵树,最简单的方法是使用广度优先算法:   经常使用链表来表示图的节点以及节点之间的链接关系,如   frank -> {mary, jill} jill -> {frank, bob, james} mary -> {william, joe, erin}    表示,mary有3个朋友,分别是william,joe和erin    将上述关系形式化表示为   0-> {1, 2} 2-> {3, ...
*.log日志文件和*.out日志文件 进入Hadoop_LOG目录,可以看到如下文件:   在启动Hadoop集群时,由hadoop-daemon.sh脚本指定一些列环境变量,然后log4j.properties文件读取相应的环境变量产生对应的*.log日志文件。这个日志文件输出类型为org.apache.log4j.DailyRollingFileAppender,它会自动按天更新。 *.out文件则是启动某个程序的标准输出重定向。 如:
  Job1: Map: input: (document, each line of the document) # TextInputformat output: (word@document, 1) Reducer: output: ((word@document), n) n = sum of the values of each key(word@document) the implicit process is: the
  错误1:Too many fetch-failures   Reduce task 启动后第一个阶段是 shuffle ,即向 map 端 fetch 数据。每次 fetch 都可能因为 connect 超时, read 超时, checksum 错误等原因而失败。 Reduce task 为每个 map 设置了一个计数器,用以记录 fetch 该 map 输出时失败的次数。当失败次数达到一定阈值时,会通知 JobTracker fetch 该 map 输出操作失败次数太多了,并打印如下 log : ...
在科研工作中,有一个很基本的技能,就是对自己和别人的工作进行评估(review):分析该项工作的长处、不足和改进方案。事实上,整个科学研究都建立在这种评估的体系中。严肃的科学杂志,顶级的国际科研会议,都会对投稿的文章进行严格的评估。 在研究生或者博士生的某些课程中,老师会要求学生对已经发表的论文进行评估,并且重点说出这些论文的问题。最开始的时候,一般学生很难发现这些论文的不足之处,因为缺乏足够的理论知识。你不知道这些论文要解决什么问题,你可能也不太清楚解决这些问题所需的技术知识的全部详情,你也可能不清楚如何评价所要解决的问题在文章所提出的方法下得到了解决。实际上,即便是你不清楚这些问 ...
         Hadoop与JVM重用对应的参数是mapred.job.reuse.jvm.num.tasks,默认是1,表示一个JVM上最多可以顺序执行的task数目(属于同一个Job)是1。也就是说一个task启一个JVM。          比如在集群中配置每个slave节点最多同时运行16个map和2个reduce。那么在map阶段,slave节点会启动最多16个JVM用于map。如下:     dm@slave01:/usr/local/hadoop/conf$ jps 4883 Child 4924 Child 4680 Child 4622 Child ...
  map task的数量即mapred.map.tasks的参数值,用户不能直接设置这个参数。Input Split的大小,决定了一个Job拥有多少个map。默认input split的大小是64M(与dfs.block.size的默认值相同)。然而,如果输入的数据量巨大,那么默认的64M的block ...
用法:hadoop job [GENERIC_OPTIONS] [-submit <job-file>] | [-status <job-id>] | [-counter <job-id> <group-name> <counter-name>] | [-kill <job-id>] | [-events <job-id> <from-event-#> <#-of-events>] | [-history [all] <jobOutputDir>] | [- ...

最小堆

堆的定义是:n个元素的序列{k1,k2,…,kn},当且仅当满足如下关系时被成为堆 Ki <= k2i 且 ki <= k2i-1        或者 Ki >= k2i 且 ki >= k2i-1  (i = 1,2,…[n/2])   当满足(1)时,为最小堆,当满足(2)时,为最大堆。     若将此序列对应的一维数组堪称是一个完全二叉树,则2i和2i+1个节点分别是节点i的左右子节点。 如下为一个最大堆:   下面以最小堆为例说明堆的输出:     图1为一个最小堆,当最小节点根节点13输出后,将最后一个节点97作为根节点,移到顶端 ...
  原因: hadoop-0.20.2下自带的eclise插件已过时。     解决方案: 1、下载正确的插件:https://issues.apache.org/jira/secure/attachment/12460491/hadoop-eclipse-plugin-0.20.3-SNAPSHOT.jar   2、重命名:将下载的插件重命名为"hadoop-0.20.2-eclipse-plugin.jar"   3、替换原来的插件。   4、重启eclipse  
Global site tag (gtag.js) - Google Analytics