我知道我们可以使用sparksql和impala加载parquet文件,但是我想知道我们是否可以使用hive进行同样的加载。我已经读了很多文章,但我还是很困惑。
简单地说,我有一个Parquet文件-比如users.parquet。现在,如何将users.parquet中的数据加载/插入/导入到hive中(显然是在表中)让我大吃一惊。
如果我遗漏了一些明显的东西,请给我建议或给我指出正确的方向。
使用parquet文件元数据创建配置单元表
https://phdata.io/examples-using-textfile-and-parquet-with-hive-and-impala/
4条答案
按热度按时间wwodge7n1#
获取模式是至关重要的,因为您必须首先在hive中使用适当的模式创建表,然后将其指向parquet文件。
我遇到了一个类似的问题,我在一个虚拟机中有数据,必须将其移动到另一个虚拟机。以下是我的演练:
了解原始Parquet文件(位置和模式):
describe formatted users;
以及show create table users;
后者将立即为您提供模式,并为您指出hdfs的位置hdfs://hostname:port/apps/hive/warehouse/users
了解表的分区show partitions users;
将表的Parquet文件从hdfs复制到本地目录将它们移到另一个集群/vm或您希望它们去的地方
在目标上创建用户表
CREATE USERS ...
通过使用相同的模式现在,移动相应文件夹中的parquet文件(如果需要,找出刚刚创建的表的位置)
对于每个分区,您必须将配置单元指向相应的子目录:
alter table users add partition (sign_up_date='19991231') location '/apps/hive/warehouse/users/sign_up_date=19991231';
(您可能希望使用bash脚本执行此操作)对我有用,希望对我有帮助。
2izufjch2#
不知道它是否有点“黑客”,但我使用齐柏林飞艇(与Ambari运送)。您只需结合spark2执行以下操作:
这种方法的优点是,您还可以导入许多Parquet文件,即使它们具有不同的模式。
q8l4jmvw3#
你可以试试这个。。。导出/导入适用于所有类型的文件格式,包括配置单元中的parquet。这是一个通用的概念,您可以根据自己的需求进行一些调整,比如从本地(或)跨集群加载
注意:在执行单个步骤时,可以使用硬代码代替$,在从脚本运行时,也可以将“hdfs path”、“schema”和“tablename”作为参数传递。因此,只需传递参数就可以导出/导入无限表
步骤1:hive-s-e“将表$schema_file1.$tbl_file1导出到$hdfs_data_path/$tbl_file1”;“#--从hdfs执行。
第二步:#——它同时包含数据和元数据。将它和scp压缩到目标集群
步骤3:hive-s-e“从“$hdfs_data_path/$tbl_file1”导入表$schema_file1.$tbl_file1”#--第一次导入将通过一个错误,因为表不存在,但会自动创建一个表
步骤4:hive-s-e“从“$hdfs_data_path/$tbl_file1”导入表$schema_file1.$tbl_file1”#--第二次导入将导入没有任何错误的数据,因为表现在可用
谢谢
库玛
vmpqdwk34#
使用Parquet工具获取Parquet文件的模式,有关详细信息,请查看链接http://kitesdk.org/docs/0.17.1/labs/4-using-parquet-tools-solution.html
并使用文件顶部的模式构建表,有关详细信息,请检查create hive table以从parquet/avro模式读取parquet文件