使用騰訊云主機,docker構建集群測試環境。
環境1、操作系統: CentOS 7.2 64位
網路設置hostname | IP |
---|---|
cluster-master | 172.18.0.2 |
cluster-slave1 | 172.18.0.3 |
cluster-slave2 | 172.18.0.4 |
cluster-slave3 | 172.18.0.5 |
curl -sSL https://get.daocloud.io/docker | sh ##換源 ###這里可以參考這篇文章http://www.jianshu.com/p/34d3b4568059 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://67e93489.m.daocloud.io ##開啟自啟動 systemctl enable docker systemctl start docker拉去Centos鏡像
docker pull daocloud.io/library/centos:latest
使用docker ps 查看下載的鏡像
創建容器按照集群的架構,創建容器時需要設置固定IP,所以先要在docker使用如下命令創建固定IP的子網
docker network create --subnet=172.18.0.0/16 netgroup
docker的子網創建完成之后就可以創建固定IP的容器了
#cluster-master #-p 設置docker映射到容器的端口 后續查看web管理頁面使用 docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name cluster-master -h cluster-master -p 18088:18088 -p 9870:9870 --net netgroup --ip 172.18.0.2 daocloud.io/library/centos /usr/sbin/init #cluster-slaves docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name cluster-slave1 -h cluster-slave1 --net netgroup --ip 172.18.0.3 daocloud.io/library/centos /usr/sbin/init docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name cluster-slave2 -h cluster-slave2 --net netgroup --ip 172.18.0.4 daocloud.io/library/centos /usr/sbin/init docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name cluster-slave3 -h cluster-slave3 --net netgroup --ip 172.18.0.5 daocloud.io/library/centos /usr/sbin/init
啟動控制臺并進入docker容器中:
docker exec -it cluster-master /bin/bash安裝OpenSSH免密登錄
1、cluster-master安裝:
#cluster-master需要修改配置文件(特殊) #cluster-master #安裝openssh [root@cluster-master /]# yum -y install openssh openssh-server openssh-clients [root@cluster-master /]# systemctl start sshd ####ssh自動接受新的公鑰 ####master設置ssh登錄自動添加kown_hosts [root@cluster-master /]# vi /etc/ssh/ssh_config #將原來的StrictHostKeyChecking ask #設置StrictHostKeyChecking為no #保存 [root@cluster-master /]# systemctl restart sshd
2、分別對slaves安裝OpenSSH
#安裝openssh [root@cluster-slave1 /]#yum -y install openssh openssh-server openssh-clients [root@cluster-slave1 /]# systemctl start sshd
3、cluster-master公鑰分發
在master機上執行
ssh-keygen -t rsa
并一路回車,完成之后會生成~/.ssh目錄,目錄下有id_rsa(私鑰文件)和id_rsa.pub(公鑰文件),再將id_rsa.pub重定向到文件authorized_keys
ssh-keygen -t rsa #一路回車 [root@cluster-master /]# cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
文件生成之后用scp將公鑰文件分發到集群slave主機
[root@cluster-master /]# ssh root@cluster-slave1 "mkdir ~/.ssh" [root@cluster-master /]# scp ~/.ssh/authorized_keys root@cluster-slave1:~/.ssh [root@cluster-master /]# ssh root@cluster-slave2 "mkdir ~/.ssh" [root@cluster-master /]# scp ~/.ssh/authorized_keys root@cluster-slave2:~/.ssh [root@cluster-master /]# ssh root@cluster-slave3 "mkdir ~/.ssh" [root@cluster-master /]# scp ~/.ssh/authorized_keys root@cluster-slave3:~/.ssh
分發完成之后測試(ssh root@cluster-slave1)是否已經可以免輸入密碼登錄
Ansible安裝[root@cluster-master /]# yum -y install epel-release [root@cluster-master /]# yum -y install ansible #這樣的話ansible會被安裝到/etc/ansible目錄下
此時我們再去編輯ansible的hosts文件
vi /etc/ansible/hosts
[cluster] cluster-master cluster-slave1 cluster-slave2 cluster-slave3 [master] cluster-master [slaves] cluster-slave1 cluster-slave2 cluster-slave3配置docker容器hosts
由于/etc/hosts文件在容器啟動時被重寫,直接修改內容在容器重啟后不能保留,為了讓容器在重啟之后獲取集群hosts,使用了一種啟動容器后重寫hosts的方法。
需要在~/.bashrc中追加以下指令
:>/etc/hosts cat >>/etc/hosts< source ~/.bashrc使配置文件生效,可以看到/etc/hosts文件已經被改為需要的內容
[root@cluster-master ansible]# cat /etc/hosts 127.0.0.1 localhost 172.18.0.2 cluster-master 172.18.0.3 cluster-slave1 172.18.0.4 cluster-slave2 172.18.0.5 cluster-slave3用ansible分發.bashrc至集群slave下ansible cluster -m copy -a "src=~/.bashrc dest=~/"軟件環境配置下載JDK1.8并解壓縮至/opt 目錄下
下載hadoop3 到/opt目錄下,解壓安裝包,并創建鏈接文件
tar -xzvf hadoop-3.2.0.tar.gz ln -s hadoop-3.2.0 hadoop配置java和hadoop環境變量編輯 ~/.bashrc文件
# hadoop export HADOOP_HOME=/opt/hadoop-3.2.0 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH #java export JAVA_HOME=/opt/jdk8 export PATH=$HADOOP_HOME/bin:$PATH使文件生效:
source .bashrc配置hadoop運行所需配置文件cd $HADOOP_HOME/etc/hadoop/1、修改core-site.xml
hadoop.tmp.dir /home/hadoop/tmp A base for other temporary directories. fs.default.name hdfs://cluster-master:9000 fs.trash.interval 4320 2、修改hdfs-site.xml
dfs.namenode.name.dir /home/hadoop/tmp/dfs/name dfs.datanode.data.dir /home/hadoop/data dfs.replication 3 dfs.webhdfs.enabled true dfs.permissions.superusergroup staff dfs.permissions.enabled false 3、修改mapred-site.xml
mapreduce.framework.name yarn mapred.job.tracker cluster-master:9001 mapreduce.jobtracker.http.address cluster-master:50030 mapreduce.jobhisotry.address cluster-master:10020 mapreduce.jobhistory.webapp.address cluster-master:19888 mapreduce.jobhistory.done-dir /jobhistory/done mapreduce.intermediate-done-dir /jobhisotry/done_intermediate mapreduce.job.ubertask.enable true 4、yarn-site.xml
打包hadoop 向slaves分發yarn.resourcemanager.hostname cluster-master yarn.nodemanager.aux-services mapreduce_shuffle yarn.nodemanager.aux-services.mapreduce.shuffle.class org.apache.hadoop.mapred.ShuffleHandler yarn.resourcemanager.address cluster-master:18040 yarn.resourcemanager.scheduler.address cluster-master:18030 yarn.resourcemanager.resource-tracker.address cluster-master:18025 yarn.resourcemanager.admin.address cluster-master:18141 yarn.resourcemanager.webapp.address cluster-master:18088 yarn.log-aggregation-enable true yarn.log-aggregation.retain-seconds 86400 yarn.log-aggregation.retain-check-interval-seconds 86400 yarn.nodemanager.remote-app-log-dir /tmp/logs yarn.nodemanager.remote-app-log-dir-suffix logs tar -cvf hadoop-dis.tar hadoop hadoop-3.2.0使用ansible-playbook分發.bashrc和hadoop-dis.tar至slave主機--- - hosts: cluster tasks: - name: copy .bashrc to slaves copy: src=~/.bashrc dest=~/ notify: - exec source - name: copy hadoop-dis.tar to slaves unarchive: src=/opt/hadoop-dis.tar dest=/opt handlers: - name: exec source shell: source ~/.bashrc將以上yaml保存為hadoop-dis.yaml,并執行
ansible-playbook hadoop-dis.yamlhadoop-dis.tar會自動解壓到slave主機的/opt目錄下
Hadoop 啟動 格式化namenodehadoop namenode -format如果看到storage format success等字樣,即可格式化成功
啟動集群cd $HADOOP_HOME/sbin start-all.sh啟動后可使用jps命令查看是否啟動成功
注意:
在實踐中遇到節點slaves 上的datanode服務沒有啟動,查看slave上目錄結構發現
沒有生成配置文件中設置的文件夾,比如:core-site.xml中hadoop.tmp.dir /home/hadoop/tmp A base for other temporary directories. hdfs-site.xml文件中:
dfs.namenode.name.dir /home/hadoop/tmp/dfs/name dfs.datanode.data.dir /home/hadoop/data 手動到節點中生成這些文件夾,之后刪除master中這些文件夾和$HADOOP_HOME下的logs文件夾,之后重新格式化namenode
hadoop namenode -format再次啟動集群服務:
start-all.sh這時在到從節點觀察應該會看到節點服務
驗證服務訪問
http://host:18088 http://host:9870來查看服務是否啟動
部分轉載:https://www.jianshu.com/p/d7f...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74815.html
摘要:搭建集群首先搭建環境版本大于安裝主機監控程序和加速器這里使用了的版本,因為安裝方便放開更改放開配置配置配置配置配置配置文件追加配置和在文件第一行中添加測試鏈接文件 Docker搭建Hadoop集群 首先搭建Docker環境,Docker版本大于1.3.2 安裝主機監控程序和加速器(curl -sSL https://get.daocloud.io/daomonit/install.s...
摘要:總之,項目還算很受歡迎吧,這篇博客將介紹項目的升級版。一項目介紹將打包到鏡像中,就可以快速地在單個機器上搭建集群,這樣可以方便新手測試和學習。之前的版本使用為集群提供服務,由于網絡功能更新,現在并不需要了。運行參考第二部分啟動,并運行。 摘要: kiwenlau/hadoop-cluster-docker是去年參加Docker巨好玩比賽開發的,得了二等獎并贏了一塊蘋果手表,目前這個項目...
Docker搭建Zookeeper集群 這之前的準備和Docker搭建Hadoop集群是一樣的,請關注上一篇筆記。 第一步根據上次wiki中的方法啟動docker容器 docker run --rm -it -h zoo1 --name zoo1 ice/hadoop /bin/bash docker run --rm -it -h zoo2 --name zoo2 ice/hadoop /bin...
閱讀 2694·2023-04-25 17:58
閱讀 2978·2021-11-15 11:38
閱讀 2378·2021-11-02 14:48
閱讀 1184·2021-08-25 09:40
閱讀 1823·2019-08-30 15:53
閱讀 1093·2019-08-30 15:52
閱讀 1031·2019-08-30 13:55
閱讀 2435·2019-08-29 15:21