概要:

hadoop和hbase导入环境变量:

要运行Hbase中自带的MapReduce程序,需要运行如下指令,可在官网中找到:

如果遇到如下问题,则说明Hadoop的MapReduce没有权限访问Hbase的jar包:

参考官网可解决:

运行后解决:

导入数据运行指令:

tsv是指以制表符为分隔符的文件

先创建测试数据,创建user文件:

上传至hdfs,并且启动hbase shell:

创建表:

之后导入数据:

还有一些其他的方法,比如rowcounter统计行数:

接下来演示用sqoop将mysql数据考入hbase,构建测试数据:

使用import,需要先配置hbase环境变量:

Hbase表数据的迁移:

之后编写MapReduce程序,代码如下:

package com.tyx.hbase.mr;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
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;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner; public class Tab2TabMapReduce extends Configured implements Tool { // mapper class
public static class TabMapper extends TableMapper<Text, Put> {
private Text rowkey = new Text(); @Override
protected void map(ImmutableBytesWritable key, Result value,Context context)
throws IOException, InterruptedException {
byte[] bytes = key.get();
rowkey.set(Bytes.toString(bytes)); Put put = new Put(bytes); for (Cell cell : value.rawCells()) {
// add cell
if("info".equals(Bytes.toString(CellUtil.cloneFamily(cell)))) {
if("name".equals(Bytes.toString(CellUtil.cloneQualifier(cell)))) {
put.add(cell);
}
}
} context.write(rowkey, put);
}
} // reduce class
public static class TabReduce extends TableReducer<Text,Put, ImmutableBytesWritable> {
@Override
protected void reduce(Text key, Iterable<Put> values,Context context)
throws IOException, InterruptedException {
for (Put put : values) {
context.write(null, put);
} }
} @Override
public int run(String[] args) throws Exception {
//create job
Job job = Job.getInstance(this.getConf(), this.getClass().getSimpleName()); // set run class
job.setJarByClass(this.getClass()); Scan scan = new Scan();
scan.setCaching(500);
scan.setCacheBlocks(false); // set mapper
TableMapReduceUtil.initTableMapperJob(
"tab1", // input table
scan , // scan instance
TabMapper.class, // set mapper class
Text.class, // mapper output key
Put.class, //mapper output value
job // set job
); TableMapReduceUtil.initTableReducerJob(
"tab2" , // output table
TabReduce.class, // set reduce class
job // set job
); job.setNumReduceTasks(1); boolean b = job.waitForCompletion(true); if(!b) {
System.err.print("error with job!!!");
} return 0;
} public static void main(String[] args) throws Exception { //create config
Configuration config = HBaseConfiguration.create(); //submit job
int status = ToolRunner.run(config, new Tab2TabMapReduce(), args); //exit
System.exit(status);
} }

运行指令:

接下来是hdfs中文件导入Hbase:

构造数据:

然后编写MapReduce程序:

package com.jkxy.hbase.mr;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner; public class HDFS2TabMapReduce extends Configured implements Tool{ public static class HDFS2TabMapper extends Mapper<LongWritable, Text, ImmutableBytesWritable, Put> { ImmutableBytesWritable rowkey = new ImmutableBytesWritable(); @Override
protected void map(LongWritable key, Text value,Context context)
throws IOException, InterruptedException { String[] words = value.toString().split("\t");
//rk0001 zhangsan 33 Put put = new Put(Bytes.toBytes(words[0]));
put.add(Bytes.toBytes("info"),Bytes.toBytes("name"),Bytes.toBytes(words[1]));
put.add(Bytes.toBytes("info"),Bytes.toBytes("age"),Bytes.toBytes(words[2])); rowkey.set(Bytes.toBytes(words[0])); context.write(rowkey, put);
}
} @Override
public int run(String[] args) throws Exception { // create job
Job job = Job.getInstance(this.getConf(), this.getClass().getSimpleName()); // set class
job.setJarByClass(this.getClass()); // set path
FileInputFormat.addInputPath(job, new Path(args[0])); //set mapper
job.setMapperClass(HDFS2TabMapper.class);
job.setMapOutputKeyClass(ImmutableBytesWritable.class);
job.setMapOutputValueClass(Put.class); // set reduce
TableMapReduceUtil.initTableReducerJob(
"user", // set table
null,
job);
job.setNumReduceTasks(0); boolean b = job.waitForCompletion(true); if(!b) {
throw new IOException("error with job!!!");
} return 0;
} public static void main(String[] args) throws Exception {
//get configuration
Configuration conf = HBaseConfiguration.create(); //submit job
int status = ToolRunner.run(conf, new HDFS2TabMapReduce(), args); //exit
System.exit(status);
} }

运行指令

接下来演示使用BulkLaod将数据从Hdfs导入Hbase,使用该方式可以绕过WAL,memstor等步骤,加快海量数据的效率,代码如下:

package com.jkxy.hbase.mr;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2;
import org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles;
import org.apache.hadoop.hbase.mapreduce.PutSortReducer;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner; public class HFile2TabMapReduce extends Configured implements Tool { public static class HFile2TabMapper extends Mapper<LongWritable, Text, ImmutableBytesWritable, Put> { ImmutableBytesWritable rowkey = new ImmutableBytesWritable(); @Override
protected void map(LongWritable key, Text value,Context context)
throws IOException, InterruptedException { String[] words = value.toString().split("\t"); Put put = new Put(Bytes.toBytes(words[0]));
put.add(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes(words[1]));
put.add(Bytes.toBytes("info"), Bytes.toBytes("age"), Bytes.toBytes(words[2]));
rowkey.set(Bytes.toBytes(words[0])); context.write(rowkey, put);
}
} @Override
public int run(String[] args) throws Exception { //create job
Job job = Job.getInstance(getConf(), this.getClass().getSimpleName()); // set run jar class
job.setJarByClass(this.getClass()); // set input . output
FileInputFormat.addInputPath(job, new Path(args[1]));
FileOutputFormat.setOutputPath(job, new Path(args[2])); // set map
job.setMapperClass(HFile2TabMapper.class);
job.setMapOutputKeyClass(ImmutableBytesWritable.class);
job.setMapOutputValueClass(Put.class); // set reduce
job.setReducerClass(PutSortReducer.class); HTable table = new HTable(getConf(), args[0]);
// set hfile output
HFileOutputFormat2.configureIncrementalLoad(job, table ); // submit job
boolean b = job.waitForCompletion(true);
if(!b) {
throw new IOException(" error with job !!!");
}
LoadIncrementalHFiles loader = new LoadIncrementalHFiles(getConf());
// load hfile
loader.doBulkLoad(new Path(args[2]), table); return 0;
} public static void main(String[] args) throws Exception {
// get configuration
Configuration conf = HBaseConfiguration.create(); //run job
int status = ToolRunner.run(conf, new HFile2TabMapReduce(), args); // exit
System.exit(status); } }

使用如下指令:

十九、Hadoop学记笔记————Hbase和MapReduce的更多相关文章

  1. 二十、Hadoop学记笔记————Hive On Hbase

    Hive架构图: 一般用户接口采用命令行操作, hive与hbase整合之后架构图: 使用场景 场景一:通过insert语句,将文件或者table中的内容加入到hive中,由于hive和hbase已经 ...

  2. 十八、Hadoop学记笔记————Hbase架构

    Hbase结构图: Client,Zookeeper,Hmaster和HRegionServer相互交互协调,各个组件作用如下: 这几个组件在实际使用过程中操作如下所示: Region定位,先读取zo ...

  3. 十七、Hadoop学记笔记————Hbase入门

    简而言之,Hbase就是一个建立在Hdfs文件系统上的数据库(mysql,orecle等),不同的是Hbase是针对列的数据库 Hbase和普通的关系型数据库区别如下: Hbase有一些基本的术语,主 ...

  4. 二十五、Hadoop学记笔记————Hive复习与深入

    Hive主要为了简化MapReduce流程,使非编程人员也能进行数据的梳理,即直接使用sql语句代替MapReduce程序 Hive建表的时候元数据(表明,字段信息等)存于关系型数据库中,数据存于HD ...

  5. 二十四、Hadoop学记笔记————Spark的架构

    master为主节点 一个集群中可能运行多个application,因此也可能会有多个driver DAG Scheduler就是讲RDD Graph拆分成一个个stage 一个Task对应一个Spa ...

  6. 二十二、Hadoop学记笔记————Kafka 基础实战 :消费者和生产者实例

    kafka的客户端也支持其他语言,这里主要介绍python和java的实现,这两门语言比较主流和热门 图中有四个分区,每个图形对应一个consumer,任意一对一即可 获取topic的分区数,每个分区 ...

  7. 二十三、Hadoop学记笔记————Spark简介与计算模型

    spark优势在于基于内存计算,速度很快,计算的中间结果也缓存在内存,同时spark也支持streaming流运算和sql运算 Mesos是资源管理框架,作为资源管理和任务调度,类似Hadoop中的Y ...

  8. 二十一、Hadoop学记笔记————kafka的初识

    这些场景的共同点就是数据由上层框架产生,需要由下层框架计算,其中间层就需要有一个消息队列传输系统 Apache flume系统,用于日志收集 Apache storm系统,用于实时数据处理 Spark ...

  9. 学记笔记 $\times$ 巩固 · 期望泛做$Junior$

    最近泛做了期望的相关题目,大概\(Luogu\)上提供的比较简单的题都做了吧\(233\) 好吧其实是好几天之前做的了,不过因为太颓废一直没有整理-- \(Task1\) 期望的定义 在概率论和统计学 ...

随机推荐

  1. STM32F429学习笔记(一)触屏工程Keil建立

    由于原来的STM32F103ZET6的flash坏掉了,所以又买了一块STM32F429DISCOVERY,这块板子非常不错,基于Cortex-M4内核,自带一块2.4寸TFT触屏,主频为180M,且 ...

  2. mysql进阶(十三)命令行导出导入数据库

    MySQL命令行导出导入数据库 MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd D:\Program Files\ ...

  3. C语言字符串的常见特殊操作(除了string.c实现的那些接口)

    字符串操作中,必须掌握的一些之前已经在文章有写过了,比如说字符串查找,字符串粘帖,字符串拷贝等等,这些在标准C库的string.c中已经有实现,故包含#include <string.h> ...

  4. SurfaceView浅析

    什么是SurfaceView呢? 为什么是SurfaceView呢?Surface的意思是表层,表面的意思,那么SurfaceView就是指一个在表层的View对象.为什么 说是在表层呢,这是因为它有 ...

  5. linux下D盘(适用于U盘、硬盘等一切移动存储设备)策略(比格式化猛,因为是不可恢复!)

    关于这样的资料,在百度上还是比较少的,今天就共享出来,在电脑主机上插上你的U盘,输入以下命令: dd if=/dev/zero of=/dev/sdb  bs=1024 count=102400   ...

  6. Android BLE与终端通信(一)——Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址

    Android BLE与终端通信(一)--Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址 Hello,工作需要,也必须开始向BLE方向学习了,公司的核心技术就是BLE终端 ...

  7. React Native Android开发环境配置

    近些年,Web前端甚是火爆,火爆程度堪比我毕业时的移动端开发一般.随着JavaScript的火爆,移动端也不安分了起来,ReactNative就异军突起了,几乎要做到"一次学习,四处开发&q ...

  8. Google高级搜索技巧十则

    前言:多数人在使用Google搜索的过程是非常低效和无谓的,如果你只是输入几个关键词,然后按搜索按钮,你将是那些无法得到Google全部信息的用户,在这篇文章中,Google搜索专家迈克尔.米勒将向您 ...

  9. 用PULL解析器解析XML文件

    第一种方式(简洁,直接用pullparser.nextText()来返回下一个String类型的值): 1 package lee.service; 2 3 import java.io.InputS ...

  10. openssh升级的坑爹之路

    安装Zlib http://zlib.net/zlib-1.2.8.tar.gz tar -zxvf zlib-1.2.8.tar.gz cd zlib-1.2.8 ./configure --sha ...