啟動(dòng)HDFS

配置的修改

pom文件

hdfs代碼在hadoop-hdfs-project/hadoop-hdfs中五嫂,pom中關(guān)于依賴的其他hadoop模塊的scope都設(shè)置為了provided统抬,但我們需要在IDEA里啟動(dòng)hdfs,所以扰才,要把這些provided都注釋掉雄右。

<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-annotations</artifactId>
  <!--<scope>provided</scope>-->
</dependency>
<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-auth</artifactId>
  <!--<scope>provided</scope>-->
</dependency>
<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-common</artifactId>
  <!--<scope>provided</scope>-->
</dependency>

hdfs配置文件

core-site.xml

在hadoop-common工程里的src/main/conf/目錄下找到 core-site.xml
配置內(nèi)容如下

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

然后把這個(gè)文件復(fù)制一份剃诅,放到該工程的target/classes/目錄里巷送。

hdfs-site.xml

在hadoop-hdfs-project工程里的hadoop-hdfs模塊下的src/main/conf目錄里找到hdfs-site.xml,配置內(nèi)容如下

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/opt/xxxxxxxx/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/xxxxxxxx/hadoop-2.7.3-src/dfs/data</value>
    </property>
</configuration>

然后把這個(gè)文件復(fù)制一份综苔,放到該工程的target/classes目錄下

關(guān)于webapps

hadoop內(nèi)部有web應(yīng)用對(duì)外提供服務(wù),比如我們常用的50070之類的端口位岔。這部分web應(yīng)用在namenode和datanode啟動(dòng)的時(shí)候都需要加載如筛,編譯完畢的hadoop中,hdfs的web程序放在了 hadoop-hdfs-project/hadoop-hdfs/target/webapps目錄下抒抬。在IDEA里杨刨,classpath被指定到了hadoop-hdfs/target/classes目錄下,代碼里啟動(dòng)的時(shí)候是到classpath里加載webapps的資源的擦剑,找不到就會(huì)報(bào)錯(cuò)妖胀。我的解決辦法是:把hadoop-hdfs-project/hadoop-hdfs/target/webapps目錄完整復(fù)制到hadoop-hdfs-project/hadoop-hdfs/target/classes下。

如果有人知道如何在IDEA里給classpath添加目錄惠勒,可以在評(píng)論里留言赚抡,多謝各位。

嘗試啟動(dòng)

namenode和datanode是兩個(gè)獨(dú)立的進(jìn)程纠屋,說(shuō)明他們有獨(dú)立的main函數(shù)啟動(dòng)涂臣。namenode的main函數(shù)在hadoop-hdfs模塊下的org.apache.hadoop.hdfs.server.namenode.NameNode類里。datanode的main函數(shù)在org.apache.hadoop.hdfs.server.datanode.DataNode類里售担。 分別右鍵debug一下赁遗。datanode啟動(dòng)沒(méi)有報(bào)錯(cuò),namenode報(bào)了一個(gè)我們非常熟悉的錯(cuò)誤,告訴我們沒(méi)有給NameNode做格式化族铆。

java.io.IOException: NameNode is not formatted.
    at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:225)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:976)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:681)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:585)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:645)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:812)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:796)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1493)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1559)

hdfs在啟動(dòng)的時(shí)候岩四,需要從磁盤(pán)上讀取fsimage和editlog,然后把他們加載到內(nèi)存里來(lái)哥攘,如果磁盤(pán)上沒(méi)有這些信息剖煌,hdfs啟動(dòng)就會(huì)報(bào)這個(gè)錯(cuò)誤,提示我們hdfs沒(méi)有format逝淹。那我們要做的事情就是末捣,去看下namenode 的format動(dòng)作是如何被調(diào)起執(zhí)行的。這個(gè)操作是hdfs的指令创橄,所以箩做,這個(gè)操作應(yīng)該在hdfs的shell腳本里。在hadoop-hdfs-project/hadoop-hdfs/src /main/bin目錄中找到hdfs腳本妥畏,我們看到當(dāng)我們運(yùn)行 hdfs namenode -format命令的時(shí)候邦邦,實(shí)際上安吁,執(zhí)行的主類就是NameNode主類,然后把-format參數(shù)傳了進(jìn)去燃辖。

hdfs文件第134行鬼店,解析到傳入的command是namenode的時(shí)候,指定要執(zhí)行的class名為org.apache.hadoop.hdfs.server.namenode.NameNode

if [ "$COMMAND" = "namenode" ] ; then
  CLASS='org.apache.hadoop.hdfs.server.namenode.NameNode'
  HADOOP_OPTS="$HADOOP_OPTS $HADOOP_NAMENODE_OPTS"
elif [ "$COMMAND" = "zkfc" ] ; then
  CLASS='org.apache.hadoop.hdfs.tools.DFSZKFailoverController'
  HADOOP_OPTS="$HADOOP_OPTS $HADOOP_ZKFC_OPTS"
......

文件末尾黔龟,執(zhí)行的時(shí)候的命令如下

else
  # run it
  exec "$JAVA" -Dproc_$COMMAND $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@"
fi

所以妇智,我們想在IDEA里執(zhí)行hdfs namenode -format,只需要啟動(dòng)NameNode的main方法的時(shí)候氏身,設(shè)置好參數(shù)就可以了巍棱。

namenode設(shè)置啟動(dòng)參數(shù): -format

當(dāng)程序執(zhí)行完畢后,我們從控制臺(tái)看到的輸出如下

Connected to the target VM, address: '127.0.0.1:49792', transport: 'socket'
log4j:WARN No appenders could be found for logger (org.apache.hadoop.util.Shell).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Formatting using clusterid: CID-fd99778b-85d1-4b0e-bbbd-4fd9e93a96ac
Disconnected from the target VM, address: '127.0.0.1:49792', transport: 'socket'

Process finished with exit code 0

到我們配置的hdfs的磁盤(pán)目錄上去看下內(nèi)容蛋欣,發(fā)現(xiàn)數(shù)據(jù)都o(jì)k了航徙。


fsimage生成完畢

看到網(wǎng)上有人寫(xiě)了hdfs namenode -format整體的執(zhí)行流程,地址在這里陷虎。后續(xù)的文章里HDFS的所有常用執(zhí)行操作我也盡量都去做一下分析到踏。

啟動(dòng)HDFS

查看啟動(dòng)腳本后發(fā)現(xiàn),腳本里是先啟動(dòng)namenode尚猿,然后啟動(dòng)datanode的窝稿。我們要做的事情就是,在IDEA里分別啟動(dòng)兩個(gè)進(jìn)程凿掂。namenode和datanode的main函數(shù)所在的類前面已經(jīng)寫(xiě)了讹躯,不再重復(fù)。啟動(dòng)完畢后缠劝,在瀏覽器里訪問(wèn)50070潮梯,就可以看到hdfs已經(jīng)啟動(dòng)成功了。


hdfs啟動(dòng)成功.png

最后惨恭,如果你在虛擬機(jī)上啟動(dòng)了HDFS秉馏,想從其他機(jī)器上訪問(wèn),別忘了設(shè)置防火墻策略脱羡,放行HDFS需要的端口,或者干脆關(guān)掉防火墻萝究。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锉罐,隨后出現(xiàn)的幾起案子帆竹,更是在濱河造成了極大的恐慌,老刑警劉巖脓规,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栽连,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)秒紧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)绢陌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人熔恢,你說(shuō)我怎么就攤上這事脐湾。” “怎么了叙淌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵秤掌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鹰霍,道長(zhǎng)闻鉴,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任衅谷,我火速辦了婚禮椒拗,結(jié)果婚禮上似将,老公的妹妹穿的比我還像新娘获黔。我一直安慰自己,他們只是感情好在验,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布玷氏。 她就那樣靜靜地躺著,像睡著了一般腋舌。 火紅的嫁衣襯著肌膚如雪盏触。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天块饺,我揣著相機(jī)與錄音赞辩,去河邊找鬼。 笑死授艰,一個(gè)胖子當(dāng)著我的面吹牛辨嗽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播淮腾,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼糟需,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了谷朝?” 一聲冷哼從身側(cè)響起洲押,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎圆凰,沒(méi)想到半個(gè)月后杈帐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡专钉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年娘荡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了干旁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡炮沐,死狀恐怖争群,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情大年,我是刑警寧澤换薄,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站翔试,受9級(jí)特大地震影響轻要,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜垦缅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一冲泥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧壁涎,春花似錦凡恍、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至竟坛,卻和暖如春闽巩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背担汤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工涎跨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人崭歧。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓隅很,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親驾荣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子外构,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容