大数据——hadoop环境安装(docker搭建)
温馨提示:这篇文章已超过412天没有更新,请注意相关的内容是否还可用!
一、这里我们使用docker搭建hadoop集群环境
1、拉取centos或ubuntu等系统的镜像
docker的安装这里我们就跳过了,如果docker没有安装的话,可以跳到docker安装教程
# 我这里使用centos为例子 docker pull centos
2、创建一个dockerfiler文件,用来构建自定义一个有ssh功能的centos镜像(因为默认的centos镜像是没有任何功能的)
vim ./Dockerfile ####### 这个Dockerfile主要是基于CentOS镜像进行一些系统设置和软件安装,最终生成一个包含SSH服务的镜像。 ####### dockerfile的内容 # 基础镜像 FROM centos # 作者 MAINTAINER hadoop # 将工作目录切换到`/etc/yum.repos.d/` RUN cd /etc/yum.repos.d/ # 使用sed命令注释掉mirrorlist行。 RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* # 使用sed命令将baseurl修改为`http://vault.centos.org`。 RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* # 更新yum缓存。 RUN yum makecache # 使用yum更新系统软件。 RUN yum update -y # 使用yum安装openssh-server和sudo。 RUN yum install -y openssh-server sudo # 使用sed命令将UsePAM设置为no,禁用PAM认证。 RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config # 使用yum安装openssh-clients。 RUN yum install -y openssh-clients # 使用echo和chpasswd命令将root用户的密码设置为123456。 RUN echo "root:123456" | chpasswd # 将root用户添加到sudoers文件中,允许其执行任何命令。 RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers # 生成DSA类型的SSH密钥。 RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key # 生成RSA类型的SSH密钥。 RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key # 创建`/var/run/sshd`目录。 RUN mkdir /var/run/sshd # 暴露容器的22端口,用于SSH连接。 EXPOSE 22 # 设置容器启动时默认运行的命令为`/usr/sbin/sshd -D`,即启动SSH服务。 CMD ["/usr/sbin/sshd", "-D"]
3、根据上面的dockerfile文件,生成我们的centos-ssh镜像
# 生成centos7-ssh镜像 docker build -t="centos7-ssh" . # 生成之后,我们的docker中就有了这个镜像 docker images
4、将jdk、hadoop安装包上传到我们的虚拟机中,和Dockerfile目录平级,我放在了/home/hadoop下
如图:我们把安装包放在Dockerfile目录下,并解压
5、之前的Dockerfile备份为Dockerfile.bak,我们重新再创建一个Dockerfile文件,用来构建hadoop镜像
vim Dockerfile ##### dockerfile的内容 # 基础镜像为centos7-ssh FROM centos7-ssh # 将当前目录下的jdk复制到镜像中 COPY jdk1.8.0_261 /usr/local/jdk # 设置java环境变量 ENV JAVA_HOME /usr/local/jdk ENV PATH $JAVA_HOME/bin:$PATH # 将hadoop目录复制到镜像中 COPY hadoop-2.7.3 /usr/local/hadoop # 设置hadoop环境变量 ENV HADOOP_HOME /usr/local/hadoop ENV PATH $HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
6、根据这个Dockerfile生成centos-hadoop镜像
docker build -t="centos7-hadoop" .
7、由于hadoop集群的机器需要网络通讯,我们单独给这些服务创建一个网桥
docker network create hadoop
8、启动容器并连接到刚刚创建的网桥
docker run -itd --network hadoop --name hadoop1 -p 50070:50070 -p 8088:8088 centos7-hadoop docker run -itd --network hadoop --name hadoop2 centos7-hadoop docker run -itd --network hadoop --name hadoop3 centos7-hadoop # 查看网桥使用情况 docker network inspect hadoop # 记录每台服务器ip,后面可能会用 172.18.0.2 hadoop1 172.18.0.3 hadoop2 172.18.0.4 hadoop3
二、进入每台容器,配置ip地址映射和ssh免密登录
1、配置ip地址
docker exec -it hadoop1 bash docker exec -it hadoop2 bash docker exec -it hadoop3 bash # 在每台hadoop服务器的终端输入: vi /etc/hosts
配置完成后,容器之间互相ping一下,看看是否可以ping通
2、配置免密登录
# 在每台hadoop服务器终端输入: # 谁要去免密登录,谁就生成密钥对,使用ssh-keygen生成密钥对,密钥对包含id_rsa和id_rsa.pub,pub就是公钥,id_rsa是私钥,我们要把id_rsa发送到要免密登录的服务器上去 ssh-keygen # 然后一直回车即可,再在每台hadoop服务器终端中输入: # 将公钥发送到需要免密登录的服务器上 ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@hadoop1 # 填yes后,输入第二(3)步时设置的密码,123456 ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@hadoop2 # 填yes后,输入第二(3)步时设置的密码,123456 ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@hadoop3 # 填yes后,输入第二(3)步时设置的密码,123456 # 测试是否成功配置ssh免密登录,ssh + hadoop服务器名: ssh hadoop1
三、这里我们进入hadoop1中测试hadoop本地模式
1、修改配置文件
# 进入下面的目录 cd /usr/local/hadoop/etc/hadoop # 修改hadoop-env.sh vi ./hadoop-env.sh # 显示行号 :set number # 修改25行的java目录为/usr/local/jdk export JAVA_HOME=/usr/local/jdk
2、新建一个测试数据集
# 在root目录下创建一个temp目录 mkdir /temp # 创建测试数据集 vi /temp/data.txt # 测试数据集内容 I Love Bejing I Love LiuChang I Love My Home I Love you I Love China Do you miss me? where are you doing? this is hadoop hello world! # 进入share下面有一个测试的jar cd /usr/local/hadoop/share/hadoop/mapreduce # 这里面有很多mapreduce的测试jar包,这里我们测试一下wordcount,/root/temp表示测试数据集的目录,会读取下面所有的文件,/root/output/wc是输出目录 hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /root/temp /root/output/wc # 执行之后,在/root/output/wc下就有生成的结果 more /root/output/wc/part-r-00000
四、hadoop伪分布模式(单机上模拟分布式环境)
1、修改hdfs-site.xml配置文件
dfs.replication 1 dfs.permissions false
2、修改core-site.xml配置文件
fs.defaultFS hdfs://hadoop1:9000 hadoop.tmp.dir /usr/local/hadoop/tmp
3、修改mapred-site.xml配置文件,这个文件需要创建,hadoop默认只给了一个mapred-site.xml.template文件
mapreduce.framework.name yarn
4、配置yarn-site.xml配置文件
yarn.resourcemanager.hostname
hadoop1
yarn.nodemanager.aux-services
mapreduce_shuffle
5、对NameNode进行格式化
# 格式化NameNode hdfs namenode -format
如下,打印这段表示格式化成功
6、启动hadoop
# 启动所有的hadoop,包括NameNode、DataNode、ResourceManager、SecondaryNameNode、NodeManager等,如果执行失败,可能是没有将sbin添加到环境变量 start-all.sh
五、hadoop全分布模式
以下配置我们全在hadoop1上进行配置,配置完成后,直接把整个目录拷贝到从节点中去
1、修改hadoop-env.sh
# 进入下面的目录 cd /usr/local/hadoop/etc/hadoop # 修改hadoop-env.sh vi ./hadoop-env.sh # 显示行号 :set number # 修改25行的java目录为/usr/local/jdk export JAVA_HOME=/usr/local/jdk
2、修改hdfs-site.xml文件
dfs.replication 2 dfs.permissions false
3、配置core-site.xml文件
fs.defaultFS hdfs://hadoop1:9000 hadoop.tmp.dir /usr/local/hadoop/tmp
4、配置mapred-site.xml文件
mapreduce.framework.name yarn
5、配置yarn-site.xml文件
yarn.resourcemanager.hostname
hadoop1
yarn.nodemanager.aux-services
mapreduce_shuffle
6、配置slaves文件
# 编辑从节点信息 vi ./etc/hadoop/slaves # slaves内容 hadoop2 hadoop3
7、对NameNode进行格式化
hdfs namenode -format
8、hadoop1配置完成之后,把整个目录拷贝到hadoop2和hadoop3中
# 将hadoop1中的文件夹复制到hadoop2中 scp -r /usr/local/hadoop/ root@hadoop2:/usr/local # hadoop1中复制到hadoop3中 scp -r /usr/local/hadoop/ root@hadoop3:/usr/local
9、启动hadoop
## 启动hadoop start-all.sh ## 判断启动是否成功 # 在hadoop1上执行jps [root@ea73bbb4c18a hadoop]# jps 881 NameNode 1491 Jps 1078 SecondaryNameNode 1240 ResourceManager
也可以访问:http://192.168.36.10:50070/dfshealth.html#tab-overview
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!









