Ale*_*x L 6 hadoop hive parquet
我有简单的文本表(用","分隔),格式如下:
orderID INT, CustID INT, OrderTotal FLOAT, OrderNumItems INT, OrderDesc STRING
Run Code Online (Sandbox Code Playgroud)
我想将这些数据插入到Parquet表中:我使用以下方法创建了表:
CREATE TABLE 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';
Run Code Online (Sandbox Code Playgroud)
但是当我试图使用时插入数据
insert overwrite table parquet_small_orders select * from small_orders;
Run Code Online (Sandbox Code Playgroud)
它失败.有什么想法吗?
我将分享我刚刚测试的内容,它运行良好。我知道这可能是 Hive 目前可以解决的与版本相关的问题。我会解释我刚刚做了什么,
1. 检查原始数据
$ cat myFile.txt
orderID INT, CustID INT, OrderTotal FLOAT, OrderNumItems INT, OrderDesc STRING
100,1000,100000,5,"aa"
200,2000,200000,6,"bb"
300,3000,300000,7,"cc"
400,4000,400000,8,"dd"
500,5000,500000,9,"ee"
Run Code Online (Sandbox Code Playgroud)
2.挂载一个指向文件的Hive表
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");
Run Code Online (Sandbox Code Playgroud)
4. 检查 Hive 表是否正常工作。请注意,我添加了一个句子来忽略第一行,该行通常是 csv 文件的标题。
从 myDB.orders 中选择 *;
100,1000,100000.0,5,"aa"
200,2000,200000.0,6,"bb"
300,3000,300000.0,7,"cc"
400,4000,400000.0,8,"dd"
500,5000,500000.0,9,"ee"
Run Code Online (Sandbox Code Playgroud)
5. 安装镶木地板:
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';
Run Code Online (Sandbox Code Playgroud)
6. 将 CSV Hive 表中的数据插入到 Hive Parquet 表中(过程中转换为 parquet)
insert overwrite table myDB.parquet_test select * from myDB.orders;
Run Code Online (Sandbox Code Playgroud)
最后,我仔细检查了数据转换是否正确,对myDB.parquet_test. 为了 100% 确定数据在 Parquet 中,我去了/my/path/to/parquet并仔细检查了这些文件实际上是在 Parquet 中。不确定您的问题是否是因为您没有跳过文件的标题或您正在使用的版本,但同样,我刚刚解释的这些步骤效果很好。
小智 0
您在 Hive 服务器端收到的错误消息是什么?
我有类似的问题。在配置单元服务器日志中我看到一些堆内存问题。
我可以使用 mapred-site.xml 中更高的值来解决 hadoop 安装中的问题
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23940 次 |
| 最近记录: |