我们可以直接将Parquet文件加载到Hive中吗



我知道我们可以使用Spark SQL和Impala加载镶木地板文件,但不知道我们是否可以使用Hive来加载。我读了很多文章,但我还是很困惑。

简单地说,我有一个拼花文件,比如users.parquet。现在我对如何将数据从users.parque加载/插入/导入到hive(显然是到表中)感到震惊。

如果我遗漏了一些明显的东西,请给我建议或指引我正确的方向。

使用拼花地板文件元数据创建配置单元表

https://phdata.io/examples-using-textfile-and-parquet-with-hive-and-impala/

使用镶木地板工具获取镶木地板文件的模式,有关详细信息,请查看链接http://kitesdk.org/docs/0.17.1/labs/4-using-parquet-tools-solution.html

并使用文件顶部的模式构建表,有关详细信息,请查看Create Hive table to read parquet/avro schema

获取模式至关重要,因为您必须首先在Hive中创建具有适当模式的表,然后将其指向镶木地板文件。

我遇到了一个类似的问题,我在一个虚拟机中有数据,必须将其移动到另一个。这是我的演练:

  1. 有关原始Parquet文件的信息(位置和模式):describe formatted users;show create table users;后者将立即为您获取模式,并将您指向HDFS hdfs://hostname:port/apps/hive/warehouse/users 的位置

  2. 了解表show partitions users; 的分区

  3. 将表格的Parquet文件从HDFS复制到本地目录

    hdfs dfs -copyToLocal /apps/hive/warehouse/users
    
  4. 将它们移动到另一个集群/VM或您希望它们进入的位置

  5. 使用相同的模式在目的地CREATE USERS ...上创建用户表

    CREATE TABLE users ( name string, ... )
    PARTITIONED BY (...)
    STORED AS PARQUET;
    
  6. 现在,移动相应文件夹中的Parquet文件(如果需要,请查找您刚刚创建的表的位置)

    hdfs dfs -ls /apps/hive/warehouse/users/
    hdfs dfs -copyFromLocal ../temp/* /apps/hive/warehouse/
    
  7. 对于每个分区,您必须将Hive指向相应的子目录:alter table users add partition (sign_up_date='19991231') location '/apps/hive/warehouse/users/sign_up_date=19991231';(您可能希望使用bash脚本来完成此操作)

这对我很有效,希望能有所帮助。

不知道它是否有点"黑客",但我使用齐柏林飞艇(ambari附带)。您可以简单地结合spark2:执行以下操作

%spark2
import org.apache.spark.sql.SaveMode
var df = spark.read.parquet("hdfs:///my_parquet_files/*.parquet");
df.write.mode(SaveMode.Overwrite).saveAsTable("imported_table")

这种方式的优点是,即使有不同的模式,也可以导入许多镶木地板文件。

你可以试试这个。。。导出/导入适用于所有类型的文件格式,包括Hive中的镶木地板。这是一个通用概念,您可以根据自己的需求进行一点调整,比如从本地(或)跨集群加载

注意:当您执行单个步骤时,您可以硬编码而不是$,当您从脚本运行时,还可以传递"HDFS路径"、"Schema"one_answers"tablename"作为参数。因此,只需传递参数,就可以导出/导入不受限制的表

  • 步骤1:配置单元-S-e"将表$schema_file1.$tbl_file1导出到'$HDFS_DATA_PATH/$tbl_file1';"#--从HDFS执行
  • Step2: #--它包含数据和元数据。将it和scp压缩到目标集群
  • 步骤3:配置单元-S-e"从'$HDFS_DATA_PATH/$tbl_file1'导入表$schema_file1.$tbl_file;"#--第一次导入将通过一个错误,因为表不存在,但会自动创建一个表
  • 第4步:配置单元-S-e"从'$HDFS_DATA_PATH/$tbl_file1'导入表$schema_file1.$tbl_file;"#--第二次导入将导入数据,没有任何错误,因为表现在可用

感谢

Kumar

相关内容

  • 没有找到相关文章

最新更新