我的要求是将通过不同来源收集到网络共享文件夹中的 XML 文件加载到 Hive 中。我需要通过方法进行确认。
据我了解,我必须 1. 首先将所有文件加载到 HDFS 2. 然后使用 Mapreduce 或 sqoop 将 xml 文件转换为所需的表,然后我必须将它们加载到 Hive 中。
如果存在,请建议我任何更好的方法。
处理和读取 XML 文件
Mahout 具有 XML 输入格式,请参阅下面的博客文章以了解更多信息
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 位置。
谢谢
您不需要将数据复制到 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(如果指定)。否则,将应用以下规则:
如果使用了 OVERWRITE 关键字,则目标表(或分区)的内容将被删除并替换为 filepath 引用的文件。否则文件路径引用的文件将被添加到表中。