hadoop

使用搭建部署分布式集群
一:环境准备: 1:首先要有一个Centos7操作系统,可以在虚拟机中安装。 2:在centos7中安装docker,docker的版本为1.8.2 安装步骤如下: <1>安装制定版本的dockeryum install -y docker-1.8.2-10.el7.centos
<2>安装的时候可能会报错,需要删除这个依赖

这里写图片描述

rpm -e lvm2-7:2.02.105-14.el7.x86_64
启动docker
service docker start
验证安装结果:
这里写图片描述
<3>启动之后执行docker info会看到下面有两行警告信息
这里写图片描述

需要关闭防火墙并重启系统
systemctl stop firewalldsystemctl disable firewalld注意:执行完上面的命令之后需要重启系统reboot -h(重启系统)
<4>运行容器可能会报错
这里写图片描述

需要关闭selinux 解决方法:
1:setenforce 0(立刻生效,不需要重启操作系统)2:修改/etc/selinux/config文件中的SELINUX=disabled ,然后重启系统生效建议两个步骤都执行,这样可以确保系统重启之后selinux也是关闭状态

3:需要先构建一个hadoop的基础镜像,使用dockerfile文件方式进行构建。 先构建一个具备ssh功能的镜像,方便后期使用。(但是这样对于容器的安全性会有影响) 注意:这个镜像中的root用户的密码是root Mkdir centos-ssh-root Cd centos-ssh-root Vi Dockerfile
选择一个已有的os镜像作为基础 FROM centos # 镜像的作者 MAINTAINER crxy # 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no RUN yum install -y openssh-server sudo RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config #安装openssh-clientsRUN yum install -y openssh-clients# 添加测试用户root,密码root,并且将此用户添加到sudoers里 RUN echo "root:root" | chpasswd RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers # 下面这两句比较特殊,在centos6上必须要有,否则创建出来的容器sshd不能登录 RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key # 启动sshd服务并且暴露22端口 RUN mkdir /var/run/sshd EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]

构建命令: docker build -t=”crxy/centos-ssh-root” .
查询刚才构建成功的镜像

这里写图片描述
4:基于这个镜像再构建一个带有jdk的镜像 注意:jdk使用的是1.7版本的 Mkdir centos-ssh-root-jdk Cd centos-ssh-root-jdk Cp ../jdk-7u75-Linux-x64.tar.gz . Vi Dockerfile
FROM crxy/centos-ssh-rootADD jdk-7u75-linux-x64.tar.gz /usr/local/RUN mv /usr/local/jdk1.7.0_75 /usr/local/jdk1.7ENV JAVA_HOME /usr/local/jdk1.7ENV PATH $JAVA_HOME/bin:$PATH

构建命令: docker build -t=”crxy/centos-ssh-root-jdk” .

查询构建成功的镜像
这里写图片描述

5:基于这个jdk镜像再构建一个带有hadoop的镜像 注意:hadoop使用的是2.4.1版本的。 Mkdir centos-ssh-root-jdk-hadoop Cd centos-ssh-root-jdk-hadoop Cp ../hadoop-2.4.1.tar.gz . Vi Dockerfile

FROM crxy/centos-ssh-root-jdkADD hadoop-2.4.1.tar.gz /usr/localRUN mv /usr/local/hadoop-2.4.1 /usr/local/hadoopENV HADOOP_HOME /usr/local/hadoopENV PATH $HADOOP_HOME/bin:$PATH

构建命令: docker build -t=”crxy/centos-ssh-root-jdk-hadoop” .

查询构建成功的镜像
这里写图片描述

二:搭建hadoop分布式集群 1:集群规划 准备搭建一个具有三个节点的集群,一主两从 主节点:hadoop0 ip:192.168.2.10 从节点1:hadoop1 ip:192.168.2.11 从节点2:hadoop2 ip:192.168.2.12

但是由于docker容器重新启动之后ip会发生变化,所以需要我们给docker设置固定ip。使用pipework给docker容器设置固定ip 2:启动三个容器,分别作为hadoop0 hadoop1 hadoop2 在宿主机上执行下面命令,给容器设置主机名和容器的名称,并且在hadoop0中对外开放端口50070 和8088
docker run --name hadoop0 --hostname hadoop0 -d -P -p 50070:50070 -p 8088:8088 crxy/centos-ssh-root-jdk-hadoopdocker run --name hadoop1 --hostname hadoop1 -d -P crxy/centos-ssh-root-jdk-hadoopdocker run --name hadoop2 --hostname hadoop2 -d -P crxy/centos-ssh-root-jdk-hadoop

使用docker ps 查看刚才启动的是三个容器

这里写图片描述

3:给这三台容器设置固定IP 1:下载pipework 下载地址:https://github.com/jpetazzo/pipework.git 2:把下载的zip包上传到宿主机服务器上,解压,改名字
unzip pipework-master.zipmv pipework-master pipeworkcp -rp pipework/pipework /usr/local/bin/

3:安装bridge-utils
yum -y install bridge-utils

4:创建网络
brctl addbr br0ip link set dev br0 upip addr add 192.168.2.1/24 dev br0

5:给容器设置固定ip
pipework br0 hadoop0 192.168.2.10/24pipework br0 hadoop1 192.168.2.11/24pipework br0 hadoop2 192.168.2.12/24

验证一下,分别ping三个ip,能ping通就说明没问题


这里写图片描述

4:配置hadoop集群 先连接到hadoop0上, 使用命令
docker exec -it hadoop0 /bin/bash

下面的步骤就是hadoop集群的配置过程 1:设置主机名与ip的映射,修改三台容器:vi /etc/hosts 添加下面配置
192.168.2.10 hadoop0192.168.2.11 hadoop1192.168.2.12 hadoop2

2:设置ssh免密码登录 在hadoop0上执行下面操作
cd ~mkdir .sshcd .sshssh-keygen -t rsa(一直按回车即可)ssh-copy-id -i localhostssh-copy-id -i hadoop0ssh-copy-id -i hadoop1ssh-copy-id -i hadoop2在hadoop1上执行下面操作cd ~cd .sshssh-keygen -t rsa(一直按回车即可)ssh-copy-id -i localhostssh-copy-id -i hadoop1在hadoop2上执行下面操作cd ~cd .sshssh-keygen -t rsa(一直按回车即可)ssh-copy-id -i localhostssh-copy-id -i hadoop2

3:在hadoop0上修改hadoop的配置文件 进入到/usr/local/hadoop/etc/hadoop目录 修改目录下的配置文件core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml (1)hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.7

(2)core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop0:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> </property> <property> <name>fs.trash.interval</name> <value>1440</value> </property></configuration>

(3)hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property></configuration>

(4)yarn-site.xml
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property></configuration>

(5)修改文件名:mv mapred-site.xml.template mapred-site.xml vi mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property></configuration>

(6)格式化 进入到/usr/local/hadoop目录下 1、执行格式化命令
bin/hdfs namenode -format注意:在执行的时候会报错,是因为缺少which命令,安装即可执行下面命令安装yum install -y which

看到下面命令说明格式化成功。
这里写图片描述

格式化操作不能重复执行。如果一定要重复格式化,带参数-force即可。 (7)启动伪分布hadoop
命令:sbin/start-all.sh

第一次启动的过程中需要输入yes确认一下。
这里写图片描述

使用jps,检查进程是否正常启动?能看到下面几个进程表示伪分布启动成功
[root@hadoop0 hadoop]# jps3267 SecondaryNameNode3003 NameNode3664 Jps3397 ResourceManager3090 DataNode3487 NodeManager

(8)停止伪分布hadoop
命令:sbin/stop-all.sh

(9)指定nodemanager的地址,修改文件yarn-site.xml
<property> <description>The hostname of the RM.</description> <name>yarn.resourcemanager.hostname</name> <value>hadoop0</value> </property>

(10)修改hadoop0中hadoop的一个配置文件etc/hadoop/slaves 删除原来的所有内容,修改为如下
hadoop1hadoop2

(11)在hadoop0中执行命令
scp -rq /usr/local/hadoop hadoop1:/usr/local scp -rq /usr/local/hadoop hadoop2:/usr/local

(12)启动hadoop分布式集群服务
执行sbin/start-all.sh

注意:在执行的时候会报错,是因为两个从节点缺少which命令,安装即可
分别在两个从节点执行下面命令安装
yum install -y which

再启动集群(如果集群已启动,需要先停止)
sbin/start-all.sh

(13)验证集群是否正常 首先查看进程: Hadoop0上需要有这几个进程
[root@hadoop0 hadoop]# jps4643 Jps4073 NameNode4216 SecondaryNameNode4381 ResourceManager

Hadoop1上需要有这几个进程
[root@hadoop1 hadoop]# jps715 NodeManager849 Jps645 DataNode

Hadoop2上需要有这几个进程
[root@hadoop2 hadoop]# jps456 NodeManager589 Jps388 DataNode

使用程序验证集群服务 创建一个本地文件
vi a.txthello youhello me

上传a.txt到hdfs上
hdfs dfs -put a.txt /

执行wordcount程序
cd /usr/local/hadoop/share/hadoop/mapreducehadoop jar hadoop-mapreduce-examples-2.4.1.jar wordcount /a.txt /out

查看程序执行结果
这里写图片描述

这样就说明集群正常了。
通过浏览器访问集群的服务 由于在启动hadoop0这个容器的时候把50070和8088映射到宿主机的对应端口上了
adb9eba7142b crxy/centos-ssh-root-jdk-hadoop "/usr/sbin/sshd -D" About an hour ago Up About an hour 0.0.0.0:8088->8088/tcp, 0.0.0.0:50070->50070/tcp, 0.0.0.0:32770->22/tcp hadoop0
1

1

所以在这可以直接通过宿主机访问容器中hadoop集群的服务 宿主机的ip为:192.168.1.144
http://192.168.1.144:50070/http://192.168.1.144:8088/

这里写图片描述

这里写图片描述

三:集群节点重启 停止三个容器,在宿主机上执行下面命令
docker stop hadoop0docker stop hadoop1docker stop hadoop2

容器停止之后,之前设置的固定ip也会消失,重新再使用这几个容器的时候还需要重新设置固定ip 先把之前停止的三个容器起来
docker start hadoop0docker start hadoop1docker start hadoop2

在宿主机上执行下面命令重新给容器设置固定ip
pipework br0 hadoop0 192.168.2.10/24pipework br0 hadoop1 192.168.2.11/24pipework br0 hadoop2 192.168.2.12/24

还需要重新在容器中配置主机名和ip的映射关系,每次都手工写比较麻烦 写一个脚本,runhosts.sh

!/bin/bashecho 192.168.2.10 hadoop0 >> /etc/hostsecho 192.168.2.11 hadoop1 >> /etc/hostsecho 192.168.2.12 hadoop2 >> /etc/hosts

添加执行权限,chmod +x runhosts.sh
把这个脚本拷贝到所有节点,并且分别执行这个脚本
scp runhosts.sh hadoop1:~scp runhosts.sh hadoop2:~

执行脚本的命令 ./runhosts.sh

查看/etc/hosts文件中是否添加成功

这里写图片描述

注意:有一些docker版本中不会在hosts文件中自动生成下面这些映射,所以我们才在这里手工给容器设置固定ip,并设置主机名和ip的映射关系。
172.17.0.25 hadoop0172.17.0.25 hadoop0.bridge172.17.0.26 hadoop1172.17.0.26 hadoop1.bridge172.17.0.27 hadoop2172.17.0.27 hadoop2.bridge

启动hadoop集群
sbin/start-all.sh

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容