teragen“行”不应该以换行符结尾(\ r \ n)吗?

时间:2017-03-04 07:23:27

标签: hadoop hive teragen terasort

我正在尝试协助一个(删除的)问题,这里是关于如何在 teragen 生成的数据上定义Hive外部表格。
根据teragen代码的注释,每100个字节的数据(=行)应以 \ r \ n 结尾,但是,它似乎以4个字符结尾,其中十六进制值为 cc dd ee ff

完整演示如下。

有什么想法吗?

由于

  

/ ** *生成官方的terasort输入数据集。 * 用户   指定行数和输出目录以及此*   class运行map / reduce程序来生成数据。 *格式   数据是:*

    *
  • (10字节键)(10字节rowid)(78字节)   填充) \ r \ n *
  • 密钥是设置''中的随机字符   ..'〜'。 *
  • rowid是右对齐的行id作为int。 *   
  • 填充包含7个从'A'到'Z'的10个字符。 *   
* *

     

https://github.com/facebookarchive/hadoop-20/blob/master/src/examples/org/apache/hadoop/examples/terasort/TeraGen.java

使用teragen生成7条记录

hadoop jar /usr/jars/hadoop-examples.jar teragen 7 /user/hive/warehouse/teragen

正如预期的那样,我们得到总数据量为700字节的文件

hdfs dfs -ls /user/hive/warehouse/teragen

Found 3 items
-rw-r--r--   1 cloudera supergroup          0 2017-03-03 22:38 /user/hive/warehouse/teragen/_SUCCESS
-rw-r--r--   1 cloudera supergroup        400 2017-03-03 22:38 /user/hive/warehouse/teragen/part-m-00000
-rw-r--r--   1 cloudera supergroup        300 2017-03-03 22:38 /user/hive/warehouse/teragen/part-m-00001

将文件移动到本地目录并检查HEX值。

hdfs dfs -get /user/hive/warehouse/teragen/part-m-00001

od -v -Anone -w20 -tx1

此时我希望看到0a 0d(\ r \ n)作为每100个字节的最后2个字符,但我看到ee ff
“行”末尾没有换行符。

 5c 90 ab 38 ae 52 89 62 15 d7 00 11 30 30 30 30 30 30 30 30
 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
 30 30 30 34 88 99 aa bb 41 41 41 41 42 42 42 42 42 42 42 42
 32 32 32 32 34 34 34 34 34 34 34 34 39 39 39 39 35 35 35 35
 42 42 42 42 31 31 31 31 38 38 38 38 44 44 44 44 cc dd ee ff <--
 72 dc 0c a5 1e 33 3f 32 4b 7a 00 11 30 30 30 30 30 30 30 30
 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
 30 30 30 35 88 99 aa bb 38 38 38 38 33 33 33 33 42 42 42 42
 38 38 38 38 38 38 38 38 34 34 34 34 37 37 37 37 32 32 32 32
 37 37 37 37 39 39 39 39 30 30 30 30 32 32 32 32 cc dd ee ff <--
 10 43 1a f6 a0 d8 47 b8 c5 5f 00 11 30 30 30 30 30 30 30 30
 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
 30 30 30 36 88 99 aa bb 39 39 39 39 37 37 37 37 34 34 34 34
 41 41 41 41 37 37 37 37 45 45 45 45 44 44 44 44 41 41 41 41
 41 41 41 41 39 39 39 39 38 38 38 38 42 42 42 42 cc dd ee ff <--

1 个答案:

答案 0 :(得分:0)

我不确定您的terasort的输出是否与您在链接中引用的TeraGen相关。如果您从其他source打开terasort内容,您将能够看到:

生成正式的GraySort输入数据集。用户指定行数和输出目录,此类运行map / reduce程序以生成数据。数据格式为: (10字节键)(常量2字节)(32字节rowid)(常量4字节)(48字节填充)(常量4字节) rowid是右对齐行id作为十六进制数。

根据此说明,我将其与您的第一个链接进行比较:

5c 90 ab 38 ae 52 89 62 15 d7 - 10字节密钥

00 11 - 常数2个字节

30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 34 - 32字节rowid

88 99 aa bb - 常数4个字节

41 41 41 41 42 42 42 42 42 42 42 42 32 32 32 32 34 34 34 34 34 34 34 34 39 39 39 39 35 35 35 35 42 42 42 42 31 31 31 31 38 38 38 38 44 44 44 44 - 8字节填充

cc dd ee ff - 常数4个字节

因此,它不是换行符,而是生成器为每条记录生成的恒定4个字节。