学习笔记:从0开始学习大数据-9. MapReduce读并写Hbase数据

华为的大数据平台—MapReduce服务 内容: 大数据相关知识,和目前主流的解决方案 MapReduce服务 如何使用 文章整理自:https://edu.huaweicloud.com/courses 大数据的开源解决方案:Hadoop HDFS HDFS 是基于Google发布的GFS论文进行设计开发,运行在通用硬件上的分布式文件系统。 即,将普通配置的机器结合起来形成一个完整的文件系统 HDFS的特点: (... 阅读详情

上节的MapReduce计算WordCount例子是从hdfs读输入文件,计算结果也写入hdfs

MapReduce分布式计算的输入输出可以根据需要从hdfs或hbase读取或写入,如

A.读hdfs-->写hdfs

B.读hdfs-->写hbase

C.读hbase-->写hdfs

D.读hbase -->写hbase

本节示例第三种和第四种情况。

一、第四种情况,读hbase,mapreduce计算后写入hbase,其中mapreduce计算什么也没做,只是把读出的再写入到输出

网上找的程序,修改调试通过,记录备用

创建 "Map/Reduce  Project"项目, 需要注意的是把hbaseXXX/lib 下的jar引入到项目引用的库中来。

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.mapreduce.TableMapper;
import org.apache.hadoop.hbase.mapreduce.TableReducer;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;

 
public class RwHbasetoHbase{
 
	
	public static class readMapper extends TableMapper<Text, Put> {   // mapper classs
 
		public void map(ImmutableBytesWritable row, Result columns,
				Context context) throws IOException, InterruptedException {
 			Text mapoutputkey = new Text();
			String rowkey = Bytes.toString(row.get());  // output key
 			mapoutputkey.set(rowkey);
			Put put = new Put(row.get()); // output value
 			for (Cell cell : columns.rawCells()) {     // put column family
				if ("info".equals(Bytes.toString(CellUtil.cloneFamily(cell)))) {   // put column
					if ("name".equals(Bytes.toString(CellUtil      //column name
							.cloneQualifier(cell)))) {
 						put.add(cell);
					}
 					if ("age".equals(Bytes.toString(CellUtil       //column age
							.cloneQualifier(cell)))) {
 						put.add(cell);
					}
					if ("class".equals(Bytes.toString(CellUtil      //column class
							.cloneQualifier(cell)))) {
 						put.add(cell);
					}
				}
			}
			context.write(mapoutputkey, put);
		}
	}
 
	// reducer class
 
	public static class writereducer extends
			TableReducer<Text, Put, ImmutableBytesWritable> {
 
		protected void reduce(Text key, Iterable<Put> value, Context context)
				throws IOException, InterruptedException {
 			for (Put put : value) {
				context.write(null, put);  // write format
			}
 		}
 	}
 
	// driver
	public static void main(String[] args) throws Exception {{
 		Configuration cf=new Configuration();
 		cf.set("hbase.zookeeper.quorum", "centos7");
		Configuration config = HBaseConfiguration.create(cf);
		Job job = Job.getInstance(config, "hbase_read2write");
		job.setJarByClass(RwHbasetoHbase.class); // class that contains mapper and reducer
		Scan scan = new Scan();
		scan.setCaching(500); // 1 is the default in Scan, which will be bad for MapReduce jobs						
		scan.setCacheBlocks(false); // don't set to true for MR jobs set other scan attrs
		TableMapReduceUtil.initTableMapperJob(   //set mapper
				"student", // input table
				scan,      // Scan instance to control CF and attribute selection
				readMapper.class, // mapper class
				Text.class, // mapper output key
				Put.class, // mapper output value
				job);
		TableMapReduceUtil.initTableReducerJob(   		//set reducer
				"student_copy", // output table 														// table
				writereducer.class, // reducer class
				job);
		job.setNumReduceTasks(1); // at least one, adjust as required
		System.exit(job.waitForCompletion(true) ? 0 : 1);
 	}
	}
	}

其中 输入文件student创建见我的上篇文章

https://blog.youkuaiyun.com/oLinBSoft/article/details/84337229   学习笔记:从0开始学习大数据-7.hbase java编程hello world

输出文件 student_copy 如下:

 

二,第三种情况,从hbase作为输入源,读取数据 mapreduce计算结果写入到hdfs文件

也是网上查找的例子,从hdbase 的hello表中读取单词,统计后排序,取词频最高的三个结果写入到hdfs文件系统

1.创建输入源'hello'表

2.如上面一样,在项目中增加一个类 WordCountfromHbase.java

import java.io.IOException;
import java.util.Comparator;
import java.util.TreeMap;

 
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.mapreduce.TableMapper;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

 
public class WordCountfromHbase {  
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {  
	    String tablename = "hello";
	    Configuration conf = HBaseConfiguration.create();
	    conf.set("hbase.zookeeper.quorum", "centos7");
	    Job job = Job.getInstance(conf, "WordCountHbaseReader");
	    job.setJarByClass(WordCountfromHbase.class);
	    Scan scan = new Scan();
	    TableMapReduceUtil.initTableMapperJob(tablename,scan,doMapper.class, Text.class, IntWritable.class, job);
	    job.setReducerClass(WordCountHbaseReaderReduce.class);
	    FileOutputFormat.setOutputPath(job, new Path(args[0]));
	    MultipleOutputs.addNamedOutput(job, "hdfs", TextOutputFormat.class, WritableComparable.class, Writable.class);
	    System.exit(job.waitForCompletion(true) ? 0 : 1);
    }  
      
    public static class doMapper extends TableMapper<Text, IntWritable>{  
        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text(); 
        @Override  
        protected void map(ImmutableBytesWritable key, Result value,  
                Context context) throws IOException, InterruptedException { 
        	/*不进行分隔,将value整行全部获取
			String rowValue = Bytes.toString(value.list().get(0).getValue());
          	context.write(new Text(rowValue), one);
        	*/
        	String[] rowValue = Bytes.toString(value.list().get(0).getValue()).split(" ");
     	    for (String str: rowValue){
    		   word.set(str);
    		   context.write(word,one);
    		  
    	    }   
 
        }  
    }  
    
    public static final int K = 3; 
    public static class WordCountHbaseReaderReduce extends Reducer<Text, IntWritable, Text, IntWritable> {
        //定义treeMap来保持统计结果,由于treeMap是按key升序排列的,这里要人为指定Comparator以实现倒排
        private TreeMap<Integer, String> treeMap = new TreeMap<Integer, String>(new Comparator<Integer>() {
            @Override
            public int compare(Integer x, Integer y) {
                return y.compareTo(x);
            }
        });
        public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
            //reduce后的结果放入treeMap,而不是向context中记入结果
            int sum = 0;
            for (IntWritable val : values) {
                sum += val.get();
            }
            if (treeMap.containsKey(sum)){
                String value = treeMap.get(sum) + "," + key.toString();
                treeMap.put(sum,value);
            }else {
                treeMap.put(sum, key.toString());
            }
			if(treeMap.size() > K) {
				treeMap.remove(treeMap.lastKey());
			}  
        }
        protected void cleanup(Context context) throws IOException, InterruptedException {
            //将treeMap中的结果,按value-key顺序写入contex中
            for (Integer key : treeMap.keySet()) {
                context.write(new Text(treeMap.get(key)), new IntWritable(key));
            }
        }
    }
}  

3. 新建一个运行配置,输入需要的参数,即mapreduce结果输出hdfs目录

4.运行后查看hdfs目录文件检验结果

因为map函数中以空格分隔单词,所以逗号出现在分词结果中

 

第1关:数据清洗MapReduce综合应用案例 — 招聘数据清洗 第1关:数据清洗 MapReduce综合应用案例 — 招聘数据清洗 阅读详情

相关推荐

BigData-Notes 16.9k Star 项目解析:从 Hadoop 到 Flink 的 13 个组件学习路径

本文解析了16.9k Star的BigData-Notes开源项目,为开发者设计了一套从Hadoop到Flink的13周系统学习路径。该项目覆盖大数据生态的13个核心组件,包含理论基础、环境搭建、API使用等多元学习维度,适合中级开发者快速构建大数据知识体系。

culh2177的博客 870

MapReduce操作Hbase史上最完整范例

Hbase里的数据量一般都小不了,因此MapReduce跟Hbase就成了天然的好搭档。本文中,本博主将给出最详细的用MR读取Hbase中数据的实例。1.ZK授权表首先一点来说,Hbase是强依赖于ZK的。博主所在的team,就经常出现ZK连接数太多被打爆然后Hbase挂了的情况。一般在访问Hbase表之前,需要通过访问ZK得到授权: /** * 为hbase表授权。 *

bitcarmanlee的博客 1万+

【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)

1 大数据概述大数据特性:4v volume velocity variety value 即大量化、快速化、多样化、价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可用于生成决策的时间非常少;1秒定律,这和传统的数据挖掘技术有着本质区别(谷歌的dremel可以在1秒内调动上千台服务器处理PB级数据) 价值密度低,商业价值高大数据影响: 对科学研究影响:出现科...

weixin_30437847的博客 4475

MapReduce功能实现二---排序

一、前N名 TOP-N 情况1: 创建文件并上传到HDFS中 [hadoop@h71 q1]$ vi test.txt a 1000 b 2000 c 90000 d 88 e 999999 f 9998 g 13223 注意:这里的分隔符是/t(Tab键)而不是空格 [hadoop@h71 q1]$ hadoop fs -put test.txt /input

小强签名设计 的博客 4780

大数据技术原理与应用 第四章 分布式数据库HBase

厦门大学林子雨老师课程 —— 大数据技术原理与应用 学习笔记参考资料:http://dblab.xmu.edu.cn/post/bigdata-online-course/#lesson0https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-bigdata-hbase/index.html1. HBase与HDFS、MapRed...

chenhui229的博客 2863

大数据开发学习路线:从Hadoop入门到MapReduce实战

大数据开发入门绕不开分布式存储与计算这一核心命题。当数据量超出单机处理能力时,Hadoop作为经典的开源框架,提供了一套完整的解决方案:HDFS负责分布式文件存储,MapReduce实现分而治之的批量计算,YARN统一调度集群资源。理解这些底层原理,是后续学习Hive数仓、Spark实时计算的重要基础。本文从环境搭建出发,逐步讲解伪分布式集群配置、HDFS文件操作、MapReduce词频统计实战,并梳理新手最常见的排错思路,帮助读者建立从理论到实践的行动路径。无论你是准备毕业设计,还是计划转行大数据开发,掌

weixin_34208283的博客 1172

【HBase】- 使用MapReduce对HBase数据进行操作案例 ⭐️⭐️⭐️

案例 一 1. 需求 从 Person 表中读取name列的数据 写入到 Person_mr 2.代码 Map 阶段 package com.wangt.habse.mr01; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellUtil; import org.apache.hadoop.hbase...

兀坐晴窗独饮茶 450

STM32笔记:高精度脉冲宽度计 双输入捕获+DMA方式

本文介绍如何用STM32F107VC实现高精度的脉冲宽度计(测量周期脉冲的占空比)。 采用定时器的外部输入捕获功能,双输入+DMA方式,追求硬件的极限表现。

st01lsp的专栏 5287

MapReduce功能实现四---小综合(从hbase中读取数据统计并在hdfs中降序输出Top 3)

方法一: 在Hbase中建立相应的表1: create 'hello','cf' put 'hello','1','cf:hui','hello world' put 'hello','2','cf:hui','hello hadoop' put 'hello','3','cf:hui','hello hive' put 'hello','4','cf:hui','hello hadoop

小强签名设计 的博客 5043

乐鑫WIFI芯片开发流程梳理-工具链、编译和下载

最近开始基于乐鑫ESP32的WIFI模组的软件开发,首先要做整套流程的梳理,乐鑫官网以及安信可上已经有了较为系统的资料,但是在实现过程中也遇到了一些问题,花了几天去解决,所以为了总结,也为了给其他人提供一些借鉴,把流程分享一下,官网上相对比较完善的,就不在赘述。 1. 开发方案选择 目前网上有两套较为成熟的方案: (1)基于乐鑫官网推荐的开发方式,原网页:https://docs.espress...

一名嵌入式软件工程师的自我成长 3925

XR Interaction Toolkit实战:为HTC Vive Cosmos打造抓取、投掷与UI交互(Unity 2023教程)

本文详细介绍了如何使用Unity 2023和XR Interaction Toolkit为HTC Vive Cosmos开发抓取、投掷与UI交互系统。通过实战案例'VR投掷训练室',从基础配置到高级功能实现,涵盖物理抓取、精准投掷机制和VR UI交互设计,帮助开发者提升VR交互开发技能。

weixin_30562507的博客 252

使用hadoop MapReduce进行排序

<br /><br /> 在hadoop中的例子TeraSort,就是一个利用mapredue进行排序的例子。本文参考并简化了这个例子:<br />       排序的基本思想是利用了mapreduce的自动排序功能,在hadoop中,从map到reduce阶段,map出来的结构会按照各个key按照hash值分配到各个reduce中,其中,在reduce中所有的key都是有序的了。如果使用一个reduce,那么我们直接将他output出来就行了,但是这不能够体现分布式的好处,所以,我们还是要用多个reduc

scutshuxue的专栏 1万+

帆软报表JS导出避坑指南:如何正确处理sessionid和参数传递

本文深入探讨了帆软报表中通过JavaScript实现一键导出的关键技术,重点解析了如何正确获取并传递sessionid以确保会话不丢失,以及如何构造包含必要参数的导出URL。文章详细对比了预览后导出与直接URL导出两种方式的差异,并提供了从参数拼接、前端触发下载到高级场景(如SPA集成)的完整避坑指南,帮助开发者构建稳定可靠的自定义导出功能。

weixin_42522857的博客 161

【大数据实验】熟悉常用的 HBase 操作

实验目的 理解 HBase 在 Hadoop 体系结构中的角色 熟练使用 HBase 操作常用的 Shell 命令 熟悉 HBase操作常用的 Java API 实验平台 操作系统:Ubuntu 16.04 Hadoop 版本:3.1.3 HBase 版本:2.2.2 JDK 版本:1.8 Java IDE:Eclipse 实验内容和要求 1. 编程实现以下指定功能,并用 Hadoop 提供的 HBase Shell 命令完成相同任务: (1) 列出 HBase 所有的表的相关信息,例如表名 hba

AinD的博客 2万+

WPF插件架构-如何动态加载封装好的第三方DLL的界面

插件架构中如何自动加载第三方DLL中的UI界面

lg24k的博客 1881

在 SAP ECC 中定义 ledger 时遇到 “Define exactly one leading ledger“(消息号 FAGL_LEDGER_CUST012)的错误

摘要:SAP系统要求必须且只能定义一个主导分类账(Leading Ledger)。当出现错误消息FAGL_LEDGER_CUST012时,需通过事务码FINSC_LEDGER或SPRO路径检查分类账配置,确保仅有一个分类账被标记为"LeadingLedger",其余设为"Non-leadingLedger"。主导分类账是SAP默认用于标准报表的核心分类账,修改配置需谨慎以免影响已有数据。若问题未解决,建议检查未完成配置或查阅SAP Notes获取解决方案。

金牌架构师 801

大数据基础复习

第一章 1.大数据的概念: 大数据是指无法在一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合。 2.大数据的特点: (1)Volume:数据存储量大,计算量大。 (2)Value:价值密度低,对未来趋势与模式可预测分析,深度复杂分析。 (3)Variety:数据来源多,数据类型多,关联性强。 (4)velocity:数据存储、传输、处理速度快。数据更新增长速度快。 3.数据中心: 计算机系统及其通信、存储、安全、监控等系统配套设备。 4.大数据的步骤: (1)数据采集:将数据抽取到临时的文件或

qq_45748133的博客 6200

基于VisionMaster实现数据实时存储至MySQL (二)

摘要:之前的分享主要聚焦于简单的一维数据实时存储。但在做缺陷检测项目时,情况往往更加复杂:一张检测图像中可能同时存在多个缺陷,每个缺陷都有一组独立的核心参数(如质心、长短轴、面积等)。如何在 MySQL 中记录这些成组出现的缺陷数据,而不只是简单的单条记录?

haier123888的博客 225

从零开始大数据--Hadoop、HDFS、MapReduce、HBase、Hive

文章目录概述HadoopHDFSHBase实现原理Regin服务器原理HBase安装与使用NoSQL数据库MapReduceHive 概述 IT领域每隔十五年就会迎来一次重大变革: 1980:个人计算机 1995:互联网 2010:物联网、云计算和大数据 信息科技为大数据时代提供技术支撑: 存储设备容量不断增加 CPU处理能力大幅提升 网络带宽不断增加 大数据是由结构化和非结构化数据组成的 10%的结构化数据,存储在数据库中 90%的非结构化数据,它们与人类信息密切相关 大数据技术的不同层面

MOKE_SPACE 3374

js逆向第3例:蝉妈妈大屏实时数据formDataSign加密

蝉妈妈大屏抖音直播实时数据是抓取抖音直播间数据的实时数据,有类似需求的公司但没有能力去搞定抖音,抓取蝉妈妈数据也是一个不错的选择。接下来就是调试找到加密点,说句题外话蝉妈妈的所有js文件打包方式用的都是webpack5,那如何区分打包方式可以阅读这篇文章。时间戳 ,经过观察发现加密参数是实时变化的。这个函数扣下来,在浏览器控制台中测试一下。言归正传,打断点找到变量。继续打断点向上找又发现了。查看请求参数,可以看到。请求的内容,那么这个。

花臂不花Home 1539

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大数据入门学习之HBase MapReduce的实战分析和演练

跟hadoop的无缝集成使得使用MapReduce对habse的数据进行分布式计算非常方便,本文将以前面的blog示例,介绍HBase下MapReduce开发要点。很好理解本文前提是你对Hadoop MapReduce有一定的了解。 HBase MapReduce核心类介绍 首先一起来回顾下MapReduce的基本编程模型, 可以看到最基本的是通过Mapper和Reducer...

IT时代周刊 560

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

从酒店评论词频分析看旅游大数据:HBase+MapReduce实战案例

本文通过HBase+MapReduce实战案例,深入分析酒店评论词频,揭示旅游大数据的商业价值。从数据采集、存储架构到核心算法实现,详细展示了如何利用大数据技术提取用户评论中的关键信息,为酒店运营和精准营销提供数据支持。

Jerry的专栏 893

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

mapreduce向hbase写数据

用MR向hbase 写数据,在这里只用mapper不用hbase,避免mapper向reduce传输数据产生的IO网络流,从而提高效率。 第一步:编写代码,打jar包 package com.ww.hbase.mrimport; import java.io.IOException; import org.apache.hadoop.conf.Configu

u013887751的博客 596

大数据开发笔记(十):Hbase实践

HBSAE实践:(要求先配置好hadoop环境,版本hadoop2皆可,先启动zookeeper) 文件下载链接:https://pan.baidu.com/s/1W-WMer8WDyOqt-N_RU7bXg 提取码:1234 1、安装(hbase-0.98.6-hadoop2) (1)安装zookeeper(zookeeper-3.4.5) 首先,将zoo_sample.cfg改名为zoo.cfg(要求所有机器保持一致) server.0=master:8880:7770 ...

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 1662

hbase 下mapreduce 读取hbase中数据

简单小程序演示如何在Hbase 中编写mr程序: hbase 中已经存在的数据: hbase(main):009:0> scan 'test' ROW COLUMN+CELL row1

llcode的专栏 3899

大数据知识总结(八):HBase分布式数据库入门到精通

HBase是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式 NOSQL 数据库。当你需要随机、实时读/写访问大数据时,请使用 Apache HBase。

Lansonli(蓝深李)的博客 3355
上一篇: 学习笔记:从0开始学习大数据-8.直接在Eclipse配置运行MapReduce程序
下一篇: 学习笔记:从0开始学习大数据-10. hive安装部署
领尚
博客等级 码龄14年 1143粉丝 271原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值