㈠ 在hadoop中什麼命令的功能是將一個或多個
1、啟動hadoop所有進程
start-all.sh等價於start-dfs.sh + start-yarn.sh
但是一般不推薦使用start-all.sh(因為開源框架中內部命令啟動有很多問題)。
2、單進程啟動。
sbin/start-dfs.sh
---------------
sbin/hadoop-daemons.sh --config .. --hostname .. start namenode ...
sbin/hadoop-daemons.sh --config .. --hostname .. start datanode ...
sbin/hadoop-daemons.sh --config .. --hostname .. start sescondarynamenode ...
sbin/hadoop-daemons.sh --config .. --hostname .. start zkfc ... //
sbin/start-yarn.sh
--------------
libexec/yarn-config.sh
sbin/yarn-daemon.sh --config $YARN_CONF_DIR start resourcemanager
sbin/yarn-daemons.sh --config $YARN_CONF_DIR start nodemanager
3、常用命令
1、查看指定目錄下內容
hdfs dfs –ls [文件目錄]
hdfs dfs -ls -R / //顯式目錄結構
eg: hdfs dfs –ls /user/wangkai.pt
2、打開某個已存在文件
hdfs dfs –cat [file_path]
eg:hdfs dfs -cat /user/wangkai.pt/data.txt
3、將本地文件存儲至hadoop
hdfs dfs –put [本地地址] [hadoop目錄]
hdfs dfs –put /home/t/file.txt /user/t
4、將本地文件夾存儲至hadoop
hdfs dfs –put [本地目錄] [hadoop目錄]
hdfs dfs –put /home/t/dir_name /user/t
(dir_name是文件夾名)
5、將hadoop上某個文件down至本地已有目錄下
hadoop dfs -get [文件目錄] [本地目錄]
hadoop dfs –get /user/t/ok.txt /home/t
6、刪除hadoop上指定文件
hdfs dfs –rm [文件地址]
hdfs dfs –rm /user/t/ok.txt
7、刪除hadoop上指定文件夾(包含子目錄等)
hdfs dfs –rm [目錄地址]
hdfs dfs –rmr /user/t
8、在hadoop指定目錄內創建新目錄
hdfs dfs –mkdir /user/t
hdfs dfs -mkdir - p /user/centos/hadoop
9、在hadoop指定目錄下新建一個空文件
使用touchz命令:
hdfs dfs -touchz /user/new.txt
10、將hadoop上某個文件重命名
使用mv命令:
hdfs dfs –mv /user/test.txt /user/ok.txt (將test.txt重命名為ok.txt)
11、將hadoop指定目錄下所有內容保存為一個文件,同時down至本地
hdfs dfs –getmerge /user /home/t
12、將正在運行的hadoop作業kill掉
hadoop job –kill [job-id]
13.查看幫助
hdfs dfs -help
4、安全模式
(1)退出安全模式
NameNode在啟動時會自動進入安全模式。安全模式是NameNode的一種狀態,在這個階段,文件系統不允許有任何修改。
系統顯示Name node in safe mode,說明系統正處於安全模式,這時只需要等待十幾秒即可,也可通過下面的命令退出安全模式:/usr/local/hadoop$bin/hadoop dfsadmin -safemode leave
(2) 進入安全模式
在必要情況下,可以通過以下命令把HDFS置於安全模式:/usr/local/hadoop$bin/hadoop dfsadmin -safemode enter
5、節點添加
添加一個新的DataNode節點,先在新加節點上安裝好Hadoop,要和NameNode使用相同的配置(可以直接從NameNode復制),修改HADOOPHOME/conf/master文件,加入NameNode主機名。然後在NameNode節點上修改HADOOPHOME/conf/master文件,加入NameNode主機名。然後在NameNode節點上修改HADOOP_HOME/conf/slaves文件,加入新節點名,再建立新加節點無密碼的SSH連接,運行啟動命令為:/usr/local/hadoop$bin/start-all.sh
6、負載均衡
HDFS的數據在各個DataNode中的分布可能很不均勻,尤其是在DataNode節點出現故障或新增DataNode節點時。新增數據塊時NameNode對DataNode節點的選擇策略也有可能導致數據塊分布不均勻。用戶可以使用命令重新平衡DataNode上的數據塊的分布:/usr/local/hadoop$bin/start-balancer.sh
7、補充
1.對hdfs操作的命令格式是hdfs dfs
1.1 -ls 表示對hdfs下一級目錄的查看
1.2 -lsr 表示對hdfs目錄的遞歸查看
1.3 -mkdir 創建目錄
1.4 -put 從linux上傳文件到hdfs
1.5 -get 從hdfs下載文件到linux
1.6 -text 查看文件內容
1.7 -rm 表示刪除文件
1.7 -rmr 表示遞歸刪除文件
2.hdfs在對數據存儲進行block劃分時,如果文件大小超過block,那麼按照block大小進行劃分;不如block size的,劃分為一個塊,是實際數據大小。
*****PermissionDenyException 許可權不足**********
hadoop常用命令:
hdfs dfs 查看Hadoop HDFS支持的所有命令
hdfs dfs –ls 列出目錄及文件信息
hdfs dfs –lsr 循環列出目錄、子目錄及文件信息
hdfs dfs –put test.txt /user/sunlightcs 將本地文件系統的test.txt復制到HDFS文件系統的/user/sunlightcs目錄下
hdfs dfs –get /user/sunlightcs/test.txt . 將HDFS中的test.txt復制到本地文件系統中,與-put命令相反
hdfs dfs –cat /user/sunlightcs/test.txt 查看HDFS文件系統里test.txt的內容
hdfs dfs –tail /user/sunlightcs/test.txt 查看最後1KB的內容
hdfs dfs –rm /user/sunlightcs/test.txt 從HDFS文件系統刪除test.txt文件,rm命令也可以刪除空目錄
hdfs dfs –rmr /user/sunlightcs 刪除/user/sunlightcs目錄以及所有子目錄
hdfs dfs –FromLocal test.txt /user/sunlightcs/test.txt 從本地文件系統復制文件到HDFS文件系統,等同於put命令
hdfs dfs –ToLocal /user/sunlightcs/test.txt test.txt 從HDFS文件系統復制文件到本地文件系統,等同於get命令
hdfs dfs –chgrp [-R] /user/sunlightcs 修改HDFS系統中/user/sunlightcs目錄所屬群組,選項-R遞歸執行,跟linux命令一樣
hdfs dfs –chown [-R] /user/sunlightcs 修改HDFS系統中/user/sunlightcs目錄擁有者,選項-R遞歸執行
hdfs dfs –chmod [-R] MODE /user/sunlightcs 修改HDFS系統中/user/sunlightcs目錄許可權,MODE可以為相應許可權的3位數或+/-{rwx},選項-R遞歸執行
hdfs dfs –count [-q] PATH 查看PATH目錄下,子目錄數、文件數、文件大小、文件名/目錄名
hdfs dfs –cp SRC [SRC …] DST 將文件從SRC復制到DST,如果指定了多個SRC,則DST必須為一個目錄
hdfs dfs – PATH 顯示該目錄中每個文件或目錄的大小
hdfs dfs –s PATH 類似於,PATH為目錄時,會顯示該目錄的總大小
hdfs dfs –expunge 清空回收站,文件被刪除時,它首先會移到臨時目錄.Trash/中,當超過延遲時間之後,文件才會被永久刪除
hdfs dfs –getmerge SRC [SRC …] LOCALDST [addnl] 獲取由SRC指定的所有文件,將它們合並為單個文件,並寫入本地文件系統中的LOCALDST,選項addnl將在每個文件的末尾處加上一個換行符
hdfs dfs –touchz PATH 創建長度為0的空文件
hdfs dfs –test –[ezd] PATH 對PATH進行如下類型的檢查: -e PATH是否存在,如果PATH存在,返回0,否則返回1 -z 文件是否為空,如果長度為0,返回0,否則返回1 -d 是否為目錄,如果PATH為目錄,返回0,否則返回1
hdfs dfs –text PATH 顯示文件的內容,當文件為文本文件時,等同於cat,文件為壓縮格式(gzip以及hadoop的二進制序列文件格式)時,會先解壓縮 hdfs dfs –help ls 查看某個[ls]命令的幫助文檔
本文轉自 https://www.cnblogs.com/LHWorldBlog/p/8514994.html
㈡ hdfs命令查找文件所在路徑
指令
hadoop fsck /user/hadoop/filename -files -blocks -locations -racks
-files 文件分塊信息,
-blocks 在帶-files參數後才顯示block信息
-locations 在帶-blocks參數後才顯示block塊所在datanode的具體IP位置,
-racks 在帶-files參數後顯示機架位置
注意:此命令只能在namenode里輸入,在datanode里輸入會報錯的
㈢ spark、hive、impala、hdfs的常用命令
對spark、hive、impala、hdfs的常用命令作了如下總結,歡迎大家補充!
1. Spark的使用:
以通過SecureCRT訪問IP地址:10.10.234.198 為例進行說明:
先輸入:ll //查詢集群是否裝有spark
>su - mr
>/home/mr/spark/bin/beeline -u "jdbc:hive2:/bigdata198:18000/" -n mr -p ""
>show databases; //顯示其中資料庫,例如
>use bigmax; //使用資料庫bigmax
>show tables; //查詢目錄中所有的表
>desc formatted TableName; //顯示表的詳細信息,包括分區、欄位、地址等信息
>desc TableName; //顯示表中的欄位和分區信息
>select count(*) from TableName; //顯示表中數據數量,可以用來判斷表是否為空
>drop table TableName; //刪除表的信息
>drop bigmax //刪除資料庫bigmax
>describe database zxvmax //查詢資料庫zxvmax信息
創建一個表
第一步:
>create external table if not exists lte_Amaze //創建一個叫lte_Amaze的表
( //括弧中每一行為表中的各個欄位的名稱和其所屬的數據類型,並用空格隔開
DateTime String,
MilliSec int,
Network int,
eNodeBID int,
CID int,
IMSI String,
DataType int,
AoA int,
ServerRsrp int,
ServerRsrq int,
TA int,
Cqi0 Tinyint,
Cqi1 Tinyint //注意,最後一個欄位結束後,沒有逗號
)
partitioned by (p_date string, p_hour INT) //以p_date和p_hour作為分區
row format delimited fields terminated by ',' /*/*表中行結構是以逗號作為分隔符,與上邊的表中欄位以逗號結尾相一致*/
stored as textfile; //以文本格式進行保存
第二步:添加分區,指定分區的位置
>alter table lte_Amaze add partition (p_date='2015-01-27',p_hour=0) location'/lte/nds/mr/lte_nds_cdt_uedetail/p_date=2015-01-27/p_hour=0';
//添加lte_Amaze表中分區信息,進行賦值。
//並制定分區對應目錄/lte/nds/mr下表lte_nds_cdt_uedetail中對應分區信息
第三步:察看添加的結果
>show partitions lte_Amaze; //顯示表的分區信息
2. hdfs使用:
#su - hdfs //切換到hdfs用戶下 、
#hadoop fs –ls ///查看進程
# cd /hdfs/bin //進入hdfs安裝bin目錄
>hadoop fs -ls /umtsd/cdt/ //查詢/umtsd/cdt/文件目錄
>hadoop fs -mkdir /umtsd/test //在/umtsd目錄下創建test目錄
>hadoop fs -put /home/data/u1002.csv /impala/data/u5002 //將home/data/u1002.csv這個文件put到hdfs文件目錄上。put到hdfs上的數據文件以逗號「,」分隔符文件(csv),數據不論類型,直接是數據,沒有雙引號和單引號
>hadoop fs -rm /umtsd/test/test.txt //刪除umtsd/test目錄下的test.txt文件
>hadoop fs -cat /umtsd/test/test.txt //查看umtsd/test目錄下的test.txt文件內容
3hive操作使用:
#su - mr //切換到mr用戶下
#hive //進入hive查詢操作界面
hive>show tables; //查詢當前創建的所有表
hive>show databases; //查詢當前創建的資料庫
hive>describe table_name; {或者desc table_name}//查看錶的欄位的定義和分區信息,有明確區分(impala下該命令把分區信息以欄位的形式顯示出來,不怎麼好區分)
hive> show partitions table_name; //查看錶對應數據現有的分區信息,impala下沒有該命令
hive> quit;//退出hive操作界面
hive>desc formatted table_name; 查看錶結構,分隔符等信息
hive> alter table ceshi change id id int; 修改表的列數據類型 //將id數據類型修改為int 注意是兩個id
hive> SHOW TABLES '.*s'; 按正條件(正則表達式)顯示表,
[mr@aico ~]$ exit; 退出mr用戶操作界面,到[root@aico]界面
impala操作使用:
#su - mr //切換到mr用戶下
#cd impala/bin //進入impala安裝bin目錄
#/impala/bin> impala-shell.sh -i 10.10.234.166/localhost //進入impala查詢操作界面
[10.10.234.166:21000] >show databases; //查詢當前創建的資料庫
[10.10.234.166:21000] >use database_name; //選擇使用資料庫,默認情況下是使用default資料庫
[10.10.234.166:21000] > show tables; //查詢當前資料庫下創建的所有表
[10.10.234.166:21000] >describe table_name; //查看錶的欄位的定義,包括分區信息,沒有明確區分
[10.10.234.166:21000] > describe formatted table_name; //查看錶對應格式化信息,包括分區,所屬資料庫,創建用戶,創建時間等詳細信息。
[10.10.234.166:21000] >refresh table_name; //刷新一下,保證元數據是最新的
[10.10.234.166:21000] > alter TABLE U107 ADD PARTITION(reportDate="2013-09-27",rncid=487)LOCATION '/umts/cdt/
MREMITABLE/20130927/rncid=487' //添加分區信息,具體的表和數據的對應關系
[10.10.234.166:21000] > alter TABLE U100 drop PARTITION(reportDate="2013-09-25",rncid=487); //刪除現有的分區,數據與表的關聯
[10.10.234.166:21000] >quit; //退出impala操作界面
[mr@aicod bin]$ impala-shell; 得到welcome impala的信息,進入impala 查詢操作界面
[aicod:21000] > 按兩次tab鍵,查看可以用的命令
alter describe help profile shell values
connect drop history quit show version
create exit insert select unset with
desc explain load set use
㈣ 怎麼用命令行刪除hdfs上的文件
命令:hadoop fs -rmr /home/mm/lily2(要求是你把hadoop的bin加到PATH中,並開啟hadoop)
rm -rf /home/mm/lily2(這是刪除linux文件系統的文件夾)。
刪除目錄
rd /s /q "c:\hello"
rem 加引號可以防止因路徑中有空格而出錯
rem 上面的代碼意為:刪除c:\hello目錄下所有的內容(包括"c:\hello")
刪除文件
del /f /q /s "c:\hello\*.*"
rem 刪除c;\hello文件夾下所有的文件,包括子文件夾的內容,(不包括子文件夾,也不包括c:\hello文件夾)
rem 文件夾=目錄
㈤ HDFS和本地文件系統文件互導
初步了解一下情況,後續根據給出案例
一、從本地文件系統到HDFS
使用hdfs自帶的命令
命令:hdfs dfs -FromLocal inputPath outputPath
inputPath:本地文件目錄的路徑
outputPath:hdfs文件目錄路徑,即存儲路徑
二、從HDFS到本地文件系統
命令:hdfs dfs -ToLocal inputPath outputPath
inputPath:hdfs文件目錄
outputPath:本地文件文件目錄,即本地存儲路徑
因為Hbas和Hive都在存儲在HDFS中,所以可以通過該條命令可以把Hbase和Hive存儲在HDFS中的文件復制出來。但是經過實踐,通過這種方式復制出來的Hbase文件是亂碼。Hive里的文件有時候也會亂碼,這取決於Hive數據的插入方式。
三、文件在HDFS內的移動
1、從Hbase表導出數據到HDFS
命令:hbase org.apache.hadoop.hbase.maprece.Export tableName outputPaht
例子:hbase org.apache.hadoop.hbase.maprece.Export test /user/data
test為需要從Hbase中導出的表,/user/data為hdfs上的路徑,即存儲路徑,如果最後一個參數有前綴file:// 則為本地上的文件存儲系統
2、從HDFS導入到Hbase表中,需要事先建立好表結構
命令:hbase org.apache.hadoop.hbase.maprece.Export tableName inputPaht
例子:hbase org.apache.hadoop.hbase.maprece.Import test1 /temp/part-m-00000
案列:
兩個不同環境數據,數據導入
過程描述:
導出正式環境數據到hdfs中,然後從hdfs中導出到本地,本地傳到測試環境主機,然後從本地導入到hdfs中,再從hdfs中導入到hbase中。
處理過程:
1、注意事項:1、許可權問題使用hdfs:sudo -u hdfs ;
2、存放上傳路徑最好不要在root下
3、上傳完成後,查看是否在使用,數據已經插入。
1、sudo -u hdfs hbase org.apache.hadoop.hbase.maprece.Export ** /hbase/**_bak (導出到hdfs中的**_bak)
2、hdfs dfs -ToLocal /hbase/sw_bak /test (導出hdfs中文件到本地test,註:提前建好目錄)
3、scp -r test_bak [email protected].**:/root/test (傳送目錄到測試環境主機目錄下,註:傳到測試環境後,把文件不要放到root的目錄下,換家目錄下)
4、sudo -u hdfs hdfs dfs -FromLocal /chenzeng/text_bak /data (把sw傳到hdfs 中,注意上傳時,文件路徑要對,放在data路徑下比較好)
5、sudo -u hdfs hbase org.apache.hadoop.hbase.maprece.Import test /data/test_bak/part-m-0000 (注意上次文件)
6、在hbase shell 中查看test :count 'test' 確認是否上傳成功
優化:
truncate 『』
正式環境導入至hdfs中時,
可以直接在另一個環境的執行sudo -u hdfs hbase org.apache.hadoop.hbase.maprece.Import test hdfs://server243:8020/hbase**** 可以直接加主機和對應路徑進行put。
㈥ NoSQL-HDFS-基本概念
Hadoop
文件系統:文件系統是用來存儲和管理文件,並且提供文件的查詢、增加、刪除等操作。
直觀上的體驗:在shell窗口輸入 ls 命令,就可以看到當前目錄下的文件夾、文件。
文件存儲在哪裡?硬碟
一台只有250G硬碟的電腦,如果需要存儲500G的文件可以怎麼辦?先將電腦硬碟擴容至少250G,再將文件分割成多塊,放到多塊硬碟上儲存。
通過 hdfs dfs -ls 命令可以查看分布式文件系統中的文件,就像本地的ls命令一樣。
HDFS在客戶端上提供了查詢、新增和刪除的指令,可以實現將分布在多台機器上的文件系統進行統一的管理。
在分布式文件系統中,一個大文件會被切分成塊,分別存儲到幾台機器上。結合上文中提到的那個存儲500G大文件的那個例子,這500G的文件會按照一定的大小被切分成若干塊,然後分別存儲在若乾颱機器上,然後提供統一的操作介面。
看到這里,不少人可能會覺得,分布式文件系統不過如此,很簡單嘛。事實真的是這樣的么?
潛在問題
假如我有一個1000台機器組成的分布式系統,一台機器每天出現故障的概率是0.1%,那麼整個系統每天出現故障的概率是多大呢?答案是(1-0.1%)^1000=63%,因此需要提供一個容錯機制來保證發生差錯時文件依然可以讀出,這里暫時先不展開介紹。
如果要存儲PB級或者EB級的數據,成千上萬台機器組成的集群是很常見的,所以說分布式系統比單機系統要復雜得多呀。
這是一張HDFS的架構簡圖:
client通過nameNode了解數據在哪些DataNode上,從而發起查詢。此外,不僅是查詢文件,寫入文件的時候也是先去請教NameNode,看看應該往哪個DateNode中去寫。
為了某一份數據只寫入到一個Datanode中,而這個Datanode因為某些原因出錯無法讀取的問題,需要通過冗餘備份的方式來進行容錯處理。因此,HDFS在寫入一個數據塊的時候,不會僅僅寫入一個DataNode,而是會寫入到多個DataNode中,這樣,如果其中一個DataNode壞了,還可以從其餘的DataNode中拿到數據,保證了數據不丟失。
實際上,每個數據塊在HDFS上都會保存多份,保存在不同的DataNode上。這種是犧牲一定存儲空間換取可靠性的做法。
接下來我們來看一下完整的文件寫入的流程:
大文件要寫入HDFS,client端根據配置將大文件分成固定大小的塊,然後再上傳到HDFS。
讀取文件的流程:
1、client詢問NameNode,我要讀取某個路徑下的文件,麻煩告訴我這個文件都在哪些DataNode上?
2、NameNode回復client,這個路徑下的文件被切成了3塊,分別在DataNode1、DataNode3和DataNode4上
3、client去找DataNode1、DataNode3和DataNode4,拿到3個文件塊,通過stream讀取並且整合起來
文件寫入的流程:
1、client先將文件分塊,然後詢問NameNode,我要寫入一個文件到某個路徑下,文件有3塊,應該怎麼寫?
2、NameNode回復client,可以分別寫到DataNode1、DataNode2、DataNode3、DataNode4上,記住,每個塊重復寫3份,總共是9份
3、client找到DataNode1、DataNode2、DataNode3、DataNode4,把數據寫到他們上面
出於容錯的考慮,每個數據塊有3個備份,但是3個備份快都直接由client端直接寫入勢必會帶來client端過重的寫入壓力,這個點是否有更好的解決方案呢?回憶一下mysql主備之間是通過binlog文件進行同步的,HDFS當然也可以借鑒這個思想,數據其實只需要寫入到一個datanode上,然後由datanode之間相互進行備份同步,減少了client端的寫入壓力,那麼至於是一個datanode寫入成功即成功,還是需要所有的參與備份的datanode返回寫入成功才算成功,是可靠性配置的策略,當然這個設置會影響到數據寫入的吞吐率,我們可以看到可靠性和效率永遠是「魚和熊掌不可兼得」的。
潛在問題
NameNode確實會回放editlog,但是不是每次都從頭回放,它會先載入一個fsimage,這個文件是之前某一個時刻整個NameNode的文件元數據的內存快照,然後再在這個基礎上回放editlog,完成後,會清空editlog,再把當前文件元數據的內存狀態寫入fsimage,方便下一次載入。
這樣,全量回放就變成了增量回放,但是如果NameNode長時間未重啟過,editlog依然會比較大,恢復的時間依然比較長,這個問題怎麼解呢?
SecondNameNode是一個NameNode內的定時任務線程,它會定期地將editlog寫入fsimage,然後情況原來的editlog,從而保證editlog的文件大小維持在一定大小。
NameNode掛了, SecondNameNode並不能替代NameNode,所以如果集群中只有一個NameNode,它掛了,整個系統就掛了。hadoop2.x之前,整個集群只能有一個NameNode,是有可能發生單點故障的,所以hadoop1.x有本身的不穩定性。但是hadoop2.x之後,我們可以在集群中配置多個NameNode,就不會有這個問題了,但是配置多個NameNode,需要注意的地方就更多了,系統就更加復雜了。
俗話說「一山不容二虎」,兩個NameNode只能有一個是活躍狀態active,另一個是備份狀態standby,我們看一下兩個NameNode的架構圖。
兩個NameNode通過JournalNode實現同步editlog,保持狀態一致可以相互替換。
因為active的NameNode掛了之後,standby的NameNode要馬上接替它,所以它們的數據要時刻保持一致,在寫入數據的時候,兩個NameNode內存中都要記錄數據的元信息,並保持一致。這個JournalNode就是用來在兩個NameNode中同步數據的,並且standby NameNode實現了SecondNameNode的功能。
進行數據同步操作的過程如下:
active NameNode有操作之後,它的editlog會被記錄到JournalNode中,standby NameNode會從JournalNode中讀取到變化並進行同步,同時standby NameNode會監聽記錄的變化。這樣做的話就是實時同步了,並且standby NameNode就實現了SecondNameNode的功能。
優點:
缺點:
㈦ HDFS筆記
1.Hadoop 分布式 文件系統。特點:性能高、效率高、速度快
2.可以在廉價的機器上運行的 可容錯 文件系統。
當集群中有機器掛掉時,HDFS會自動將掛掉的機器上的任務分配給正常的機器,使任務繼續保持正常工作。
2.HDFS處理更加容易。當對一個大型文件進行寫操作時,如果將該文件整個寫入一個節點,那麼該節點的負載便會急劇增加,這樣就喪失了分布式文件系統的意義。所以,應該利用HDFS將文件拆分成不同的塊,然後將不同的塊分配到不同的節點上去,此時,DFS就需要管理者確定文件如何進行拆分,以及每一個塊應該分配到哪一個節點。對文件進行操作時,在單機情況下,首先需要知道文件被拆分成多少塊,每一個塊被放在了哪一個節點上,以及塊之間的順序(文件的粘連)。而HDFS的出現,使得分布式文件集群不再需要人進行管理,利用HDFS讀取文件時,我們不需要關心文件如何拆分,分配,粘連。只用告訴HDFS文件的路徑即可。
HDFS的指令類似於linux下的指令。
查看文件:hdfs dfs -ls /查詢的文件目錄
刪除文件:hdfs dfs -rm r /刪除的文件
創建文件夾:hdfs dfs -mkdir /文件夾名稱
上傳文件至HDFS:hdfs dfs -put 需要上傳的文件 /上傳的文件路徑
為什麼需要學習HDFS結構?
1.面試中,能夠運用於所有分布式文件系統設計。
既然分布式系統下是多節點運行,那麼節點之間是否通信?slave節點只接受來自master節點的命令,向master節點發送心跳指令,slave節點之間不會主動通信。
a.Master slaver 模式:
1.High consistency:一致性。當文件中的一個數據塊寫入slave節點時,當且僅當數據塊被成功寫入到所有備份的slave節點,slave節點向client反饋寫入操作成功,否則,重傳寫入;
2.Simple design:易設計:不需要考慮子節點如何通信。只需要考慮主節點的工作;
3.單master節點不具有魯棒性。
b.Peer peer 模式:
1.所有的讀寫操作均勻分布在每一個節點上,每一個節點的負載不會很高;
2.任意一個節點掛掉不會影響其他節點;
3.低一致性。沒有數據的復制步驟。
2.更好的理解hadoop生態系統
a.master節點會傳輸數據嗎?
不會,master節點只接收client的請求,決定哪一個slave節點進行讀寫操作,然後,client直接與slave節點進行通信。如果數據從master節點傳輸,那麼master節點就會成為影響數據傳輸的瓶頸。
b.slave節點如何存儲數據?
整個大文件?小的文件塊?。HDFS借鑒GFS的設計理念,以block為傳輸單位,將大文件拆分成一個一個小文件,而一個小文件就是block。block的大小可以由Configuration定義,默認大小是128M。
c.誰來決定將文件拆分成塊?
master?slave?。兩者都不是,由HDFS client決定將大文件拆分成block(塊)。HDFS的目的是將所有的節點包裝起來,可以理解成將所有的節點放在一個黑箱里,我們不需要知道黑箱里到底發生了什麼,只需要告訴黑箱需要做什麼工作,這里的HDFS client相當於HDFS與user通信的中間媒介。HDFS client相當於一個軟體包(api),可以存放在master或者slave或者額外的一個新節點上。
寫入in memory失敗(ACK出現問題)時,master會重新選擇3個新的slave節點。
㈧ HDFS中根目錄下創建user文件夾的命令為
HDFS中根目錄下創建user文件夾的命令為hadoop dfs-mkdir。在hdfs中創建一個input文件夾:hadoopfs-mkdir/input/1、使用參數-p創建多級目錄:hadoopfs-mkdir-p/input/file1。拷貝input目錄到hdfs系統的時候,不是採用的hadoop用戶,而是用root用戶執行的拷貝命令。
hdfs的特點和目標:
1、硬體故障
硬體故障是常態,而不是異常。整個HDFS系統將由數百或數千個存儲著文件數據片段的伺服器組成。實際上它裡面有非常巨大的組成部分,每一個組成部分都很可能出現故障,這就意味著HDFS里的總是有一些部件是失效的,因此,故障的檢測和自動快速恢復是HDFS一個很核心的設計目標。
2、數據訪問
運行在HDFS之上的應用程序必須流式地訪問它們的數據集,它不是運行在普通文件系統之上的普通程序。HDFS被設計成適合批量處理的,而不是用戶互動式的。重點是在數據吞吐量,而不是數據訪問的反應時間,POSIX的很多硬性需求對於HDFS應用都是非必須的,去掉POSIX一小部分關鍵語義可以獲得更好的數據吞吐率。
3、大數據集
運行在HDFS之上的程序有很大量的數據集。典型的HDFS文件大小是GB到TB的級別。所以,HDFS被調整成支持大文件。它應該提供很高的聚合數據帶寬,一個集群中支持數百個節點,一個集群中還應該支持千萬級別的文件。
以上內容參考:網路-hdfs