日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hadoop fs命令无法使用_Hadoop从入门到入土(三)HDFS集群简单维护及JAVA客户端连接HDFS...

發(fā)布時(shí)間:2025/3/11 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hadoop fs命令无法使用_Hadoop从入门到入土(三)HDFS集群简单维护及JAVA客户端连接HDFS... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

集群簡(jiǎn)單維護(hù)

查看日志

上篇我們搭建了集群,并且完成了hdfs的搭建,但在我的linux02和linux03上,發(fā)現(xiàn)一個(gè)問題,我啟動(dòng)了datanode之后,開始進(jìn)程還在,一會(huì)就自己消失了,這是為什么呢?(如下圖)

查看頁面顯示,也只有一個(gè)datanode節(jié)點(diǎn)(linux01)上的。

為了查看哪里出現(xiàn)了問題,我們可以查看一下機(jī)器上datanode的啟動(dòng)日志,日志的位置在hadoop下的logs里面,里面存放著日志相關(guān)的內(nèi)容,我們以linux02上的為例:

查看一下datanode的日志? ? tail -100? xxxxxxx-datanode-linux02.log

快速瀏覽一下,留心異常關(guān)鍵詞? err、error、exception、not? defined、not? exists? 、not? 之類的

可以看到,如上圖:確實(shí)出現(xiàn)了問題,通過問題處,我又發(fā)現(xiàn)了關(guān)鍵詞:clusterID、UUID等,很明顯是我們的注冊(cè)環(huán)節(jié)出現(xiàn)了問題

這里簡(jiǎn)單的闡述一下 datanode和namenode的通信機(jī)制吧,這樣更好理解,而且其中也涉及到了clusterID和UUID

如上圖:

1)當(dāng)有進(jìn)的節(jié)點(diǎn)需要加入到集群當(dāng)中時(shí)(比如HDFS的存儲(chǔ)空間不夠,需要加入新的機(jī)器,新的dn),首先會(huì)向nn注冊(cè),主動(dòng)向nn匯報(bào)自己機(jī)器上的資源情況

2)nn接收匯報(bào),看一下你夠不夠格,你要是還剩下100M的容量,我要你何用?還浪費(fèi)我nn的管理資源;如果可以,將返回給dn 我們集群的ID :clusterID 和存儲(chǔ)數(shù)據(jù)塊池ID ?block-id(如下圖)

在/opt/hdpdata/name/current/VERSION? 存儲(chǔ)著namenode的核心數(shù)據(jù)? 可以看到 集群id和數(shù)據(jù)塊池id? (linux01)機(jī)器

接著我們?cè)倏纯磀ata下的數(shù)據(jù)? ?/opt/hdpdata/data/current/VERSION? ??

可以看到集群id和數(shù)據(jù)塊池id? ,還有一個(gè)uuid? 是其唯一標(biāo)識(shí)

接著去查看linux02 機(jī)器上datanode相關(guān)標(biāo)識(shí)

可以看到uuid確實(shí)不一樣,但是BPid和集群id怎么也不一樣呢,很明顯都不是一個(gè)集群的了

所以刪掉data文件,在linux02上重新開啟生成注冊(cè)

這下子發(fā)現(xiàn)果真好了,去頁面上查看一下:

同理,linux03上采用同樣的方法:

最終查看頁面:

成功解決問題!真嗨森~

接著講通信機(jī)制

3)新注冊(cè)的dn收到了nn老大派來的集群id clusterID(你以后就跟我們一起混了!)還有數(shù)據(jù)塊池id BP-ID (你以后存數(shù)據(jù)? 就放這個(gè)里面了,聽到了嗎!),然后dn屁顛屁顛很開心,并且生成自己的一個(gè)唯一標(biāo)識(shí)uuid

4)dn定期會(huì)進(jìn)行心跳機(jī)制,以此來證明自己還活著。。還能正常通信和工作? 通常是3s發(fā)送一次心跳

5)如若有一天,某個(gè)dn不再發(fā)送心跳了;nn這個(gè)時(shí)候并不會(huì)立馬把這個(gè)逆子或者叛徒給剔除掉,會(huì)在5min中之后進(jìn)行嘗試連接? ping 通信;如若還是沒有成功,會(huì)再過5min種嘗試ping,多次ping還是沒有成功,這個(gè)時(shí)候,可以認(rèn)定這個(gè)dn已經(jīng)gg了,就把他剔除了

6)dn還會(huì)定期向nn匯報(bào)自己的工作情況

7)如若dn上某個(gè)數(shù)據(jù)塊備份丟失,會(huì)在nn上任務(wù)隊(duì)列中產(chǎn)生任務(wù),在dn向nn發(fā)送心跳的時(shí)候,如果有任務(wù),就會(huì)領(lǐng)取,比如副本復(fù)制的任務(wù)

設(shè)置一鍵啟停任務(wù)及HDFS命令

配置環(huán)境變量

vi? /etc/profile?

export ?JAVA_HOME=/opt/apps/jdk1.8.0_141
export ?HADOOP_HOME=/opt/apps/hadoop-3.1.1
export ?PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source? /etc/profile

可以查看hdfs下所有的文件

hdfs dfs /

在hdfs根目錄下創(chuàng)建一個(gè)tom的文件夾

hdfs dfs -mkdir tom /

在頁面上查看

其他一些命令:

一鍵啟停

在? etc/hadoop/workers 配置 需要啟動(dòng)DataNode的機(jī)器名

在啟停腳本中聲明用戶? ?sbin/start-dfs.sh sbin/stop-dfs.sh

#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

一鍵啟動(dòng)? 在sbin 下? ./start-dfs.sh

一鍵關(guān)閉??? 在sbin 下? ./stop-dfs.sh

JAVA客戶端操作HDFS

java客戶端操作集群HDFS 分四步走戰(zhàn)略

1)創(chuàng)建配置文件的對(duì)象?

2)獲取HDFS文件系統(tǒng)的對(duì)象

3)操作文件系統(tǒng)

4)關(guān)閉流資源

上傳文件代碼:

package cn.doit19.hadoop.hdfs;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import java.net.URI;public class Demo01 { public static void main(String[] args) throws Exception { //獲取配置文件的對(duì)象 不設(shè)置則為默認(rèn)值 Configuration conf = new Configuration(); //獲取HDFS文件系統(tǒng)的對(duì)象 FileSystem fs = FileSystem.newInstance(new URI("hdfs://linux01:8020"), conf, "root"); //操作文件系統(tǒng) fs.copyFromLocalFile(new Path("E://count.txt"), new Path("/")); //關(guān)閉流資源 fs.close(); }}

查看網(wǎng)頁上文件

讀取文件代碼:

測(cè)試類:

package cn.doit19.hadoop.hdfs;import cn.doit19.hadoop.util.Util;import org.apache.hadoop.fs.FSDataInputStream;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class TestHDFS { public static void main(String[] args) throws Exception { FileSystem fs = Util.getFs(); readFile(fs); } private static void readFile(FileSystem fs) throws IOException { FSDataInputStream open = fs.open(new Path("/count.txt")); BufferedReader br = new BufferedReader(new InputStreamReader(open)); String line = null; while ((line = br.readLine()) != null) { System.out.println(line); } }}

工具類:

package cn.doit19.hadoop.util;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import java.net.URI;public class Util { public static FileSystem getFs() throws Exception { Configuration conf = new Configuration(); return FileSystem.newInstance( new URI("hdfs://linux01:8020"), conf, "root" ); }}

測(cè)試結(jié)果:

代碼解析:

1)創(chuàng)建配置文件的對(duì)象

這個(gè)是配置對(duì)象,配置一些文件的屬性,比如上傳文件時(shí)備份的數(shù)量,還有切塊的大小等?!灸J(rèn)備份數(shù)量為3,切塊大小為128M】下篇內(nèi)容會(huì)講

有三種配置方式? ?1.默認(rèn)配置 (就是什么都不寫,什么都不做)? 2.讀取配置文件? ?3.代碼中直接設(shè)置? ?從左到右 優(yōu)先級(jí)依次增高

配置文件寫在resources中,xml格式? 嚴(yán)格的配置文件

代碼中設(shè)置如下:

2)獲取HDFS文件系統(tǒng)對(duì)象

FileSystem fs = FileSystem.newInstance(new URI("hdfs://linux01:8020"), conf, "root");

3)操作方法??

copyFromLocalFile 從 本地 復(fù)制文件到 HDFS 即上傳文件copyToLocalFile 復(fù)制文件到本地 即從HDFS上下載文件open(Path path) 打開一個(gè)流 用以讀取 HDFS 上的指定路徑的文件

等等等等。。。

更多學(xué)習(xí)、面試資料盡在微信公眾號(hào):Hadoop大數(shù)據(jù)開發(fā)

總結(jié)

以上是生活随笔為你收集整理的hadoop fs命令无法使用_Hadoop从入门到入土(三)HDFS集群简单维护及JAVA客户端连接HDFS...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。