Docker安裝Hadoop

Docker翔横、Java读跷、Scala、Hadoop禾唁、 Hbase舔亭、Spark。
集群共有5臺機器蟀俊,主機名分別為 h01钦铺、h02、h03肢预、h04矛洞、h05。其中 h01 為 master,其他的為 slave沼本。
JDK 1.8噩峦、Scala 2.11.6、Hadoop 3.2.1抽兆、Hbase 2.1.3识补、Spark 2.4.0

Ubuntu 安裝 Docker

在 Ubuntu 下安裝 Docker 的時候需在管理員的賬號下操作。

wget -qO- https://get.docker.com/ | sh

以 sudo 啟動 Docker 服務辫红。

sudo service docker start

顯示 Docker 中所有正在運行的容器

sudo docker ps
現(xiàn)在的 Docker 網(wǎng)絡能夠提供 DNS 解析功能凭涂,使用如下命令為接下來的 Hadoop 集群單獨構建一個虛擬的網(wǎng)絡。
sudo docker network create --driver=bridge hadoop
以上命令創(chuàng)建了一個名為 Hadoop 的虛擬橋接網(wǎng)絡贴妻,該虛擬網(wǎng)絡內部提供了自動的DNS解析服務切油。## 查看 Docker 中的網(wǎng)絡
sudo docker network ls
可以看到剛剛創(chuàng)建的名為 hadoop 的虛擬橋接網(wǎng)絡。

查找 ubuntu 容器

sudo docker search ubuntu

下載 ubuntu 16.04 版本的鏡像文件

sudo docker pull ubuntu:16.04

根據(jù)鏡像啟動一個容器

sudo docker run -it ubuntu:16.04 /bin/bash
可以看出 shell 已經(jīng)是容器的 shell 了

退出容器

exit

查看本機上所有的容器

sudo docker ps -a

啟動容器

sudo docker start fab4da838c2f

關閉容器

sudo docker stop fab4da838c2f

安裝 Java 與 Scala

在當前容器中將配置配好名惩,導入出為鏡像澎胡。以此鏡像為基礎創(chuàng)建五個容器,并賦予 hostname
進入 h01 容器娩鹉,啟動 Hadoop攻谁。

進入 Ubuntu 容器

sudo docker exec -it fab4da838c2f /bin/bash

修改 apt 源

備份源
cp /etc/apt/sources.list /etc/apt/sources_init.list
先刪除舊源文件
rm /etc/apt/sources.list
這個時候沒有 vim 工具,使用 echo 命令將源寫入新文件

echo "deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe"
> /etc/apt/sources.list

更新源

apt update

安裝 jdk 1.8

?apt install openjdk-8-jdk
測試
?java -version

安裝 Scala

?apt install scala
測試
?scala

安裝 Vim 與 網(wǎng)絡工具包

安裝 vim弯予,用來編輯文件
?apt install vim
安裝 net-tools
?apt install net-tools

安裝 SSH

安裝 SSH巢株,并配置免密登錄,由于后面的容器之間是由一個鏡像啟動的熙涤,所以在當前容器里配置 SSH 自身免密登錄就 OK 了阁苞。

安裝 SSH
?apt-get install openssh-server
安裝 SSH 的客戶端
?apt-get install openssh-client
進入當前用戶的用戶根目錄
?cd ~
生成密鑰,一直回車就行
?ssh-keygen -t rsa -P ""
生成的密鑰在當前用戶根目錄下的 .ssh 文件夾中以 . 開頭的文件與文件夾 ls 是看不懂的祠挫,需要ls -al 才能查看那槽。

將公鑰追加到 authorized_keys 文件中
?cat .ssh/id_rsa.pub >> .ssh/authorized_keys
啟動 SSH 服務
?service ssh start
免密登錄自己
?ssh 127.0.0.1
修改 .bashrc 文件,啟動 shell 的時候等舔,自動啟動 SSH 服務
?vim ~/.bashrc
添加一行
?service ssh start

安裝 Hadoop

下載 Hadoop

?wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz

解壓

到 /usr/local 目錄下面并重命名文件夾
?tar -zxvf hadoop-3.2.1.tar.gz -C /usr/local/
?cd /usr/local/
?mv hadoop-3.2.1 hadoop

添加環(huán)境變量

vim /etc/profile
追加以下內容骚灸,JAVA_HOME 為 JDK 安裝路徑,使用 apt 安裝就是這個慌植,用 update-alternatives --config java可查看

#java
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre    
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib    
export PATH=${JAVA_HOME}/bin:$PATH
#hadoop
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_COMMON_HOME=$HADOOP_HOME 
export HADOOP_HDFS_HOME=$HADOOP_HOME 
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME 
export HADOOP_INSTALL=$HADOOP_HOME 
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 
export HADOOP_CONF_DIR=$HADOOP_HOME 
export HADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexec 
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop
export HDFS_DATANODE_USER=root
export HDFS_DATANODE_SECURE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export HDFS_NAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

使環(huán)境變量生效
?source /etc/profile

修改配置文件

在目錄 /usr/local/hadoop/etc/hadoop 下甚牲,修改 hadoop-env.sh 文件,在文件末尾添加以下信息
?cd /usr/local/hadoop/etc/hadoop
?vim hadoop-env.sh

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
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

修改 core-site.xml蝶柿,修改為
?vim core-site.xml

<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://h01:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop3/hadoop/tmp</value>
    </property>
</configuration>

chmod 777 /home/hadoop3/hadoop/tmp
修改 hdfs-site.xml丈钙,修改為
?vim hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop3/hadoop/hdfs/name</value>
    </property>
    <property>
        <name>dfs.namenode.data.dir</name>
        <value>/home/hadoop3/hadoop/hdfs/data</value>
    </property>
</configuration>

修改 mapred-site.xml,修改為
?vim mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>
            /usr/local/hadoop/etc/hadoop,
            /usr/local/hadoop/share/hadoop/common/*,
            /usr/local/hadoop/share/hadoop/common/lib/*,
            /usr/local/hadoop/share/hadoop/hdfs/*,
            /usr/local/hadoop/share/hadoop/hdfs/lib/*,
            /usr/local/hadoop/share/hadoop/mapreduce/*,
            /usr/local/hadoop/share/hadoop/mapreduce/lib/*,
            /usr/local/hadoop/share/hadoop/yarn/*,
            /usr/local/hadoop/share/hadoop/yarn/lib/*
        </value>
    </property>
</configuration>

修改 yarn-site.xml交汤,修改為
?vim yarn-site.xml

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>h01</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

修改 worker 為
?vim workers

h01
h02
h03
h04
h05

此時雏赦,hadoop已經(jīng)配置好了

在 Docker 中啟動集群

將當前容器導出為鏡像

?exit
?sudo docker commit -m "hadoop" -a "tomding" fab4da838c2f newuhadoop
查看鏡像
?sudo docker images

啟動 5 個終端

啟動 h01 做 master 節(jié)點,所以暴露了端口,以供訪問 web 頁面星岗,--network hadoop 參數(shù)是將當前容器加入到名為 hadoop 的虛擬橋接網(wǎng)絡中填大,此網(wǎng)站提供自動的 DNS 解析功能
?sudo docker run -it --network hadoop -h "h01" --name "h01" -p 9870:9870 -p 8088:8088 newuhadoop /bin/bash
sudo docker run -it --network hadoop -h "h02" --name "h02" newuhadoop /bin/bash
?sudo docker run -it --network hadoop -h "h03" --name "h03" newuhadoop /bin/bash
?sudo docker run -it --network hadoop -h "h04" --name "h04" newuhadoop /bin/bash
?sudo docker run -it --network hadoop -h "h05" --name "h05" newuhadoop /bin/bash

在 h01 主機中,啟動 Haddop 集群

先進行格式化操作俏橘,不格式化操作允华,hdfs會起不來
?cd /usr/local/hadoop/bin
?./hadoop namenode -format
進入 hadoop 的 sbin 目錄
?cd /usr/local/hadoop/sbin/
啟動
?./start-all.sh
查看分布式文件系統(tǒng)的狀態(tài)
?cd /usr/local/hadoop/bin
?./hadoop dfsadmin -report

運行內置WordCount例子

把license作為需要統(tǒng)計的文件
cd /usr/local/hadoop
cat LICENSE.txt > file1.txt
在 HDFS 中創(chuàng)建 input 文件夾
?cd /usr/local/hadoop/bin
./hadoop fs -mkdir /input
上傳 file1.txt 文件到 HDFS 中
./hadoop fs -put ../file1.txt /input
查看 HDFS 中 input 文件夾里的內容
./hadoop fs -ls /input
運作 wordcount 例子程序
./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /input /output
查看 HDFS 中的 /output 文件夾的內容
./hadoop fs -ls /output
查看 part-r-00000 文件的內容
./hadoop fs -cat /output/part-r-00000
Hadoop 部分結束了

安裝 Hbase

在 Hadoop 集群的基礎上安裝 Hbase

下載 Hbase 2.1.3

root@h01:~# wget http://archive.apache.org/dist/hbase/2.1.3/hbase-2.1.3-bin.tar.gz

解壓

到 /usr/local 目錄下面
?tar -zxvf hbase-2.1.3-bin.tar.gz -C /usr/local/

修改環(huán)境變量文件

?vim /etc/profile

export HBASE_HOME=/usr/local/hbase-2.1.3
export PATH=$PATH:$HBASE_HOME/bin

?source /etc/profile
使用 ssh h02/3/4/5 進入其他四個容器,依次在 /etc/profile 文件后追加那兩行環(huán)境變量

在目錄 /usr/local/hbase-2.1.3/conf 修改配置
?cd /usr/local/hbase-2.1.3/conf
修改 hbase-env.sh寥掐,追加
?vim hbase-env.sh

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HBASE_MANAGES_ZK=true

修改配置文件

修改 hbase-site.xml 為
?vim hbase-site.xml

<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://h01:9000/hbase</value>
        </property>
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        <property>
                <name>hbase.master</name>
                <value>h01:60000</value>
        </property>
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>h01,h02,h03,h04,h05</value>
        </property>
        <property>
                <name>hbase.zookeeper.property.dataDir</name>
                <value>/home/hadoop/zoodata</value>
        </property>
</configuration>

修改 regionservers 文件為
?vim regionservers

h01
h02
h03
h04
h05

使用 scp 命令將配置好的 Hbase 復制到其他 4 個容器中
scp -r /usr/local/hbase-2.1.3 root@h02:/usr/local/
scp -r /usr/local/hbase-2.1.3 root@h03:/usr/local/
scp -r /usr/local/hbase-2.1.3 root@h04:/usr/local/
scp -r /usr/local/hbase-2.1.3 root@h05:/usr/local/

啟動 Hbase

cd /usr/local/hbase-2.1.3/bin
./start-hbase.sh
打開 Hbase 的 shell
hbase shell

安裝 Spark

在 Hadoop 的基礎上安裝 Spark

下載 Spark 2.4.0

?wget https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz

解壓

到 /usr/local 目錄下面
tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz -C /usr/local/
修改文件夾的名字
cd /usr/local/
mv spark-2.4.0-bin-hadoop2.7 spark-2.4.0

修改 環(huán)境變量

?vim /etc/profile

export SPARK_HOME=/usr/local/spark-2.4.0
export PATH=$PATH:$SPARK_HOME/bin

source /etc/profile

使用 ssh h02/3/4/5 可進入其他四個容器靴寂,依次在 /etc/profile 文件后追加那兩行環(huán)境變量

在目錄 /usr/local/spark-2.4.0/conf 修改配置
?cd /usr/local/spark-2.4.0/conf
修改文件名
?mv spark-env.sh.template spark-env.sh
修改 spark-env.sh,追加
?vim spark-env.sh

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SCALA_HOME=/usr/share/scala

export SPARK_MASTER_HOST=h01
export SPARK_MASTER_IP=h01
export SPARK_WORKER_MEMORY=4g

修改文件名
?mv slaves.template slaves
修改 slaves 如下
vim slaves

h01
h02
h03
h04
h05

使用 scp 命令將配置好的 Hbase 復制到其他 4 個容器中
scp -r /usr/local/spark-2.4.0 root@h02:/usr/local/
scp -r /usr/local/spark-2.4.0 root@h03:/usr/local/
scp -r /usr/local/spark-2.4.0 root@h04:/usr/local/
scp -r /usr/local/spark-2.4.0 root@h05:/usr/local/

啟動 Spark

cd /usr/local/spark-2.4.0/sbin
./start-all.sh

其他
3.1 HDFS 重格式化問題
參考 https://blog.csdn.net/gis_101/article/details/52821946
重新格式化意味著集群的數(shù)據(jù)會被全部刪除曹仗,格式化前需考慮數(shù)據(jù)備份或轉移問題榨汤;
先刪除主節(jié)點(即namenode節(jié)點)蠕搜,Hadoop的臨時存儲目錄tmp怎茫、namenode存儲永久性元數(shù)據(jù)目錄dfs/name、Hadoop系統(tǒng)日志文件目錄log 中的內容 (注意是刪除目錄下的內容不是目錄)妓灌;
刪除所有數(shù)據(jù)節(jié)點(即datanode節(jié)點) 轨蛤,Hadoop的臨時存儲目錄tmp、namenode存儲永久性元數(shù)據(jù)目錄dfs/name虫埂、Hadoop系統(tǒng)日志文件目錄log 中的內容祥山;

格式化一個新的分布式文件系統(tǒng):
cd /usr/local/hadoop/bin
./hadoop namenode -format

注意事項

Hadoop的臨時存儲目錄tmp(即core-site.xml配置文件中的hadoop.tmp.dir屬性,默認值是/tmp/hadoop-{user.name})掉伏,
如果沒有配置hadoop.tmp.dir屬性缝呕,那么hadoop格式化時將會在/tmp目錄下創(chuàng)建一個目錄,例如在cloud用戶下安裝配置hadoop斧散,那么Hadoop的臨時存儲目錄就位于/tmp/hadoop-cloud目錄下Hadoop的namenode元數(shù)據(jù)目錄(即hdfs-site.xml配置文件中的dfs.namenode.name.dir屬性供常,默認{hadoop.tmp.dir}/dfs/name),
同樣如果沒有配置該屬性鸡捐,那么hadoop在格式化時將自行創(chuàng)建栈暇。必須注意的是在格式化前必須清楚所有子節(jié)點(即DataNode節(jié)點)dfs/name下的內容,否則在啟動hadoop時子節(jié)點的守護進程會啟動失敗箍镜。這是由于源祈,每一次format主節(jié)點namenode,dfs/name/current目錄下的VERSION文件會產(chǎn)生新的clusterID色迂、namespaceID香缺。
但是如果子節(jié)點的dfs/name/current仍存在,hadoop格式化時就不會重建該目錄歇僧,因此形成子節(jié)點的clusterID赫悄、namespaceID與主節(jié)點(即namenode節(jié)點)的clusterID、namespaceID不一致。最終導致hadoop啟動失敗埂淮。

進入:
?sudo docker run -it --network hadoop -h "h01" --name "h01" -p 9870:9870 -p 8088:8088 master /bin/bash
sudo docker run -it --network hadoop -h "h02" --name "h02" slave1 /bin/bash
?sudo docker run -it --network hadoop -h "h03" --name "h03" slave2 /bin/bash
?sudo docker run -it --network hadoop -h "h04" --name "h04" slave3 /bin/bash
?sudo docker run -it --network hadoop -h "h05" --name "h05" slave14 /bin/bash
退出:
sudo docker commit -m "master" -a "tomding" h01 master
sudo docker commit -m "slave1" -a "tomding" h02 slave1
sudo docker commit -m "slave2" -a "tomding" h03 slave2
sudo docker commit -m "slave3" -a "tomding" h04 slave3
sudo docker commit -m "slave4" -a "tomding" h05 slave4

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末姑隅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子倔撞,更是在濱河造成了極大的恐慌讲仰,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痪蝇,死亡現(xiàn)場離奇詭異鄙陡,居然都是意外死亡,警方通過查閱死者的電腦和手機躏啰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門趁矾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人给僵,你說我怎么就攤上這事毫捣。” “怎么了帝际?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵蔓同,是天一觀的道長。 經(jīng)常有香客問我蹲诀,道長斑粱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任脯爪,我火速辦了婚禮则北,結果婚禮上,老公的妹妹穿的比我還像新娘痕慢。我一直安慰自己尚揣,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布守屉。 她就那樣靜靜地躺著惑艇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拇泛。 梳的紋絲不亂的頭發(fā)上滨巴,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音俺叭,去河邊找鬼恭取。 笑死,一個胖子當著我的面吹牛熄守,可吹牛的內容都是我干的蜈垮。 我是一名探鬼主播耗跛,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼攒发!你這毒婦竟也來了调塌?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惠猿,失蹤者是張志新(化名)和其女友劉穎羔砾,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偶妖,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡姜凄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了趾访。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片态秧。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扼鞋,靈堂內的尸體忽然破棺而出申鱼,到底是詐尸還是另有隱情,我是刑警寧澤藏鹊,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布润讥,位于F島的核電站转锈,受9級特大地震影響盘寡,放射性物質發(fā)生泄漏。R本人自食惡果不足惜撮慨,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一竿痰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砌溺,春花似錦影涉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至猖闪,卻和暖如春鲜棠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背培慌。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工豁陆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吵护。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓盒音,卻偏偏與公主長得像表鳍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子祥诽,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容