【问题标题】:storing pig output into Hive table in a single instance在单个实例中将 pig 输出存储到 Hive 表中
【发布时间】:2015-07-08 09:30:33
【问题描述】:

我想将 pig 输出插入 Hive 表(Hive 中的表已经使用确切的模式创建)。只需将输出值插入表中。我不想使用通常的方法,其中我首先存储到一个文件中,然后从 Hive 读取该文件,然后插入到表中。我需要减少已完成的额外跳数。

有没有可能。如果是这样,请告诉我如何做到这一点?

谢谢

【问题讨论】:

    标签: hadoop hive apache-pig


    【解决方案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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-12
          • 1970-01-01
          • 2012-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多