Hadoop Teragen生成文件的数据构造及Rowid提取异常排查
排查Teragen rowid提取异常的可能原因
对rowid编码格式理解有误
Teragen的rowid不是ASCII明文数字,而是二进制大端序的64位整数(占8字节)+ 2字节填充,总共10字节。用od -c会把二进制字节转成字符显示,大部分是不可打印的控制字符或空白,自然看不到预期的递增数字序列。你需要用能解析二进制整数的参数查看,比如:cut -nb 11-20 part-m-00000 | od -t u8 -w10 -Ad这样会把前8字节解析为无符号64位整数,就能看到从0开始递增的rowid数值。
cut命令的字节范围准确性问题
Teragen每行固定100字节(10字节key + 10字节rowid +78字节filler),理论上11-20是rowid的位置,但-n参数是为了避免分割多字节字符,而Teragen的输出是纯二进制单字节数据,建议去掉-n,直接用:cut -b 11-20 part-m-00000 | od -t u8 -w10 -Ad文件完整性问题
确认下载的part-m-00000是完整的Teragen输出分片,没有在传输过程中损坏。可以用wc -c计算文件大小:如果生成了N行,文件大小应该是N * 100字节,比如生成100万行的话,文件大小应为100,000,000字节。Teragen生成参数错误
检查执行Teragen时的命令是否正确,比如是否指定了正确的行数。正确的Teragen命令格式是:hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar teragen <行数> <输出路径>如果行数指定错误,可能导致rowid序列不符合预期。
内容的提问来源于stack exchange,提问作者Jiamin Lu
相关产品推荐
相关产品推荐

