日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数据学习(2-2)- 使用docker安装配置Hadoop环境

發(fā)布時(shí)間:2023/12/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据学习(2-2)- 使用docker安装配置Hadoop环境 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • 我的思路是這樣:

安裝ubuntu系統(tǒng)---->下載docker---->在docker里拉取hadoop鏡像---->在此鏡像里創(chuàng)建三個(gè)容器(Master、Slave1、Slave2)---->完成完全分布式

1.?? 安裝ubuntu系統(tǒng)(無論你是安裝的單系統(tǒng),還是用虛擬機(jī)安裝了ubuntu)

? ? ?? 如果想安裝單系統(tǒng),步驟如下:

(1)? 把ubuntu鏡像下載到電腦桌面(版本自選)。

(2)? 再把ultraiso下載到U盤,然后解壓安裝在U盤

?? (3)? 制作U盤啟動(dòng)工具,參考鏈接為:https://blog.csdn.net/yaoyut/article/details/78003061

????? 在“便捷啟動(dòng)→寫入新的驅(qū)動(dòng)器引導(dǎo)扇區(qū)“這個(gè)步驟中,如果出現(xiàn)設(shè)備正忙,寫入引導(dǎo)扇區(qū)失敗的錯(cuò)誤,這時(shí)你把殺毒軟件還有其他軟件都關(guān)閉,然后把U盤拔下來,再插入,問題就解決了。

?? (4)? 重啟電腦,根據(jù)自己的電腦情況進(jìn)入BOIS界面(相信小伙伴們都用u盤重裝過電腦,這里我就不再贅述),

這時(shí)候參考 :https://blog.csdn.net/ramse/article/details/52716937?

假如你進(jìn)入BOIS界面時(shí)沒有跟鏈接中的界面一樣,那么可能是兩個(gè)問題? a、制作U盤啟動(dòng)失敗,需重新制作。? b、重啟電腦時(shí)沒有把u盤作為首選啟動(dòng)盤,這個(gè)問題百度可以搜到解決。

?? 2.? 安裝docker

參考鏈接為:https://blog.csdn.net/diligent_lee/article/details/79098302

?英語好的可以看這個(gè):https://docs.docker.com/install/linux/docker-ce/ubuntu/#set-up-the-repository

安裝了ubuntu16.04 LTS后,并安裝了docker 18.06.1-ce,如下圖所示

  • zhangqingfeng@zhangqingfeng:~$ docker version
  • Client:
  • Version: 18.06.1-ce
  • API version: 1.38
  • Go version: go1.10.3
  • Git commit: e68fc7a
  • Built: Tue Aug 21 17:24:56 2018
  • OS/Arch: linux/amd64
  • Experimental: false
  • Server:
  • Engine:
  • Version: 18.06.1-ce
  • API version: 1.38 (minimum version 1.12)
  • Go version: go1.10.3
  • Git commit: e68fc7a
  • Built: Tue Aug 21 17:23:21 2018
  • OS/Arch: linux/amd64
  • Experimental: false
  • 這里你可能使用sudo docker version作為命令,如果想去掉sudo,可以參考鏈接:https://www.jianshu.com/p/95e397570896

    3.? 拉取hadoop鏡像,你可以選擇Docker Hub庫或者阿里云庫,我選的是阿里云庫,它有加速器

    首先應(yīng)該注冊(cè):? 阿里云庫:https://cr.console.aliyun.com

    ????????????????????????????? Docker Hub庫: https://hub.docker.com/

    從阿里云庫拉取hadoop鏡像,當(dāng)然里面不是所有鏡像都管用,可以選擇下載的區(qū)域,多試幾次吧

    我拉取的鏡像是:registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop

    ??????????????????????? 和? registry.cn-hangzhou.aliyuncs.com/aofch/hadoop????? 選擇其一即可,我接下來用的第一個(gè)鏡像,因?yàn)檫@個(gè)鏡像把我們需要的工具基本下好了,比如 jdk、hadoop、spark,省了不少事呢!

    因?yàn)榘⒗镌朴屑铀倨?#xff0c;你在找hadoop鏡像的時(shí)候,在網(wǎng)頁左邊會(huì)有”鏡像加速器“的條目,點(diǎn)進(jìn)去會(huì)教你配置加速器。當(dāng)然里面就是一段代碼,你退出docker,即按下Ctrl+D,然后輸入以下代碼:

  • sudo mkdir -p /etc/docker
  • sudo tee /etc/docker/daemon.json <<-'EOF'
  • {
  • "registry-mirrors": ["https://lqbkkmob.mirror.aliyuncs.com"]
  • }
  • EOF
  • sudo systemctl daemon-reload
  • sudo systemctl restart docker
  • 4.? 接下來就是創(chuàng)建容器了,并對(duì)容器進(jìn)行配置及ssh的互聯(lián)

    a. ? 敲上指令docker pull registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop

    zhangqingfeng@zhangqingfeng:~$ docker pull registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop

    b.?? 經(jīng)過一段時(shí)間后,鏡像已經(jīng)下載到本地計(jì)算機(jī),可使用指令docker images查看是否下載成功:

  • zhangqingfeng@zhangqingfeng:~$ docker images
  • REPOSITORY TAG IMAGE ID CREATED SIZE
  • registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop latest 8b768e1604ad 4 months ago 2.11GB
  • c.?? 這時(shí),我們要在這個(gè)hadoop鏡像里創(chuàng)建三個(gè)容器(Master、Slave1、Slave2),敲上如下指令:(我們先把三個(gè)容器創(chuàng)建出來,再慢慢里面添加配置)docker run -it --name Master -h Master registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop /bin/bash

  • zhangqingfeng@zhangqingfeng:~$ docker run -it --name Master -h Master registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop /bin/bash
  • [root@Master local]#
  • d. ? 此時(shí)把Master空的容器創(chuàng)建出來了,當(dāng)然里面什么也沒配置,這時(shí)候敲上Ctrl+P+Q,會(huì)返回到初始目錄,并且不會(huì)退出Master容器,假如你按下Ctrl+C,也會(huì)退出到初始目錄,但是,這時(shí)候也把Master容器退出了,敲上Ctrl+P+Q后會(huì)出現(xiàn)下面情景,代碼如下:

  • [root@Master local]# zhangqingfeng@zhangqingfeng:~$
  • zhangqingfeng@zhangqingfeng:~$
  • e.?? 修改一下代碼的容器名,依次創(chuàng)建出容器Slave1和容器Slave2:

  • zhangqingfeng@zhangqingfeng:~$ docker run -it --name Slave1 -h Slave1 registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop /bin/bash
  • [root@Slave1 local]# zhangqingfeng@zhangqingfeng:~$
  • zhangqingfeng@zhangqingfeng:~$ docker run -it --name Slave2 -h Slave2 registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop /bin/bash
  • [root@Slave2 local]# zhangqingfeng@zhangqingfeng:~$
  • zhangqingfeng@zhangqingfeng:~$
  • f.?? 至此,三個(gè)空容器已經(jīng)創(chuàng)建完成,接下來我們要使用ssh把三個(gè)容器連接起來

    我的docker里面空空如也,沒有指令apt-get,沒有指令gedit,但是里面有yum,可以用yum下載vim來編輯文件,還可以用yum下載openssh-clients,openssh-server,如果你在docker里面連yum都沒有,那么你先使用Ctrl+P+Q退出,在初始目錄用apt-get下載一個(gè)yum(指令是? sudo apt-get? install yum ),然后在docker里面就可以使用了。

    先對(duì)Master容器進(jìn)行配置,進(jìn)入Master容器,敲上指令??? docker attach Master

  • zhangqingfeng@zhangqingfeng:~$ docker attach Master
  • [root@Master local]#
  • 我們先下載vim,敲上指令? yum -y install vim

  • [root@Master local]# yum -y install vim
  • .......過程省略
  • Complete!
  • [root@Master local]#
  • 再把openssh-clients和openssh-server下載下來,注意按我說的順序下載,先下openssh-clients

  • [root@Master local]# yum -y install openssh-clients
  • .......
  • Complete!
  • [root@Master local]# yum -y install openssh-server
  • .......
  • Complete!
  • [root@Master local]
  • g.? 這時(shí)我們配置Master容器的ssh密鑰

    先執(zhí)行指令? /usr/sbin/sshd,會(huì)出現(xiàn)下列情景

  • [root@Master local]# /usr/sbin/sshd
  • Could not load host key: /etc/ssh/ssh_host_rsa_key
  • Could not load host key: /etc/ssh/ssh_host_ecdsa_key
  • Could not load host key: /etc/ssh/ssh_host_ed25519_key
  • sshd: no hostkeys available -- exiting.
  • 再執(zhí)行指令??? /usr/sbin/sshd-keygen -A? ,出現(xiàn)下列情景

  • [root@Master local]# /usr/sbin/sshd-keygen -A
  • /usr/sbin/sshd-keygen: line 10: /etc/rc.d/init.d/functions: No such file or directory
  • Generating SSH2 RSA host key: /usr/sbin/sshd-keygen: line 63: success: command not found
  • Generating SSH2 ECDSA host key: /usr/sbin/sshd-keygen: line 105: success: command not found
  • Generating SSH2 ED25519 host key: /usr/sbin/sshd-keygen: line 126: success: command not found
  • 再次輸入一遍?? /usr/sbin/sshd?? 即可

  • [root@Master local]# /usr/sbin/sshd
  • [root@Master local]#
  • 上述三步必不可少,不然會(huì)出現(xiàn)?? ssh: connect to host localhost port 22: Cannot assign requested address?? 等錯(cuò)誤

    這時(shí)的錯(cuò)誤參考鏈接為:https://blog.csdn.net/leon_wzm/article/details/78690439?utm_source=debugrun&utm_medium=referral

    然后我們就開始制作密鑰了,輸入指令? ssh-keygen -t rsa?? ,然后都按? Enter? 鍵

  • [root@Master local]# ssh-keygen -t rsa
  • Generating public/private rsa key pair.
  • Enter file in which to save the key (/root/.ssh/id_rsa):
  • Created directory '/root/.ssh'.
  • Enter passphrase (empty for no passphrase):
  • Enter same passphrase again:
  • Your identification has been saved in /root/.ssh/id_rsa.
  • Your public key has been saved in /root/.ssh/id_rsa.pub.
  • The key fingerprint is:
  • SHA256:BPC1QSB9LcIro8HoVtPSFoHMvDjMqgmdkhCoi+M167c root@Master
  • The key's randomart image is:
  • +---[RSA 2048]----+
  • |. + +=+o+. |
  • |o = ++ooo. |
  • |++. + o+o. |
  • |+=o=o+.. |
  • |=+o++o S |
  • |Oo+o |
  • |=+. o |
  • |o. . . |
  • | ...E. |
  • +----[SHA256]-----+
  • [root@Master local]#
  • 生成的密鑰如圖所示存在? /root/.ssh/id_rsa.pub? 文件中了,我們需要把密鑰存儲(chǔ)在 /root/.ssh/authorized_keys? 文件中,指令是: cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys??

  • [root@Master local]# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
  • [root@Master local]#
  • 此時(shí),你可以使用指令?? cat /root/.ssh/authorized_keys?? 查看authorized_keys 文件中是否有你剛才存入的密鑰

  • [root@Master local]# cat /root/.ssh/authorized_keys
  • ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnfGoobPBQlX38ePTP88oTWeYZvaR73ADrDPTyEEX6Fy4Og4IQcd6pq5g0vjUdVxCVnes7Us+CpKvPkrqjAqDPm/oY61jplDZCzxEG45kbHl06SY8X/+Km12PsKjOKWDJzCwTs1u0EnXL1UDmFePGhv/MJNPti+hM+itNM/QWfk6ObzFjDY6sGexe3zRqi9fdZLZVNFL3PPIfS0cHdA/Vw+8FXeEfFifTwRNwOVG9rKEsL2TyhCcynn4hRJ9AFwl18GvJn5eLxuPeVVuKn8yzGpDhVvuntdGVxCcGgaWiwyb/W8mtxozXP1C5fKkM6fghj46kK9MdtR14f49Tkc5JB root@Master
  • [root@Master local]#
  • 到這里,你的Master容器的ssh已經(jīng)配好了,可以使用指令? ssh localhost? 驗(yàn)證一下? ,敲上之后,需要再輸入 yes,雖然有warning,但是不用管它,帶回配置了? /etc/ssh/sshd_config? 文件就什么警告也沒了,驗(yàn)證完了 敲上 Ctrl+D即可斷開與localhost的ssh連接

  • [root@Master local]# ssh localhost
  • The authenticity of host 'localhost (127.0.0.1)' can't be established.
  • ECDSA key fingerprint is SHA256:TrBwBsvNKUoilsNryQVTpHVmBgBHLnFUuBFcQdQafJs.
  • ECDSA key fingerprint is MD5:cb:69:58:d4:c0:f8:60:71:4d:5b:59:bf:07:d4:da:af.
  • Are you sure you want to continue connecting (yes/no)? yes
  • Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
  • [root@Master ~]# logout
  • Connection to localhost closed.
  • [root@Master local]#
  • 為了ssh鏈接時(shí)的美觀簡(jiǎn)潔,我們配置其/etc/ssh/sshd_config? 文件,輸入指令?? vim? /etc/ssh/sshd_config? 進(jìn)入編輯文件模式,

    [root@Master local]# vim /etc/ssh/sshd_config

    這里如果有同學(xué)不懂 vim 的使用,可以參考鏈接:https://blog.csdn.net/yu870646595/article/details/52045150

    進(jìn)去編輯文件之后,敲上 i ,此時(shí)進(jìn)入編輯模式,按照我下面所列的代碼,找到它,并改成我這樣

  • Port 22
  • PermitRootLogin yes
  • PubkeyAuthentication yes
  • PasswordAuthentication yes
  • ChallengeResponseAuthentication no
  • UsePAM yes
  • PrintLastLog no
  • 然后按下? Esc 鍵,進(jìn)入命令模式, 再敲上指令? :wq?? 退出這個(gè)編輯文件界面,回到Master容器界面

    再敲上指令? vim? /etc/ssh/ssh_config ? ,找到 ?StrictHostKeyChecking no? (大約在第35行) ,將以前的? # 去掉,并把? ask? 改成? no

    [root@Master local]# vim /etc/ssh/ssh_config StrictHostKeyChecking no

    改完之后同樣敲上 Esc 鍵,進(jìn)入命令模式, 再敲上指令? :wq?? 退出這個(gè)編輯文件界面,回到Master容器界面

    這時(shí)候按下Ctrl+P+Q,返回到初始目錄,查看此時(shí)三個(gè)容器的ip地址,輸入命令: docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)?

  • [root@Master local]# read escape sequence
  • zhangqingfeng@zhangqingfeng:~$ docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)
  • /Master - 172.17.0.2
  • /Slave1 - 172.17.0.3
  • /Slave2 - 172.17.0.4
  • zhangqingfeng@zhangqingfeng:~$
  • 然后進(jìn)入Master容器(指令是docker attach Master),打開 /etc/hosts 文件,把上述內(nèi)容填上,目的是給每個(gè)節(jié)點(diǎn)的 ip 附上名字,ssh連接的時(shí)候就可以直接? ssh Slave1,而不是 ssh 172.17.0.3 這么麻煩了,所以,我們?cè)俅吻蒙现噶?docker attach Master? 進(jìn)入Master 容器 ,編輯 /etc/hosts 文件,所以敲上指令 vim /etc/hosts ? ,進(jìn)入編輯模式,將容器名及其對(duì)應(yīng)的 ip 填入 ,修改完之后回到Master 容器,如果還有不會(huì)使用vim修改文件的小伙伴請(qǐng)看這個(gè)鏈接:https://blog.csdn.net/yu870646595/article/details/52045150

  • zhangqingfeng@zhangqingfeng:~$ docker attach Master
  • [root@Master local]# vim /etc/hosts
  • 127.0.0.1 localhost
  • ::1 localhost ip6-localhost ip6-loopback
  • fe00::0 ip6-localnet
  • ff00::0 ip6-mcastprefix
  • ff02::1 ip6-allnodes
  • ff02::2 ip6-allrouters
  • 172.17.0.2 Master
  • 172.17.0.3 Slave1
  • 172.17.0.4 Slave2
  • 至此,Master 容器已經(jīng)配置完成,然后我們敲上 Ctrl+P+Q? 退出當(dāng)前的Master容器,然后敲上 docker? attach Slave1 ,進(jìn)入Slave1容器,用和Master容器相同的方法,把Slave1也配置一遍(就是從下載vim開始到配置/etc/hosts文件這幾個(gè)步驟),再用相同的方式 把 Slave2 也配置完。

    h.?? 三個(gè)容器Master、Slave1、Slave2 的配置終于接近尾聲,僅差最后一步,我們需要把三個(gè)容器的每個(gè)密鑰都要放在自己容器的/root/.ssh/authorized_keys? 文件中,只有這樣才能把三個(gè)容器的互信建立起來,假如你不這樣做,你在Master容器中用ssh連接其他容器(比如連接Slave1),那么它會(huì)提示你輸入Slave1的密碼,而這個(gè)密碼你輸入什么也不對(duì)。

    這時(shí)的錯(cuò)誤參考鏈接為:https://blog.csdn.net/kunlong0909/article/details/7284174

    因?yàn)槊總€(gè)容器的? /root/.ssh/authorized_keys? 文件都需要填入 所有容器的密鑰,而此時(shí)我們剛配置完Slave2容器,那么直接輸入 vim? /root/.ssh/authorized_keys? ,進(jìn)去文件,然后按 i 進(jìn)入編輯模式,把Slave2的密鑰拷貝到一個(gè)文件中(你在電腦桌面新建一個(gè)臨時(shí)文件即可),保存結(jié)束,退出文件,然后Ctrl+P+Q退出Slave2容器,然后 敲上 docker attach Slave1 ,進(jìn)入Slave1 容器,相同的方式把Slave1的密鑰也拷貝出來,然后退出Slave1,進(jìn)入Master容器,把剛才拷貝的兩個(gè)密鑰追加到/root/.ssh/authorized_keys 文件中(就是進(jìn)入這個(gè)文件切換為編輯模式,把那兩個(gè)密鑰復(fù)制過來就行),然后把這個(gè)三個(gè)密鑰拷貝出來,復(fù)制到Slave1的? /root/.ssh/authorized_keys? 文件中,也同樣復(fù)制到Slave1的? root/.ssh/authorized_keys? 文件中。用到的詳細(xì)指令如下:

    (1)?? vim /root/.ssh/authorized_keys??? 進(jìn)去之后? 按下 i ,復(fù)制密鑰到一個(gè)臨時(shí)新建的文件(你在桌面臨時(shí)建一個(gè)就行)

    (2)?? 按下? Esc? , 敲上?? :wq??? 保存并退出文件, 敲上? Ctrl+P+Q? 退回初始目錄 ,

    (3)?? docker? attach? Slave1? 進(jìn)入Slave1容器

    (4)? 重復(fù)第(1)(2)步

    (5)?? docker? attach? Master?? 進(jìn)入Master容器

    (6)?? vim /root/.ssh/authorized_keys??? 進(jìn)去之后? 按下 i ,把剛才復(fù)制的兩個(gè)密鑰放到到這個(gè)文件中,并把這個(gè)三個(gè)密鑰臨時(shí)存到一? 個(gè)文件中

    (7)?? 按下? Esc? , 敲上?? :wq??? 保存并退出文件, 敲上? /usr/sbin/sshd?? 再敲上? Ctrl+P+Q? 退回初始目錄 ,

    (8)?? docker? attach? Slave1? 進(jìn)入Slave1容器

    (9)? vim /root/.ssh/authorized_keys??? 進(jìn)去之后? 按下 i ,刪除所有,把剛才復(fù)制的三個(gè)密鑰放到到這個(gè)文件中

    (10)? 按下? Esc? , 敲上?? :wq??? 保存并退出文件,敲上? /usr/sbin/sshd?? 再敲上? Ctrl+P+Q? 退回初始目錄

    (11)docker? attach? Slave2? 進(jìn)入Slave2容器

    (12)?? vim /root/.ssh/authorized_keys??? 進(jìn)去之后? 按下 i ,刪除所有,把剛才復(fù)制的三個(gè)密鑰放到到這個(gè)文件中

    (13)?? 按下? Esc? , 敲上?? :wq??? 保存并退出文件, 敲上? Ctrl+P+Q? 退回初始目錄 , docker? attach? Master 進(jìn)入 Master容器

    敲上? /usr/sbin/sshd

    在所有密鑰都放入各個(gè)容器之后,我們進(jìn)行驗(yàn)證一下,在Master容器中,我們輸入指令 ssh Slave1 ,看到的情景有下面幾個(gè)情況:

    ?? 如果你出現(xiàn)下面錯(cuò)誤,那么你肯定沒在每個(gè)容器中的 /etc/hosts? 文件中輸入所有的容器的名字及其對(duì)應(yīng)的 ip 地址

  • [root@Master local]# ssh Slave1
  • ssh: Could not resolve hostname slave1: Name or service not known
  • [root@Master local]# ssh Slave2
  • ssh: Could not resolve hostname slave2: Name or service not known
  • ②?? 假如你出現(xiàn)下面錯(cuò)誤,那么你肯定沒在退出每個(gè)容器前 敲上指令 /usr/sbin/sshd? ,看上述13個(gè)步驟的紅字,很重要!

  • [root@Master local]# ssh Slave1
  • ssh: connect to host slave1 port 22: Connection refused
  • [root@Master local]#
  • [root@Master local]# ssh Slave2
  • ssh: connect to host slave1 port 22: Connection refused
  • [root@Master local]#
  • 這時(shí)的錯(cuò)誤參考鏈接為:https://blog.csdn.net/leon_wzm/article/details/78690439?utm_source=debugrun&utm_medium=referral

    現(xiàn)在我們終于可以成功的驗(yàn)證了,現(xiàn)在 Master 容器中連接? Slave1 ,指令是ssh Slave1????? 如下圖:

  • [root@Master local]# ssh Slave1
  • [root@Slave1 ~]#
  • 由圖可知,成功了,敲上 Ctrl +D 斷開與 Slave1 的連接 ,再驗(yàn)證與 Slave2? 的連接,指令是 ssh? Slave2? ,成功后,Ctrl+D斷開與 Slave2 的連接。

  • [root@Master local]# ssh Slave1
  • [root@Slave1 ~]# logout
  • Connection to slave1 closed.
  • [root@Master local]# ssh Slave2
  • [root@Slave2 ~]#
  • [root@Slave2 ~]# logout
  • Connection to slave1 closed.
  • [root@Master local]#
  • ③?? 假如你連接Slave1時(shí),還提示了很多信息,不像我這樣簡(jiǎn)潔,比如還有 LastLogin 之類的提示信息,那你肯定是每個(gè)容器的vim? /etc/ssh/sshd_config? 和? vim? /etc/ssh/ssh_config? 文件的配置沒有跟我的一樣,在上述步驟 g 中,會(huì)有這兩個(gè)文件的配置。

    I.??? ssh互聯(lián)成功之后,我們便開始使用hadoop進(jìn)行實(shí)戰(zhàn),但在這之前還需配置每個(gè)容器的環(huán)境變量

    ? 首先我們查看JAVA_HOME的地址,在 hadoop-env.sh 文件中,我們并不知道這個(gè)文件的具體路徑,沒關(guān)系,我們只需知道它的名字,使用指令? find / -name hadoop-env.sh?? 搜索它即可,(注意這時(shí)候我們目前是在Master容器界面里)

  • [root@Master local]# find / -name hadoop-env.sh
  • /usr/local/hadoop-2.7.5/etc/hadoop/hadoop-env.sh
  • [root@Master local]#
  • 我們 用指令 vim /usr/local/hadoop-2.7.5/etc/hadoop/hadoop-env.sh? 進(jìn)入這個(gè)文件,看到JAVA_HOME這一行,記錄它的路徑然后退出這個(gè)文件即可:

    [root@Master local]# vim /usr/local/hadoop-2.7.5/etc/hadoop/hadoop-env.sh export JAVA_HOME=/usr/local/jdk1.8.0_162

    在這個(gè)鏡像中,JAVA_HOME路徑給我們?cè)O(shè)置好了,我們需要記住這個(gè)地址,待會(huì)會(huì)在其他配置中用到。

    接下來我們依次配置每個(gè)容器的 core-site.xml 和 yarn-site.xml 和 mapred-site.xml 及 hdfs-site.xml 文件

    ?? 首先使用 find / -name core-site.xml 的具體路徑,然后用指令? vim + 文件路徑? 進(jìn)入這個(gè)文件

  • [root@Master local]# find / -name core-site.xml
  • /usr/local/hadoop-2.7.5/etc/hadoop/core-site.xml
  • [root@Master local]# vim /usr/local/hadoop-2.7.5/etc/hadoop/core-site.xml
  • 里面的配置改成如下圖所示:然后 :wq 保存退出

  • <!-- Put site-specific property overrides in this file. -->
  • <configuration>
  • <property>
  • <name>fs.defaultFS</name>
  • <value>hdfs://Master:9000</value>
  • </property>
  • <property>
  • <name>io.file.buffer.size</name>
  • <value>131072</value>
  • </property>
  • <property>
  • <name>hadoop.tmp.dir</name>
  • <value>/usr/local/hadoop-2.7.5/tmp</value>
  • </property>
  • </configuration>
  • ? 進(jìn)入yarn-site.xml 進(jìn)行配置,結(jié)束后保存退出。

    [root@Master local]# vim /usr/local/hadoop-2.7.5/etc/hadoop/yarn-site.xml
  • limitations under the License. See accompanying LICENSE file.
  • -->
  • <configuration>
  • <property>
  • <name>yarn.nodemanager.aux-services</name>
  • <value>mapreduce_shuffle</value>
  • </property>
  • <property>
  • <name>yarn.resourcemanager.address</name>
  • <value>Master:8032</value>
  • </property>
  • <property>
  • <name>yarn.resourcemanager.scheduler.address</name>
  • <value>Master:8030</value>
  • </property>
  • <property>
  • <name>yarn.resourcemanager.resource-tracker.address</name>
  • <value>Master:8031</value>
  • </property>
  • <property>
  • <name>yarn.resourcemanager.admin.address</name>
  • <value>Master:8033</value>
  • </property>
  • <property>
  • <name>yarn.resourcemanager.webapp.address</name>
  • <value>Master:8088</value>
  • </property>
  • <property>
  • <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  • <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  • </property>
  • </configuration>
  • ?? 進(jìn)入mapred-site.xml? 進(jìn)行配置,結(jié)束后保存退出

    [root@Master local]# vim /usr/local/hadoop-2.7.5/etc/hadoop/mapred-site.xml
  • <!-- Put site-specific property overrides in this file. -->
  • <configuration>
  • <property>
  • <name>mapreduce.framework.name</name>
  • <value>yarn</value>
  • </property>
  • </configuration>
  • ?? 進(jìn)入hdfs-site.xml? 進(jìn)行配置,結(jié)束后保存退出

    [root@Master local]# vim /usr/local/hadoop-2.7.5/etc/hadoop/hdfs-site.xml
  • <!-- Put site-specific property overrides in this file. -->
  • <configuration>
  • <property>
  • <name>dfs.replication</name>
  • <value>2</value>
  • </property>
  • <property>
  • <name>dfs.namenode.name.dir</name>
  • <value>file:/usr/local/hadoop-2.7.5/hdfs/name</value>
  • </property>
  • </configuration>
  • J.?? 在步驟I 中是配置 Master 容器的環(huán)境變量,我們還需要進(jìn)入Slave1容器,相同的代碼把 Slave1的環(huán)境變量也配置完,當(dāng)然容器slave2也是如此。唯一不同的是在步驟⑤ 的hdfs-site.xml中,Master容器設(shè)置的是namenode,而Slave1和Slave2設(shè)置的是datanode,如下圖:

    [root@Slave1 local]# vim /usr/local/hadoop-2.7.5/etc/hadoop/hdfs-site.xml
  • <!-- Put site-specific property overrides in this file. -->
  • <configuration>
  • <property>
  • <name>dfs.replication</name>
  • <value>2</value>
  • </property>
  • <property>
  • <name>dfs.datanode.data.dir</name>
  • <value>file:/usr/local/hadoop-2.7.5/hdfs/data</value>
  • </property>
  • </configuration>
  • K.?? 現(xiàn)在我們?cè)贛aster容器中通過ssh連接Slave1(或Slave2),刪除其hdfs所有目錄 (這個(gè)目錄就在剛才的hdfs-site.xml文件中,忘了的話你再vim打開它,把datanode保存的路徑記下來,我的是 /usr/local/hadoop-2.7.5/hdfs/data) ,并重新創(chuàng)建,代碼如下。因?yàn)橄乱徊降母袷交荒苡靡淮?#xff0c;用兩次的話就需要用到這一步,為了保險(xiǎn),我們?cè)诘谝淮尉椭苯佑眠@一步,以免不必要的麻煩。

  • [root@Master local]# ssh Slave1
  • [root@Slave1 ~]# rm -rf /usr/local/hadoop-2.7.5/hdfs
  • [root@Slave1 ~]# mkdir -p /usr/local/hadoop-2.7.5/hdfs/data
  • ② 在Slave1刪除并創(chuàng)建之后,我們 Ctrl+D 斷開與Slave1的ssh連接,然后 使用指令 ssh Slave2 與Slave2容器進(jìn)行連接,與Slave1相同,我們需要把hdfs目錄刪除,并重新創(chuàng)建,結(jié)束之后我們 Ctrl+D 斷開與Slave2的連接,回到Master容器界面,代碼如下:

  • [root@Slave1 ~]# logout
  • Connection to slave1 closed.
  • [root@Master local]# ssh Slave2
  • [root@Slave2 ~]#
  • [root@Slave2 ~]# rm -rf /usr/local/hadoop-2.7.5/hdfs
  • [root@Slave2 ~]# mkdir -p /usr/local/hadoop-2.7.5/hdfs/data
  • [root@Slave2 ~]# logout
  • Connection to slave1 closed.
  • [root@Master local]#
  • ③ Slave1和Slave2都已經(jīng)刪除并重建 hdfs 目錄了,現(xiàn)在我們把Master容器也這么做,注意Master容器創(chuàng)建的是 name子文件,不再是 data 子文件里

  • [root@Master local]# rm -rf /usr/local/hadoop-2.7.5/hdfs
  • [root@Master local]# mkdir -p /usr/local/hadoop-2.7.5/hdfs/name
  • [root@Master local]#
  • L.?? 現(xiàn)在我們格式化 NameNode HDFS 目錄, 在Master容器中,使用指令 hdfs namenode -format

  • [root@Master local]# hdfs namenode -format
  • ..........一堆代碼,此處省略
  • [root@Master local]#
  • M.?? ①我們需要進(jìn)入sbin 文件,來啟動(dòng)hadoop 集群,我們不清楚 sbin 文件的具體路徑,所以我們可以使用 指令 find / -name sbin? 找到路徑,然后 cd +路徑?? 進(jìn)入這個(gè)路徑。

  • [root@Master local]# find / -name sbin
  • /usr/local/sbin
  • /usr/local/hadoop-2.7.5/sbin
  • /usr/local/spark-2.3.0-bin-hadoop2.7/sbin
  • /usr/lib/debug/usr/sbin
  • /usr/lib/debug/sbin
  • /usr/sbin
  • /sbin
  • [root@Master local]# cd /usr/local/hadoop-2.7.5/sbin
  • [root@Master sbin]#
  • ②? 然后我們使用指令 ./start-all.sh? 來啟動(dòng)集群

  • [root@Master sbin]# ./start-all.sh
  • This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
  • Starting namenodes on [Master]
  • Master: starting namenode, logging to /usr/local/hadoop-2.7.5/logs/hadoop-root-namenode-Master.out
  • Slave1: starting datanode, logging to /usr/local/hadoop-2.7.5/logs/hadoop-root-datanode-Slave1.out
  • Slave2: starting datanode, logging to /usr/local/hadoop-2.7.5/logs/hadoop-root-datanode-Slave2.out
  • Starting secondary namenodes [0.0.0.0]
  • 0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop-2.7.5/logs/hadoop-root-secondarynamenode-Master.out
  • starting yarn daemons
  • starting resourcemanager, logging to /usr/local/hadoop-2.7.5/logs/yarn--resourcemanager-Master.out
  • Slave1: starting nodemanager, logging to /usr/local/hadoop-2.7.5/logs/yarn-root-nodemanager-Slave1.out
  • Slave2: starting nodemanager, logging to /usr/local/hadoop-2.7.5/logs/yarn-root-nodemanager-Slave2.out
  • [root@Master sbin]#
  • ③? 使用 jps 查看 namenode 是否啟動(dòng),此時(shí)看的是Master容器的namenode是否啟動(dòng)。

  • [root@Master sbin]# jps
  • 192 NameNode
  • 562 ResourceManager
  • 824 Jps
  • 392 SecondaryNameNode
  • [root@Master sbin]#
  • ④? 這里我們可以使用? ssh Slave1? (或ssh Slave2)進(jìn)入Slave1容器,然后使用指令? jps? 查看datanode是否啟動(dòng),此時(shí)會(huì)出現(xiàn)

    -bash: jps: command not found 錯(cuò)誤,如圖:

  • [root@Master sbin]# ssh Slave1
  • [root@Slave1 ~]# jps
  • -bash: jps: command not found
  • 這時(shí)我們需要配置 /etc/profile文件,每個(gè)容器(包括Master、Slave1、Slave2)都需要配置這個(gè)文件,使用指令? vim /etc/profile,末尾添加代碼 :

    export JAVA_HOME=/usr/local/jdk1.8.0_162
    export HADOOP_HOME=/usr/local/hadoop-2.7.5
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    保存退出后,執(zhí)行生效剛才的 /etc/profile 文件,即使用指令 source /etc/profile ?? ,如圖所示:

  • [root@Master local]# vim /etc/profile
  • ....進(jìn)入之后末尾添加下列代碼(根據(jù)自己的實(shí)際配置填寫,比如java版本可能每個(gè)人都不一樣)
  • export JAVA_HOME=/usr/local/jdk1.8.0_162
  • export HADOOP_HOME=/usr/local/hadoop-2.7.5
  • export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  • .....保存退出后
  • [root@Master local]# source /etc/profile
  • 每個(gè)容器都配置結(jié)束后,我們?cè)偻ㄟ^ssh進(jìn)入其他容器,便可以使用? jps 或 hadoop fs xx 指令了。

    ⑤ 我們可以使用指令 hadoop dfsadmin -report?? 查看其他容器有沒有啟動(dòng)

  • [root@Master sbin]# hadoop dfsadmin -report
  • DEPRECATED: Use of this script to execute hdfs command is deprecated.
  • Instead use the hdfs command for it.
  • Configured Capacity: 982232104960 (914.77 GB)
  • Present Capacity: 901762801664 (839.83 GB)
  • DFS Remaining: 901762752512 (839.83 GB)
  • DFS Used: 49152 (48 KB)
  • DFS Used%: 0.00%
  • Under replicated blocks: 0
  • Blocks with corrupt replicas: 0
  • Missing blocks: 0
  • Missing blocks (with replication factor 1): 0
  • -------------------------------------------------
  • Live datanodes (2):
  • Name: 172.17.0.3:50010 (Slave1)
  • Hostname: Slave1
  • Decommission Status : Normal
  • Configured Capacity: 491116052480 (457.39 GB)
  • DFS Used: 24576 (24 KB)
  • Non DFS Used: 15263760384 (14.22 GB)
  • DFS Remaining: 450881376256 (419.92 GB)
  • DFS Used%: 0.00%
  • DFS Remaining%: 91.81%
  • Configured Cache Capacity: 0 (0 B)
  • Cache Used: 0 (0 B)
  • Cache Remaining: 0 (0 B)
  • Cache Used%: 100.00%
  • Cache Remaining%: 0.00%
  • Xceivers: 1
  • Last contact: Tue Sep 18 03:58:01 UTC 2018
  • Name: 172.17.0.4:50010 (Slave2)
  • Hostname: Slave2
  • Decommission Status : Normal
  • Configured Capacity: 491116052480 (457.39 GB)
  • DFS Used: 24576 (24 KB)
  • Non DFS Used: 15263760384 (14.22 GB)
  • DFS Remaining: 450881376256 (419.92 GB)
  • DFS Used%: 0.00%
  • DFS Remaining%: 91.81%
  • Configured Cache Capacity: 0 (0 B)
  • Cache Used: 0 (0 B)
  • Cache Remaining: 0 (0 B)
  • Cache Used%: 100.00%
  • Cache Remaining%: 0.00%
  • Xceivers: 1
  • Last contact: Tue Sep 18 03:58:01 UTC 2018
  • [root@Master sbin]#
  • 到此,我們的docker環(huán)境下的hadoop集群已經(jīng)搭建成功!

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------

    最后,我想奉上在搭建過程中用到的命令

  • 0. 重啟docker服務(wù)
  • sudo service docker restart
  • 1.查看所有容器的ip
  • docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq
  • 2. 拉取一個(gè)鏡像
  • docker pull <鏡像名稱>
  • 3. 查看所有鏡像
  • docker images
  • 5. 查看正在運(yùn)行的容器
  • docker ps
  • 6. 查看所有容器(包括正在運(yùn)行和不在運(yùn)行的容器)
  • docker ps -a
  • 7. 在鏡像里創(chuàng)建一個(gè)容器并以前臺(tái)交互模式啟動(dòng)它
  • docker run -it --name <容器名> -h <容器名> <鏡像名字> /bin/bash
  • 8. 退出容器,但不關(guān)閉它(關(guān)閉之后還得啟動(dòng),并且設(shè)置的/etc/hosts內(nèi)容都沒有了)
  • Ctrl+P+Q
  • 9. 再次進(jìn)入容器
  • docker attach <容器名>
  • 10. 在容器內(nèi)下載插件(使用yum)
  • yum -y install <插件名>
  • 11. 在容器內(nèi)刪除插件(使用yum)
  • yum remove <插件名>
  • 12. 查找文件的路徑
  • find / -name <文件名>
  • 13. 進(jìn)入文件
  • cd <文件路徑>
  • 14. 容器內(nèi)編輯文件(使用vim)
  • vim <文件路徑> -----打開文件
  • i -----切換到編輯模式
  • Esc -----切換到命令模式
  • $ -----移到本行的最后
  • /關(guān)鍵字 -----查找字符
  • dd -----刪除光標(biāo)所在行
  • :q -----不保存退出
  • :wq -----保存退出
  • 本文參考鏈接還有:https://blog.csdn.net/Leafage_M/article/details/72633408

    ??????????????????????????????????? https://www.jianshu.com/p/3d5cc7165c15

    ??????????????????????????????????? https://blog.csdn.net/u013548453/article/details/80936027

    總結(jié)

    以上是生活随笔為你收集整理的大数据学习(2-2)- 使用docker安装配置Hadoop环境的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。