如何识别我的csv文件中的行导致我的批量加载映射减少作业在Apache Phoenix中失败

时间:2019-06-27 09:27:49

标签: apache csv mapreduce phoenix bulk-load

我正在尝试使用apache phoenix批量加载工具加载存储在hdfs上的csv文件,大约有1400亿行。

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/etc/hbase/conf:/etc/hadoop/conf
export HBASE_CONF_PATH=/etc/hbase/conf:/etc/hadoop/conf
hadoop jar phoenix-4.7.0.2.6.5.0-292-client.jar org.apache/phoenix.mapreduce.CsvBulkLoadTool -Ddfs.umaskmode=000 -zovh-mnode0,ovh-mnode1,ovh-mnode2,:2181:/hbase-secure --table <mytable> --input /user/hbase/<directory for sqoop import> -d \§  -e \\

但是它失败,并且在映射任务的80%时出错,总是说错误是在第1行开始发生的:

Error: java.lang.RuntimeException: java.lang.RuntimeException: java.io.IOException: (startline 1) EOF reached before encapsulated token finished

如何识别导致错误的csv中的行? yarn logs命令提供的日志文件太笼统。

我的csv是通过此sqoop导入在sql表上生成的,具有以下选项:

-D mapreduce.job.queuename=default --fields-terminated-by \§ --escaped-by \\  --enclosed-by '\"' --null-string 'null' --null-non-string '0'

我的sqoop自定义查询将清理功能应用于每个varchar字段,以确保我的csv不会失败。 “ lang”字段示例:

replace(replace(replace(replace(ifnull(lang,"null"),"\""," "),"\n"," "),"\r"," "),"§"," ")

bulkloadtool上用于跳过错误的选项“ -g”不起作用(已知错误)。

0 个答案:

没有答案