"不知你是否想过,计算一下在城市中的每台电脑里的文件数加起来的共数有多少?似乎是一个非常不可思议的问题,将会是一个非常庞大的数字,如果用计算机去远程挨个统计一遍数以万计的计算机,首先要去扫描磁盘,然后再去做统计,最后把结果累加,很难在容许的时间范围内得出一个结果。
但如果在每台机器上有一个程序让他去计算(统计),在分组里合并计算结果,最后返回给中心服务器,貌似这样能在一定的短时间内得出结果。并非是我那么无聊的要去统计全市计算机中的文件数量,只是做了一个比方,我想说利用分布式并行计算可以更快的得到超大型数据的计算结果。 目前中国 很多互联网公司 已经采用了MapReduce框架便捷的去实现这样超大型数据的计算,例如:百度、淘宝、中国雅虎、金山 这样的互联网企业都在使用MapReduce,将计算的任务交给每台计算机,进行并行计算提高计算的能力。"
在今天越来越多的人在讨论云计算相关的话题,越来越多的人知道云计算是有很多的计算机组成,但人们不会是关心云计算中的运用的具体技术,但是对于今天的程序员和工程师们来说会慢慢的会接触到云计算相关的需求,所以自然的就会接触到云计算相关的技术,云计算技术中包含分布式并行计算,分布式运算模型就是能够把任务分布到多台服务器上面执行,最后把任务归并回来获得计算的结果,而 MapReduce 就是一个为并行处理大量数据而设计的编程模型,它将工作划分为一个独立任务组成的集合。它是一种并行编程,现有的产品包括,如:
Google 的 BigTable、Hadoop 、HBase 都用到了MapReduce的计算框架。
Hadoop项目中Mapreduce的分布式计算框架需要依托于Hadoop的集群环境,在集群环境中 MapReduce 程序用于以并行方式计算大量数据,并且可以分配计算机之间的计算负荷,带来很高的运算效率,当计算时需要输入一组键/值对,生成一组输出键/值对。计算涉及的两个基本操作:Map 和 Reduce。用户编写的 Map 操作需要输入并生成一组中间键/值对。MapReduce 库将所有与同一中间键相关联的中间值组合到一起,并且将它们传递给 Reduce 功能。Hadoop 提供了MapReduce这种方法来实现并行计算程序设计的框架,当客户端发出MapReduce计算的请求转发到
Hadoop NameNode。然后Hadoop NameNode 负责具体的操作,它将启动大量 Map 和 Reduce 进程 执行具体的计算任务。当 MapReduce 完成操作之后,主节点 NameNode 将输出值返回到服务器并交付客户端。
在Hadoop集群环境的节点状态被分类为3类:高利用、平均利用 和未充分利用。根据每个节点的利用率,将负载在节点之间转移以平衡集群。首选需要获取邻近节点详细信息:1. 当 DataNode 的负载增加到阈值级别时,它将向该 NameNode 发送一个请求。2. NameNode 获得特定 DataNode 最邻近节点的负载级别信息。3. NameNode 比较负载,然后将有关最空闲相邻节点的详细信息发送到特定的
DataNode。其次DataNodes 开始工作:1. 每个 DataNode 将自己负载量与其最近节点的负载量之和进行比较。2. 如果 DataNode 的负载级别大于其邻近节点,将随机选择那么负载目标节点(直接相邻的节点及其他节点) 。3. 然后将节点请求发送到目标节点。最后接收请求:1. 每个节点将维护一个缓冲区接收负载请求。2. 消息传递接口(MPI)管理此缓冲区。3. 主线程会侦听缓冲队列,并服务其接收的请求。4. 节点进入负载平衡执行阶段。
具体到MapReduce框架 读/写数据库,有2个主要的程序分别是 DBInputFormat和DBOutputFormat,DBInputFormat 对应的是SQL语句select,而DBOutputFormat 对应的是 Inster/update,使用DBInputFormat和DBOutputForma时候需要实现InputFormat这个抽象类,这个抽象类含有getSplits()和createRecordReader()抽象方法,在DBInputFormat类中由
protected String getCountQuery() 方法传入结果集的个数,getSplits()方法再确定输入的切分原则,利用SQL中的 LIMIT 和 OFFSET 进行切分获得数据集的范围 ,请参考DBInputFormat源码中public InputSplit[] getSplits(JobConf job, int chunks) throws IOException的方法,在DBInputFormat源码中createRecordReader()则可以按一定格式读取相应数据。
我的废话:好比开启多线程对数据库查询,你先查询出数据结果集的个数,再根据你分配的LIMIT 和 OFFSET 策略分配给每个线程对查询数据库,最后合并在一个结果集里面。
注意:当集群中有大量的节点将会导致mapper的数目上升,此时读取数据库会给数据库造成很大的压力,需要考虑数据库的负载能。
简单的讲述一下 我利用MapReduce对MySQL和分布式文件系统HDFS的操作过程,MapReduce客户端先从MySQL中读取数据写在HDFS上,在示例程序中调用DBAccessReader.java就可以实现运行结果,第二个示例DBOutputFormat.java程序再从MySQL中读取数据,再次写入MySQL中,这样做的目的是想表达:
1.可以通过MapReduce可以对结构化和非结构化的数据进行操作,
2.可以通过MapReduce可以对结构化和结构化的数据进行操作,
3.至于通过MapReduce对非结构化和非结构化的示例就不提供了,网上一大把都是。
JobTracker是一个master服务, JobTracker负责调度job的每一个子任务task运行于TaskTracker上,并监控它们,如果发现有失败的task就重新运行它。一般情况应该把JobTracker部署在单独的机器上。
TaskTracker是运行于多个节点上的slaver服务。TaskTracker则负责直接执行每一个task,TaskTracker需要运行在DataNode上。
Client端通过JobClient类提交到JobTracker,然后由JobTracker创建每一个Task(即MapTask和ReduceTask)并将它们分发到各个TaskTracker服务中去执行。
整个环境的架构如图所示:
以下是我在项目组测试环境中建立的机器清单如下:
1.NameNode / HDFS 192.168.20.212 (主节点/linux)
2.DataNode / HDFS 192.168.20.214/192.168.20.215 (从节点/linux)
3.MySQL 192.168.20.237 (单机/linux)
4.MapRereduce Client 192.168.20.240 (Eclipse/windows xp)
注意:将代码示例打成jar,将这个jar文件和mysql的jdbc驱动上传到所有hadoop节点的lib目录下,另外本示例中的blog.sql是建表语句。
分享到:
相关推荐
MapReduce是大数据处理的一种核心工具,常与Hadoop生态系统一起使用,能高效地处理大规模数据。MySQL作为关系型数据库,用于存储用户信息、电影数据以及用户行为记录。JSP(JavaServer Pages)则用于生成动态网页,...
总结来说,"hadoop_mysql-libs.rar" 是一组用于在Linux下的Hadoop环境中连接和操作MySQL数据库的库文件。理解如何正确安装、配置和使用这些库对于实现Hadoop和MySQL的有效集成至关重要,这对于大数据环境下的数据...
标题中的“hadoop的mapreduce把oracle/mysq导入到hbase和hdfs中的程序”指的是一项数据处理任务,利用Hadoop的MapReduce框架,将关系型数据库(如Oracle和MySQL)中的数据高效地迁移至分布式存储系统HDFS(Hadoop ...
hadoop连接数据库查询数据,并添加到hdfs;从hdfs进行mapreduce数据导入到数据库 hadoop连接数据库查询数据,并添加到hdfs;从hdfs进行mapreduce数据导入到数据库 hadoop连接数据库查询数据,并添加到hdfs;从hdfs...
Hadoop集群配置与MySQL关系数据库交互是大数据处理领域中的一个重要环节。Hadoop本身是为处理大规模数据集而设计的分布式系统框架,而MySQL作为最流行的开源关系型数据库管理系统之一,它们之间的交互对于实现数据...
1. 不擅长做实时计算:MapReduce 无法像 Mysql 一样,在毫秒或者秒级内返回结果。 2. 不擅长流式计算:MapReduce 的输入数据集是静态的,不能动态变化。 3. 不擅长 DAG(有向图)计算:MapReduce 并不是不能做,但是...
课程设计要求分析每位学生的平均成绩(MapReduce实现和hive实现)分析每位学生的总分(MapReduce实现和hive实现)分析每门课程的平均成绩(hive实现)显示每位学生详细信息(学号、姓名、系和各门课成绩)(hive实现...
本项目基于Hadoop MapReduce框架,旨在对上海餐饮业消费数据进行统计分析。通过从“口味”和“环境”两个维度对上海各区餐饮的性价比进行比较,帮助用户了解上海哪个地区的餐饮行业更具性价比。 项目的主要特性和...
Hadoop集群·MapReduce初级案例(第9期) Hadoop集群·MySQL关系数据库(第10期) Hadoop集群·常用MySQL数据库命令(第10期副刊) Hadoop集群·HBase简介及安装(第11期) Hadoop集群·HBase之旅(第11期副刊)
1. **Hadoop**:Hadoop是Apache软件基金会的一个开源项目,主要由HDFS(Hadoop Distributed File System)和MapReduce两部分组成。HDFS是一种分布式文件系统,可以将大规模的数据存储在集群中,确保数据的高可用性和...
======== 销售点概念验证使用 Hadoop MapReduce、Hive 和 Luigi 处理事务日志的概念证明。 'pos' 包包含处理销售点交易日志的所有代码。 计算每个用户最受欢迎的产品类别,以及每个用户每季度的收入。 preprocessing...
总结来说,这个项目展示了Hadoop在大数据处理中的核心作用,即通过分布式计算处理海量日志数据,利用MapReduce进行数据清洗和转换,再结合Hive和MySQL进行数据存储和分析。这一实践过程对于理解和掌握大数据处理流程...
在这个系统中,"Hadoop MapReduce WordCount 操作数据库"是指使用 MapReduce 模型对视频相关的文本数据(如字幕、描述、评论等)进行统计分析,同时将结果存储到数据库中,以便后续的数据查询和可视化。 MapReduce ...
Hadoop_MapReduce_DataBase 注意:使用的数据库 - MySQL 该存储库包含将其输出写入 MySQL 数据库的 MapReduce 程序的源代码。 如果您正在写入远程数据库(即如果您在多节点集群上运行此程序),请确保每个从节点上...
在实际应用中,当需要从 MySQL 导入数据到 Hadoop 或者将 MapReduce 计算结果导出到 MySQL 时,可以通过以下步骤操作: 1. 配置 Hadoop 集群与 MySQL 数据库的连接信息,包括数据库 URL、用户名、密码等。 2. 在 ...
首先,安装MySQL需要准备必要的软件环境,包括VMware虚拟机、CentOS 6.8 64位操作系统、SecureCRT(远程终端工具)、VSFTP(文件传输工具)以及Notepad++(文本编辑器)。从MySQL官方网站下载适合的开源社区版本,...
MapReduceSkeleton介绍这是一个 MapReduce Skeleton 作业,支持 MariaDB/MySQL(和即将推出的 HBase)作为输入数据集和输出。 SQL配置在Main.java中,如果使用UPDATE方式,需要修改MysqlDBOutputFormat.java中的...
Hadoop的MapReduce编程模型则允许开发者编写分布式应用程序,对海量数据进行并行处理。 在Hadoop集群中,MySQL可以作为数据源或结果存储。例如,可以通过ETL(Extract, Transform, Load)过程将MySQL中的数据导入到...
在Windows 10环境下搭建Hadoop生态系统,包括JDK、MySQL、Hadoop、Scala、Hive和Spark等组件,是一项繁琐但重要的任务,这将为你提供一个基础的大数据处理平台。下面将详细介绍每个组件的安装与配置过程。 **1. JDK...
1. **core-3.1.1.jar**:这是Hadoop的核心库,包含了Hadoop的基本功能,如HDFS操作和MapReduce的基本类。 2. **hadoop-0.20.2-core.jar** 和 **hadoop-0.20.2-test.jar**:这些是较早版本的Hadoop核心库和测试库,...