这属于Hbase的一个例子,不过Hbase的例子有点问题,需要更改下。
其实我感觉Hbase属于一个BigTable,感觉和xls真的很像,闲话不说了,上code才是王道。
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
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.mapreduce.TableReducer;
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.input.TextInputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.log4j.Logger;
/**
* Sample Uploader MapReduce
* <p>
* This is EXAMPLE code. You will need to change it to work for your context.
* <p>
* Uses {@link TableReducer} to put the data into HBase. Change the InputFormat
* to suit your data. In this example, we are importing a CSV file.
* <p>
* <pre>row,family,qualifier,value</pre>
* <p>
* The table and columnfamily we're to insert into must preexist.
* <p>
* There is no reducer in this example as it is not necessary and adds
* significant overhead. If you need to do any massaging of data before
* inserting into HBase, you can do this in the map as well.
* <p>Do the following to start the MR job:
* <pre>
* ./bin/hadoop org.apache.hadoop.hbase.mapreduce.SampleUploader /tmp/input.csv TABLE_NAME
* </pre>
* <p>
* This code was written against HBase 0.21 trunk.
*/
public class SampleUploader {
public static Logger loger = Wloger.loger;
private static final String NAME = "SampleUploader";
static class Uploader
extends Mapper<LongWritable, Text, ImmutableBytesWritable, Put> {
private long checkpoint = 100;
private long count = 0;
@Override
public void map(LongWritable key, Text line, Context context)
throws IOException {
// Input is a CSV file
// Each map() is a single line, where the key is the line number
// Each line is comma-delimited; row,family,qualifier,value
// Split CSV line
String [] values = line.toString().split(",");
if(values.length != 4) {
return;
}
// Extract each value
byte [] row = Bytes.toBytes(values[0]);
byte [] family = Bytes.toBytes(values[1]);
byte [] qualifier = Bytes.toBytes(values[2]);
byte [] value = Bytes.toBytes(values[3]);
loger.info(values[0]+":"+values[1]+":"+values[2]+":"+values[3]);
// Create Put
Put put = new Put(row);
put.add(family, qualifier, value);
// Uncomment below to disable WAL. This will improve performance but means
// you will experience data loss in the case of a RegionServer crash.
// put.setWriteToWAL(false);
try {
context.write(new ImmutableBytesWritable(row), put);
} catch (InterruptedException e) {
e.printStackTrace();
loger.error("write到hbase 异常:",e);
}
// Set status every checkpoint lines
if(++count % checkpoint == 0) {
context.setStatus("Emitting Put " + count);
}
}
}
/**
* Job configuration.
*/
public static Job configureJob(Configuration conf, String [] args)
throws IOException {
Path inputPath = new Path(args[0]);
String tableName = args[1];
Job job = new Job(conf, NAME + "_" + tableName);
job.setJarByClass(Uploader.class);
FileInputFormat.setInputPaths(job, inputPath);
job.setInputFormatClass(TextInputFormat.class);
job.setMapperClass(Uploader.class);
// No reducers. Just write straight to table. Call initTableReducerJob
// because it sets up the TableOutputFormat.
loger.error("TableName:"+tableName);
TableMapReduceUtil.initTableReducerJob(tableName, null, job);
job.setNumReduceTasks(0);
return job;
}
/**
* Main entry point.
*
* @param args The command line parameters.
* @throws Exception When running the job fails.
*/
public static void main(String[] args) throws Exception {
Configuration conf = HBaseConfiguration.create();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if(otherArgs.length != 2) {
System.err.println("Wrong number of arguments: " + otherArgs.length);
System.err.println("Usage: " + NAME + " <input> <tablename>");
System.exit(-1);
}
Job job = configureJob(conf, otherArgs);
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
Map/Reduce的输入/输出就不说了,不懂的,可以看hadoop专栏去.
[这个任务调用和上一个IndexBuilder有些不同哦,具体的可以参照上一个例子,相同点:都只有map任务]
xls内容如下:
key3,family1,column1,xls1
key3,family1,column2,xls11
key4,family1,column1,xls2
key4,family1,column2,xls12
这是csv格式的,如果是xls是可以导为csv格式的,具体可以google一下.
运行命令如下:
bin/hadoop jar SampleUploader.jar SampleUploader /tmp/input.csv 'table1'
这里的'table1'是上一遍IndexBuilder的时候建的表,表就使用上一张表[懒]
注意,这里使用的文件需要提交到hdfs上,否则会提示找不到,因为map/reduce是使用的是hdfs的文件系统.
分享到:
相关推荐
要实现在Java中从Hive到HBase的快速导数据,我们需要遵循以下步骤: 1. **配置环境**:确保你已经安装了Hadoop、Hive和HBase,并配置了相应的环境变量。同时,确保Hive和HBase能够正常运行,并且它们的配置文件(如...
导入数据到HBase通常通过HBase的客户端API实现,这些API提供了连接到HBase集群、创建表、插入数据等功能。例如,在Java中,我们可以使用HBase的Admin API创建表,然后使用Put对象添加数据。在导入过程中,需要将JSON...
利用sqoop把mysql数据导入到hbase中,建立phoenix与hbase的映射,用phoenix jdbc操作hbase!达到sql操作nosql!
标题中的“MR程序Bulkload数据到hbase”指的是使用MapReduce(MR)程序批量加载(Bulkload)数据到HBase数据库的过程。MapReduce是Apache Hadoop框架中的一个关键组件,用于处理和生成大规模数据集。而HBase是一个...
首先,Sqoop不仅支持将数据从关系型数据库如MySQL导入到HDFS或Hive,还能直接导入到HBase。关键在于正确使用参数: 1. `--hbase-table`:此参数用于指定导入的数据应存储在哪个HBase表中。不指定的话,数据将被导入...
4. **数据加载**:将转换后的数据加载到HBase中。需要注意的是,这里需要配置好HBase的相关参数,如HBase表的名称、列族等信息。 5. **运行作业**:设置作业参数,运行作业将数据从MySQL迁移到HBase。 #### 四、...
接下来,我们要将读取到的HBase数据写入HDFS。Hadoop提供了`FileSystem`类来操作HDFS,我们可以使用`FSDataOutputStream`来写入文件。以下是一个简单的示例: ```java import org.apache.hadoop.conf.Configuration...
### 知识点详解 #### 一、HBase与MySQL数据抽取概述 1. **HBase简介**:HBase是...通过以上步骤,我们可以成功地将MySQL中的数据抽取到HBase表中,从而利用HBase的高性能和大数据处理能力来优化数据访问和分析流程。
1. HBase到HDFS:可以通过HBase的Export工具,将HBase表的数据导出到HDFS文件,然后进行进一步处理或备份。 2. HDFS到HBase:可以使用HBase的Import工具,将HDFS上的数据文件加载到HBase表中。此过程通常包括预处理...
《HBase数据可视化系统构建详解》 在大数据领域,HBase作为一款分布式列式数据库,因其高并发、低延迟和大规模存储的特点,被广泛应用在实时数据处理和分析中。然而,对于非技术人员来说,直接操作HBase命令行进行...
HBase 和 Hadoop 数据块损坏处理 HBase 和 Hadoop 数据块损坏是非常常见的问题,可能会导致数据丢失、集群崩溃等严重后果。因此,了解如何处理 HBase 和 Hadoop 数据块损坏是非常重要的。本文将介绍 HBase 和 ...
标题中的“hadoop的mapreduce把oracle/mysq导入到hbase和hdfs中的程序”指的是一项数据处理任务,利用Hadoop的MapReduce框架,将关系型数据库(如Oracle和MySQL)中的数据高效地迁移至分布式存储系统HDFS(Hadoop ...
在IT行业中,数据库之间的数据迁移是一项常见的任务,特别是在大数据领域,如从传统的SQL数据库(如MySQL)迁移到分布式NoSQL数据库(如HBase)。本文将详细介绍如何使用Java代码实现这一过程,包括样例MySQL表和...
这种方法适用于数据量大的情况(大于 4TB),通过 Hive 将数据转换为 HFile,然后使用 bulkload 将数据导入到 HBase 中。 首先,需要将 Hive 数据转换为 HFile: CREATE TABLE hbase_hfile_table(key int, name ...
将HBase的数据同步到Solr,可以实现快速的搜索功能,这对于数据分析和实时查询场景尤其重要。 为了实现HBase到Solr的数据同步,我们可以使用HBase Indexer,这是一个由NGDATA开发的开源项目,它简化了这个过程,...
通过 Sqoop导出到Hbase,需要先将数据导入HDFS,再用Hbase的Import命令将数据加载到Hbase表中。 - Hadoop MapReduce:可以编写自定义的MapReduce作业,将RDBMS数据读取、转换并写入Hbase。这种方法灵活性高,但开发...
在本文档中,我们将深入探讨如何使用Java API与...总的来说,通过Java API与HBase交互涉及到配置连接、管理表结构和批量处理数据。理解这些基本操作对于高效地使用HBase至关重要,特别是在大数据处理和分析的场景下。
出现此问题时使用:java.lang.NullPointerException at org.json.JSONObject.(JSONObject.java:144) at org.apache.sqoop.util.SqoopJsonUtil.getJsonStringforMap(SqoopJsonUtil.java:43) at org.apache.sqoop....
Hadoop数据迁移是指将存储在Hadoop分布式文件系统(HDFS)中的数据转移到其他存储系统中,例如HBase。HBase是一个基于Hadoop的分布式数据库,它主要用于随机实时读/写访问超大表,适用于存储半结构化或非结构化稀疏...
基于数据冗余的HBase合并机制研究_HBase列式数据库的所有操作均以追加数据的方式写入,导致其合并机制占用资源过多,影响系统读性能。