1. 程式人生 > >Hadoop基礎學習筆記

Hadoop基礎學習筆記

(感謝慕課網)

hadoop生態:

  • HDFS:分散式儲存
  • MapReduce:分散式計算
  • Hive:降低Hadoop使用門檻
  • Hbase:儲存結構化資料的分散式資料庫,與HDFS不同,Hbase提供資料的隨機讀寫和實時訪問,實現對錶資料的訪問功能
  • Zookeeper:節點管理

1、 HDFS:

HDFS的檔案被分成快進行儲存,預設塊大小為64MB
  • NameNode:管理節點,存放檔案元資料
    其中元資料為檔案與資料塊的對映表、資料塊與資料節點的對映表
    NameNode中的內容會定期同步到Secondary NameNode中
  • DataNode:工作節點,存放資料塊
    Hadoop預設把一個數據塊保留3份
    DataNode定期向NameNode傳送心跳資訊
    HDFS適合資料批量讀寫,吞吐量高;適合一次寫入,多次讀取,順序讀寫。
    不適合互動式應用,低延遲很難滿足;不適合多使用者併發寫相同檔案。
  • 檢視HDFS某個目錄下的檔案(如 /user/root):
hadoop fs -ls /user/root
or
hdfs dfs -ls /user/root
  • HDFS下建立資料夾:
hadoop fs -mkdir /input  		
or
hdfs dfs -mkdir /input
  • 傳輸檔案至HDFS:
hadoop fs -put hadoop.txt /input/ 
or
hdfs dfs -put hadoop.txt /input/ 
  • 獲取HDFS下的檔案:
hadoop fs -get /input/hadoop.txt hadoop2.txt
or 
hdfs dfs -get /input/hadoop.txt hadoop2.txt
  • 檢視HDFS下的檔案:
hadoop fs -cat /input/hadoop.txt
or 
hdfs dfs -cat /input/hadoop.txt

使用HDFS遇到的問題:
(1)錯誤表現:
SLF4J: Class path contains multiple
SLF4J bindings.SLF4J: Found binding in [jar:file:/usr/hbase/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/zkpk/hbase-0.98.9-hadoop2/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See

http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
含義為:
發生jar包衝突了:
分別為:
file:/usr/hbase/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class
file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class
移除其中一個jar包即可解決方案:
使用下面命令:

cd /usr/hbase/lib 
rm slf4j-log4j12-1.6.4.jar

問題解決
轉自:https://blog.csdn.net/chuyouyinghe/article/details/79134894
(2)配置完hadoop,使用HDFS的時候出現如下警告資訊:

 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

直接在log4j日誌中去除告警資訊。在/usr/local/hadoop-2.5.2/etc/hadoop/log4j.properties檔案中新增:

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR

轉自:https://blog.csdn.net/l1028386804/article/details/51538611

2、MapReduce

MapReduce是一個平行計算框架,把一個大的任務分成多個小的任務(map),並行執行後合併結果(reduce)
(1)dfs.block.size可調節塊大小。
(2)Map任務數量與maperd.map.tasks和mapred.min.split.size引數有關。
(3)設定combine操作:

job.setCombinerClass(MyReduce.class);

(4)Reduce任務的數量應設定的較大一些,最大值為72.
(5)調節一個節點上的Reduce任務數:

  • 配置檔案中設定maperd.reduce.tasks;
  • 在程式碼中呼叫job.setNumReduceTasks(int n)方法。
    (6)Patitioner、Reducer、輸出檔案三者的數量是相等的。
    (7)Reduce過程會按照key排序。