执行批量加载数据命令:
hadoop jar phoenix-4.8.0-cdh5.8.0-client.jar org.apache.phoenix.mapreduce.CsvBulkLoadTool \
--table wndb.TEST --input /user/hdfs/test.csv -delimiter '$' --ignore-errors
MapReduce都跑完了, 最后出现了如下错误信息:
Exception in thread "main" java.io.FileNotFoundException: Bulkload dir /tmp/8c3d200d-a19f-4035-801e-4d766fec43db/WNDB.TEST not found
猜测原因:
1. hdfs故障, 导致临时文件丢失
2. 有后台进程正在清理临时文件
执行命令查看临时文件
hdfs dfs -ls /tmp/8c3d200d-a19f-4035-801e-4d766fec43db/
结果是确是没有 WNDB.TEST 文件
验证猜测结果:
我执行了一个之前已经测试成功的导入命令, 清空了该Phoenix表中的数据, 重新导入了一遍, 结果成功了
我又猜测可能是文件上传的节点正好有问题, 因为是测试集群, 只有六个节点, 很有可能确实有问题, 所以我又把测试数据改动了一下, 重新命名了一个文件名上传到hdfs, 重新执行了那个命令, 结果还是同样的错误.
验证表明, 猜测原因不成立.
我又把所有执行步骤重新看了一遍, 发现了一个让人哭笑不得的错误, 创建表的时候不小心多写了一列, 数据源是按五列走的, 结果表是六列的
错误原因:
数据源和Phoenix表不匹配, 数据源只有五列数据, 而表是六列
总结:
自己测试的时候, 切记不要用该参数 --ignore-errors , 它会忽略错误, 出现了错误都看不到, 该参数是在导入大量数据的时候用的, 防止因为个别脏数据导致整个导入过程失败.