Hadoop-- 开源海量文件分布式计算处理方案

分布式计算开源框架Hadoop入门实践 Author :岑文初Email: wenchu.cenwc@alibaba-inc.commsn: cenwenchu_79@hotmail.comblog: http://blog.youkuaiyun.com/cenwenchu79/ 引... 2What is Hadoop. 2Why is hadoop. 6How to Use Hadoop & Tips 7环境 阅读详情
Hadoop 是Google MapReduce的一个Java实现。MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行。就如 同java程序员可以不考虑内存泄露一样, MapReduce的run-time系统会解决输入数据的分布细节,跨越机器集群的程序执行调度,处理机器的失效,并且管理机器之间的通讯请求。这样的 模式允许程序员可以不需要有什么并发处理或者分布式系统的经验,就可以处理超大的分布式系统得资源。
       一、概论
       作为Hadoop程序员,他要做的事情就是:
       1、定义Mapper,处理输入的Key-Value对,输出中间结果。
       2、定义Reducer,可选,对中间结果进行规约,输出最终结果。
       3、定义InputFormat 和OutputFormat,可选,InputFormat将每行输入文件的内容转换为Java类供Mapper函数使用,不定义时默认为String。
       4、定义main函数,在里面定义一个Job并运行它。
    

       然后的事情就交给系统了。
       1.基本概念:Hadoop的HDFS实现了google的GFS文件系统,NameNode作为文件系统的负责调度运行在master, DataNode运行在每个机器上。同时Hadoop实现了Google的MapReduce,JobTracker作为MapReduce的总调度运行 在master,TaskTracker则运行在每个机器上执行Task。

       2.main()函数,创建JobConf,定义Mapper,Reducer,Input/OutputFormat 和输入输出文件目录,最后把Job提交給JobTracker,等待Job结束。

       3.JobTracker,创建一个InputFormat的实例,调用它的getSplits()方法,把输入目录的文件拆分成FileSplist作为Mapper task 的输入,生成Mapper task加入Queue。

       4.TaskTracker 向 JobTracker索求下一个Map/Reduce。
      
        Mapper Task先从InputFormat创建RecordReader,循环读入FileSplits的内容生成Key与Value,传给Mapper函数,处理完后中间结果写成SequenceFile.
        Reducer Task 从运行Mapper的TaskTracker的Jetty上使用http协议获取所需的中间内容(33%),Sort/Merge后(66%),执行Reducer函数,最后按照OutputFormat写入结果目录。

         TaskTracker 每10秒向JobTracker报告一次运行情况,每完成一个Task10秒后,就会向JobTracker索求下一个Task。

         Nutch项目的全部数据处理都构建在Hadoop之上,详见Scalable Computing with Hadoop。


       二、程序员编写的代码
       我们做一个简单的分布式的Grep,简单对输入文件进行逐行的正则匹配,如果符合就将该行打印到输出文件。因为是简单的全部输出,所以我们只要写Mapper函数,不用写Reducer函数,也不用定义Input/Output Format。

package     demo.hadoop

public      class     HadoopGrep {

     public      static      class     RegMapper     extends     MapReduceBase     implements     Mapper {

      private     Pattern pattern;

      public      void     configure(JobConf job) {
      pattern     =     Pattern.compile(job.get( " mapred.mapper.regex " ));
     }

      public      void     map(WritableComparable key, Writable value, OutputCollector output, Reporter reporter)
        throws     IOException {
      String text     =     ((Text) value).toString();
      Matcher matcher     =     pattern.matcher(text);
       if     (matcher.find()) {
       output.collect(key, value);
      }
     }
}

     private     HadoopGrep () {
}     //     singleton

     public      static      void     main(String[] args)     throws     Exception {
  
     JobConf grepJob     =      new     JobConf(HadoopGrep. class );
     grepJob.setJobName( " grep-search " );
     grepJob.set( " mapred.mapper.regex " , args[ 2 ]);

     grepJob.setInputPath( new     Path(args[ 0 ]));
     grepJob.setOutputPath( new     Path(args[ 1 ]));
     grepJob.setMapperClass(RegMapper. class );
     grepJob.setReducerClass(IdentityReducer. class );
      
     JobClient.runJob(grepJob);
}
}

           RegMapper类的configure()函数接受由main函数传入的查找字符串,map() 函数进行正则匹配,key是行数,value是文件行的内容,符合的文件行放入中间结果。
           main()函数定义由命令行参数传入的输入输出目录和匹配字符串,Mapper函数为RegMapper类,Reduce函数是什么都不做,直接把中间结果输出到最终结果的的IdentityReducer类,运行Job。


           整个代码非常简单,丝毫没有分布式编程的任何细节。


          三.运行Hadoop程序
           Hadoop这方面的文档写得不全面,综合参考GettingStartedWithHadoop 与Nutch Hadoop Tutorial 两篇后,再碰了很多钉子才终于完整的跑起来了,记录如下:      

3.1 local运行模式

          完全不进行任何分布式计算,不动用任何namenode,datanode的做法,适合一开始做调试代码。
          解压hadoop,其中conf目录是配置目录,hadoop的配置文件在hadoop-default.xml,如果要修改配置,不是直接修改该文件,而是修改hadoop-site.xml,将该属性在hadoop-site.xml里重新赋值。
          hadoop-default.xml的默认配置已经是local运行,不用任何修改,配置目录里唯一必须修改的是hadoop-env.sh 里JAVA_HOME的位置。


          将编译好的HadoopGrep与RegMapper.class 放入hadoop/build/classes/demo/hadoop/目录 找一个比较大的log文件放入一个目录,然后运行


          hadoop / bin / hadoop demo.hadoop.HadoopGrep log文件所在目录 任意的输出目录 grep的字符串

        查看输出目录的结果,查看hadoop/logs/里的运行日志。  
        在重新运行前,先删掉输出目录。
  

3.2 单机集群运行模式

          现在来搞一下只有单机的集群.假设以完成3.1中的设置,本机名为hadoopserver
          第1步.       然后修改hadoop-site.xml ,加入如下内容:

< property >
      < name > fs.default.name </ name >
      < value > hadoopserver:9000 </ value >
</ property >
< property >
      < name > mapred.job.tracker </ name >
      < value > hadoopserver:9001 </ value >
</ property >
< property >
      < name > dfs.replication </ name >
      < value > 1 </ value >
</ property >

       从此就将运行从local文件系统转向了hadoop的hdfs系统,mapreduce的jobtracker也从local的进程内操作变成了分布式的任务系统,9000,9001两个端口号是随便选择的两个空余端口号。
  
     另外,如果你的/tmp目录不够大,可能还要修改hadoop.tmp.dir属性。


     第2步. 增加ssh不输入密码即可登陆。

       因为Hadoop需要不用输入密码的ssh来进行调度,在不su的状态下,在自己的home目录运行ssh-keygen -t rsa ,然后一路回车生成密钥,再进入.ssh目录,cp id_rsa.pub authorized_keys
       详细可以man 一下ssh, 此时执行ssh hadoopserver,不需要输入任何密码就能进入了。

     3.格式化namenode,执行
     bin/hadoop namenode -format

     4.启动Hadoop
        执行hadoop/bin/start-all.sh, 在本机启动namenode,datanode,jobtracker,tasktracker
  
     5.现在将待查找的log文件放入hdfs,。
        执行hadoop/bin/hadoop dfs 可以看到它所支持的文件操作指令。
        执行hadoop/bin/hadoop dfs put log文件所在目录 in ,则log文件目录已放入hdfs的/user/user-name/in 目录中

     6.现在来执行Grep操作
         hadoop/bin/hadoop demo.hadoop.HadoopGrep in out
         查看hadoop/logs/里的运行日志,重新执行前。运行hadoop/bin/hadoop dfs rmr out 删除out目录。

     7.运行hadoop/bin/stop-all.sh 结束

     3.3 集群运行模式
     假设已执行完3.2的配置,假设第2台机器名是hadoopserver2
     1.创建与hadoopserver同样的执行用户,将hadoop解压到相同的目录。

     2.同样的修改haoop-env.sh中的JAVA_HOME 及修改与3.2同样的hadoop-site.xml

     3. 将hadoopserver中的/home/username/.ssh/authorized_keys 复制到hadoopserver2,保证hadoopserver可以无需密码登陆hadoopserver2
        scp /home/username/.ssh/authorized_keys  username@hadoopserver2:/home/username/.ssh/authorized_keys

     4.修改hadoop-server的hadoop/conf/slaves文件, 增加集群的节点,将localhost改为
       hadoop-server
       hadoop-server2

     5.在hadoop-server执行hadoop/bin/start-all.sh
      将会在hadoop-server启动namenode,datanode,jobtracker,tasktracker
      在hadoop-server2启动datanode 和tasktracker
  
     6.现在来执行Grep操作
        hadoop/bin/hadoop demo.hadoop.HadoopGrep in out
       重新执行前,运行hadoop/bin/hadoop dfs rmr out 删除out目录

     7.运行hadoop/bin/stop-all.sh 结束。
    

四、效率
       经测试,Hadoop并不是万用灵丹,很取决于文件的大小和数量,处理的复杂度以及群集机器的数量,相连的带宽,当以上四者并不大时,hadoop优势并不明显。
       比如,不用hadoop用java写的简单grep函数处理100M的log文件只要4秒,用了hadoop local的方式运行是14秒,用了hadoop单机集群的方式是30秒,用双机集群10M网口的话更慢,慢到不好意思说出来的地步。

 
分布式计算开源框架Hadoop的简单介绍以及在实际中的运用 在SIP项目设计的过程中,对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计,在我从前写的文章《Tiger Concurrent Practice —日志分析并行分解设计与实现》中有所提到。但是由于统计的内容暂时还是十分简单,所以就采用Memcache作为计数器,结合MySQL就完成了访问控制以及统计的工作。然而未来,对于海量日志分析的工作,还是需要有所准备。现在最火的技术词汇莫... 阅读详情

相关推荐

大数据分布式计算开源框架Hadoop的介绍和运用

Hadoop是Apache开源组织的一个分布式计算开源框架,在很多大型网站上都已经得到了应用,如亚马逊、Facebook和Yahoo等等。对于我来说,最近的一个使用点就是服务集成平台的日志分析。服务集成平台的日志量将会很大,而这也正好符合了分布式计算的适用场景(日志分析和索引建立就是两大应用场景)。 在SIP项目设计的过程中,对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计,...

IT时代周刊 1105

Hadoop——开源分布式计算平台简介

Hadoop——开源分布式计算平台 起源: Hadoop 的框架最核心的设计就是:HDFS和MapReduce。HDFS 为海量的数据提供了存储,则MapReduce 为海量的数据提供了计算。 特点: Hadoop 是一个能够对大量数据进行分布式处理的软件框架。Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理。 1)高可靠性。Hadoop 按位存储和处理数据的...

T.machine的博客 5696

Java大数据开发入门教程:使用Hadoop处理海量数据

在大数据领域,Hadoop作为一个开源的分布式计算框架,被广泛应用于海量数据的存储和处理。本文将为大家介绍Java大数据开发的基本概念和Hadoop的使用方法,帮助读者入门大数据开发。在使用Hadoop进行大数据开发的过程中,可能会遇到一些常见的问题,如任务运行缓慢、数据倾斜等。在系统的环境变量中添加Hadoop的安装路径,以便在命令行中直接调用Hadoop命令。编辑Hadoop的配置文件,设置集群的相关参数,如主节点和从节点的IP地址、端口号等。在官方网站上下载Hadoop的最新版本,并解压到本地目录。

C891106的博客 1189

Hadoop--海量文件的分布式计算处理方案

作者:江南白衣,原文出处:http://www.blogjava.net/calvin/archive/2007/02/08/98688.html,转载请保留。     Hadoop 是Google MapReduce的一个Java实现。MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行。就如同java程序员可以不考虑内存泄露一样, Map

happysofter的专栏 1406

Apache Hadoop: 分布式计算框架

2003年,Apache Software Foundation宣布成立Apache软件基金会(ASF),并发布了第一个版本的Hadoop分布式文件系统。2006年,Apache Hadoop项目正式成立,以作为Apache软件基金会下的顶级项目。从那时起,Hadoop已经成为开源社区中的热门话题。目前,Hadoop已成为开源世界中最流行、最知名的分布式计算框架。HADOOP是一个分布式计算框架,能够提供海量数据存储、分布式处理以及高容错性。Hadoop是一个开源软件,其源代码完全免费提供。

AI天才研究院 1269

Hadoop在海量搜索中的应用策略与优化技巧

海量数据(Big Data)通常具有体量大(Volume)、速度快(Velocity)、种类多(Variety)和价值密度低(Value)的特点,即所谓的4V特性。随着技术的发展,人们又增加了“真实性”(Veracity)和“可视性”(Visibility)两个维度。数据量可能达到PB级别,数据的生成速度极高,且数据类型多样,包括结构化、半结构化和非结构化数据。为了应对这些挑战,Hadoop应运而生。Hadoop是一个由Apache基金会开发的开源框架,它允许分布式存储和处理大规模数据集。

weixin_32661831的博客 845

分布式计算开源框架Hadoop介绍

在SIP项目设计的过程中,对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计,在我从前写的文章《Tiger Concurrent Practice --日志分析并行分解设计与实现》中有所提到。但是由于统计的内容暂时还是十分简单,所以就采用Memcache作为计数器,结合MySQL就完成了访问控制以及统计的工作。然而未来,对于海量日志分析的工作,还是需要有所准备。现在最火的技术词汇

ManFred2ManFred的专栏 523

SwinIR实战:从环境搭建到模型训练的全流程解析

本文提供了SwinIR超分辨率模型从零开始的全流程实战指南。详细解析了基于PyTorch和Anaconda的环境搭建、数据准备与配置文件修改、训练启动与常见错误排查(如张量尺寸不匹配),以及模型评估方法,帮助读者高效部署并训练SwinIR模型。

weixin_28224217的博客 319

关于大数据处理和Hadoop的一些文章【持续更新】

1.        Hadoop 2.0:大数据的新突破在即2.        Hadoop被看做廉价的海量存储和ETL系统3.        Hadoop:大数据解决方案的常胜将军4.        硬件巨头们缘何热衷于Hadoop发行版?5.        详细讲解Hadoop分布式文件系统6.        从问题域出发认识Hadoop生态系统7.        利用下一代Hadoop YA

Q 2074

MATLAB/Simulink BLDC电机控制模型搭建:六步换相与速度环实战

无刷直流电机(BLDC)控制是电机驱动领域的核心技术,其六步换相原理通过霍尔信号控制逆变器开关,使定子磁场与转子磁场保持垂直以产生最大转矩。在MATLAB/Simulink中搭建BLDC控制系统,需从电机本体建模入手,结合PWM占空比调节和速度环PI控制器,实现速度闭环与波形观测。该技术广泛应用于电动工具、无人机电调和伺服驱动器等场景。本文详细解析BLDC六步换相逻辑、反电动势建模及Simulink分层设计方法,帮助读者掌握从零搭建完整控制模型的工程实践。

weixin_28273593的博客 208

开关电源EMI优化秘籍:三明治绕法如何让你的产品通过认证测试

本文深入解析了开关电源EMI优化中的三明治绕法,详细阐述了其通过改变绕组排布来减小初次级寄生电容、降低共模噪声的核心机理。文章提供了从绕制结构选择、绝缘安规处理到实测验证的全流程实战指南,帮助工程师有效利用这一工艺,提升产品通过CCC、CE等EMI认证测试的成功率。

tcp8optimizer的博客 706

分布式计算开源框架Hadoop的简介以及在实际中的运用

在SIP项目设计的过程中,对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计,在我从前写的文章《Tiger Concurrent Practice —日志分析并行分解设计与实现》中有所提到。但是由于统计的内容暂时还是十分简单,所以就采用Memcache作为计数器,结合MySQL就完成了访问控制以及统计的工作。然而未来,对于海量日志分析的工作,还是需要有所准备。现在最火的技术词汇莫...

程序之道的博客 805

【论文精度】生成式预训练模型——BART(Bidirectional and Auto-Regressive Transformers)

​ BART是一个预训练的seq2seq的去噪自编码(denoising autoencoder)模型,BART以下方式进行训练①用任意的噪声函数(noising function)去破坏文本;②学习一个模型来重建原始文本。它使用一个标准的基于transformer的神经机器翻译架构,可以看作是BERT(双向编码器)、GPT(left-to-right解码器)以及其他预训练方案的推广。

weixin_45828972的博客 7450

分布式计算平台 Hadoop 简介

Hadoop是一种分析和处理大数据的软件平台,是一个用Java语言实现的Apache的开源软件框架,在大量计算机组成的集群中实现了对海量数据的分布式计算。其主要采用MapReduce分布式计算框架,包括根据GFS原理开发的分布式文件系统HDFS、根据BigTable原理开发的数据存储系统HBase以及资源管理系统YARN。

m0_62249876的博客 1450

InSAR数据获取实战指南:Sentinel-1、精密轨道与ALOS PALSAR DEM的下载与应用

本文详细介绍了InSAR数据获取的实战指南,重点解析Sentinel-1数据、精密轨道数据(OPOD)和ALOS PALSAR DEM的下载与应用技巧。通过实际案例和代码示例,帮助读者掌握数据筛选、下载加速、校验及多源数据协同使用的关键方法,提升地面形变监测的精度与效率。

weixin_29215815的博客 433

Qt实现窗口自适应分辨率大小

如果希望窗口大小始终保持与屏幕分辨率一致,可以将上述代码放在窗口的resizeEvent()函数中。这样,每当窗口大小发生变化时,都会自动调用resizeEvent()函数,从而实现窗口大小的自适应调整。在Qt中,可以通过一些简单的方法实现窗口大小随分辨率变化而自适应调整。获取到当前屏幕的分辨率后,可以根据需要调整窗口的大小。无论在何种分辨率下运行应用程序,窗口都能够正确地自动调整大小,提供更好的用户体验。除了调整窗口大小,还可以考虑将窗口设置为最大化,以充分利用屏幕空间。步骤2:调整窗口大小。

FuJavascript的博客 3655

如何在Java中实现高效的分布式计算框架:从Hadoop到Spark

RDD是一个不可变的分布式对象集合,支持并行操作,而DataFrame和Dataset则提供了更高级的API,方便数据处理。在实际应用中,根据具体需求选择合适的框架,并通过合理的优化策略,可以实现高效的分布式计算。Mapper类负责将输入的文本分割为单词并输出(单词,1)的键值对,而Reducer类则负责统计每个单词的出现次数。:将MapReduce代码转换为Spark代码,通常需要重写逻辑,将Map和Reduce操作映射到RDD的Transformation和Action操作上。

微赚淘客系统开发者博客 1608

TPAMI 2025 | 从缺失碎片到杰作:基于上下文自适应扩散的图像修复

图像修复是一项具有挑战性的任务,尤其是要确保生成的内容与图像的现有部分无缝融合。尽管最近的扩散模型展现出了潜力,但它们在保持已知区域和未知(缺失)区域之间的连贯性方面常常遇到困难。这个问题源于扩散过程中缺乏明确的空间和语义对齐,导致生成的内容无法与原始图像平滑融合。此外,扩散模型通常依赖全局学习分布,而非局部特征,这使得生成的图像部分与现有图像部分之间存在不一致。在这项工作中,作者提出了ConFill,这是一个新颖的框架,引入了上下文自适应差异(CAD)模型,以确保在整个扩散过程中,已知区域和未知区域的中间

小白学视觉 240

Hadoop(开源的分布式计算框架)

从官网或镜像站下载 Hadoop 安装包(如。查看 HDFS 状态。

ctlongs的博客 1123

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

海量数据处理的几种方案扫盲

<br />先摘录如下:hadoop扫盲篇<br /><br /><br />一、Hadoop是什么?<br /><br /> 答:是google的核心算法MapReduce的一个开源实现。用于海量数据的并行处理。 <br /><br /> hadoop的核心主要包含:HDFS和MapReduce <br />       HDFS是分布式文件系统,用于分布式存储海量数据。 <br />       MapReduce是分布式数据处理模型,本质是并行处理。 <br /><br /><br /

liying1985的专栏 1249

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构)

从hadoop框架与MapReduce模式中谈海量数据处理前言    几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,觉得它们很是神秘,而神秘的东西常能勾起我的兴趣,在看过介绍它们的文章或论文之后,觉得Hadoop是一项富有趣味和挑战性的技术,且它还牵扯到了一个我更加感兴趣的话题:海量数据处理。    由此,最近凡是空闲时,便在看“Hadoop”,“

结构之法 算法之道 18万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

大数据(2) 大数据处理架构Hadoop

本篇介绍了大数据处理架构——hadoop, Hadoop 是一个开源的分布式计算框架,由 Apache 基金会开发,用于处理海量数据,具备高可靠性、高扩展性和高容错性。

Theodore_1022的博客 1585
上一篇: Lucene倒排索引原理
下一篇: MapReduce技术
kevin_long
博客等级 码龄20年 30粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值