如何将数据插入到hive中的Parquet表中

cuxqih21  于 2021-06-03  发布在  Hadoop
关注(0)|答案(5)|浏览(352)

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

  1. orderID INT, CustID INT, OrderTotal FLOAT, OrderNumItems INT, OrderDesc STRING

我想将此数据插入Parquet地板表中:我使用以下方法创建了该表:

  1. CREATE TABLE parquet_test (orderID INT, CustID INT, OrderTotal FLOAT,
  2. OrderNumItems INT, OrderDesc STRING)
  3. ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' stored as
  4. INPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat'
  5. OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat';

但是当我试图用

  1. insert overwrite table parquet_small_orders select * from small_orders;

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

z9gpfhce

z9gpfhce1#

在配置单元服务器端收到的错误消息是什么?
我也有类似的问题。在配置单元服务器日志中,我看到一些堆内存问题。
我可以使用mapred-site.xml中的更高值来解决hadoop安装中的问题

  1. <property>
  2. <name>mapreduce.map.memory.mb</name>
  3. <value>1536</value>
  4. </property>
  5. <property>
  6. <name>mapreduce.map.java.opts</name>
  7. <value>-Xmx1024M</value>
  8. </property>
  9. <property>
  10. <name>mapreduce.reduce.memory.mb</name>
  11. <value>3072</value>
  12. </property>
  13. <property>
  14. <name>mapreduce.reduce.java.opts</name>
  15. <value>-Xmx2560M</value>
  16. </property>
展开查看全部
au9on6nz

au9on6nz2#

为我工作;见下文。我们看不到您的csv表定义,但我相信您可能需要给它定界符?不管怎样,我的代码应该有用。
马特

  1. hive> create table te3 (x int, y int)
  2. > row format delimited
  3. > FIELDS TERMINATED BY ','
  4. > STORED AS TEXTFILE;
  5. hive> LOAD DATA LOCAL INPATH '/home/cloudera/test/' OVERWRITE INTO TABLE te3;
  6. Copying data from file:/home/cloudera/test
  7. Copying file: file:/home/cloudera/test/testfile.csv
  8. Loading data to table default.te3
  9. Table default.te3 stats: [numFiles=1, numRows=0, totalSize=12, rawDataSize=0]
  10. OK
  11. Time taken: 1.377 seconds
  12. hive> select * from te3;
  13. OK
  14. 1 2
  15. 3 4
  16. 5 6
  17. Time taken: 0.566 seconds, Fetched: 3 row(s)
  18. hive> create table ptest (a INT, b INT)
  19. > ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' stored as
  20. > INPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat'
  21. > OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat';
  22. OK
  23. Time taken: 0.413 seconds
  24. hive> insert overwrite table ptest select * from te3;
  25. Total jobs = 3
  26. Launching Job 1 out of 3
  27. Number of reduce tasks is set to 0 since there's no reduce operator
  28. Starting Job = job_1423179894648_0001, Tracking URL = http://quickstart.cloudera:8088/proxy/application_1423179894648_0001/
  29. Kill Command = /usr/lib/hadoop/bin/hadoop job -kill job_1423179894648_0001
  30. Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0
  31. 2015-02-09 14:08:16,308 Stage-1 map = 0%, reduce = 0%
  32. 2015-02-09 14:08:45,342 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 1.55 sec
  33. MapReduce Total cumulative CPU time: 1 seconds 550 msec
  34. Ended Job = job_1423179894648_0001
  35. Stage-Stage-1: Map: 1 Cumulative CPU: 1.99 sec HDFS Read: 234 HDFS Write: 377 SUCCESS
  36. Total MapReduce CPU Time Spent: 1 seconds 990 msec
  37. OK
  38. Time taken: 68.96 seconds
  39. hive> select * from ptest;
  40. OK
  41. SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
  42. SLF4J: Defaulting to no-operation (NOP) logger implementation
  43. SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
  44. 1 2
  45. 3 4
  46. 5 6
  47. Time taken: 0.06 seconds, Fetched: 3 row(s)
  48. hive>
展开查看全部
2o7dmzc5

2o7dmzc53#

你遵循这些步骤了吗?
下载 parquet-hive-bundle-1.5.0.jar 修订 hive-site.xml 包括:

  1. <property>
  2. <name>hive.jar.directory</name>
  3. <value>/home/hduser/hive/lib/parquet-hive-bundle-1.5.0.jar</value>
  4. <description>
  5. 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.
  6. </description>
  7. </property>
q43xntqr

q43xntqr4#

我将分享我刚刚测试的东西,它工作得非常好。我知道这可能是一个版本相关的问题,而hive此时本可以解决。不管怎样,我都会解释我刚才做了什么,
1检查原始数据
$cat myfile.txt文件

  1. orderID INT, CustID INT, OrderTotal FLOAT, OrderNumItems INT, OrderDesc STRING
  2. 100,1000,100000,5,"aa"
  3. 200,2000,200000,6,"bb"
  4. 300,3000,300000,7,"cc"
  5. 400,4000,400000,8,"dd"
  6. 500,5000,500000,9,"ee"

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

  1. Create external table myDB.orders(orderID INT, CustID INT, OrderTotal FLOAT, OrderNumItems INT, OrderDesc STRING)
  2. row format
  3. delimited FIELDS TERMINATED BY ','
  4. STORED AS TEXTFILE
  5. LOCATION '/my/path/to/csv'
  6. tblproperties ("skip.header.line.count"="1");

4检查配置单元表是否正常工作。注意,我添加了一个忽略第一行的句子,这通常是csv文件的头。
从mydb.orders中选择*;

  1. 100,1000,100000.0,5,"aa"
  2. 200,2000,200000.0,6,"bb"
  3. 300,3000,300000.0,7,"cc"
  4. 400,4000,400000.0,8,"dd"
  5. 500,5000,500000.0,9,"ee"

5 parquet 安装台:

  1. CREATE TABLE myDB.parquet_test (orderID INT, CustID INT, OrderTotal FLOAT,
  2. OrderNumItems INT, OrderDesc STRING)
  3. ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' stored as
  4. INPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat'
  5. OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat'
  6. location '/my/path/to/parquet';

6将数据从csv配置单元表插入配置单元Parquet表(过程中转换为Parquet)

  1. insert overwrite table myDB.parquet_test select * from myDB.orders;

最后,我再次检查了数据转换是否正确,并对 myDB.parquet_test . 为了100%确定数据在Parquet地板上,我去了 /my/path/to/parquet 我仔细检查了一下那些文件是否在Parquet地板里。我不确定你的问题是不是因为你没有跳过文件的头或者你正在使用的版本,但是我刚才解释的这些步骤还是很好的。

展开查看全部
polhcujo

polhcujo5#

matthieu lieber的答案描述了如何将数据加载到Parquet地板表。
在你发布下一个问题之前有几件事。
请说明您使用的版本。parquet在0.13之前的配置单元版本中本机不受支持,您需要添加一些显式jar来获得功能。
请添加日志/错误消息。““失败”是对错误的模糊描述,它使调试变得困难。您加载数据的方式看起来还可以,应该可以。然而,一份日志会让事情清楚地表明问题所在。
如果这仍然是一个悬而未决的问题,您可以参考cloudera的文档,了解如何将parquet与hive结合使用的一些基础知识。
谢谢!

相关问题