僅個人實踐所得,若有不正確的地方,歡迎交流!
一、起因
執行以下兩條基本的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中的值連永久性修改該配置。