hadoop 将数据从配置单元导出到AWS Redshift

uqjltbpv  于 2022-11-01  发布在  Hadoop
关注(0)|答案(1)|浏览(243)

我尝试使用hive -e导出1 TB的hive数据,因为我们没有访问hdfs文件系统并将数据加载到Redshift的选项。数据已被导出到多个小文件中,如30000+小PARQUET文件,总计1 TB的数据。将数据加载到Redshift时,会引发错误

  1. String contains invalid or unsupported UTF8 codepoints. Bad UTF8 hex sequence: e9 (error 2)

已尝试的选项:

  1. ACCEPTINVCHARS --不适用于 parquet 格式
    1.尝试使用Athena -〉Glue cralwer -〉Redshift加载。这不是简单的解决方案,因为我们必须在40多个表中做同样的事情。
    如何建立一个管道从配置单元复制数据并加载到Redshift。S3加载也可以跳过。
jfewjypa

jfewjypa1#

由于我不是HiveMaven,所以一直没有回答。问题是文件的字符编码。Redshift使用多字节UTF8(与大多数互联网一样),并且这些文件的编码方式不同(可能是来自Windows的UTF 16,但这只是猜测)。我相信Hive可以对这两个字符集进行操作(通过配置SerDe,但我不是HiveMaven)。我不知道的是Hive是否可以读取一种编码并导出为另一种编码。
当我使用Hive时,它保留了输出的输入编码。因此,一个选项是将文件编码从源系统更改为UTF8。过去,我在mySQL中这样做过-从mySQL导出UTF8,并通过Hive馈送到Redshift。这是最简单的方法,因为它只是配置一个已经存在的步骤。
另一种方法是将文件从一种编码转换为另一种编码。Linux命令iconv可以完成此操作,或者您可以为Lambda编写一些代码。此步骤可以插入在Hive之前或之后。您需要知道当前文件的编码,该编码应该在文件BOM中。您可以使用Linux命令'file '读取此编码。
就像我上面说的,如果Hive可以做转换,那就太好了。我只是不知道它是否能做到。
底线-问题是Hive正在运行的文件编码。这些需要更改为UTF8的Redshift。这可以在源系统上完成,使用转换工具,或可能在Hive中。
如果您想了解更多有关该主题的信息,请参阅:https://github.com/boostcon/cppnow_presentations_2014/blob/master/files/unicode-cpp.pdf

相关问题