我知道我们可以使用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中创建具有适当模式的表,然后将其指向镶木地板文件。
我遇到了一个类似的问题,我在一个虚拟机中有数据,必须将其移动到另一个。这是我的演练:
-
有关原始Parquet文件的信息(位置和模式):
describe formatted users;
和show create table users;
后者将立即为您获取模式,并将您指向HDFShdfs://hostname:port/apps/hive/warehouse/users
的位置 -
了解表
show partitions users;
的分区 -
将表格的Parquet文件从HDFS复制到本地目录
hdfs dfs -copyToLocal /apps/hive/warehouse/users
-
将它们移动到另一个集群/VM或您希望它们进入的位置
-
使用相同的模式在目的地
CREATE USERS ...
上创建用户表CREATE TABLE users ( name string, ... ) PARTITIONED BY (...) STORED AS PARQUET;
-
现在,移动相应文件夹中的Parquet文件(如果需要,请查找您刚刚创建的表的位置)
hdfs dfs -ls /apps/hive/warehouse/users/ hdfs dfs -copyFromLocal ../temp/* /apps/hive/warehouse/
-
对于每个分区,您必须将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