數據倉庫 — 03_Hadoop的安裝(集羣配置、免密登陸、rsync遠程同步工具)


歡迎訪問筆者個人技術博客:http://rukihuang.xyz/

學習視頻來源於尚硅谷,視頻鏈接:尚硅谷大數據項目數據倉庫,電商數倉V1.2新版

,Respect!

1 安裝hadoop

1.1 將hadoop導入到/opt/software中

  • 我使用xftp實現文件上傳

1.2 安裝hadoop

  1. 解壓
tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/

1.3 添加hadoop環境變量

  • /etc/profile.d/env.sh中添加hadoop環境變量
##HADOOP_HOME 
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
  • 使配置文件生效
source /etc/profile.d/env.sh
  • 檢查環境變量是否生效
hadoop version

在這裏插入圖片描述

1.4 hadoop的目錄結構

在這裏插入圖片描述

2 hadoop集羣配置

2.1 集羣配置

2.1.2 集羣部署規劃

hadoop102 hadoop103 hadoop104
HDFS NameNode DataNode DateNode SecondaryNameNode DataNode
YARN NodeManager ResourceManager NodeManager NodeManager

2.1.3 配置集羣

  • 需要配置的文件,在/opt/module/hadoop-2.7.2/etc/hadoop目錄下
    • core-site.xml
    • hdfs-site.xml
    • yarn-site.xml
    • mapred-site.xml
    • hadoop-env.sh
    • yarn-env.sh
    • mapred-env.sh
    • slaves

2.1.3.1 核心配置文件 core-site.xml

  • 修改core-site.xml
vim core-site.xml
  • configuration標籤下添加如下配置
<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop102:9000</value>
</property>
<!-- 指定 Hadoop 運行時產生文件的存儲目錄 -->
<property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>

2.1.3.2 HDFS配置文件 hadoop-env.sh/hdfs-site.xml

  • 修改hadoop-env.sh
vim hadoop-env.sh
  • 修改jdk環境變量路徑(25行)
export JAVA_HOME=/opt/module/jdk1.8.0_144
  • 修改hdfs-site.xml
vim hdfs-site.xml
  • configuration標籤下添加如下配置
<property>
        <name>dfs.replication</name>
        <value>1</value>
</property>
<!-- 指定 Hadoop 輔助名稱節點主機配置 -->
<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:50090</value>
</property>

2.1.3.3 YARN配置文件 yarn-env.sh/yarn-site.xml

  • 修改yarn-env.sh
vim  yarn-env.sh
  • 修改jdk環境變量路徑(24行)
export JAVA_HOME=/opt/module/jdk1.8.0_144
  • 修改yarn-site.xml
vim yarn-site.xml
  • configuration標籤下添加如下配置
<!-- Reducer 獲取數據的方式 -->
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地址 -->
<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop103</value>
</property>
<!-- 日誌聚集功能 -->
<property>
        <name>yarn.log-aggregation.enable</name>
        <value>true</value>
</property>
<!-- 日誌保留設置7天 -->
<property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
</property>

2.1.3.4 MapReduce配置文件 mapred-env.sh/mapred-site.xml

  • 修改mapred-env.sh
vim  mapred-env.sh
  • 修改jdk環境變量路徑(16行)
export JAVA_HOME=/opt/module/jdk1.8.0_144
  • 修改mapred-site.xml
vim mapred-site.xml
  • configuration標籤下添加如下配置
<!-- 指定 MR 運行在 Yarn 上 -->
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
<!-- 歷史服務器端地址 -->
<property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop102:10020</value>
</property>
<!-- 歷史服務器web端地址 -->
<property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop102:19888</value>
</property>

2.1.3.5 修改slaves

  • 添加集羣主機名
vim slaves
hadoop102
hadoop103
hadoop104

2.1.4 集羣單節點啓動

  1. 如果集羣時第一次啓動,需要格式化NameNode,在/opt/module/hadoop-2.7.2目錄下操作
hadoop namenode -format
  1. 在hadoop102中啓動NameNode
hadoop-daemon.sh start namenode
  1. 在hadoop102、hadoop103、hadoop104中分別啓動DataNode
hadoop-daemon.sh start datanode
  1. 使用jps查看節點啓動情況
jps

2.1.5 SSH免密登陸配置

2.1.5.1 配置SSH

ssh 192.168.222.103
  • 在詢問是否connecting時,輸入yes

2.1.5.2 無密鑰配置

  1. 免密登陸原理

在這裏插入圖片描述

  1. 生成公鑰和私鑰,在~/.ssh目錄下進行。敲3個回車
ssh-keygen -t rsa
  1. 將公鑰拷貝到要免密登錄的目標機器上
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

2.1.5.3 .ssh文件夾下文件功能解釋

文件夾 功能
known_hosts 記錄 ssh 訪問過計算機的公鑰(public key)
id_rsa 生成的私鑰
id_rsa.pub 生成的公鑰
authorized_keys 存放授權過得無密登錄服務器公鑰

2.1.6 編寫集羣分發腳本 xsync

2.1.6.1 scp(secure copy)安全拷貝

  1. scp可以實現服務器與服務器之間的數據拷貝。(from server1 to server2)
  2. 基本語法
命令 遞歸 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑/名稱
scp -r pdir/​fname user@hadoop​host:pdir/​fname
  1. 實例
# 將 hadoop101 中/opt/module 目錄下的軟件拷貝到 hadoop102 上
scp -r /opt/module root@hadoop102:/opt/module

2.1.6.2 rsync遠程同步工具

  1. rsync 主要用於備份和鏡像。具有速度快、避免複製相同內容和支持符號鏈接的優點。

  2. rsync 和 scp 區別:用 rsync 做文件的複製要比 scp 的速度快,rsync 只對差異文件做更

    新。scp 是把所有文件都複製過去。

  3. 基本語法

    1. -r:遞歸
    2. -v:顯示覆制過程
    3. -l:拷貝符號鏈接
命令 遞歸 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑/名稱
rsync -rvl pdir/fname user@hadoophost:pdir/fname
  1. 實例
#把 hadoop101 機器上的/opt/software 目錄同步到 hadoop102 服務器的 root 用戶 下的/opt/目錄
rsync -rvl /opt/software/ root@hadoop102:/opt/software

2.1.6.3 xsync集羣分發腳本 (~/bin/xsync)

  1. 需求:循環複製文件到所有節點的相同目錄下

  2. 創建vim xsync

#!/bin/bash 
#1 獲取輸入參數個數,如果沒有參數,直接退出 
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi

#2 獲取文件名稱 
p1=$1
fname=`basename $p1`
echo fname=$fname 

#3 獲取上級目錄到絕對路徑 
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir 

#4 獲取當前用戶名稱 
user=`whoami`

#5 循環 
for((host=103; host<105; host++)); do
        echo ------------------- hadoop$host -------------- 
        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
  1. 修改腳本xsync,使具有執行權限
chmod 777 xsync
  1. 執行分發腳本,回到/opt/module目錄
xsync hadoop-2.7.2/

2.1.7 羣起集羣

  1. 如果集羣是第一次啓動,需要格式化NameNode注意格式化之前,一定要先停 止上次啓動的所有 namenode 和 datanode 進程,然後再刪除 data 和 log 數據。(/opt/module/hadoop-2.7.2
bin/hdfs namenode -format
  1. 啓動命令
    1. 注意:NameNode 和 ResourceManger 如果不是同一臺機器,不能在 NameNode 上啓 動 YARN,應該在 ResouceManager 所在的機器上啓動 YARN。
#老命令
sbin/start-all.sh

#新(推薦)
#啓動HDFS
sbin/start-dfs.sh
#啓動YARN
sbin/start-yarn.sh
  1. web端查看NameNode:http://hadoop102:50070/

在這裏插入圖片描述

2.1.8 集羣基本測試

2.1.8.1 上傳文件到集羣

  1. 上傳小文件(/opt/module/hadoop-2.7.2
hdfs dfs -mkdir -p /user/ruki/input
hdfs dfs -put wcinput/wc.input /user/ruki/input
  1. 上傳大文件
bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz /user/ruki/input

2.1.8.2 HDFS文件存放路徑

/opt/module/hadoop-2.7.2/data/tmp/dfs/data

2.1.8.3 拼接

cat blk_1073741837>>tmp.file

2.1.8.4 下載

  • /opt/module/hadoop-2.7.2
bin/hadoop fs -get /user/atguigu/input/hadoop-2.7.2.tar.gz ./

2.1.9 集羣啓動/停止方式總結

2.1.9.1 各個組件逐一啓動/停止

  • HDFS
hadoop-daemon.sh start namenode/datanode/secondarynamenode
hadoop-daemon.sh stop namenode/datanode/secondarynamenode
  • YARN
yarn-daemon.sh start / stop resourcemanager / nodemanager

2.1.9.2 各個模塊啓動/停止(配置ssh爲前提)

  • 整體啓動/停止HDFS
start-dfs.sh
stop-dfs.sh
  • 整體啓動/定製YARN
start-yarn.sh
stop-yarn.sh

2.2 項目經驗

2.2.1 HDFS存儲多目錄

  • hdfs-site.xml 文件中配置多目錄,注意新掛載磁盤的訪問權限問題。
<property> 
    <name>dfs.datanode.data.dir</name> 
    <value>file:///${hadoop.tmp.dir}/dfs/data1,file:///hd2/dfs/ data2,file:///hd3/dfs/data3,file:///hd4/dfs/data4</value> 
</property>
  • 開啓目錄數據均衡 /opt/module/hadoop-2.7.2
    • 對於參數 10,代表的是集羣中各個節點的磁盤空間利用率相差不超過 10%
bin/start-balancer.sh –threshold 10
  • 停止數據均衡命令
bin/stop-balancer.sh

2.2.2 支持LZO壓縮配置

  1. 將編譯好的hadoop-lzo-0.4.20.jar 放入 hadoop-2.7.2/share/hadoop/common/
  2. 同步至hadoop103、hadoop104
xsync hadoop-lzo-0.4.20.jar
  1. core-site.xml新增配置 (/opt/module/hadoop-2.7.2/etc/hadoop
<property>
        <name>io.compression.codecs</name>
        <value>
        org.apache.hadoop.io.compress.GzipCodec,
        org.apache.hadoop.io.compress.DefaultCodec,
        org.apache.hadoop.io.compress.BZip2Codec,
        org.apache.hadoop.io.compress.SnappyCodec,
        com.hadoop.compression.lzo.LzoCodec,
        com.hadoop.compression.lzo.LzopCodec
 		</value>
</property>
<property>
        <name>io.compression.codec.lzo.class</name>
        <value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
  1. 同步 core-site.xml 到 hadoop103、hadoop104
xsync core-site.xml
  1. 重啓集羣(/opt/module/hadoop-2.7.2/bin
start-dfs.sh
stop-dfs.sh

2.2.3 LZO創建索引

  • 創建 LZO 文件的索引,LZO 壓縮文件的可切片特性依賴於其索引,故我們需要手動爲 LZO 壓縮文件創建索引。若無索引,則 LZO 文件的切片只有一個。

2.2.4.1 測試

  1. 將 bigtable.lzo(214M)上傳到集羣的根目錄
hadoop fs -mkdir /input
hadoop fs -put bigtable.lzo /input
  1. 對上傳的lzo文件上傳索引
hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /input/bigtable.lzo
  1. 執行wordcount
hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output2

2.2.4 基準測試

2.2.4.1 HDFS寫

  • 寫入10個128mb的文件
hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 128MB

在這裏插入圖片描述

2.2.4.2 HDFS讀

  • 讀取10個128mb的文件
hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 128MB

在這裏插入圖片描述

2.2.4.3 刪除測試生成的數據

hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -clean

3 遇到的問題

3.1 NameNode沒有啓動成功

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