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
含義為:
發生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排序。