Hbase之--------将Hdfs数据加载到Hbase数据库中_importjava.io.loexception; importorg.apache.hadoop-程序员宅基地

技术标签: HdfsToHbase  Hbase  

数据:
zhangfenglun,M,20,13522334455,[email protected],23521472
chenfei,M,20,13684634455,[email protected],84545472
liyuchen,M,20,13522334255,[email protected],84765472
liuwei,M,20,13528734455,[email protected],84521765
liuyang,M,20,13522354455,[email protected],84231472
caofei,M,20,13735675455,[email protected],84527642
zhaoxinkuan,M,20,13522334466,[email protected],84512472
gaoying,M,20,13454523455,[email protected],845212344

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Mutation;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.mapreduce.TableReducer;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
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 hdfsToHbase {
	static class MyMapper extends Mapper<LongWritable, Text, Text, Text>{
		Text mk=new Text();
		Text mv=new Text();
		@Override
		protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, Text>.Context context)
				throws IOException, InterruptedException {
			**//取出一行的数据**
			//zhangfenglun,M,20,13522334455,[email protected],23521472
			// name,sex,age,phone,email,qq
			String[] split = value.toString().split(",");
			mk.set(split[0]);
			
			mv.set(value.toString().substring(split[0].length()+1));
			context.write(mk, mv);
		}
	}
	static class MyReducer extends TableReducer<Text, Text, NullWritable>{
		@Override
		protected void reduce(Text key, Iterable<Text> values, 
				Reducer<Text, Text, NullWritable, Mutation>.Context context)
				throws IOException, InterruptedException {
			
			Put p=new Put(key.toString().getBytes());//行键,创建put对象时必须添加行键
			//循环遍历Iterable   分装put对象
			// name,sex,age,phone,email,qq
			for(Text v:values){
				String[] data = v.toString().split(",");

					//zhangfenglun,M,20,13522334455,[email protected],23521472
					//向put对象添加列簇、列、值
					p.addColumn("basicinfo".getBytes(), "sex".getBytes(), data[0].getBytes());
					p.addColumn("basicinfo".getBytes(), "age".getBytes(), data[1].getBytes());
					p.addColumn("extrainfo".getBytes(), "phone".getBytes(), data[2].getBytes());
					p.addColumn("extrainfo".getBytes(), "email".getBytes(), data[3].getBytes());	
					p.addColumn("extrainfo".getBytes(), "qq".getBytes(), data[4].getBytes());	
				
			}
			context.write(NullWritable.get(), p);
		}
	}
	

	public static void main(String[] args) throws ClassNotFoundException, IOException, InterruptedException {
		//设置权限
		System.setProperty("HADOOP_USER_NAME", "hadoop");
		Configuration conf=new Configuration();
		//设置zookeeper的映射关系
		conf.set("hbase.zookeeper.quorum", "hadoop02:2181,hadoop03:2181,hadoop01:2181");
		//创建job任务
		Job job=Job.getInstance(conf);
		
		//指定执行的jar包
		job.setJarByClass(Kaoshi.hdfsToHbase.class);
		
		//mapper  reducer
		//指定mapper、reduce类
		job.setMapperClass(MyMapper.class);
		//job.setReducerClass(MyReducer.class);
		
		//设置map的输出的key  value
		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(Text.class);
		//创建连接hbase
		Connection connect = ConnectionFactory.createConnection(conf);
		//3.获取hbaseadmin对象
		Admin admin = connect.getAdmin();
		//4.建表
		String tablename="mingxing";
		if(!admin.tableExists(TableName.valueOf(tablename))){//判断表是否存在的  存在  true   不存在false
			HTableDescriptor htd=new HTableDescriptor(TableName.valueOf(tablename));
			HColumnDescriptor hcd1=new HColumnDescriptor("basicinfo".getBytes());
			HColumnDescriptor hcd2=new HColumnDescriptor("extrainfo".getBytes());
			htd.addFamily(hcd1);
			htd.addFamily(hcd2);
			admin.createTable(htd);
		}
		TableMapReduceUtil.initTableReducerJob(tablename, MyReducer.class, job,null,null,null,null,false);
		//指定输入路径
		FileInputFormat.addInputPath(job, new Path("hdfs://bd1804/mingxing.txt"));
		//输出路径
		FileSystem fs=FileSystem.get(conf);
		//将hdfs中core-site   hdfs-site放在src下
//这里的输出其实没有必要了,因为数据到了hbase中
//我这里测了一下,没有任何数据,可以删除
		//判断输出目录是否存在
		Path out=new Path("hdfs://bd1804/stuout01");
		if(fs.exists(out)){
			fs.delete(out, true);
		}
		FileOutputFormat.setOutputPath(job, out);
		
		//提交job
		job.waitForCompletion(true);
	}

}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/YZY_001/article/details/82764995

智能推荐

C# 调用 c 封装dll_c#调用c 的dll-程序员宅基地

文章浏览阅读747次。其中在定义嵌套结构体时需提前定义基础结构体。_c#调用c 的dll

Logstash中的四大插件_logstash 插件-程序员宅基地

文章浏览阅读380次。语法:(?举例:捕获10或11和长度的十六进制数的queue_id可以使用表达式(?filter {grok {如果表达式匹配失败,会生成一个tags字段,字段值为 _grokparsefailure,需要重新检查上边的match配置解析是否正确。_logstash 插件

数制转换及原码补码反码问题_原码10100001表示的十进制是-程序员宅基地

文章浏览阅读2k次。数制转换及原码补码反码问题标签(空格分隔): 面向对象技术与C++转载http://blog.sina.com.cn/s/blog_9b60c8e00100y47j.html和http://www.94cto.com/index/Article/content/id/59973.html 对文章进行整合和重新排版进制转换在计算机里,通常用数字后面紧跟一个英文字母来表示该数的数字,十进制一般用D,二_原码10100001表示的十进制是

Centos 7安装搜狗输入法_centos7怎么安装搜狗输入法-程序员宅基地

文章浏览阅读1.2w次,点赞32次,收藏125次。Centos 7安装搜狗输入法_centos7怎么安装搜狗输入法

RabbitMQ从入门到入土-程序员宅基地

文章浏览阅读137次。生产者:在绑定Exchange和Queue时,需要指定好routingKey,同时在发送消息时,也指定routingKey,只有routingKey一致时,才会把指定的消息路由到指定的Queue。消费者:让消费者关闭自动ack,并且设置消息的流控,最终实现消费者可以尽可能去多消费消息。生产者:和hello world 没什么区别,都是将消息发送到默认交换机。生产者:自行构建Exchange并绑定指定队列。

直方图均衡化_直方图均衡是由大变小的吗-程序员宅基地

文章浏览阅读2.9k次。直方图均衡化实际是缩小原图像中小概率像素的灰度等级范围,而拉长大概率像素的灰度等级范围,使得主要像素(有用像素)的对比度增加并减小极少像素(往往为无用数据)的灰度等级范围。以下是维基百科对直方图均衡化的叙述,原文转载自:http://zh.wikipedia.org/wiki/直方图均衡化。 直方图均衡化用来增强图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方_直方图均衡是由大变小的吗

随便推点

快人一步,X-DB如何实现极速DDL-程序员宅基地

文章浏览阅读78次。数据库DDL操作面临的问题互联网业务发展迅速,应用模式频繁更改是常态。相应地,数据库访问模式和schema也随之变化。DDL(Data Definition Language)是SQL的一类,主要作用是创建和更改数据的schema信息,最常见的操作包括:加减列、更改列类型、加减索引等。熟悉MySQL的同学都知道,在8.0以前,虽然Online DDL..._xhdddl

利用qwtplot3d库在QT界面中实现三维图形的绘制(VS2015 + Qt5.9.8)_qt绘制三维动图-程序员宅基地

文章浏览阅读3.2k次。1.环境配置从官网下载qwtplot3d的文件包(现在好像下载不了了,我这有0.2.7版本的)将压缩包解压到C盘根目录(注意不要包含中文路径)打开C:\qwtplot3d-0.2.7\qwtplot3d\qwtplot3d.pro文件执行qmake, 这步可能会报错,解决可参照此篇博文qmake成功后会在C:\qwtplot3d-0.2.7\build-qwtplot3d-Desktop_Qt_5_9_8_MSVC2015_64bit-Debug\lib文件夹下生成qwtplot3d.dll和q_qt绘制三维动图

Spring Cloud面试题(2020最新版)_spring cloud 造火箭面试题-程序员宅基地

文章浏览阅读255次。文章目录 为什么需要学习Spring Cloud 什么是Spring Cloud 设计目标与优缺点 设计目标 优缺点 Spring Cloud发展前景 整体架构 主要项目 Spring Cloud Config Spring Cloud Netflix Spring Cloud Bus Spring Cloud Consul Spring Cloud Security Spring Cloud Sleuth Sp..._spring cloud 造火箭面试题

Pycharm 主题字体推荐(亮色)_pycharm字体推荐-程序员宅基地

文章浏览阅读1.2w次。本文适用于 Pycharm Community 2021.3 版本,其他版本的小伙伴如遇到问题,可能需要查找更多相关资料处理。主题设置:File → Settings → Appearance & Behavior → Appearance → Theme → Windows 10 Light字体设置:File → Settings → Editor → Font → Source Code Pro..._pycharm字体推荐

JLX12864G液晶显示屏驱动_stm32 jlx12864-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏22次。使用STM32的HAL库驱动JLX12864G-109液晶显示屏。_stm32 jlx12864

vant步进器传值_Vant Stepper 步进器-程序员宅基地

文章浏览阅读856次。Vant Stepper 步进器步进器由增加按钮、减少按钮和输入框组成,用于在一定范围内输入、调整数字引入importVuefrom'vue';import{Stepper}from'vant';Vue.use(Stepper);基础用法通过v-model绑定输入值,可以通过change事件监听到输入值的变化exportdefault{data(){return{value..._vant 塞值