将数据从 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.txt15,,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?