hadoop簡介

一. 什么是hadoop

hadoop是一個具有分布式存儲和分布式計算能力的分布式軟件系統(tǒng)

hadoop基本特點

  • 可靠性(數(shù)據(jù)冗余)
  • 成本低(把數(shù)據(jù)存儲在普通的計算機上)
  • 效率高(把計算分發(fā)到多個節(jié)點)
  • 可擴容(根據(jù)需求, 動態(tài)的調(diào)整節(jié)點集群的大小)

二. 解決的問題

  • 海量數(shù)據(jù)可靠存儲
  • 海量數(shù)據(jù)分析與計算

三. 應(yīng)用場景

  • 搜索引擎
  • 日志分類和檢索
  • 數(shù)據(jù)報表(一般是內(nèi)網(wǎng), 不需要公網(wǎng)訪問)

四. NFS

NFS即網(wǎng)絡(luò)文件系統(tǒng), 多臺主機共享服務(wù)器中的數(shù)據(jù)


NFS

但是這種文件系統(tǒng)存在一些缺陷

  1. 缺少數(shù)據(jù)冗余
  2. 數(shù)據(jù)集中, 無法進行分布式計算

五. 系統(tǒng)架構(gòu)

主要分為三部分

  • 海量數(shù)據(jù)存儲: hdfs
  • 海量數(shù)據(jù)分析: mapreduce
  • 資源調(diào)度: yarn

5.1 HDFS

HDFS是一個可靠的有容錯機制的分布式文件系統(tǒng)


HDFS architecture
  1. HDFS系統(tǒng)由一個命名節(jié)點(nameNode)和多個數(shù)據(jù)節(jié)點(dataDode)構(gòu)成
  2. 寫數(shù)據(jù)可以在dataNode中直接寫, 也可以先通過nameNode再隨機選一個dataNode
  3. 讀取數(shù)據(jù)的時候, 通過nameNode查詢映射關(guān)系,再查詢指定的數(shù)據(jù)節(jié)點
  4. 支持構(gòu)造一個偽分布式系統(tǒng), 在一臺機器上運行多個數(shù)據(jù)節(jié)點
  5. nameNode響應(yīng)用戶請求,執(zhí)行mkdir put get list等文件管理操作

5.1.1 數(shù)據(jù)分塊

一個文件被分為多個數(shù)據(jù)塊, 數(shù)據(jù)塊的大小可配置, 除了最后一個數(shù)據(jù)塊以外, 其他的數(shù)據(jù)塊大小一樣, 默認128M


enter description here

5.1.2 副本選擇

5.1.2.1 數(shù)據(jù)塊寫

每個數(shù)據(jù)塊的冗余副本數(shù)可配置


replicas wite

首先了解下rack的概念, rack, 機架, 通過配置將一個區(qū)域的機器放到一個機架中, 通常一個機架內(nèi)部節(jié)點之間的通信速度較快
(簡單理解為一個機房即可)

副本選擇算法如下:

  1. 數(shù)據(jù)塊插入的節(jié)點存儲數(shù)據(jù)塊的第一副本(如果是通過nameNode插入, 那么隨機選一個數(shù)據(jù)節(jié)點存儲數(shù)據(jù)塊的第一副本)
  2. 選擇其他的rack(機架), 將第二和第三副本寫入這個rack(機架)的兩個不同的數(shù)據(jù)節(jié)點
  3. 如果副本數(shù)配置大于3, 則剩余的副本隨機分不到不同的dataNode節(jié)點

這種策略既保證了數(shù)據(jù)的可靠性, 又一定程度上提高了性能

示例:

replicas write example

該架構(gòu)中,存在1個hadoop集群, 3個機架(rack), 一個nameNode, 8個dataNode分布在3個機架上
以下是寫請求的全過程:
首先客戶端對文件進行切分

  1. 客戶端向nameNode發(fā)起寫請求
  2. nameNode創(chuàng)建文件名稱, 返回需要插入的節(jié)點列表信息
  3. 客戶端向host2寫入block1
    3.1. host2數(shù)據(jù)寫成功后向客戶端返回響應(yīng)信息
    3.1.1. 客戶端通知nameNode,block1數(shù)據(jù)寫入host2成功
    3.2. host2數(shù)據(jù)寫成功后, host2向rack2(集群中其他的隨機rack)中的host1寫入block1
    3.2.1. host1數(shù)據(jù)寫成功后, 向nameNode同步信息
    3.2.2. host1數(shù)據(jù)寫成功后, host1向rack2(2號副本和3號副本寫入的rack是相同的)中的host3寫入block1
    3.2.2.1. host3數(shù)據(jù)寫入成功后, 向nameNode同步信息
    3.3. host2數(shù)據(jù)寫成功后,向nameNode同步信息
  4. 客戶端向host7寫入block2
    4.1. host7數(shù)據(jù)寫成功后向客戶端返回響應(yīng)信息
    4.1.1. 客戶端通知nameNode,block2數(shù)據(jù)寫入host7成功
    4.2. host7數(shù)據(jù)寫成功后, host7向rack3(集群中其他的隨機rack)中的host8寫入block2
    4.2.1. host8數(shù)據(jù)寫成功后, 向nameNode同步信息
    4.2.2. host8數(shù)據(jù)寫成功后, host8向rack3(2號副本和3號副本寫入的rack是相同的)中的host4寫入block2
    4.2.2.1. host4數(shù)據(jù)寫入成功后, 向nameNode同步信息
    4.3. host2數(shù)據(jù)寫成功后,向nameNode同步信息
  5. 文件寫入完成

注:

  • 3.1和3.2和3.3并行執(zhí)行
  • 4.1和4.2和4.3并行執(zhí)行
  • 3.2.1和3.2.2并行執(zhí)行
  • 4.2.1和4.2.2并行執(zhí)行

在hadoop支持存儲類型和存儲策略之后, 保存文件的時候可以指定存儲策略, 只有支持對應(yīng)的存儲類型的數(shù)據(jù)節(jié)點上才可以
保存這種數(shù)據(jù), 如果支持這種存儲策略的節(jié)點不足(少于副本數(shù)配置),則執(zhí)行備選方案

5.1.2.2 數(shù)據(jù)庫讀

讀取數(shù)據(jù)的時候優(yōu)先選擇離用戶最近的rack(機架)

5.2 MapReduce

主要用于分布式數(shù)據(jù)計算, 可以使用上次分享的spark來替代


map reduce architecture

5.3 Yarn

主要用于資源調(diào)度, 2.x版本引入, 是hadoop重要組件

hadoop1.0和2.0的區(qū)別


1.0和2.0的區(qū)別

yarn在hadoop中的角色


yarn in hadoop

yarn運行過程


enter description here
  1. resourceManager: 資源管理器, 全局只有一個
  2. nodeManager: 節(jié)點管理器, 每個節(jié)點對應(yīng)一個,向resourceManager同步節(jié)點信息(CPU內(nèi)存等等)
  3. application master: 應(yīng)用管理器,負責處理節(jié)點內(nèi)部的任務(wù)的分配
  4. container: 資源的抽象, application master負責分配自己所在節(jié)點的資源給某個task(任務(wù)),這組資源就被抽象為container

客戶端提交任務(wù)到resourceManager, 然后resourceManager進行資源分配

數(shù)據(jù)節(jié)點之間使用RPC通信,比如Container處理后的數(shù)據(jù)傳遞給其他節(jié)點的application master

六. 安裝

  1. 安裝JDK1.8
  2. 安裝hadoop3.1.2

七. 配置

單機偽分布式
1.配置環(huán)境變量~/.bashrc

export JAVA_HOME=/root/jdk1.8.0_121
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/root/hadoop-3.1.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  1. 配置hadoop-env.sh
export JAVA_HOME=/root/jdk1.8.0_121
export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"

  1. 配置core-site.xml
<configuration>
  <!-- 指定hdfs的nameservice -->
  <property>
      <name>fs.defaultFS</name>
      <value>hdfs://server1:9000</value>
  </property>
  <property>
      <name>io.file.buffer.size</name>
      <value>131072</value>
  </property>
</configuration>
  1. 配置mapred-site.xml
<configuration>
  <!-- Configurations for MapReduce Applications: -->
  <property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
   </property>
   <!-- 以下是143內(nèi)存錯誤需要加的參數(shù)-->
   <property>
        <name>mapreduce.map.memory.mb</name>
        <value>1500</value>
        <description>每個Map任務(wù)的物理內(nèi)存限制</description>
    </property>
    <property>
        <name>mapreduce.reduce.memory.mb</name>
        <value>3000</value>
        <description>每個Reduce任務(wù)的物理內(nèi)存限制</description>
    </property>
    <property>
        <name>mapreduce.map.java.opts</name>
        <value>-Xmx1200m</value>
    </property>
    <property>
        <name>mapreduce.reduce.java.opts</name>
        <value>-Xmx2600m</value>
    </property>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
  1. 配置workers
server1 # 本機
  1. 配置yarn-site.xml
<configuration>
    <property>
          <name>yarn.resourcemanager.hostname</name>
          <value>server1</value>
    </property>
    <!-- 配置外網(wǎng)只需要替換外網(wǎng)ip為真實ip,否則默認為 localhost:8088 -->
    <!-- <property>
                 <name>yarn.resourcemanager.webapp.address</name>
          <value>外網(wǎng)ip:8088</value>
    </property> -->
    <!-- Configurations for NodeManager: -->
    <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
    <property>

    <!--執(zhí)行mapreduce任務(wù)時候類不存在錯誤,需要導(dǎo)入以下類庫; 執(zhí)行hadoop classpath命令獲取-->
    <property>
        <name>yarn.application.classpath</name>
        <value>/root/hadoop-3.1.2/etc/hadoop:/root/hadoop-3.1.2/share/hadoop/common/lib/*:/root/hadoop-3.1.2/share/hadoop/common/*:/root/hadoop-3.1.2/share/hadoop/hdfs:/root/hadoop-3.1.2/share/hadoop/hdfs/lib/*:/root/hadoop-3.1.2/share/hadoop/hdfs/*:/root/hadoop-3.1.2/share/hadoop/mapreduce/lib/*:/root/hadoop-3.1.2/share/hadoop/mapreduce/*:/root/hadoop-3.1.2/share/hadoop/yarn:/root/hadoop-3.1.2/share/hadoop/yarn/lib/*:/root/hadoop-3.1.2/share/hadoop/yarn/*</value>
    </property>
    <!-- 以下是143內(nèi)存錯誤需要加的參數(shù)-->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>22528</value>
        <discription>每個節(jié)點可用內(nèi)存,單位MB</discription>
    </property>
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>1500</value>
        <discription>單個任務(wù)可申請最少內(nèi)存混移,默認1024MB</discription>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>16384</value>
        <discription>單個任務(wù)可申請最大內(nèi)存溅潜,默認8192MB</discription>
    </property>
</configuration>
  1. 配置hdfs-site.xml
<configuration>
<!-- Configurations for NameNode: -->
<property>
  <name>dfs.namenode.name.dir</name>
  <value>/var/lib/hadoop/hdfs/name/</value>
</property>
<property>
  <name>dfs.blocksize</name>
  <value>268435456</value>
</property>
<property>
  <name>dfs.namenode.handler.count</name>
  <value>100</value>
</property>
<!-- Configurations for DataNode: -->
<property>
  <name>dfs.datanode.data.dir</name>
  <value>/var/lib/hadoop/hdfs/data/</value>
</property>
<!--副本數(shù)配置, 不可以大于集群中的節(jié)點總數(shù)-->
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>
<property>
  <name>dfs.http.address</name>
  <value>server1:50070</value>
</property>
</configuration>

八. 啟動

start-dfs.sh
start-yarn.sh

兩個網(wǎng)站被啟動
server1:50070 文件查看
server:8088 節(jié)點狀態(tài)查看

九. 基本操作

hadoop fs -mkdir /testdir
hadoop fs -put /root/xxx /testdir
hadoop fs -get xxx xxx
hadoop fs -ls /

# 計算圓周率
hadoop jar hadoop-mapreduce-examples-3.1.2.jar pi 5 5
# word count
hadoop jar hadoop-mapreduce-examples-3.1.2.jar wordcount /wordcount/input /wordcount/output

十. 文件目錄

  • 啟動命令執(zhí)行目錄: /hadoop-3.1.2/sbin
  • 配置文件目錄: /hadoop-3.1.2/etc/hadoop
  • mapreduce example所在目錄: /hadoop-3.1.2/share/hadoop/yarn

十一. 探討

  1. 數(shù)據(jù)分塊后, 數(shù)據(jù)就不完整了, 各個節(jié)點是否可以處理各自的數(shù)據(jù)塊? 比如一個很大的文本文件
    答: mapreduce進行文件split操作后, 除了第一個split塊, 其他的split塊自動跳過第一行, 該行數(shù)據(jù)不作處理
    參考: https://wiki.jikexueyuan.com/project/hadoop/read-data.html
  2. 為啥不把整個文件多所有數(shù)據(jù)塊寫入同一個rack?
    答: 因為寫入多個rack, 讀取的時候從不同的rack獲取數(shù)據(jù), 可以提高讀取數(shù)據(jù)的速度, 不會因為單個rack的帶寬瓶頸
    而降低IO性能
    參考: https://blog.csdn.net/u010670689/article/details/82715181

參考

安裝教程
https://blog.csdn.net/dream_an/article/details/80258283
hdfs 架構(gòu)
http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
hdfs rack只看一張圖
https://blog.51cto.com/zengzhaozheng/1347777
hadoop生態(tài)-圖片好
https://www.cnblogs.com/zhangwuji/p/7594725.html
yarn 架構(gòu)
https://www.cnblogs.com/wcwen1990/p/6737985.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末朱庆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌畦木,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洛二,死亡現(xiàn)場離奇詭異馋劈,居然都是意外死亡,警方通過查閱死者的電腦和手機晾嘶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門妓雾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人垒迂,你說我怎么就攤上這事械姻。” “怎么了机断?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵楷拳,是天一觀的道長。 經(jīng)常有香客問我吏奸,道長欢揖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任奋蔚,我火速辦了婚禮她混,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泊碑。我一直安慰自己坤按,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布馒过。 她就那樣靜靜地躺著臭脓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腹忽。 梳的紋絲不亂的頭發(fā)上来累,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天砚作,我揣著相機與錄音,去河邊找鬼佃扼。 笑死偎巢,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的兼耀。 我是一名探鬼主播压昼,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瘤运!你這毒婦竟也來了窍霞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤拯坟,失蹤者是張志新(化名)和其女友劉穎但金,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體郁季,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡冷溃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了梦裂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片似枕。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖年柠,靈堂內(nèi)的尸體忽然破棺而出凿歼,到底是詐尸還是另有隱情,我是刑警寧澤冗恨,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布答憔,位于F島的核電站,受9級特大地震影響掀抹,放射性物質(zhì)發(fā)生泄漏虐拓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一傲武、第九天 我趴在偏房一處隱蔽的房頂上張望蓉驹。 院中可真熱鬧,春花似錦谱轨、人聲如沸戒幔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至工坊,卻和暖如春献汗,著一層夾襖步出監(jiān)牢的瞬間敢订,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工罢吃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留楚午,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓尿招,卻偏偏與公主長得像矾柜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子就谜,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 【什么是大數(shù)據(jù)怪蔑、大數(shù)據(jù)技術(shù)】 大數(shù)據(jù),又稱巨量資料丧荐,指的是所涉及的數(shù)據(jù)資料量規(guī)模巨大到無法在合理時間內(nèi)通過傳統(tǒng)的應(yīng)...
    kimibob閱讀 2,743評論 0 51
  • HDFS應(yīng)用場景 適合的應(yīng)用場景 存儲非常大的文件:這里非常大指的是幾百M缆瓣、G、或者TB級別虹统,需要高吞吐量弓坞,對延時...
    你值得擁有更好的12138閱讀 265評論 0 0
  • 二 、 HDFS體系結(jié)構(gòu) HDFS 采用的是master/slave架構(gòu)設(shè)計 , 一個HDFS集群包含一個單獨的 ...
    什么都不會的碼農(nóng)丶閱讀 1,537評論 0 1
  • 1.肯定的言辭 :看到并肯定愛人的行為车荔,越欣賞越有愛 2.精心的時刻:留出一段兩個人的交流時間渡冻,二人世界 3.贈送...
    雪山飛狐兒閱讀 408評論 0 1
  • 現(xiàn)在,大部分的網(wǎng)站都支持游客角色夸赫,比如淘寶菩帝,可以在不登錄的情況下瀏覽網(wǎng)站,但是茬腿,想要使用網(wǎng)站提供的功能時呼奢,就必須先...
    是不是不是是閱讀 538評論 0 1