伪分模式下hive运行sql语句时出现的一些错误:解决For more details see: http://wiki.apache.org/hadoop/UnsetHostnameOrPort


第一个错误

hive日志中有以下报错:

org.apache.hadoop.hive.ql.parse.SemanticException: org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /tmp/hive/root/f39a320d-d50d-4627-a685-5eb5fff0e648/hive_2024-09-23_09-50-49_151_6473486879651462761-1/dummy_path/dummy_file could only be written to 0 of the 1 minReplication nodes. There are 1 datanode(s) running and 1 node(s) are excluded in this operation.
at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:2329)
at org.apache.hadoop.hdfs.server.namenode.FSDirWriteFileOp.chooseTargetForNewBlock(FSDirWriteFileOp.java:294)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:2942)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:915)
at org.apache.hadoop.hdfs.protocolPB.

原因:
1、hive的本地模式搞的鬼
2、硬件资源问题和网络问题(最主要的原因)
3、datanode写入到完成时间过长,给namenode响应时间间隔过长,namenode会认为datanode挂掉,心跳机制时间过短
4、传输缓冲区太小

解决方法:
1、关闭本地模式

set hive.exec.mode.local.auto=flase;

2、改心跳机制时间间隔
hdfs-site.xml:

<property>
    <name>dfs.namenode.heartbeat.recheck-interval</name>
    <value>600000</value>
</property>
<property>
    <name>dfs.namenode.heartbeat.interval</name>
    <value>5000</value>
</property>

3、调整数据传输缓冲区大小:
hdfs-site.xml:

#修改hadoop的hdfs.site.xml
<property>
    <name>io.file.buffer.size</name>
    <value>65536</value>
</property>

第二个错误

Caused by: java.net.ConnectException: Your endpoint configuration is wrong; 
For more details see:  http://wiki.apache.org/hadoop/UnsetHostnameOrPort

原因:
1、伪分资源不足,导致的sql语句执行失败
2、可能是因为资源不足导致表被锁死,具体的没弄明白
3、hive临时文件产生过多

解决方法:
1、搭建hadoop全分
2、执行:

set hive.support.concurrency=false;

3、删除临时文件
在hdfs上:/tmp/hive
直接删除hdfsroot文件夹即可

第三个错误

关于使用sqoop导入数据时一个关于日期类型的数据的警告:
mysql导入hive:
在这里插入图片描述
原因:
mysql 中关于时间的数据类型是 timestamp
hive 的表是 sqoop 创建的,它的时间类型是 string
解决方法:

1、自己手动创建hive表,这样创作的表数据类型更加精准,特别是一些精度要求非常高的字段
2、可以在sqoop导入的时候,指定数据类型,以上sqoop就是指定了数据类型,使用了
–map-column-java updated_at=java.sql.Timestamp \
–map-column-hive updated_at=Timestamp \

例如:

sqoop import \
--driver com.mysql.cj.jdbc.Driver \
--connect jdbc:mysql://hadoop01:3306/jrxd?characterEncoding=UTF-8 \
--username root \
--password 123456 \
--query 'select * from dict_product where DATE_FORMAT(updated_at,"%Y-%m-%d") = "2024-06-30" and  $CONDITIONS' \
--target-dir /tmp/dict_product \
--map-column-java  updated_at=java.sql.Timestamp \
--map-column-hive  updated_at=Timestamp \     # 添加以上两句话
--delete-target-dir \
--split-by id \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-database finance \
--hive-table ods_dict_product    \
--null-non-string   '\\N' \
--null-string  '\\N'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzhlizihang

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值