我正在尝试使用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”不起作用(已知错误)。