hadoop fs命令无法使用_Hadoop从入门到入土(三)HDFS集群简单维护及JAVA客户端连接HDFS...
集群簡單維護
查看日志
上篇我們搭建了集群,并且完成了hdfs的搭建,但在我的linux02和linux03上,發現一個問題,我啟動了datanode之后,開始進程還在,一會就自己消失了,這是為什么呢?(如下圖)
查看頁面顯示,也只有一個datanode節點(linux01)上的。
為了查看哪里出現了問題,我們可以查看一下機器上datanode的啟動日志,日志的位置在hadoop下的logs里面,里面存放著日志相關的內容,我們以linux02上的為例:
查看一下datanode的日志? ? tail -100? xxxxxxx-datanode-linux02.log
快速瀏覽一下,留心異常關鍵詞? err、error、exception、not? defined、not? exists? 、not? 之類的
可以看到,如上圖:確實出現了問題,通過問題處,我又發現了關鍵詞:clusterID、UUID等,很明顯是我們的注冊環節出現了問題
這里簡單的闡述一下 datanode和namenode的通信機制吧,這樣更好理解,而且其中也涉及到了clusterID和UUID
如上圖:
1)當有進的節點需要加入到集群當中時(比如HDFS的存儲空間不夠,需要加入新的機器,新的dn),首先會向nn注冊,主動向nn匯報自己機器上的資源情況
2)nn接收匯報,看一下你夠不夠格,你要是還剩下100M的容量,我要你何用?還浪費我nn的管理資源;如果可以,將返回給dn 我們集群的ID :clusterID 和存儲數據塊池ID ?block-id(如下圖)
在/opt/hdpdata/name/current/VERSION? 存儲著namenode的核心數據? 可以看到 集群id和數據塊池id? (linux01)機器
接著我們再看看data下的數據? ?/opt/hdpdata/data/current/VERSION? ??
可以看到集群id和數據塊池id? ,還有一個uuid? 是其唯一標識
接著去查看linux02 機器上datanode相關標識
可以看到uuid確實不一樣,但是BPid和集群id怎么也不一樣呢,很明顯都不是一個集群的了
所以刪掉data文件,在linux02上重新開啟生成注冊
這下子發現果真好了,去頁面上查看一下:
同理,linux03上采用同樣的方法:
最終查看頁面:
成功解決問題!真嗨森~
接著講通信機制
3)新注冊的dn收到了nn老大派來的集群id clusterID(你以后就跟我們一起混了!)還有數據塊池id BP-ID (你以后存數據? 就放這個里面了,聽到了嗎!),然后dn屁顛屁顛很開心,并且生成自己的一個唯一標識uuid
4)dn定期會進行心跳機制,以此來證明自己還活著。。還能正常通信和工作? 通常是3s發送一次心跳
5)如若有一天,某個dn不再發送心跳了;nn這個時候并不會立馬把這個逆子或者叛徒給剔除掉,會在5min中之后進行嘗試連接? ping 通信;如若還是沒有成功,會再過5min種嘗試ping,多次ping還是沒有成功,這個時候,可以認定這個dn已經gg了,就把他剔除了
6)dn還會定期向nn匯報自己的工作情況
7)如若dn上某個數據塊備份丟失,會在nn上任務隊列中產生任務,在dn向nn發送心跳的時候,如果有任務,就會領取,比如副本復制的任務
設置一鍵啟停任務及HDFS命令
配置環境變量
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根目錄下創建一個tom的文件夾
hdfs dfs -mkdir tom /
在頁面上查看
其他一些命令:
一鍵啟停
在? etc/hadoop/workers 配置 需要啟動DataNode的機器名
在啟停腳本中聲明用戶? ?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
一鍵啟動? 在sbin 下? ./start-dfs.sh
一鍵關閉??? 在sbin 下? ./stop-dfs.sh
JAVA客戶端操作HDFS
java客戶端操作集群HDFS 分四步走戰略
1)創建配置文件的對象?
2)獲取HDFS文件系統的對象
3)操作文件系統
4)關閉流資源
上傳文件代碼:
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 { //獲取配置文件的對象 不設置則為默認值 Configuration conf = new Configuration(); //獲取HDFS文件系統的對象 FileSystem fs = FileSystem.newInstance(new URI("hdfs://linux01:8020"), conf, "root"); //操作文件系統 fs.copyFromLocalFile(new Path("E://count.txt"), new Path("/")); //關閉流資源 fs.close(); }}查看網頁上文件
讀取文件代碼:
測試類:
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" ); }}測試結果:
代碼解析:
1)創建配置文件的對象
這個是配置對象,配置一些文件的屬性,比如上傳文件時備份的數量,還有切塊的大小等。【默認備份數量為3,切塊大小為128M】下篇內容會講
有三種配置方式? ?1.默認配置 (就是什么都不寫,什么都不做)? 2.讀取配置文件? ?3.代碼中直接設置? ?從左到右 優先級依次增高
配置文件寫在resources中,xml格式? 嚴格的配置文件
代碼中設置如下:
2)獲取HDFS文件系統對象
FileSystem fs = FileSystem.newInstance(new URI("hdfs://linux01:8020"), conf, "root");3)操作方法??
copyFromLocalFile 從 本地 復制文件到 HDFS 即上傳文件copyToLocalFile 復制文件到本地 即從HDFS上下載文件open(Path path) 打開一個流 用以讀取 HDFS 上的指定路徑的文件等等等等。。。
更多學習、面試資料盡在微信公眾號:Hadoop大數據開發
總結
以上是生活随笔為你收集整理的hadoop fs命令无法使用_Hadoop从入门到入土(三)HDFS集群简单维护及JAVA客户端连接HDFS...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win7旗舰版系统开启硬盘ahci模式的
- 下一篇: 雨林木风win11 64位安全旗舰版镜像