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下的目录。
Matthieu Lieber的回答描述了如何将数据加载到拼花地板表中 在你发布下一个问题之前,要做几件事
谢谢 我将分享我刚刚测试的内容,它工作得非常好。我知道这可能是一个版本相关的问题,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中。
我不确定你的问题是不是因为你没有跳过文件的头或者你正在使用的版本,但是我刚才解释的这些步骤都很好