目錄
Hadoop簡介
1.1Hadoop產生的背景
1. HADOOP最早起源於Nutch。Nutch的設計目標是構建一個大型的全網搜索引擎,包括網頁抓取、索引、查詢等功能,但隨着抓取網頁數量的增加,遇到了嚴重的可擴展性問,如何解決數十億網頁的存儲和索引問題。
2. 2003年開始谷歌陸續發表的三篇論文爲該問題提供了可行的解決方案。
- 分佈式文件系統(GFS),可用於處理海量網頁的存儲
- 分佈式計算框架MAPREDUCE,可用於處理海量網頁的索引計算問題。
- BigTable 數據庫:OLTP 聯機事務處理 Online Transaction Processing 增刪改,OLAP 聯機分析處理 Online Analysis Processing 查詢,真正的作用:提供了一種可以在超大數據集中進行實時CRUD操作的功能
3.Nutch的開發人員完成了相應的開源實現HDFS和MAPREDUCE,並從Nutch中剝離成爲獨立項目HADOOP,到2008年1月,HADOOP成爲Apache頂級項目,迎來了它的快速發展期。
1.2 Hadoop的優勢
1)高可靠性:因爲Hadoop假設計算元素和存儲會出現故障,因此它維護多個工作數據副本,在出現故障時可以對失敗的節點重新分佈處理
2)高擴展性:在集羣間分配任務數據,可方便的擴展數以千計的節點。
3)高效性:在MapReduce的思想下,Hadoop是並行工作的,以加快任務處理速度。
4)高容錯性:自動保存多份副本數據,並且能夠自動將失敗的任務重新分配。
1.3 Hadoop組成
1)Hadoop HDFS:一個高可靠、高吞吐量的分佈式文件系統。
2)Hadoop MapReduce:一個分佈式的離線並行計算框架。
3)Hadoop YARN:作業調度與集羣資源管理的框架。
4)Hadoop Common:支持其他模塊的工具模塊。
1.4.1 YARN架構概述
1)ResourceManager(rm): 處理客戶端請求、啓動/監控ApplicationMaster、監控NodeManager、資源分配與調度;
2)NodeManager(nm):單個節點上的資源管理、處理來自ResourceManager的命令、處理來自ApplicationMaster的命令;
3)ApplicationMaster:數據切分、爲應用程序申請資源,並分配給內部任務、任務監控與容錯。
4)Container:對任務運行環境的抽象,封裝了CPU、內存等多維資源以及環境變量、啓動命令等任務運行相關的信息。
1.4.2 MapReduce架構概述 MapReduce將計算過程分爲兩個階段:Map和Reduce
1)Map階段並行處理輸入數據
2)Reduce階段對Map結果進行彙總
1.4 大數據技術生態體系圖
Hadoop生態圈重點組件:
HDFS:Hadoop的分佈式文件存儲系統。
MapReduce:Hadoop的分佈式程序運算框架,也可以叫做一種編程模型。
Hive:基於Hadoop的類SQL數據倉庫工具
Hbase:基於Hadoop的列式分佈式NoSQL數據庫
ZooKeeper:分佈式協調服務組件
Mahout:基於MapReduce/Flink/Spark等分佈式運算框架的機器學習算法庫
Oozie/Azkaban:工作流調度引擎
Sqoop:數據遷入遷出工具
Flume:日誌採集工具
獲取數據的三種方式
1、自己公司收集的數據--日誌 或者 數據庫中的數據
2、有一些數據可以通過爬蟲從網絡中進行爬取
3、從第三方機構購買
Hadoop集羣安裝
集羣規劃如下, 一個namenode節點,3個datanode節點
namenode: s1
datanode: s2-s4
linux的集羣配置: 參照linux集羣的配置
通過secureCRT將jdk,hadoop的安裝包上傳到linux
安裝相應的軟件
0. 將要安裝的軟件的安裝包上傳至用戶home
1. 創建安裝目錄
mkdir /myoft ; chown centos:centos /mysoft
2.解壓安裝包到安裝目錄
tar -zxvf jdk-8u181-linux-x64.tar.gz -C /mysoft
tar -zxvf hadoop-2.7.3.tar.gz -C /mysoft
3.創建軟連接
ln -s /mysoft/hadoop-2.7.3 /mysoft/hadoop
ln -s /mysoft/jdk1.8.0_181 /mysoft/jdk
4.設置環境變量
#jdk configuration
export JAVA_HOME=/mysoft/jdk
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
#hadoop configuration
export HADOOP_HOME=/mysoft/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
5.驗證安裝
java -version
hadoop version
出現上述信息,即爲安裝成功!
hadoop集羣的配置
將配置文件分爲三個集羣模式的配置
========================================================
local:本地模式
pesudo: 僞分佈模式
full: 完全分佈模式
cd /mysoft/hadoop/etc
cp -r hadoop local
cp -r hadoop pesudo
cp -r hadoop full
rm -r hadoop
#hadoop在運行時,讀取的是hadoop下的配置文件,因此當有多種模式的配置時,需要通過建立軟
#連接來切換相應模式的配置文件
ln -s /mysoft/hadoop/etc/full /mysoft/hadoop/etc/hadoop
默認配置文件
core-default.xml --- hadoop-common-2.7.3.jar
hdfs-default.xml---hadoop-hdfs-2.7.3.jar
mapred-default.xml---hadoop-mapreduce-client-core-2.7.3.jar
yarn-default.xml---hadoop-yarn-common-2.7.3.jar
裏面有hadoop配置的詳細說明,我們在使用時只是配置了一小部分
配置文件
core-site.xml hadoop集羣的核心配置
hdfs-site.xml hdfs模塊的相關配置
yarn-site.xml yarn模塊的相關配置
mapred-site.xml mapreduce模塊相關配置
hadoop-env.sh hadoop集羣運行環境設置
slaves 告訴hadoop集羣哪些節點是從節點
<!-- core-site.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<!-- 指定hdfs的訪問地址 -->
<name>fs.defaultFS</name>
<value>hdfs://s1:8020</value>
</property>
<property>
<!-- hadoop 的工作目錄 -->
<name>hadoop.tmp.dir</name>
<value>/home/centos/hadoop</value>
</property>
</configuration>
<!-- hdfs-site.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<!-- hdfs文件系統下每個文件塊的副本數 -->
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
<!-- mapred-site.xml -->
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<!-- 在mapreduce計算時使用什麼模塊來管理 -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
<!-- yarn-site.xml -->
<?xml version="1.0"?>
<configuration>
<property>
<!-- yarn模塊的master節點 -->
<name>yarn.resourcemanager.hostname</name>
<value>s1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
slaves 文件, 每一行代表了一個節點
s2
s3
s4
ssh免密登陸的設置
================================
#生成ssh密碼對
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
#將公密鑰拷貝到其他主機
ssh-copy-id centos@s2
ssh-copy-id centos@s3
ssh-copy-id centos@s4
拷貝hadoop的配置文件到其他結點
==========================================
scp -r /mysoft/hadoop/etc/full centos@s2:/mysoft/hadoop/etc/
scp -r /mysoft/hadoop/etc/full centos@s3:/mysoft/hadoop/etc/
scp -r /mysoft/hadoop/etc/full centos@s4:/mysoft/hadoop/etc/
格式化namenode
=============================================
hdfs namenode -format
出現上述信息,即格式化成功!
start-all.sh
啓動集羣,訪問web-ui出現下列參數,即爲集羣配置成功
==========================================