1. 程式人生 > >HDFS問題集(一),使用命令報錯:com.google.protobuf.ServiceException:java.lang.OutOfMemoryError:java heap space

HDFS問題集(一),使用命令報錯:com.google.protobuf.ServiceException:java.lang.OutOfMemoryError:java heap space

正常 腳本 spa 執行 xmx error exception 內存 解決方案

僅個人實踐所得,若有不正確的地方,歡迎交流!


一、起因

  執行以下兩條基本的HDFS命令時報錯

1 hdfs dfs -get /home/mr/data/* ./
2 hdfs dfs -ls /home/mr/data/*

這是正常的兩條HDFS命令,怎麽會報錯了?然後就打開hdfs命令查看問題。

二、分析

1)利用以下命令找到hdfs命令所在路徑

1 which hdfs

使用vim hdfs打開腳本,發現當以hdfs dfs 執行時,會利用到HADOOP_CLIENT_OPTS配置項。通過查找該配置項一般在目錄/etc/hadoop/conf/hadoop-env.sh中設置。

打開hadoop-env.sh腳本,發現該配置項采用的是默認配置即256M。

2)經查看/home/mr/data目錄下有1W+個小文件,但大小只有100M左右,猜測可能是因為文件數據多大使得元數據過大導致加載到client客戶端時會引起內存不足(猜測可能不正確,歡迎大佬給出正確解釋)。

三、解決方案

加大HADOOP_CLIENT_OPTS的配置,使用兩種形式均可解決問題。

1 export HADOOP_CLIENT_OPTS="-Xmx1024m $HADOOP_CLIENT_OPTS"
2 hdfs dfs -get /home/mr/data/* ./
3 
4 HADOOP_CLIENT_OPTS="-Xmx1024m" hdfs dfs -get /home/mr/data/* ./

此外,也可以通過修改hadoop-env.sh中的值連永久性修改該配置。

HDFS問題集(一),使用命令報錯:com.google.protobuf.ServiceException:java.lang.OutOfMemoryError:java heap space