在单个实例中将 pig 输出存储到 Hive 表中
Posted
技术标签:
【中文标题】在单个实例中将 pig 输出存储到 Hive 表中【英文标题】:storing pig output into Hive table in a single instance 【发布时间】:2015-07-08 09:30:33 【问题描述】:我想将 pig 输出插入 Hive 表(Hive 中的表已经使用确切的模式创建)。只需将输出值插入表中。我不想使用通常的方法,其中我首先存储到一个文件中,然后从 Hive 读取该文件,然后插入到表中。我需要减少已完成的额外跳数。
有没有可能。如果是这样,请告诉我如何做到这一点?
谢谢
【问题讨论】:
【参考方案1】:好的。在 HDFS 目录中的某处创建具有架构布局的外部配置单元表。让我们说
create external table emp_records(id int,
name String,
city String)
row formatted delimited
fields terminated by '|'
location '/user/cloudera/outputfiles/usecase1';
只需像上面那样创建一个表,无需将任何文件加载到该目录中。
现在编写一个 Pig 脚本,我们读取某个输入目录的数据,然后当您存储该 Pig 脚本的输出时,如下所示使用
A = LOAD 'inputfile.txt' USING PigStorage(',') AS(id:int,name:chararray,city:chararray);
B = FILTER A by id > = 678933;
C = FOREACH B GENERATE id,name,city;
STORE C INTO '/user/cloudera/outputfiles/usecase1' USING PigStorage('|');
确保 Pigscript 中最终 FOREACH 语句的目标位置、分隔符和架构布局与 Hive DDL 架构匹配。
【讨论】:
感谢您的回复。但这又导致了两个作品,对吧?我的意思是在运行 PIG 之后,我将不得不再次在 Hive 中运行加载命令。我想要类似的东西,比如当我在 PIG 中编写存储命令时,它应该直接存储在 HIVE 表中,而不是任何文件中。 Ok.. 然后请寻找 HCatStorer() ... 使用 org.apache.hcatalog.pig.HCatStorer() 将 C 存储到 'tablename' 中;但为此,您需要在相应的类路径中包含所有需要的 Hcatlog jar 好吧,让我试试看。感谢您的帮助!【参考方案2】:下面以“Employee”表示例说明了两种方法,将猪的输出存储到 hive 表中。 (前提是hive表应该已经创建)
A = LOAD 'EMPLOYEE.txt' USING PigStorage(',') AS(EMP_NUM:int,EMP_NAME:chararray,EMP_PHONE:int);
方法一:使用 Hcatalog
// dump pig result to Hive using Hcatalog
store A into 'Empdb.employee' using org.apache.hive.hcatalog.pig.HCatStorer();
(或)
方法 2:使用 HDFS 物理位置
// dump pig result to external hive warehouse location
STORE A INTO 'hdfs://<<nmhost>>:<<port>>/user/hive/warehouse/Empdb/employee/' USING PigStorage(',')
;
【讨论】:
【参考方案3】:您可以使用 Hcatalog 存储它
STORE D INTO 'tablename' USING org.apache.hive.hcatalog.pig.HCatStorer();
见下面的链接 https://acadgild.com/blog/loading-and-storing-hive-data-into-pig
【讨论】:
【参考方案4】:最好的办法是使用HCatalog,将数据写入hive表中。
STORE final_data INTO 'Hive_table_name' 使用 org.apache.hive.hcatalog.pig.HCatStorer();
但在存储数据之前,请确保“final_data”数据集中的列与表的架构完美匹配并映射。
然后像这样运行你的猪脚本: 猪脚本.pig -useHCatalog
【讨论】:
以上是关于在单个实例中将 pig 输出存储到 Hive 表中的主要内容,如果未能解决你的问题,请参考以下文章