pig 将Hbase中表导出为CSV出现错误 高分!!! 求解!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pig 将Hbase中表导出为CSV出现错误 高分!!! 求解!!!相关的知识,希望对你有一定的参考价值。

Caused by: java.lang.RuntimeException: could not instantiate 'org.apache.pig.backend.hadoop.hbase.HBaseStorage' with arguments '[info:cf, loadKey true]'
at org.apache.pig.impl.PigContext.instantiateFuncFromSpec(PigContext.java:770)
at org.apache.pig.parser.LogicalPlanBuilder.buildLoadOp(LogicalPlanBuilder.java:885)
... 23 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.pig.impl.PigContext.instantiateFuncFromSpec(PigContext.java:738)
... 24 more
Caused by: java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.Scan.setCacheBlocks(Z)V
at org.apache.pig.backend.hadoop.hbase.HBaseStorage.initScan(HBaseStorage.java:429)
at org.apache.pig.backend.hadoop.hbase.HBaseStorage.<init>(HBaseStorage.java:370)
... 29 more
2017-12-12 16:31:26,939 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: Pig script failed to parse:
<file /opt/pig-0.16.0/tutorial/build/output/pigtmp/ExportHbase.pig, line 3, column 4> pig script failed to validate: java.lang.RuntimeException: could not instantiate 'org.apache.pig.backend.hadoop.hbase.HBaseStorage' with arguments '[info:cf, loadKey true]'

参考技术A REGISTER /usr/hdp/current/hbase-client/lib/htrace-core-3.1.0-incubating.jar
REGISTER /usr/hdp/current/pig-client/piggybank.jar;
x = LOAD 'hbase://CXXW_3M_XIAOXU' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('-loadKey true','0:ES_CXXW_3M_CC_CZCS,0:ES_CXXW_3M_CC_GQCS,0:ES_CXXW_3M_CC_PJYCZCS,0:ES_
CXXW_3M_CC_TPCS,0:ES_CXXW_3M_JY_TJDD_GQCS,0:ES_CXXW_3M_JY_TJDD_TPCS,0:ES_JCSX_RKSX_ZJLX');

STORE x INTO 'test-tbl-data.csv' USING PigStorage(',');
-loadKey true :是指定的rowkey

[root@hadoop1 ~]# pig -x mapreduce xiaoxu-ExportHbase.pig
17/04/05 17:16:32 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL
17/04/05 17:16:32 INFO pig.ExecTypeProvider: Trying ExecType : MAPREDUCE
17/04/05 17:16:32 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType
2017-04-05 17:16:32,109 [main] INFO org.apache.pig.Main - Apache Pig version 0.16.0.2.5.0.0-1245 (rexported) compiled Aug 26 2016, 02:07:35
2017-04-05 17:16:32,109 [main] INFO org.apache.pig.Main - Logging error messages to: /jboss/mwork/pig_1491383792107.log
2017-04-05 17:16:33,130 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file /jboss/.pigbootup not found
2017-04-05 17:16:33,244 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://j4-nwdx-004-17:8020
2017-04-05 17:16:34,133 [main] INFO org.apache.pig.PigServer - Pig Script ID for the session: PIG-xiaoxu-ExportHbase.pig-1d8de8e3-0c85-4256-b503-fd115aa9b81f
2017-04-05 17:16:34,500 [main] INFO org.apache.hadoop.yarn.client.api.impl.TimelineClientImpl - Timeline service address:
2017-04-05 17:16:34,602 [main] INFO org.apache.pig.backend.hadoop.PigATSClient - Created ATS Hook
2017-04-05 17:16:35,183 [main] INFO org.apache.pig.impl.util.SpillableMemoryManager - Selected heap (PS Old Gen) of size 699400192 to monitor. collectionUsageThreshold = 489580128, usageThreshold

s-s-rS 2008 R2 错误?仍然?动态隐藏列或 tablix 并导出为 CSV

【中文标题】s-s-rS 2008 R2 错误?仍然?动态隐藏列或 tablix 并导出为 CSV【英文标题】:s-s-rS 2008 R2 Bug? Still? Dynamically hiding column or tablix and exporting to CSV 【发布时间】:2015-07-14 19:11:16 【问题描述】:

我最初认为这将是一项简单的任务,但经过几个小时的研究,我正在阅读在将隐藏字段导出到 CSV 时可能存在 s-s-rS 错误,这无法实现?

我想要做什么:

我有一份包含几列的报告(比如 50 列)。我有一个 REPORT_VERSION 的参数下拉列表,允许用户选择“标准”(所有 50 列)或“快速”(只有 10 列)。我已经能够正确显示这 2 个版本,但是当我将(快速版本)导出到 CSV 时,它会显示所有列(和/或 tablix),而不是结果的样子。

我已经阅读并尝试过:

    如果我创建 2 个 tablix 并根据参数值隐藏一个,导出到 CSV 时仍会同时显示可见和隐藏的 tablix。

    如果我使用 =IIF(Globals!RenderFormat.Name="CSV", True, False) - 这不适用于 CSV 输出

    更改 DataElementOutput = NoOutput。这会隐藏 CSV 输出中的列或表,但不能根据参数值动态更改。

这可以通过 vbscript 在“自定义代码”部分完成吗?

我阅读的许多文章和线程都可以追溯到 2010-2012 年,希望现在有解决方案吗?我真的在这里。

我们将不胜感激。谢谢

【问题讨论】:

能否将所有列添加到一个矩阵并设置列的隐藏属性。 我已经尝试过了,我可以让报告根据版本吐出正确的结果 - 我无法弄清楚的问题是将报告导出到“CSV”。当我尝试这样做时,它会忽略隐藏的列并显示所有违背整个目的的列。我还尝试过使用 2 个不同的 tablixes 并隐藏其中一个表。一样。它适用于报告结果,但是当我导出到“CSV”时,它会显示两个 tablix,甚至是隐藏在结果中的那个。谢谢! 只是一个想法,但如果将 Express 列的表达式设置为类似 --> =IIF(Globals!RenderFormat.Name="CSV", "",qryMain!Fields. MyField.Value) 嗨 lrb - 我尝试了你的建议(即 =IIF(Globals!RenderFormat.Name="CSV", "",Fields!FIELD_TO_HIDE.Value) 但我收到错误“使用的隐藏表达式在 tablix 中返回的数据类型无效”。在这种情况下,FIELD_TO_HIDE 只是一个常规的 varchar 字段。不确定我是否正确地按照您的建议进行操作。谢谢您的回复! 【参考方案1】:

根据您的尝试 #2,我能够让它在 s-s-rS 2008 和 2012 中工作。我创建了一个带有数据源查询的虚拟报告

SELECT 'value1' as col1, 'value2' as col2

然后我将以下表达式添加到 Column Visibility 到 column2

=IIF(Globals!RenderFormat.Name="CSV", False, True)

请注意,truefalse 与您的示例相反。生成报告时,第 2 列被隐藏,但在导出为 CSV 时,第 2 列存在。

要将您的参数合并到可见性表达式中,您可以执行以下操作

=Switch(
    Globals!RenderFormat.Name="CSV", False,
    Parameters!REPORT_VERSION.Value = "Standard", False, 
    True, True
)

如果呈现为 CSV,或者如果“REPORT_VERSION”参数设置为“标准”,这会将列的隐藏属性设置为 false,否则隐藏该列。需要将此表达式添加到您要在“Express”版本的报告中隐藏的每一列的列可见性中。

编辑

好的,我现在理解这个问题并且可以复制它(我在概念上倒退了)。您可以将列的可见性显式设置为隐藏,并且它不会显示在 CSV 导出中。但是,当您尝试通过表达式控制此设置时,CSV 导出会忽略此设置。

基于数据的导出看起来由“DataElementOutput”属性控制。将此设置为“NoOutput”将从 CSV 输出中抑制该元素。不幸的是,它似乎不能由表达式控制。微软似乎没有任何改变这一点的计划(https://connect.microsoft.com/SQLServer/feedback/details/431073/s-s-rs-programatically-controlling-the-dataelementoutput-property)

Microsoft 连接请求提示创建两个 tablix,并根据提供的参数(即“Express”或“Standard”)过滤掉每个 tablix 的所有结果,另外根据参数值隐藏另一个 tablix。我试过这个,它工作了一半。虽然另一个 tablix 没有结果,但它仍然会导出列标题和一个空白行。

现在我很想知道这个问题有什么好的解决方案。

【讨论】:

嗨,谢恩!我非常感谢您对此的反馈。但是,我已经能够在报告结果中显示标准或快速版本(正确的列数) - 我正在努力解决的是当我导出到 CSV 时,快速版本(在结果中仅显示 10 列),导出所有列。我想要的是当我选择“标准”时显示所有 50 列并导出所有 50 列。当我选择“快速”显示 10 列并仅导出这 10 列时......问题是导出到“CSV”。这更有意义吗?在此先感谢,非常感谢您的帮助 Jay,我试图找到解决方案,但无法找到。我在对答案的编辑中提供了更多详细信息。 非常感谢您的跟进。不幸的是,这正是我最初发现的。 DataElementOutput 属性不能是动态的(带条件的表达式)并且 RenderFormat 表达式忽略 CSV ......因此这不可能完成?能够基于参数返回同一数据集的不同列似乎是一件非常标准的事情,我想只要它不是 CSV,这是可能的。我很困惑微软在这件事上丢了球,我不明白为什么。感谢您的帮助,希望有答案

以上是关于pig 将Hbase中表导出为CSV出现错误 高分!!! 求解!!!的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache Pig 将数据加载到 Hbase 表时,如何排除 csv 或文本文件中没有数据(只有空格)的列?

如何将 CSV/TSV 文件从 Pig 加载/导出到 Pandas?

Hbase - 表导出CSV数据

PIG - HBASE - 铸造值

使用 Pig 操作 CSV 文件

怎么将Python的运行结果导出为csv格式?