我的要求是将不同来源收集到网络共享文件夹中的XML文件加载到Hive中。我需要确认一下接下来的方法。
根据我的理解,我必须1. 首先将所有文件加载到HDFS2. 然后使用Mapreduce或sqoop将xml文件转换为所需的表,然后我必须将它们加载到Hive中。
处理和读取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.htmlPig有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 ...)]
filepath可以是
1。相对路径,例如:project/data1
2。绝对路径,例如:/user/hive/project/data1
3。一个完整的URI,包含方案和(可选的)权限,例如:hdfs://namenode: 9000/user/蜂巢/项目/data1
加载到的目标可以是一个表或一个分区。如果表是分区的,那么必须通过为所有分区列指定值来指定表的特定分区。
filepath可以是一个文件(在这种情况下,hive会将文件移到表中),也可以是一个目录(在这种情况下,hive会将该目录下的所有文件移到表中)。在这两种情况下,filepath都指向一组文件。
如果指定了关键字LOCAL,则:1.load命令将在本地文件系统中查找文件路径。如果指定了一个相对路径-它将相对于用户的当前目录进行解释。用户也可以为本地文件指定一个完整的URI,例如:file:///User/hive/project/data1
2。load命令将尝试将所有由filepath寻址的文件复制到目标文件系统。通过查看表的位置属性来推断目标文件系统。复制的数据文件将被移到表中。
如果没有指定关键字LOCAL,则如果指定了filepath, Hive将使用完整的URI。否则应用以下规则:
- 如果没有指定scheme或authority, Hive将使用hadoop配置变量fs.default.name指定的Namenode URI中的scheme和authority。
- 如果路径不是绝对的,那么Hive将相对于/user/ 解释它。
- Hive将按filepath寻址的文件移动到表(或分区)
如果使用OVERWRITE关键字,则目标表(或分区)的内容将被删除,并用filepath引用的文件替换。否则,由filepath引用的文件将被添加到表中。
- 请注意,如果目标表(或分区)已经有一个文件名与filepath中包含的任何文件名冲突,那么现有的文件将被新文件替换。