Hadoop(一)基礎知識記錄

本文主要介紹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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章