OneCoder只是一个初学者,记录的只是自己的一个过程。不足之处还望指导。
看网上说导入大量数据,用bulk load的方式效率比较高。bulk load可以将固定格式的数据文件转换为HFile文件导入,当然也可以直接导入HFile文件。所以OneCoder最开始考虑的生成HFile文件供HBase导入,不过由于手太新,一直没有搞定。参考了很多网上的代码也没跑通。暂时搁浅。
后来OneCoder采用了,生成普通的数据格式文件,然后用过imporsttsv命令导入的方式成功。生成数据文件代码如下:
01.
private
static
final
String PATH =
"F:/data.txt"
;
02.
03.
/**
04.
* @param args
05.
* @author lihzh
06.
* @alia OneCoder
07.
* @blog http://www.it165.net
08.
* @throws IOException
09.
* @date 2012-11-14 下午4:51:22
10.
*/
11.
public
static
void
main(String[] args)
throws
IOException {
12.
long
startTime = System.currentTimeMillis();
13.
File dataFile = getFile();
14.
FileWriter writer =
null
;
15.
try
{
16.
writer =
new
FileWriter(dataFile);
17.
int
timeCount =
1
;
18.
int
resourceCount =
1
;
19.
for
(
int
j =
0
; j < timeCount; j++) {
20.
long
timeStamp = System.currentTimeMillis();
21.
for
(
int
i =
0
; i < resourceCount; i++) {
22.
UUID uuid = UUID.randomUUID();
23.
String rowKey = uuid.toString() +
"_"
+ timeStamp;
24.
Random random =
new
Random();
25.
String cpuLoad = String.valueOf(random.nextDouble())
26.
.substring(
0
,
4
);
27.
String memory = String.valueOf(random.nextDouble())
28.
.substring(
0
,
4
);
29.
StringBuilder builder =
new
StringBuilder();
30.
builder.append(rowKey).append(
"\t"
).append(cpuLoad)
31.
.append(
"\t"
).append(memory).append(
"\t"
).append(uuid.toString()).append(
"\t"
).append(timeStamp);
32.
writer.append(builder.toString());
33.
if
((i +
1
) * (j +
1
) < timeCount * resourceCount) {
34.
writer.append(
"\r"
);
35.
}
36.
}
37.
}
38.
long
endTime = System.currentTimeMillis();
39.
System.out.println(
"Cost Time: "
+ (endTime - startTime));
40.
}
catch
(IOException e) {
41.
e.printStackTrace();
42.
}
finally
{
43.
writer.close();
44.
}
45.
}
46.
47.
/**
48.
* 得到一个新文件
49.
*
50.
* @return
51.
* @author lihzh
52.
* @date 2012-11-14 下午4:53:31
53.
*/
54.
private
static
File getFile() {
55.
File file =
new
File(PATH);
56.
if
(!file.exists()) {
57.
try
{
58.
file.createNewFile();
59.
}
catch
(IOException e) {
60.
e.printStackTrace();
61.
}
62.
}
63.
return
file;
64.
}
文件格式大致如下:
29611690-69cb-4749-8bd5-be75793d6611_1352968490061 0.41 0.34 29611690-69cb-4749-8bd5-be75793d6611 1352968490061
然后将文件上传到HDFS中,
hadoop fs -put /home/admin/Desktop/data.txt /test
转换成HFile格式存储 www.it165.net
hadoop jar hbase-version.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,c1,c2 -Dimporttsv.bulk.output=tmp hbase_table hdfs_file 生成HFile文件。其中c1,c2
是列名,格式为:列族:列名
然后,导入到HBase中:
hadoop jar hbase-version.jar completebulkload /user/hadoop/tmp/cf hbase_table
这里的路径都是hdfs的路径。
相关推荐
4. **批量加载到HBase**:HBase提供了Bulk Load功能,可以将数据批量导入到HBase表中,从而提高导入效率。使用HBase的Admin API创建表或检查表是否存在,然后使用HFileOutputFormat将处理后的数据写入HDFS的临时目录...
通过学习和理解这些代码,你可以更好地掌握如何在实际生产环境中使用MapReduce进行HBase的数据批量导入。在具体操作时,需要注意数据的正确性、性能优化以及错误处理,以确保数据加载的稳定性和高效性。
这篇博客“Hbase调用Java API实现批量导入操作”聚焦于如何利用Java编程语言高效地向HBase中批量导入数据。在这个过程中,我们将探讨以下几个关键知识点: 1. **HBase架构**: HBase是基于列族的存储模型,数据被...
- **Bulk Load机制**:批量加载能避免多次的小规模写入,显著提高导入效率,因为它利用HBase的RegionServer直接将数据加载到HBase表,减少了网络传输和MapReduce作业的开销。 - **Hadoop MapReduce**:虽然HBase...
此外,HBase还提供了批量操作的工具,如HBase的`BulkLoad`功能,它可以将预先格式化的数据文件直接加载到HFile中,进一步提升写入速度。这个过程通常包括数据预处理、生成SequenceFile、上传到HDFS以及执行`...
如果数据量非常大,可以使用HBase的批处理接口`TableOutputFormat`和`BulkLoad`功能,将数据先写入HDFS的临时目录,然后使用`HFile`格式进行批量导入,提高效率。 5. **错误处理和重试机制**:在导入过程中,可能会...
如果数据量很大,推荐使用 bulk load 功能,它可以显著提高导入速度。 ```bash hbase(main):002:0> put 'ORDER_INFO', 'row_key', 'ORDER_DETAILS:ORDER_ID', 'order_id_value' hbase(main):003:0> put 'ORDER_...
Bulk Load是将大量数据高效导入HBase的一种方法,它可以显著提高数据导入速度。Filters则可以帮助我们实现复杂的数据筛选,以满足特定的查询需求。 总之,《HBase权威指南》的源代码为学习者提供了宝贵的实践材料,...
- 使用Bulk Load等工具快速导入大量数据。 - **节点管理**: - 如何添加或删除集群中的节点,保证系统的稳定运行。 - **集群调节**: - 通过调整配置参数优化集群性能。 #### 七、案例研究 - **社交网络应用**: ...
此外,HBase还支持实时查询和批量导入数据,这对于大数据处理非常有用。我们可以使用HBase的Scanner API进行实时查询,或者通过HBase的Bulk Load功能批量加载数据,以提高效率。 最后,对于监控和调试,SpringBoot...
3. **批量加载(Bulk Load)**:将数据预先加载到HDFS,然后一次性导入HBase,提高效率。 ### 四、HBase优化 1. **行键设计**:合理设计行键,避免热点问题,例如使用反向时间戳+哈希值的方式。 2. **列族和列的...
7. **Bulk Load**:HBase支持批量加载大量数据,这可以通过MapReduce任务实现,从而高效地导入数据到表中。 8. **Secondary Index**:虽然HBase不直接支持二级索引,但可以通过实现自定义的Filter或者使用 ...
另一种导入数据的方法是使用Hbase的importTSV工具配合BulkLoad功能。首先,通过Hive查询生成TSV格式的数据文件,然后在Hbase中创建对应的表结构,并设置列族和压缩格式。接着,使用importTSV生成Hfile文件,指定分隔...
此外,HBase还支持批量操作,如Bulk Load,提高数据导入效率。 五、HBase索引与查询 HBase的查询主要依赖于行键,可以通过RowKey进行快速定位。为了提高查询效率,HBase提供了Secondary Index和Filter机制。...
8. **Bulk Load**:HBase 1.2.0版本提供了批量加载功能,允许高效地将大量数据导入到表中,这对于大数据初始化或更新非常有效。 9. **Region分裂与合并**:随着数据的增长,Region会自动分裂以保持负载均衡。当...
3. **Bulk Load**:使用HBase的`importtsv`工具或者自定义程序,将HFile批量导入到已创建的表中。这一步通常比单个Put操作快得多,因为它利用了HBase的RegionServer内部机制直接写入HFile,避免了网络传输的开销。 ...
最后,书中还介绍了HBase的高级特性,如Coprocessors(协处理器)、Filters(过滤器)和Bulk Load(批量加载),这些特性可以帮助开发人员实现更复杂的数据处理逻辑和更高的数据导入效率。 通过阅读《HBase in ...
a) **导入**:可以从文件或目录导入数据,通常使用HBase的批处理工具如`hbase bulk load`。 b) **批量命令执行**:通过`put`命令批量写入数据,提高效率。 c) **导出**:可以导出表的所有数据或者选择性地导出...