hbase与hdfs的交互
hdfs和hbase的交互,和写MapReduce程序类似,只是需要修改输入输出数据和使用hbase的javaAPI对其进行操作处理即可
public class HBaseToHdfs extends ToolRunner implements Tool {
private Configuration configuration;
//配置文件需要配置的属性
private static final String HDFS_NAME = "fs.defaultFS";
private static final String HDFS_VALUE = "hdfs://mycluster";
private static final String MAPREDUCE_NAME = "mapreduce.framework.name";
private static final String MAPREDUCE_VALUE = "yarn";
private static final String HBASE_NAME = "hbase.zookeeper.quorum";
private static final String HBASE_VALUE = "qiaojunlong3:2181,qiaojunlong4:2181,qiaojunlong5:2181";
//获取hbase表的扫描对象
private Scan getscan() {
return new Scan();
}
@Override
public int run(String[] args) throws Exception {
getConf();
//获取job实例对象
Job job = Job.getInstance(configuration, "copy_move");
//map/reduce的class链接
job.setMapperClass(hbase_To_Hdfs.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(NullWritable.class);
//设置输入输出
//由hbase导数据到hdfs故输入端需要使用TableMapReduceUtil类
TableMapReduceUtil.initTableMapperJob("ns3:t5", getscan(), hbase_To_Hdfs.class, Text.class, NullWritable.class, job);
FileOutputFormat.setOutputPath(job, new Path(args[0]));
//设置jar包
job.setJarByClass(HBaseToHdfs.class);
//提交作业
int b = job.waitForCompletion(true) ? 0 : 1;
return b;
}
@Override
public void setConf(Configuration configuration) {
configuration.set(HDFS_NAME, HDFS_VALUE);
configuration.set(MAPREDUCE_NAME, MAPREDUCE_VALUE);
configuration.set(HBASE_NAME, HBASE_VALUE);
this.configuration = configuration;
}
@Override
public Configuration getConf() {
return configuration;
}
public static void main(String[] args) throws Exception {
ToolRunner.run(HBaseConfiguration.create(),new HBaseToHdfs() , args);
}
// 创建map程序
private static Text mkey = new Text();
static class hbase_To_Hdfs extends TableMapper<Text, NullWritable> {
@Override
protected void map(ImmutableBytesWritable key, Result value, Context context) throws IOException, InterruptedException {
//定义字符串拼接
StringBuffer stringBuffer = new StringBuffer();
/**
* 使用value获取扫描器,获取hbase表的列名/列值等信息
* 使用StringBuffer来对需要的信息进行字符串拼接
*/
CellScanner cellScanner = value.cellScanner();
while (cellScanner.advance()) {
Cell cell = cellScanner.current();
stringBuffer.append(new String(CellUtil.cloneValue(cell))).append("\t");
}
mkey.set(stringBuffer.toString());
context.write(mkey, NullWritable.get());
}
}
}
hbase与hdfs的交互的更多相关文章
- Hbase写入hdfs源码分析
版权声明:本文由熊训德原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/258 来源:腾云阁 https://www.qclo ...
- HBase -- 基于HDFS的开源分布式NoSQL数据库
HBase(Hadoop Database)是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,我们可以利用HBase技术在廉价的PC上搭建起大规模结构化存储集群.同Google的Bigtable ...
- HBase从hdfs导入数据
需求:将HDFS上的文件中的数据导入到hbase中 实现上面的需求也有两种办法,一种是自定义mr,一种是使用hbase提供好的import工具 一.hdfs中的数据是这样的 每一行的数据是这样的id ...
- HBase、HDFS和MapReduce架构异同简解
HBase.HDFS和MapReduce架构异同 .. HBase(公司架构模型) HDFS2.0(公司架构模型) MR2.0(公司架构模型) MR1.0(公司架构模型) 中央 HMaster Nam ...
- hbase+hadoop+hdfs集群搭建 集成spring
序言 最近公司一个汽车项目想用hbase做存储,然后就有了这篇文字,来,来,来, 带你一起征服hbase,并推荐一本书<hbase权威指南> 这是一本极好的hbase入门书籍,我花了一个晚 ...
- hbase 从hdfs上读取数据到hbase中
<dependencies> <dependency> <groupId>org.apache.hbase</groupId> <artifact ...
- HBase 在HDFS 上的目录树
总所周知,HBase 是天生就是架设在 HDFS 上,在这个分布式文件系统中,HBase 是怎么去构建自己的目录树的呢? 这里只介绍系统级别的目录树. 一.0.94-cdh4.2.1版本 系 ...
- Kafka+Storm写入Hbase和HDFS
1.Storm整合Kafka 使用Kafka作为数据源,起到缓冲的作用 // 配置Kafka订阅的Topic,以及zookeeper中数据节点目录和名字 String zks = KafkaPrope ...
- sqoop:mysql和Hbase/Hive/Hdfs之间相互导入数据
1.安装sqoop 请参考http://www.cnblogs.com/Richardzhu/p/3322635.html 增加了SQOOP_HOME相关环境变量:source ~/.bashrc ...
随机推荐
- NVMe Windows 支持情况
From NVMe 官网: Windows Driver – Microsoft Inbox • Closed source driver (Microsoft)• Inbox driver to W ...
- c 判断是否为非控制字符
#include <stdio.h> #include <wctype.h> int main () { ; wchar_t str[] = L"first line ...
- Pytest学习笔记(二) 用例执行规则
在用pytest执行用例时,可以按照如下场景来执行 1.执行目录及其子目录下的所有用例 pytest filename\ 2.执行某一个py文件下的用例 pytest filename.py 3.-k ...
- Codeforces 1246D/1225F Tree Factory (构造)
题目链接 https://codeforces.com/contest/1246/problem/D 题解 首先考虑答案的下界是\(n-1-dep\) (\(dep\)为树的深度,即任何点到根的最大边 ...
- C#调用新浪微博API
WebRequest wq = WebRequest.Create(this.address); HttpWebRequest hq = wq as HttpWebRequest; string us ...
- nvm临时版本和永久版本
nvm use 8.15.1//临时版本 nvm alias default 8.15.1//永久版本
- django 快速搭建blog(三)
http://www.cnblogs.com/fnng/p/3737964.html 引用自此博客 创建blog的公共部分 从Django的角度看, 一个页面 具有三个典型的组件: 一个模板(temp ...
- python Telnet通讯
摘要: python中telnetlib模块的使用: http://blog.csdn.net/five3/article/details/8099997 python实现telnet: http:/ ...
- Python 串口通讯
摘要: pyserial module: https://github.com/tbusf/pyserial Python使用pyserial进行串口通信:http://blog.csdn.net/l ...
- leetcode312 戳气球
动态规划 time O class Solution { public: int maxCoins(vector<int>& nums) { nums.insert(nums.be ...