1. 程式人生 > >Hadoop學習----------在Eclipse中執行wordCount到若干問題

Hadoop學習----------在Eclipse中執行wordCount到若干問題

執行hadoop程式時,有時候會報以下錯誤:

org.apache.hadoop.dfs.SafeModeException: Cannot delete /user/hadoop/input. Name node is in safe mode
這個錯誤應該還滿常見的吧(至少我執行的時候是這樣的)

那我們來分析下這個錯誤,從字面上來理解:
Name node is in safe mode

說明Hadoop的NameNode處在安全模式下。
那什麼是Hadoop的安全模式呢?
在分散式檔案系統啟動的時候,開始的時候會有安全模式,當分散式檔案系統處於安全模式的情況下,檔案系統中的內容不允許修改也不允許刪除,直到安全模式結束。安全模式主要是為了系統啟動的時候檢查各個DataNode上資料塊的有效性,同時根據策略必要的複製或者刪除部分資料塊。執行期通過命令也可以進入安全模式。在實踐過程中,系統啟動的時候去修改和刪除檔案也會有安全模式不允許修改的出錯提示,只需要等待一會兒即可。

現在就清楚了,那現在要解決這個問題,我想讓Hadoop不處在safe mode 模式下,能不能不用等,直接解決呢?
答案是可以的,只要在Hadoop的目錄下輸入:
bin/hadoop dfsadmin -safemode leave

也就是關閉Hadoop的安全模式,這樣問題就解決了。

之前在hadoop執行過程中使用了"ctrl+c"操作
再次使用hadoop時出現“Name node is in safe mode”提示:
[email protected]:~/hadoop/hadoop-0.20.2# bin/hadoop fs -put conf input
put: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/root/input/conf. Name node is in safe mode.

-----------------------------
最近在測試hadoop,但是沒想到在reduce時卡點,
沒辦法只好Ctrl+c,但是問題也就跟著來了XD
先將hadoop停止後,再啟動hadoop
然後要刪除DFS裡的資料時,
就出現name node is in safe mode,就沒辦法刪除資料啦!
找了好久才找到答案,

bin/hadoop dfsadmin -safemode leave
就可以把safemode解除,為了這個問題煩惱了好久Orz
-----------------------------
safemode模式
NameNode在啟動的時候首先進入安全模式,如果datanode丟失的block達到一定的比例(1-dfs.safemode.threshold.pct),則系統會一直處於安全模式狀態即只讀狀態。
dfs.safemode.threshold.pct(預設值0.999f)表示HDFS啟動的時候,如果DataNode上報的block個數達到了元資料
記錄的block個數的0.999倍才可以離開安全模式,否則一直是這種只讀模式。如果設為1則HDFS永遠是處於SafeMode。 下面這行摘錄自NameNode啟動時的日誌(block上報比例1達到了閥值0.9990) The ratio of reported blocks 1.0000 has reached the threshold 0.9990. Safe mode will be turned off automatically in 18 seconds. hadoop dfsadmin -safemode leave 有兩個方法離開這種安全模式 1. 修改dfs.safemode.threshold.pct為一個比較小的值,預設是0.999。 2. hadoop dfsadmin -safemode leave命令強制離開 http://bbs.hadoopor.com/viewthread.php?tid=61&extra=page%3D1 ----------------------------- Safe mode is exited when the minimal replication condition is reached, plus an extension time of 30 seconds. The minimal replication condition is when 99.9% of the blocks in the whole filesystem meet their minimum replication level (which defaults to one, and is set by dfs.replication.min). 安全模式的退出前提 - 整個檔案系統中的99.9%(預設是99.9%,可以通過dfs.safemode.threshold.pct設定)的Blocks達到最小備份級別(預設是1,可以通過dfs.replication.min設定)。 dfs.safemode.threshold.pct    float    0.999 The proportion of blocks in the system that must meet the minimum replication level defined by dfs.rep lication.min before the namenode will exit safe mode. Setting this value to 0 or less forces the name-node not to start in safe mode. Setting this value to more than 1 means the namenode never exits safe mode. ----------------------------- 使用者可以通過dfsadmin -safemode value   來操作安全模式,引數value的說明如下: enter - 進入安全模式 leave - 強制NameNode離開安全模式 get -   返回安全模式是否開啟的資訊 wait - 等待,一直到安全模式結束。

描述:在window下使用Eclipse進行hadoop的程式編寫,然後Run on hadoop 後,出現如下錯誤:

11/10/28 16:05:53 INFO mapred.JobClient: Running job: job_201110281103_0003 11/10/28 16:05:54 INFO mapred.JobClient: map 0% reduce 0% 11/10/28 16:06:05 INFO mapred.JobClient: Task Id : attempt_201110281103_0003_m_000002_0, Status : FAILED org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=DrWho, access=WRITE, inode="hadoop":hadoop:supergroup:rwxr-xr-x at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

解決方法:

  到伺服器上修改hadoop的配置檔案:conf/hdfs-core.xml, 找到 dfs.permissions 的配置項 , 將value值改為 false

<property> <name>dfs.permissions</name> <value>false</value> <description> If "true", enable permission checking in HDFS. If "false", permission checking is turned off, but all other behavior is unchanged. Switching from one parameter value to the other does not change the mode, owner or group of files or directories. </description> </property>

修改完貌似要重啟下hadoop的程序才能生效

開發環境:win xp sp3 ,   Eclipse 3.3  ,   hadoop-0.20.2    

hadoop伺服器部署環境: ubuntu 10.10  ,   hadoop-0.20.2  

小結:  接觸Hadoop沒多久,不知道這樣修改對叢集的安全性有啥影響。

//補充:

後來google到一篇文章,解釋了錯誤出現的原因,原文地址如下:

因為Eclipse使用hadoop外掛提交作業時,會預設以 DrWho 身份去將作業寫入hdfs檔案系統中,對應的也就是 HDFS 上的/user/xxx ,

我的為/user/hadoop ,   由於 DrWho 使用者對hadoop目錄並沒有寫入許可權,所以導致異常的發生。他提供的解決方法為:

放開 hadoop 目錄的許可權 , 命令如下 :$ hadoop fs -chmod 777 /user/hadoop 

啟動Hadoop時報了一個警告資訊,我安裝的Hadoop版本是hadoop1.2.1,具體警告資訊如下:

Shell程式碼  收藏程式碼
  1. [[email protected] hadoop-1.2.1]# ./bin/start-all.sh   
  2. Warning: $HADOOP_HOME is deprecated.  

 網上的說法是因為Hadoop本身對HADOOP_HOME做了判斷,具體在bin/hadoop和bin/hadoop-config.sh裡。在hadoop-config.sh裡有如下的配置: 

Shell程式碼  收藏程式碼
  1. if [ "$HADOOP_HOME_WARN_SUPPRESS" = "" ] && [ "$HADOOP_HOME" != "" ]; then  
  2.   echo "Warning: \$HADOOP_HOME is deprecated."1>&2
  3.   echo 1>&2
  4. fi  

 對於這個警告問題,解決方法如下: 

1.註釋掉hadoop-config.sh裡的上面給出的這段if fi配置(不推薦)

2.增加一個環境變數:/etc/profile

export HADOOP_HOME_WARN_SUPPRESS=1

注:修改完後需要執行source操作使其生效

Shell程式碼  收藏程式碼
  1. [[email protected] ~]# source /etc/profile 

 執行完後我們可以檢驗一下配置是否成功,重新執行start-all.sh指令碼:

Shell程式碼  收藏程式碼
  1. [[email protected] hadoop-1.2.1]# ./bin/start-all.sh   
  2. starting namenode, logging to /root/hadoop-1.0.4/libexec/../logs/hadoop-root-namenode-localhost.out  
  3. localhost: starting datanode, logging to /root/hadoop-1.0.4/libexec/../logs/hadoop-root-datanode-localhost.out  
  4. localhost: starting secondarynamenode, logging to /root/hadoop-1.0.4/libexec/../logs/hadoop-root-secondarynamenode-localhost.out  
  5. starting jobtracker, logging to /root/hadoop-1.0.4/libexec/../logs/hadoop-root-jobtracker-localhost.out  
  6. localhost: starting tasktracker, logging to /root/hadoop-1.0.4/libexec/../logs/hadoop-root-tasktracker-localhost.out  

 沒有出現Warning: $HADOOP_HOME is deprecated,說明問題已經解決。

如果遇到Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS: hdfs expected: file:///之類的異常,需要將${hadoop.root}/conf/目錄的hadoop配置檔案core-site.xmlhdfs-site.xmlmapred-site.xml拷貝到eclipse專案的bin目錄裡面

ermission denied: user=root, access=WRITE, inode="hadoop":hadoop:supergroup:rwxr-xr-x

org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="hadoop":hadoop:supergroup:rwxr-xr-x
<pre name="code" id="best-content-1006820699" class="best-text mb-10" style="margin-top:0px; margin-bottom:10px; padding:0px; font-family:arial,'courier new',courier,宋體,monospace; white-space:pre-wrap; word-wrap:break-word; color:rgb(51,51,51); font-size:14px; line-height:24px; background-color:rgb(241,254,221)">提示往HDFS寫檔案是不容許的
在conf/hdfs-site.xml中加入
<pre name="code" id="best-content-1006820699" class="best-text mb-10" style="margin-top:0px; margin-bottom:10px; padding:0px; font-family:arial,'courier new',courier,宋體,monospace; white-space:pre-wrap; word-wrap:break-word; color:rgb(51,51,51); font-size:14px; line-height:24px; background-color:rgb(241,254,221)"><property>
<name>dfs.permissions</name>
<value>false</value>
</property>


相關推薦

Hadoop學習----------在Eclipse執行wordCount若干問題

執行hadoop程式時,有時候會報以下錯誤: org.apache.hadoop.dfs.SafeModeException: Cannot delete /user/hadoop/input. Name node is in safe mode 這個錯誤應該還滿常

eclipse編寫HadoopWordCount程式,並在eclipse執行

基於Windows7 + jdk1.8.0_162 + eclipse4.7.2 + Hadoop2.7.7 一、安裝eclipse(自行百度) 二、安裝jdk(自行百度) 三、下載maven倉庫並在eclipse中配置maven環境(後面的文章講) 四、在eclipse中新建一個maven

Windows Eclipse進行WordCount報錯org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/Strin

報錯:Exception inthread "main" java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z 解決: C:\Windo

hadoop叢集在eclipse執行mapreduce的一些問題

有一個問題,配置好了分散式集群后,把mapreduce程式打包成jar在命令列可以跑成功,得到結果;但是在eclipse中執行就會報錯(class $map not found)就是說找不到map類。 最終問題原因及解決辦法: 在專案src目錄下匯入core-site.x

Eclipse執行Servlet出現HTTP Status *** 的若干錯誤解決

這兩天一直在調Eclipse中執行Servlet的簡單程式可是會出現若干種錯誤,網上查了好多,大家東拉西扯,可是多種解決辦法沒有一種適合我,經過一整天努力,終於解決了,現撰文分享,希望廣大罵農朋友受益。 首先想說我用的是Eclipse JAVA EE版本的平臺,至於MyEc

spark學習1——配置hadoop 單機模式並執行WordCount例項(ubuntu14.04 & hadoop 2.6.0)

1. 安裝SSH  hadoop是採用SSH進行通訊的 ,此時要設定密碼為空,即不需要密碼登陸,免去每次登陸時都要輸入密碼,當叢集較大時該步驟顯得尤為重要。     $ sudo apt-get install ssh 安裝完成後啟動服務:     $ /etc/init.

Eclipse執行Hadoop程式的各種問題

     搭建了一個Hadoop叢集(一個master,三個slave),參照Hadoop實戰上的wordcount程式碼,在eclipse執行,但是在web頁面上查不到該job的id,後來發現是在單機上執行,那搭建這個叢集還有什麼意義,於是在網上查詢答案,試著在eclip

eclipse執行wordcount報錯 java.lang.ClassNotFoundException 解決辦法

eclipse下執行wordcount報錯 java.lang.classnotfoundexception 解決辦法eclipse下執行wordcount報錯 java.lang.ClassNotFoundException17/08/29 07:52:54 INFO Configuration.depre

03-maven學習-eclipse創建maven項目

reference 一個 http 圖片 col 項目 默認 package ren 一,更改eclipse默認的maven配置 window->preference 選擇本地maven目錄 一直確定後 二,更改maven默認settings window

Eclipse執行maven命令(轉載)

pom 下載 http ssp pom.xml文件 soft 讓我 generate fill 轉載自:http://blog.csdn.net/u011939453/article/details/43017865 1、如下圖,右擊需要執行maven命令的工程,選擇

eclipse執行tomcat出現錯誤:-Djava.endorsed.dirs=/users/huchao/library/tomcat-9/endorsed is not supported

-Djava.endorsed.dirs=/users/huchao/library/tomcat-9/endorsed is not supported. Endorsed standards and standalone APIs in modular form will be supported vi

Eclipse執行Maven打包編譯時出現:Perhaps you are running on a JRE rather than a JDK?

出現錯誤後,查看了許多網友的解決方式,但都沒有解決我遇到的問題,可能是情況還是有些許的不同;下面直接說說我的問題的解決辦法,希望對大家有所幫助;Eclipse中Maven報錯資訊如下: 本以為可能是Eclipse配置Maven沒配置好,或者是jdk和jre環境出現問題,後來在cmd視窗找到

eclipse執行叢集版MapReduce程式

我們在windows下的eclipse直接將mapReduce程式傳送到hadoop叢集,在叢集上跑mapReduce程式。 1. 首先我們需要配置hadoop叢集的引數 我們可以通過程式碼的方式進行配置,也可以從hadoop叢集中直接下載配置檔案 下載好的配置檔案直接放在

eclipse執行web專案埠號被佔用

在eclipse中啟動Tomcat出現錯誤提示: Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The server may already

eclipse執行team->pull出現the current branch is not configured for pull

今天在github修改檔案之後想同步到本地工程,在eclipse中點選team–>pull時出現如下提示: 解決方法: 開啟所在倉庫的.git資料夾,修改config檔案,加入如下引數: [branch "master"] remote = master

如何把MyEclipse的web專案匯入到Eclipse執行

如何把MyEclipse中的web專案匯入到Eclipse中執行 有時我們需要將MyEclipse中的專案匯入到Eclipse中執行,如果不注意到一些細節,會造成無法執行的後果。下面就說說具體操作: 如何匯入到Eclipse就不在重述了,匯入後出現如下錯誤: 與上面Eclipse生成的w

如何在eclipse執行java檔案

很多像我這樣的小白在學習中總會遇到各種問題。 連入門都得靠摸索。 方法一: (1):新建一個專案 可以是java project也可以就用project (2):有了工程後,在src檔案下有兩種操作方式。 1:直接在預設包下執行java檔案 a:複製java檔

MYECLIPSE專案匯入ECLIPSE執行

第一步: 將MYECLIPSE專案匯入到ECLIPSE中 第二步: 選中專案,右擊,選擇PROPERTIE==》PROJECT FACES,選中DYNAMIC WEB MODUEL(版本選2.5)、JAVA(版本選擇1.6以上)以及JAVASCRIPT。點選“應用”,點選“確定”。

Eclipse執行sql指令碼檔案

在Eclipse中匯入或新建sql指令碼檔案(.sql檔案),選擇指定的資料庫執行 1、在Data Source Explorer 下的Database Connections右鍵New 如果沒有Data Sourse Explorer檢視,依照如下方法顯示 2、選擇資料庫型別

Hadoop學習之idea開發wordcount例項

在使用idea開發wordcount例項中,首先構建一個maven工程,需要引入的依賴有: <repositories> <repository> <id>apache</id> <