将数据从 HDFS 加载到 HBASE

Posted

技术标签:

【中文标题】将数据从 HDFS 加载到 HBASE【英文标题】:Loading data from HDFS to HBASE 【发布时间】:2014-04-29 04:42:28 【问题描述】:

我正在使用 Apache hadoop 1.1.1 和 Apache hbase 0.94.3。我想。 我写了猪脚本来达到这个目的。首先,我在 habse 中创建了 hbase 表,然后编写了 pig 脚本以。但它没有将数据加载到 hbase 表中。不知道穿到哪里去了。 以下是用于创建 hbase 表的命令:

创建表'mydata','mycf'

下面是从hdfs加载数据到hbase的pig脚本:

    A = LOAD '/user/hduser/Dataparse/goodrec1.txt' USING PigStorage(',') as (c1:int, c2:chararray,c3:chararray,c4:int,c5:chararray);   
    STORE A INTO 'hbase://mydata'
    USING org.apache.pig.backend.hadoop.hbase.HBaseStorage(
          'mycf:c1,mycf:c2,mycf:c3,mycf:c4,mycf:c5'); 

执行脚本后显示

2014-04-29 16:01:06,367 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 100% complete

2014-04-29 16:01:06,376 [main] ERROR org.apache.pig.tools.pigstats.PigStatsUtil - 1 map reduce job(s) failed!
2014-04-29 16:01:06,382 [main] INFO  org.apache.pig.tools.pigstats.SimplePigStats - Script Statistics:

HadoopVersion   PigVersion      UserId  StartedAt       FinishedAt      Features
1.1.1   0.12.0  hduser  2014-04-29 15:58:07     2014-04-29 16:01:06     UNKNOWN

Failed!

Failed Jobs:
JobId   Alias   Feature Message Outputs
job_201403142119_0084   A       MAP_ONLY        Message: Job failed! Error -           JobCleanup Task Failure, Task: task_201403142119_0084_m_000001     hbase://mydata,

Input(s):
Failed to read data from "/user/hduser/Dataparse/goodrec1.txt"

Output(s):
Failed to produce result in "hbase://mydata"

Counters:
Total records written : 0
Total bytes written : 0
Spillable Memory Manager spill count : 0
Total bags proactively spilled: 0
Total records proactively spilled: 0

Job DAG:
job_201403142119_0084


2014-04-29 16:01:06,382 [main] INFO   org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Failed!

请帮忙看看我哪里出错了?

【问题讨论】:

hadoop fs -ls /user/hduser/Dataparse/file.txt 显示什么?? file.txt 是逗号分隔值的文本文件,其内容为:15,,CO,5656,F 20,George11,MI,5555,M 1,8888a,FL,5899,F 我不是在询问文件的内容。我只想要 hadoop fs -ls /user/hduser/Dataparse/goodrec1.txt 的输出。请连同命令一起复制确切的输出。 hadoop fs -cat /user/hduser/Dataparse/goodrec1.txt 15,,CO,5656,F 20,George11,MI,5555,M 1,8888a,FL,5899,F 您能提供在hbase shell 中运行的list 命令的结果吗? 【参考方案1】:

您在输出中为 hbase 指定了太多列。您有 5 个输入列和 5 个输出列,但 HBaseStorage 要求第一列是行键,因此输出中应该只有 4 个

【讨论】:

使用 pig 脚本,如果我这样做,A = LOAD '/user/hduser/Dataparse/goodrec1.txt' USING PigStorage(',') as (c1:int, c2:chararray,c3:chararray ,c4:int,c5:chararray);转储 A;我可以看到 goodrec1.txt 记录。我也有文件的 -rw-r--r-- 权限。 在您发表评论后我再次查看并用实际问题更新了我的答案 你好,我是 hbase 新手,如何在输出中指定 hbase 输出列。 将使用 org.apache.pig.backend.hadoop.hbase.HBaseStorage('mycf:c1,mycf:c2,mycf:c3,mycf:c4,mycf:c5') 更改为使用 org. apache.pig.backend.hadoop.hbase.HBaseStorage('mycf:c1,mycf:c2,mycf:c3,mycf:c4') 你可能不想使用 int 作为行键,因为你会创建热点。 嗨,如果我运行以下查询,我会收到如下错误:查询:A = LOAD '/user/hduser/Dataparse/goodrec1.txt' USING PigStorage(',') as c1:int,c2:chararray,c3:chararray, c4:int, c5:chararray) ; STORE A INTO 'hbase://mydata' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage( 'mycf:c1,mycf:c2,mycf:c3,mycf:c4'); 错误:ERROR org.apache.pig.tools.pigstats.PigStatsUtil - 1 map reduce job(s) failed!

以上是关于将数据从 HDFS 加载到 HBASE的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 hdfs 导入到 hbase 是不是会创建一个副本

如何将百万歌曲数据集等大数据集加载到 BigData HDFS 或 Hbase 或 Hive 中?

如何将 HBase 表以 Parquet 格式移动到 HDFS?

使用 talend 或 sqoop 将数据从 hbase 导入 hdfs

将平面数据文件从边缘设备摄取到 HDFS 并进行处理

hbase 从hdfs上读取数据到hbase中