Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 如何在配置单元中的拼花地板表中插入数据_Hadoop_Hive_Parquet - Fatal编程技术网

Hadoop 如何在配置单元中的拼花地板表中插入数据

Hadoop 如何在配置单元中的拼花地板表中插入数据,hadoop,hive,parquet,Hadoop,Hive,Parquet,我有以下格式的简单文本表(以“,”分隔): orderID INT、CustID INT、OrderTotal FLOAT、OrderNumItems INT、OrderDesc字符串 我想将此数据插入拼花地板表: 我使用以下方法创建了表: CREATE TABLE parquet_test(orderID INT、CustID INT、orderal total FLOAT、, OrderNumItems INT,OrderDesc字符串) 行格式SERDE“parquet.hive.SER

我有以下格式的简单文本表(以“,”分隔):

orderID INT、CustID INT、OrderTotal FLOAT、OrderNumItems INT、OrderDesc字符串
我想将此数据插入拼花地板表: 我使用以下方法创建了表:

CREATE TABLE parquet_test(orderID INT、CustID INT、orderal total FLOAT、,
OrderNumItems INT,OrderDesc字符串)
行格式SERDE“parquet.hive.SERDE.ParquetHiveSerDe”存储为
INPUTFORMAT“parquet.hive.DeprecatedParquetInputFormat”
OUTPUTFORMAT“parquet.hive.DeprecatedParquetOutputFormat”;
但是当我尝试使用

插入覆盖表镶木地板\u小订单从小订单中选择*;

它失败了。有什么想法吗?

在配置单元服务器端收到的错误消息是什么

我也有类似的问题。在配置单元服务器日志中,我看到一些堆内存问题

我可以在hadoop安装中使用mapred-site.xml中的更高值来解决这个问题

<property>
  <name>mapreduce.map.memory.mb</name>
  <value>1536</value> 
</property>

<property>
  <name>mapreduce.map.java.opts</name>
  <value>-Xmx1024M</value> 
</property>

<property>
  <name>mapreduce.reduce.memory.mb</name>
  <value>3072</value> 
</property>

<property>
  <name>mapreduce.reduce.java.opts</name>
  <value>-Xmx2560M</value> 
</property>

mapreduce.map.memory.mb
1536
mapreduce.map.java.opts
-Xmx1024M
mapreduce.reduce.memory.mb
3072
mapreduce.reduce.java.opts
-Xmx2560M

您是否遵循了这些步骤

  • 下载
    parquet-hive-bundle-1.5.0.jar
  • 修改
    hive site.xml
    以包括以下内容:

    <property>
       <name>hive.jar.directory</name>
       <value>/home/hduser/hive/lib/parquet-hive-bundle-1.5.0.jar</value>
       <description>
           This is the location hive in tez mode will look for to find a site wide installed hive instance. If not set, the directory under hive.user.install.directory corresponding to current user name will be used.
       </description>
    </property>
    
    
    hive.jar.directory
    /home/hduser/hive/lib/parquet-hive-bundle-1.5.0.jar
    这是tez模式下的配置单元将查找的位置,以查找站点范围内已安装的配置单元实例。如果未设置,将使用当前用户名对应的hive.user.install.directory下的目录。
    
  • 为我工作;见下文。 我们无法看到您的csv表定义,但我相信您可能需要为其指定分隔符? 无论如何,我的代码应该会有所帮助

    马特


    Matthieu Lieber的回答描述了如何将数据加载到拼花地板表中

    在你发布下一个问题之前,要做几件事

  • 请说明您使用的版本。Parquet在0.13之前的Hive版本中不受本机支持,您需要添加一些显式jar来获得功能

  • 请添加日志/错误消息。“It fails”是对错误的模糊描述,它使调试变得困难。您执行数据加载的方式似乎还可以,而且应该可以正常工作。然而,一份日志可以清楚地说明问题所在

  • 如果这仍然是一个悬而未决的问题,您可以参考一些基本知识,了解如何将拼花地板与蜂巢结合使用


    谢谢

    我将分享我刚刚测试的内容,它工作得非常好。我知道这可能是一个版本相关的问题,Hive此时本可以解决。我会解释我刚才做了什么

    1。检查原始数据

    $cat myFile.txt

    2。装载指向文件的配置单元表

    Create external table myDB.orders(orderID INT, CustID INT, OrderTotal FLOAT, OrderNumItems INT, OrderDesc STRING)
    row format 
    delimited FIELDS TERMINATED BY ',' 
    STORED AS TEXTFILE 
    LOCATION '/my/path/to/csv'
    tblproperties ("skip.header.line.count"="1");
    
    CREATE TABLE myDB.parquet_test (orderID INT, CustID INT, OrderTotal FLOAT,
    OrderNumItems INT, OrderDesc STRING)
    ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' stored as
    INPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat'
    OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat'
    location '/my/path/to/parquet';
    
    4。检查配置单元表是否正常工作。请注意,我添加了一句话来忽略第一行,这通常是csv文件的标题。

    Create external table myDB.orders(orderID INT, CustID INT, OrderTotal FLOAT, OrderNumItems INT, OrderDesc STRING)
    row format 
    delimited FIELDS TERMINATED BY ',' 
    STORED AS TEXTFILE 
    LOCATION '/my/path/to/csv'
    tblproperties ("skip.header.line.count"="1");
    
    CREATE TABLE myDB.parquet_test (orderID INT, CustID INT, OrderTotal FLOAT,
    OrderNumItems INT, OrderDesc STRING)
    ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' stored as
    INPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat'
    OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat'
    location '/my/path/to/parquet';
    
    从myDB.orders中选择*

    5。安装拼花地板桌:

    Create external table myDB.orders(orderID INT, CustID INT, OrderTotal FLOAT, OrderNumItems INT, OrderDesc STRING)
    row format 
    delimited FIELDS TERMINATED BY ',' 
    STORED AS TEXTFILE 
    LOCATION '/my/path/to/csv'
    tblproperties ("skip.header.line.count"="1");
    
    CREATE TABLE myDB.parquet_test (orderID INT, CustID INT, OrderTotal FLOAT,
    OrderNumItems INT, OrderDesc STRING)
    ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' stored as
    INPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat'
    OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat'
    location '/my/path/to/parquet';
    
    6。将数据从CSV配置单元表插入配置单元拼花地板表(在此过程中转换为拼花地板)

    最后,通过对myDB.parquet\u test进行简单查询,我再次检查了数据转换是否正确。 为了100%确保数据在Parquet中,我转到了
    /my/path/To/Parquet
    ,并仔细检查了这些文件是否在Parquet中。 我不确定你的问题是不是因为你没有跳过文件的头或者你正在使用的版本,但是我刚才解释的这些步骤都很好