mapreduce实例

Mapreduce实例——WordCount

半腔热情 提交于 2019-12-02 23:33:41
首先是配合MapReduce,这个参考林子雨前辈的教程,很快就搭建了相关环境。之后按照相关的实验步骤,进行操作时发现实验步骤有一些问题,首先是缺少包,其次是访问拒绝(Hadoop当时已经在运行)。 import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class WordCount { public static void main(String[] args) throws

Mapreduce实例

▼魔方 西西 提交于 2019-12-02 23:32:31
实验原理 MapReduce 采用的是 “ 分而治之 ” 的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个从节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单来说, MapReduce 就是 ” 任务的分解与结果的汇总 “ 。 现有某电商网站用户对商品的收藏数据,记录了用户收藏的商品 id 以及收藏日期,名为 buyer_favorite1 。 buyer_favorite1 包含:买家 id ,商品 id ,收藏日期这三个字段,数据以 “\t” 分割,样本数据及格式如下: 实验步骤 先启动 hadoop 2. 然后在 home/hadoop 目录下创建一个 buyer_favorite1 的文件,将实例中的数据复制粘贴到该文件里 3. 然后在 HDFS 目录下创建 /mymapreduce1/in 目录 ./bin/hdfs dfs -mkdir -p /mymapreduce1/in 4. 然后将 home/hadoop/buyer_favorite1 文件上传到 HDFS 上 /mymapreduce1/in 目录下 ./bin/hdfs dfs -put /home/hadoop/buyer_favorite1 /mymapreduce1/in 5. 然后打开 eclipse 新建 project 项目,选择 map/reduce project

Mapreduce实例——WordCount

放肆的年华 提交于 2019-12-02 23:21:37
实验步骤 切换目录到/apps/hadoop/sbin下,启动hadoop。 cd /apps/hadoop/sbin ./start-all.sh 2.在linux上,创建一个目录/data/mapreduce1。 mkdir -p /data/mapreduce1 3.切换到/data/mapreduce1目录下,自行建立文本文件buyer_favorite1。 依然在/data/mapreduce1目录下,使用wget命令,从 网络下载hadoop2lib.tar.gz,下载项目用到的依赖包。 将hadoop2lib.tar.gz解压到当前目录下。 tar -xzvf hadoop2lib.tar.gz 4.将linux本地/data/mapreduce1/buyer_favorite1,上传到HDFS上的/mymapreduce1/in目录下。若HDFS目录不存在,需提前创建。 hadoop fs -mkdir -p /mymapreduce1/ in hadoop fs -put /data/mapreduce1/buyer_favorite1 /mymapreduce1/ in 5.打开Eclipse,新建Java Project项目。并将项目名设置为mapreduce1。 6.在项目名mapreduce1下,新建package包。并将包命名为mapreduce 。 7

Hadoop大实验——MapReduce的操作

眉间皱痕 提交于 2019-12-02 23:05:11
日期:2019.10.30 博客期:114 星期三       实验 6 : Mapreduce 实例—— WordCount 实验说明: 1、 本次实验是第六次上机,属于验证性实验。实验报告上交截止日期为2018年11月16日上午12点之前。 2、 实验报告命名为:信1605-1班学号姓名实验六.doc。 实验目的 1.准确理解Mapreduce的设计原理 2.熟练掌握WordCount程序代码编写 3.学会自己编写WordCount程序进行词频统计 实验原理 MapReduce采用的是“分而治之”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个从节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单来说,MapReduce就是”任务的分解与结果的汇总“。 1.MapReduce 的工作原理 在分布式计算中,MapReduce框架负责处理了并行编程里分布式存储、工作调度,负载均衡、容错处理以及网络通信等复杂问题,现在我们把处理过程高度抽象为Map与Reduce两个部分来进行阐述,其中Map部分负责把任务分解成多个子任务,Reduce部分负责把分解后多个子任务的处理结果汇总起来,具体设计思路如下。 (1)Map过程需要继承org.apache.hadoop.mapreduce包中Mapper类,并重写其map方法

MapReduce Join关联

喜夏-厌秋 提交于 2019-12-02 20:06:15
Reduce join 原理 Map端的主要工作:为来自不同表(文件)的key/value对打标签以区别不同来源的记录。然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输出。 Reduce端的主要工作:在reduce端以连接字段作为key的分组已经完成,我们只需要在每一个分组当中将那些来源于不同文件的记录(在map阶段已经打标志)分开,最后进行合并就ok了 需求 订单数据表t_order id pid amount 1001 01 1 1002 02 2 1003 03 3 商品信息表t_product pid pname 01 小米 02 华为 03 格力 最终数据形式 id pname amount 1001 小米 1 1004 小米 4 1002 华为 2 1005 华为 5 1003 格力 3 1006 格力 6 缺点 缺点:这种方式中,合并的操作是在reduce阶段完成,reduce端的处理压力太大,map节点的运算负载则很低,资源利用率不高,且在reduce阶段极易产生数据倾斜(同一个reduce接收到的数据量很大)  解决方案: map 端实现数据 合并 案例 package com.bigdata.mapreduce.table; import java.io.DataInput; import java.io.DataOutput;

Hadoop YARN的发展史与详细解析

蹲街弑〆低调 提交于 2019-12-02 04:44:01
带有 MapReduce 的 Apache Hadoop 是分布式数据处理的骨干力量。借助其独特的横向扩展物理集群架构和由 Google 最初开发的精细处理框架,Hadoop 在大数据处理的全新领域迎来了爆炸式增长。Hadoop 还开发了一个丰富多样的应用程序生态系统,包括 Apache Pig(一种强大的脚本语言)和 Apache Hive(一个具有类似 SQL 界面的数据仓库解决方案)。 不幸的是,这个生态系统构建于一种编程模式之上,无法解决大数据中的所有问题。MapReduce 提供了一种特定的编程模型,尽管已通过 Pig 和 Hive 等工具得到了简化,但它不是大数据的灵丹妙药。我们首先介绍一下 MapReduce 2.0 (MRv2) — 或 Yet Another Resource Negotiator (YARN) — 并快速回顾一下 YARN 之前的 Hadoop 架构。 Hadoop 和 MRv1 简单介绍 Hadoop 集群可从单一节点(其中所有 Hadoop 实体都在同一个节点上运行)扩展到数千个节点(其中的功能分散在各个节点之间,以增加并行处理活动)。图 1 演示了一个 Hadoop 集群的高级组件。 图 1. Hadoop 集群架构的简单演示 一个 Hadoop 集群可分解为两个抽象实体:MapReduce 引擎和分布式文件系统。MapReduce

第9章-构建Hadoop集群-笔记

痴心易碎 提交于 2019-12-01 09:29:39
控制脚本 Hadoop内置一些脚本来运行指令,在集群内启动和终止守护进程。 这些脚本存放在bin目录中,通过masters和slaves文件指定集群内的所有机器。 1、masters文件,主要记录运行辅助namenode的所有机器 masters文件有点误导人。 它主要记录拟运行辅助namenode(secondarynamenode)的所有机器。 2、slaves文件,主要记录运行datanode和tasktracker的所有机器 slaves文件记录了运行datanode和tasktracker的所有机器。 masters和slaves文件存放在配置目录中。 用户也可以改变hadoop-env.sh的HADOOP_SLAVES项的值,将slaves文件放在其他地方(也可以改变文件名称)。 3、start-dfs.sh脚本运行时详细步骤 例如:start-dfs.sh脚本用于启动集群中所有的HDFS守护进程,但是该脚本运行时会在同一机器上运行namenode。 1)、在本地机器上启动一个namenode(脚本所运行的机器) 2)、在slaves文件中记录的各机器上启动一个datanode。 3)、在masters文件中记录的各机器上启动一个辅助namenode。 4、start-mapred.sh脚本运行时详细步骤 脚本start-mapred和start-dfs.sh类似

大数据技术复习常见问题

爱⌒轻易说出口 提交于 2019-11-30 18:08:05
1. 使用mr,spark ,spark sql编写 word count 程序 (1) mr public class WordCount { public static class TokenizerMapper extends Mapper < Object , Text , Text , IntWritable >{ private final static IntWritable one = new IntWritable( 1 ); private Text word = new Text(); public void map (Object key, Text value, Context context ) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } } } public static class IntSumReducer extends Reducer < Text , IntWritable , Text , IntWritable

Spark 和hadoop的一些面试题(准备)

放肆的年华 提交于 2019-11-30 18:05:49
1、 将现有逻辑在spark上面实现。 2、数据倾斜怎么处理? 数据倾斜有很多解决方案,本例子简要介绍一种实现方式,假设表A 和表B连接,表A 数据倾斜,只有一个key倾斜,首先对A进行采样,统计出最倾斜的key,将A 表分隔为A1 只有倾斜 key, A2 不包含倾斜key, 然后分别与 表B 连接。 最后将结果合并, union 3 、各完成一个awk和sed的例子,最简单的应用即可,并说明。 cat /etc/ passwd | awk -F ' : ' ' {print $1} ' 读取文件,指定文本分隔符,然后打印第一个域 cat test.sh | sed '2,50d' 读取文件的每一行,然后对每一行进行处理后打印在控制台, 有很多模式,很多方法。还可以直接修改文件 4、简要描述你知道的数据挖掘算法和使用场景 (一)基于分类模型的案例 ( 1)垃圾邮件的判别 通常会采用朴素贝叶斯的方法进行判别 (2)医学上的肿瘤判断 通过分类模型识别 (二)基于预测模型的案例 (1)红酒品质的判断 分类回归树模型进行预测和判断红酒的品质 ( 2)搜索引擎的搜索量和股价波动 (三)基于关联分析的案例:沃尔玛的啤酒尿布 (四)基于聚类分析的案例:零售客户细分 (五)基于异常值分析的案例:支付中的交易欺诈侦测 (六)基于协同过滤的案例:电商猜你喜欢和推荐引擎 (七)基于社会网络分析的案例

MapReduce 框架原理

女生的网名这么多〃 提交于 2019-11-30 09:32:10
一、InputFormat 数据输入 数据块:Block是HDFS上将文件分割成为物理块 数据切片:逻辑上对数据进行分片 数据切片与MapTask并行度决定机制 1)一个Job的并行度是由谁决定?? 由数据切片数目决定 2)每一个split切片会分到一个MapTask上运行。 3)如果切片大小和数据块大小不相同,一个数据块就会被分割,缺点是会产生数据传输的消耗。 4)根据3),默认的情况下,切片大小和数据块的大小是相同的。 5)切片的时候不会吧数据集作为一个整体进行切片,而是会吧单个文件作为整体进行划分切片。这样,最后一个文件块会被当作一个单独的切片,单独分配到一个MapTask中。理由如3) 二、job源码分析 drive 类 public class AccessLocalApp { public static void main(String[] args) throws Exception { // 获取配置信息 Configuration configuration = new Configuration(); // 获取job对象实例 Job job = Job.getInstance(configuration); // 指定本程序的jar包所在的本地路径 job.setJarByClass(AccessLocalApp.class); //