本文主要介紹Hadoop基本知識,對Hadoop做一個簡單的學習記錄,記錄點滴,與大家一起分享,共同進步;O(∩_∩)O~
核心組成: HDFS分佈式文件系統,存儲海量數據
MapReduce並行處理框架,實現任務分解和調度
低成本 高擴展性
Hive 將sql語句轉化爲任務執行
Hbase 提供數據的隨機讀寫和實時訪問
安裝環境Ubuntu centOS都可以 安裝JDK
UnitedStack配置雲主機
安裝JDK
安裝命令:apt-get install openjdk-7-jdk
自動下載安裝完成
然後進入 vim /etc/profile 設置環境變量
exportJAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
exportJRE_HOME=$JAVA_HOME/jre
exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存之後讓其生效:source /etc/profile
JDK安裝完成
配置Hadoop
wget http://.............tar.gz 安裝包
mvhadoop-1.2.1.tar.gz /opt/ 移動文件到opt目錄下
cd /opt/
ls
tar –zxvfhadoop-1.2.1.tar.gz文件解壓
cdhadoop-1.2.1/ 文件目錄下
ls查看文檔
cd conf/ 配置
下面有四個文件需要我們去配置:mapred-site.xml core-site.xml hdfs-site.xml hadoop-env.sh
第一個:
vim hadoop-env.sh
exportJAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
第二個:
vim core-site.xml
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop</value>
</property/>
<property>
<name>dfs.name.dir</name>
<value>/hadoop/name</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://imooc:9000</value>
</property>
第三個:
vim hdfs-site.xml
<property>
<name>dfs.data.dir</name>
<value>/hadoop/data</value>
</property>
第四個:
vimmapred-site.xml
<property>
<name>mapred.job.tracker</name>
<value>imooc:9001</value>
</property>
vim /etc/profile
加兩條:
exportHADOOP_HOME=/opt/hadoop-1.2.1
exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$PATH
保存然後讓其生效
source /etc/profile
cd bin/
進行一個格式化 hadoop namenode –format
在bin下面
start-all.sh命令
jps查看運行的Java進程
HDFS中的文件被分成塊進行存儲 塊的默認大小爲64MB
Block
NameNode: 管理節點(保存元數據) 文件與數據塊的映射表 數據塊與數據節點的映射表
DataNode: 工作節點 存放數據塊
每個數據塊三個副本,2份在一個機架上,1份在另一個機架上
DataNode定期向NameNode發送心跳信息,確保集羣中的DataNode是active的,避免關機宕機的情況
二級NameNode定期同步元數據映像文件和修改日誌 到Secondary NameNode NameNode發生失效備胎替換故障的NameNode
HDFS的讀寫流程
讀:客戶端向NameNode發請求,NameNode查找這個文件包括哪些塊,而這些塊在哪些個DataNode裏面找得到,從在線的DataNode裏面下載出來然後進行組裝完成後給客戶端
寫:
客戶端首先將文件拆分成block NameNode找出在線的可用的有較大磁盤量的DataNode返回給客戶端,客戶端將第一個block存入DataNode,然後通過一個複製管道將此block進行一個複製到下一個DataNode中,直到副本三份,然後更新元數據,告訴NameNode,進行下一個block(流水線複製)
HDFS 特點: 無法修改 適合一次寫入多次讀取,順序讀寫,不支持多用戶併發寫相同文件
HDFS的使用:
hadoop fs –ls /
建立一個input目錄
hadoop fs –mkdirinput
被建在了這個裏面
hadoop fs –ls/user/root
hadoop fs –puthadoop-env.sh input/
打印看一下
hadoop fs –ls/user/root/input/
查看該文件
hadoop fs –cat input/hadoop-env.sh
獲取下載文件
hadoop fs –get input/hadoop-env.sh hadoop-env2.sh
ls
查看hadoop dfsadmin -report
使用情況
Mapreduce原理
分治的思想
歸約哈希映射
網站日誌數據被分成幾塊,每塊各自做統計,然後將數據交換進行總統計累加,得出排序結果
Mapreduce流程概念等
Job 還有Task 一個job會被分成好幾個task 其中又包括MapTask ReduceTask
JobTrackerTaskTracker
JobTracker的功能:
作業調度 分配任務、監控任務執行進度 監控TaskTracker
TaskTracker的功能:
執行任務 彙報任務狀態
Mapreduce容錯機制:
1、重複執行 4次
2、推測執行 reduce端
將計算慢的那個TaskTracker 重新找一個TaskTracker計算誰先完成就終止另一個節點
應用案例:
wordcount 單詞計數
mapper類 reducer類
javac –classpath/opt/hadoop-1.2.1/hadoop-core-1.2.1.jar:/opt/hadoop-1.2.1/lib/commons-cli-1.2.jar–d word_count_class/ WordCount.java
包含的Hadoop包類
cdword_count_class/
ls 顯示如下:
WordCount.class WordCount$WordCountMap.class WordCount$WordCountReduce.class
然後打包
jar –cvfwordcount.jar *.class
cd input/
ls
file1 file2
提交到HDFS
hadoop fs –mkdirinput_wordcount 創建
hadoop fs –putinput/* input_wordcount/
查看
hadoop fs -ls
查看HDFS
hadoop fs –lsinput_wordcount
hadoop fs –catinput_wordcount/file1
執行運行:
hadoop jarword_count_class/wordcount.jar WordCount input_wordcount output_wordcount
主函數
查看結果
hadoop fs –lsoutput_wordcount
hadoop fs –catoutput_wordcount/……..
排序:
<<=100 >=100 >=200
分區 reduce