multidelimitersorde设置

rur96b6h  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(402)

我尝试在amazonaws上emr中的配置单元作业的表插入中使用多分隔符。如本链接所述。文件的分隔符为“|”。
https://cwiki.apache.org/confluence/display/hive/multidelimitserde
然而,我最终不得不使用。。。

  1. ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'

而不是记录在案的。。。

  1. ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.MultiDelimitSerDe'

为了不让它给我这个错误。

  1. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Cannot validate serde: org.apache.hadoop.hive.serde2.MultiDelimitSerDe

好 啊。因此,当我没有得到这个错误时,通过添加.contrib,我得到了这个错误,这个错误是由org.apache.hadoop.hive.ql.metadata.hiveexception:java.lang.classnotfoundexception:class org.apache.hadoop.hive.contrib.serde2.multidivideserde notfound found引起的

  1. Status: Failed
  2. Vertex failed, vertexName=Map 1, vertexId=vertex_1548264520414_0027_1_00, diagnostics=[Task failed, taskId=task_1548264520414_0027_1_00_000021, diagnostics=[TaskAttempt 0 failed, info=[Error: Error while running task ( failure ) : attempt_1548264520414_0027_1_00_000021_0:java.lang.RuntimeException: java.lang.RuntimeException: Map operator initialization failed
  3. at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor(TezProcessor.java:211)
  4. at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.run(TezProcessor.java:168)
  5. at org.apache.tez.runtime.LogicalIOProcessorRuntimeTask.run(LogicalIOProcessorRuntimeTask.java:370)
  6. at org.apache.tez.runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:73)
  7. at org.apache.tez.runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:61)
  8. at java.security.AccessController.doPrivileged(Native Method)
  9. at javax.security.auth.Subject.doAs(Subject.java:422)
  10. at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1840)
  11. at org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable.java:61)
  12. at org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable.java:37)
  13. at org.apache.tez.common.CallableWithNdc.call(CallableWithNdc.java:36)
  14. at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  15. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  16. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  17. at java.lang.Thread.run(Thread.java:748)
  18. Caused by: java.lang.RuntimeException: Map operator initialization failed
  19. at org.apache.hadoop.hive.ql.exec.tez.MapRecordProcessor.init(MapRecordProcessor.java:354)
  20. at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor(TezProcessor.java:184)
  21. ... 14 more
  22. Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassNotFoundException: Class org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe not found
  23. at org.apache.hadoop.hive.ql.exec.MapOperator.getConvertedOI(MapOperator.java:328)
  24. at org.apache.hadoop.hive.ql.exec.MapOperator.setChildren(MapOperator.java:420)
  25. at org.apache.hadoop.hive.ql.exec.tez.MapRecordProcessor.init(MapRecordProcessor.java:286)
  26. ... 15 more

所以我一直在读,你必须添加.jar文件。
https://community.hortonworks.com/questions/82189/hive-cannot-see-jar.html
所以我尝试了各种方法来让它发挥作用。它说它正在将它添加到类路径中。

  1. hive> add jar /usr/lib/hive/lib/hive-contrib-2.3.3-amzn-1.jar
  2. > ;
  3. Added [/usr/lib/hive/lib/hive-contrib-2.3.3-amzn-1.jar] to class path
  4. Added resources: [/usr/lib/hive/lib/hive-contrib-2.3.3-amzn-1.jar]
  5. hive> add jar /usr/lib/hive/lib/hive-contrib.jar
  6. > ;
  7. Added [/usr/lib/hive/lib/hive-contrib.jar] to class path
  8. Added resources: [/usr/lib/hive/lib/hive-contrib.jar]
  9. hive> exit;

所以我不知道该怎么办。尽管我添加了hive contrib的.jar文件,但它的行为似乎不在类路径中。我也试过跑步。。。

  1. export HADOOP_USER_CLASSPATH_FIRST=true

就在这里。。。
如何在hive中包含jar(amazon hadoop env)
但这也不能解决问题。
如何对aws上的配置单元作业使用多重分隔符serde属性?
谢谢您。

yacmzcpb

yacmzcpb1#

我不能让塞德工作。相反,我很幸运,分隔符在管道的两边都有引号。所以看起来像“|”。这会将引号之间的值转换为字符串,因此这些列值中的附加管道不会充当分隔符。
“测试|测试2”|“测试3 |测试4 |测试5”|“测试6”
你可以在下面的链接中看到解释。谈论它的部分在评论中,而不是文章中。
https://www.ericlin.me/2015/07/how-to-create-a-hive-multi-character-delimitered-table/
如果分隔符周围没有这些引号,我不确定如何使用多分隔符。特别是如果我的任何一个字段中都有引用,但是经过检查,在数十亿行中,没有一个引用。

相关问题