执行hadoop任务遇到的问题:
Caused by: org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /user/hive/warehouse/rec_new2.db/user_session/.hive-staging_hive_2017-12-10_08-22-41_311_4339813855157373054-1/-ext-10000/_temporary/0/_temporary/attempt_20171210082241_0000_m_000000_3/appid=10017/dt=2017-12-09/part-00000 could only be replicated to 0 nodes instead of minReplication (=1). There are 3 datanode(s) running and no node(s) are excluded in this operation
当时遇到无论是hive向hadoop写入数据还是spark、storm写入数据都报以上错误:
一开始网上各种找,冷静下仔细看hadoop运行日志信息,
日志查看:
$HADOOP_HOME/logs
通过在master节点查看,tail –f hadoop-root-namenode-hadoop-master.log 监听namenode运行日志信息,发现问题所在:
原来在hadoop配置文件中,预留磁盘大小为20G,通过df -hl 命令查看磁盘空间大小,发现hadoop-slave3 磁盘空间只剩17G,导致数据无法插入;
解决方案:增大磁盘空间或删除较大文件,达到配置预留磁盘空间即可;
由于spark配置的是standalone模式,导致每执行一个spark任务,运行日志中都会有一个运行任务所需jar包;累积下来占用磁盘空间;可定期删除,也可以配置spark-env.sh 每执行完后直接删除运行日志信息及jar包;
spark运行任务查看运行日志信息及jar包所在位置:$SPARK_HOME/work
运行完直接删除运行日志信息及jar包,在spark-env.sh中加入如下内容:
SPARK_WORKER_OPTS=”-Dspark.worker.cleanup.enabled=true”
注意官方文档中说不管程序是否已经停止,都会删除文件夹,这是不准确的,只有停止掉的程序文件夹才会被删除
附:
Hdfs-site.xml:
可以通过配置,修改配置只需停掉集群重启即可:
$HADOOP_HOME/conf/hdfs-site.xml 文件里的 dfs.datanode.du.reserved 属性来配置HDFS预留磁盘的空间大小,从而限制 data node 的磁盘使用量(单位是字节数),如以下配置会给磁盘预留20GB的空间:
<property>
<name>dfs.datanode.du.reserved</name>
<!-- reserved space in bytes -->
<value>21474836480</value>
<description>Reserved space in bytes per volume. Always leave this much space free for non dfs use.
</description>
</property>