0

我的要求是将通过不同来源收集到网络共享文件夹中的 XML 文件加载到 Hive 中。我需要通过方法进行确认。

据我了解,我必须 1. 首先将所有文件加载到 HDFS 2. 然后使用 Mapreduce 或 sqoop 将 xml 文件转换为所需的表,然后我必须将它们加载到 Hive 中。

如果存在,请建议我任何更好的方法。

4

2 回答 2

2

处理和读取 XML 文件

Mahout 具有 XML 输入格式,请参阅下面的博客文章以了解更多信息

https://github.com/apache/mahout/blob/ad84344e4055b1e6adff5779339a33fa29e1265d/examples/src/main/java/org/apache/mahout/classifier/bayes/XmlInputFormat.java

http://xmlandhadoop.blogspot.com.au/2010/08/xml-processing-in-hadoop.html

Pig 有 XMLLoader

http://pig.apache.org/docs/r0.7.0/api/org/apache/pig/piggybank/storage/XMLLoader.html

使用上述任何一种方法处理后,您可以将其推送到 Hive 位置。

谢谢

于 2013-04-01T02:44:32.803 回答
0

您不需要将数据复制到 HDFS 中,您可以使用命令直接将数据加载到 hive 表中,

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

文件路径可以是

1.相对路径,例如:project/data1

2.绝对路径,例如:/user/hive/project/data1

3.带有方案和(可选)权限的完整URI,例如:hdfs://namenode:9000/user/hive/project/data1

加载到的目标可以是表或分区。如果表是分区的,则必须通过指定所有分区列的值来指定表的特定分区。

filepath 可以引用一个文件(在这种情况下,hive 会将文件移动到表中)或者它可以是一个目录(在这种情况下,hive 会将该目录中的所有文件移动到表中)。在任何一种情况下,文件路径都会寻址一组文件。

如果指定关键字 LOCAL,则: 1.load 命令将在本地文件系统中查找文件路径。如果指定了相对路径 - 它将相对于用户的当前目录进行解释。用户也可以为本地文件指定完整的 URI - 例如:file:///user/hive/project/data1

2.load 命令将尝试将文件路径寻址的所有文件复制到目标文件系统。通过查看表的位置属性来推断目标文件系统。然后将复制的数据文件移动到表中。

如果未指定关键字 LOCAL,则 Hive 将使用文件路径的完整 URI(如果指定)。否则,将应用以下规则:

  1. 如果未指定方案或权限,Hive 将使用 hadoop 配置变量 fs.default.name 中指定 Namenode URI 的方案和权限。
  2. 如果路径不是绝对的 - 那么 Hive 将相对于 /user/ 解释它
  3. Hive 会将文件路径寻址的文件移动到表(或分区)中

如果使用了 OVERWRITE 关键字,则目标表(或分区)的内容将被删除并替换为 filepath 引用的文件。否则文件路径引用的文件将被添加到表中。

  1. 请注意,如果目标表(或分区)已经有一个文件,其名称与文件路径中包含的任何文件名冲突 - 那么现有文件将被新文件替换。
于 2013-03-23T20:33:49.770 回答