900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > VM虚拟机 - Docker - CentOS 7 - 快速使用Docker从零搭建Hadoop完全分布式集群

VM虚拟机 - Docker - CentOS 7 - 快速使用Docker从零搭建Hadoop完全分布式集群

时间:2021-06-22 03:36:57

相关推荐

VM虚拟机 - Docker - CentOS 7 - 快速使用Docker从零搭建Hadoop完全分布式集群

目录

阅读须知最小安装(可跳)安装VMware Tool(可直接安装)关闭防火墙和Selinux安装docker迁移docker安装目录docker安装CentOS 7安装必要工具安装Java和Scala安装Hadoop编写脚本启动集群Windows连接容器测试集群关闭集群编写快速启动容器脚本安装MySQL安装Hive安装ZooKeeper安装Kafka安装Spark安装PostgreSQL动态添加端口映射遇到的问题附录:常见框架端口参考博客

阅读须知

为什么用 docker 搭建 hadoop 集群呢?虚拟机超级超级慢,一开始可以带三台虚拟机,慢慢的连一台都慢死了。一怒之下干脆从零再用 docker 搭一个集群算了。除了开始的一些步骤图形化界面是不用操作的,接下来的操作都一样,大部分坑我都走了,好多操作我都从头执行了好几遍,直接复制即可。

虚拟机-Linux-CentOS 7吐血安装Hadoop2.9.2搭建集群教程(详细图解)

本博客采用最小安装。一开始我是安装了图形化界面(KDE),由于在 docker 里面不能直接使用systemctl,如果直接 docker run 会报错:Failed to get D-Bus connection: Operation not permitted。解决方法是在创建容器时加上--privileged/usr/sbin/init。但是我只要一执行就会跳出图形化界面,进入一个命令行界面,然后就回不去了!!!我以为是 CentOS 版本的问题,用最新版也一样,这个问题困扰了我好久都没解决。一怒之下干脆不要图形化界面了,直接最小安装算了,还没这么卡。但是还是会跳转界面,后来我直接用 XShell 控制虚拟机,懒得看它了。

像 Java、Scala、Hadoop、Hive、Spark 这些东西都是从官网下个 tar 包,再继续操作。所以需要用到共享文件夹。

集群配置,所以弄三个容器过程中适当拍摄快照

每一步都很关键!!!

Ctrl C+Ctrl V走起 👻👻👻👻

最小安装(可跳)

安装虚拟机和CentOS的过程:

ip addr查看 IP,接下来的操作都在XShell

安装必要的工具

yum -y install vim #编辑器yum -y install net-tools #ifconfigyum -y install httpdyum -y install wgetyum -y install iprouteyum -y install lsofyum -y install bash-completion#tab补全yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake#gcc#yum -y update#升级#yum -y install kernel-devel #升级kernel-devel#yum -y install kernel-headers

修改/etc/vimrc文件,防止中文乱码,vim /etc/vimrc,添加如下代码

set encoding=utf-8set termencoding=utf-8set fileencodings=utf-8

如果想格式化JSON可以在/etc/vimrc加上下面的代码:

command! JsonFormat :execute '%!python -m json.tool'\ | :execute '%!python -c "import re,sys;chr=__builtins__.__dict__.get(\"unichr\", chr);sys.stdout.write(re.sub(r\"\\u[0-9a-f]{4}\", lambda x: chr(int(\"0x\" + x.group(0)[2:], 16)).encode(\"utf-8\"), sys.stdin.read()))"'\ | :set ft=javascript\ | :

打开json文件,输入:

:JsonFormat

详解Linux安装GCC方法

vmware + centos 7安装vmtools时提示The path “” is not a valid path to the xxx kernel header

VMware下CentOS7最小化安装及配置

CentOS 7 最小化安装后的注意事项及一些必备组件的安装

CentOS7最小化安装-Linux-1

Linux最小化安装后一般需要安装的命令的rpm包合集

让VIM彻底告别乱码

VIM中格式化json

安装VMware Tool(可直接安装)

在虚拟机菜单栏中点击虚拟机 -> 安装 VMware Tools创建挂载目录:mkdir /mnt/cdrom将光驱挂载到/mnt/cdrom目录:mount /dev/cdrom /mnt/cdrom将压缩包拷贝到其它地方:cp /mnt/cdrom/VMwareTools-10.3.2-9925305.tar.gz /opt解压:tar -zxvf /opt/VMwareTools-10.3.2-9925305.tar.gz -C /opt进入解压出来的目录:cd /opt/vmware-tools-distrib安装:./vmware-install.pl。这一步可能会遇到问题:bash:./vmware-install.pl :/usr/bin/perl:bad interpreter:No such file or directory。输入yum groupinstall “Perl Support”即可。卸载光驱:umount /dev/cdrom

Linux VMware Tools安装步骤简易版

CentOS-7 最小安装VMware-tools

在 Linux 虚拟机中手动安装 VMware Tools

关闭防火墙和Selinux

输入systemctl status firewalld.service查看防火墙状态输入systemctl stop firewalld.service关闭防火墙输入systemctl disable firewalld.service关闭防火墙自启输入vim /etc/sysconfig/selinux,将SELINUX=enforcing改为SELINUX=disabled

安装docker

卸载已安装的较旧的 Docker 以及相关的依赖项。

yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engin

安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

yum install -y yum-utils \device-mapper-persistent-data \lvm2

设置仓库源

yum-config-manager \--add-repo \/docker-ce/linux/centos/docker-ce.repo

安装最新版本的 Docker Engine-Community 和 containerd

yum -y install docker-ce docker-ce-cli containerd.io

启动docker 服务:systemctl start docker

检测 docker 版本:docker version

停止docker服务:systemctl stop docker

修改镜像源:vim /etc/docker/daemon.json

{"registry-mirrors": ["","https://hub-mirror.","https://registry.docker-","https://docker.mirrors."]}

迁移docker安装目录

docker镜像容器目录默认存放在/var/lib/docker,担心后期数据量大导致系统盘空间不足,现把它迁移到其它地方。我有一次好不容易装好了,提示我磁盘空间不足,vim 都用不了了。

通过df -h看下磁盘大概的情况,找一个大的空间创建新目录作为docker的新目录:mkdir -p /opt/docker迁移数据:cp -r /var/lib/docker/ /opt/docker修改docker.servicevim /lib/systemd/system/docker.service,在ExecStart后面添加--data-root /opt/dockersystemctl daemon-reload重启 docker 服务:systemctl start docker查看默认路径是否已修改:docker info | grep " Root Dir",如果修改了会提示这样:DockerRoot Dir: /opt/docker通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community 。

docker run hello-world

删除原目录数据:rm -rf /var/lib/docker

attempt to change docker data-root fails - why

两种方式迁移 Docker 的默认安装 (存储) 目录

docker的/var/lib/docker目录迁移

docker镜像容器目录迁移

docker安装CentOS 7

拉取指定版本的 CentOS 镜像

docker pull centos:centos7

2. 查看本地镜像

docker images

run运行容器,然后可以通过exec命令进入 CentOS 容器。注意两个地方--privileged/usr/sbin/init,这样你才能使用systemctl

docker run -itd --privileged -h base --name base centos:centos7 /usr/sbin/initdocker exec -it 77b6c963033b /bin/bash

安装必要工具

分别安装 vim、net-tools、iputils-ping 等

yum -y install vim #编辑器yum -y install net-tools #ifconfigyum -y install iputils-ping #pingyum -y install httpdyum -y install iprouteyum -y install lsofyum -y install wgetyum -y install rsync#同步数据yum -y install bash-completion#tab补全yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake#gccyum -y install openssh-server #sshyum -y install openssh-clients #sshsystemctl start sshd.service #启动 ssh 服务systemctl enable sshd.service #设置 ssh 开机启动systemctl start rsyncd.service #启动 rsync 服务systemctl enable rsyncd.service

修改/etc/vimrc文件,防止中文乱码,vim /etc/vimrc,添加如下代码

set encoding=utf-8set termencoding=utf-8set fileencodings=utf-8

vim /etc/ssh/sshd_config,将PermitRootLogin,PubkeyAuthentication 的设置打开。

为了保证系统启动的时候也启动 ssh 服务,我们将启动命令放到bashrc文件末尾中:systemctl start sshd.service

vim ~/.bashrc

这一步很狠猩狼关键passwd。输入你的密码,后面 ssh 登录要用!!!

安装Java和Scala

在主机将 JDK 和 Scala 复制到容器的/opt目录

docker cp /mnt/hgfs/share/jdk-8u241-linux-x64.tar.gz def8faf07d6b:/optdocker cp /mnt/hgfs/share/scala-2.12.12.tgz def8faf07d6b:/opt

解压压缩包到/opt,并重命名

tar -zxvf /opt/jdk-8u241-linux-x64.tar.gz -C /optmv /opt/jdk1.8.0_241 /opt/jdk-1.8.0tar -zxvf /opt/scala-2.12.12.tgz -C /opt

更改文件的所有者和所在组:chown -R root:root /opt/jdk-1.8.0 && chown -R root:root /opt/scala-2.12.12设置环境变量vim /etc/profile,在末尾添加

#JAVAexport JAVA_HOME=/opt/jdk-1.8.0export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib#Scalaexport SCALA_HOME=/opt/scala-2.12.12#PATHexport PATH=$PATH:${JAVA_HOME}/bin:${SCALA_HOME}/bin

source /etc/profile && java -version && scala -version查看 Java 和 Scala 是否配置成功

输入vim ~/.bashrc,加上source /etc/profile记得删除压缩包

安装Hadoop

在主机将 Hadoop 复制到容器的/opt目录

docker cp /mnt/hgfs/share/hadoop-2.9.2.tar.gz def8faf07d6b:/opt

解压压缩包到/opt

tar -zxvf /opt/hadoop-2.9.2.tar.gz -C /opt

更改文件的所有者和所在组:chown -R root:root /opt/hadoop-2.9.2配置core-site.xml($HADOOP_HOME/etc/hadoop/下)fs.default.name 为默认的master节点。hadoop.tmp.dir为hadoop默认的文件路径。如果本机没有的话需要自己通过 mkdir 命令进行创建。

<property><name>fs.defaultFS</name><value>hdfs://master:9000</value></property><!-- 指定hadoop运行时产生文件的存储路径 --><property><name>hadoop.tmp.dir</name><value>/opt/hadoop-2.9.2/data/tmp</value></property>

创建上面的文件目录:mkdir -p /opt/hadoop-2.9.2/data/tmp输入 vim etc/hadoop/hadoop-env.sh,修改 JAVA_HOME 变量,将其改为Java的安装目录($HADOOP_HOME/etc/hadoop/下)配置hdfs-site.xml($HADOOP_HOME/etc/hadoop/下)

<property><name>dfs.replication</name><value>3</value><!-- replication 是数据副本数量,默认为3--></property><!-- 指定Hadoop辅助名称节点主机配置 --><property><name>dfs.namenode.secondary.http-address</name><value>slave2:50090</value></property>

输入 vim etc/hadoop/yarn-env.sh,修改 JAVA_HOME 变量,将其改为Java的安装目录配置yarn-site.xml($HADOOP_HOME/etc/hadoop/下)

<property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.resourcemanager.hostname</name><value>slave1</value></property><property><name>yarn.resourcemanager.address</name><value>slave1:8032</value></property><property><name>yarn.resourcemanager.scheduler.address</name><value>slave1:8030</value></property><property><name>yarn.resourcemanager.resource-tracker.address</name><value>slave1:8031</value></property><property><name>yarn.resourcemanager.admin.address</name><value>slave1:8033</value></property><property><name>yarn.resourcemanager.webapp.address</name><value>slave1:8088</value></property><!-- Site specific YARN configuration properties --><property><name>yarn.log-aggregation-enable</name><value>true</value></property><property><!-- 日志保留7天 --><name>yarn.log-aggregation.retain-seconds</name><value>604800</value></property>

输入 vim etc/hadoop/mapred-env.sh,修改 JAVA_HOME 变量,将其改为Java的安装目录($HADOOP_HOME/etc/hadoop/下)输入mv etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml,将mapred-site.xml.template 重命名为mapred-site.xml配置mapred-site.xml($HADOOP_HOME/etc/hadoop/下)

<!-- 通知框架MR使用YARN --><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><!-- history server address --><name>mapreduce.jobhistory.address</name><value>master:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>master:19888</value></property>

在master节点配置 $HADOOP_HOME/etc/hadoop/ 下的slaves文件,输入vim etc/hadoop/slaves(注意不能有空格和空行!!!)删掉localhost,改为下面

masterslave1slave2

编写脚本

xcall在所有主机上同时执行相同的命令:vim /usr/local/bin/xcall

用法:xcall jps

#!/bin/bashpcount=$#if((pcount==0));thenecho "Error: No args...";exit;fi# 获取当前主机名hostname=`hostname`# 同步到集群其它机器for target in `cat /opt/hadoop-2.9.2/etc/hadoop/slaves`doecho ==================$target==================if [ "$target" != "$hostname" ];thenssh $target $@else$@fidone

xsync循环复制文件到所有节点的相同目录下:vim /usr/local/bin/xsync

用法:xsync /opt/hadoop-2.9.2/etc

rsync主要用于备份和镜像,具有速度快、避免复制相同内容和支持符号链接的优点。rsync和scp的区别是,rsync只对差异文件更改,scp是将所有文件复制。

#!/bin/sh# 获取输入参数个数,如果没有参数,直接退出pcount=$#if((pcount==0));thenecho "Error: No args...";exit;fi# 获取文件名称p1=$1fname=`basename $p1`echo fname=$fname# 获取上级目录到绝对路径pdir=`cd -P $(dirname $p1); pwd`echo pdir=$pdir# 获取当前用户名称user=`whoami`# 获取当前主机名hostname=`hostname`# 同步到集群其它机器for target in `cat /opt/hadoop-2.9.2/etc/hadoop/slaves`doif [ "$target" != "$hostname" ];thenecho "$pdir/$fname->$user@$target:$pdir"echo ==================$target==================rsync -rvl $pdir/$fname $user@$target:$pdirfidone

rsync -rvl$pdir/$fname$user@$host:$pdir/$fname命令 参数 要复制的文件路径/名称 目的用户@主机名:目的路径/名称

修改权限:chmod a+x /usr/local/bin/xcall && chmod a+x /usr/local/bin/xsync。u:表示用户,g:表示用户组,o: 表示其它,a: 表示所有jps 建立软连接:ln -sf /opt/jdk-1.8.0/bin/jps /usr/local/bin/

退出容器并停止容器:exitdocker stop 容器ID

Hadoop集群脚本工具rsync、xsync和xcall

简单教你写xsync和xcall的脚本

centos7搭建hadoop集群之xcall脚本

Shell $0, $#, $*, $@, $?, $$的含义

启动集群

将刚才的容器导出为镜像,并查看当前镜像

docker commit -m "hadoop" -a "hxp" def8faf07d6b hxp/hadoop:1.0

为了集群间可以通信,自定义网络

docker network create --driver=bridge --subnet=172.18.0.0/16 hadoop-net

创建3个容器,master,slave1,slave2。注意数据卷的目录是一个新的空目录,如果目录内有数据会被覆盖。这里固定 IP。

docker run -itd -h master --name master --network hadoop-net --privileged -v /opt/docker:/opt/docker --ip 172.18.0.2 -p 2181:2181 -p 3306:3306 -p 4040:4040 -p 7077:7077 -p 8080:8080 -p 8081:8081 -p 9000:9000 -p 9092:9092 -p 10000:10000 -p 18080:18080 -p 29094:29094 -p 50070:50070 -p 8088:8088 hxp/hadoop:1.0 /usr/sbin/initdocker run -itd -h slave1 --name slave1 --network hadoop-net --privileged -v /opt/docker:/opt/docker --ip 172.18.0.3 hxp/hadoop:1.0 /usr/sbin/initdocker run -itd -h slave2 --name slave2 --network hadoop-net --privileged -v /opt/docker:/opt/docker --ip 172.18.0.4 hxp/hadoop:1.0 /usr/sbin/init

在 master 节点 ping 其他节点检测是否正常

在 master 节点的家目录(cd ~)输入ssh-keygen -t rsa生成公钥和私钥(中间按三个Enter),然后依次输入ssh-copy-id masterssh-copy-id slave1ssh-copy-id slave2(交换公钥)。这些操作分别在 slave1 和 slave2 做一次。(密码不正确的想一想是不是上面漏了一个很关键的地方)(logout 退出 ssh)

在每个节点设置时间(东八区),我这里原本是UTC,所以要设为CST

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

Linux —— 时间(tzselect、timedatactl命令,查看和修改时区,修改时区为东八区)

进入Hadoop安装目录,格式化 NameNode:bin/hdfs namenode -format

编写启动和停止集群脚本start-cluster.shstop-cluster.sh。vim /usr/local/bin/start-cluster.sh,vim /usr/local/bin/stop-cluster.sh

#!/bin/sh/opt/hadoop-2.9.2/sbin/start-dfs.shssh slave1 /opt/hadoop-2.9.2/sbin/start-yarn.sh

#!/bin/sh/opt/hadoop-2.9.2/sbin/stop-dfs.shssh slave1 /opt/hadoop-2.9.2/sbin/stop-yarn.sh

chmod a+x /usr/local/bin/start-cluster.sh && chmod a+x /usr/local/bin/stop-cluster.sh

在 master 节点启动集群start-cluster.sh

xcall jps,如果出现 jps not found:source /etc/profile

输入bin/hdfs dfsadmin -report查看HDFS状态

[root@master hadoop-2.9.2]# bin/hdfs dfsadmin -reportConfigured Capacity: 204447940608 (190.41 GB)Present Capacity: 186659966976 (173.84 GB)DFS Remaining: 186659942400 (173.84 GB)DFS Used: 24576 (24 KB)DFS Used%: 0.00%Under replicated blocks: 0Blocks with corrupt replicas: 0Missing blocks: 0Missing blocks (with replication factor 1): 0Pending deletion blocks: 0-------------------------------------------------Live datanodes (3):Name: 172.18.0.2:50010 (master)Hostname: masterDecommission Status : NormalConfigured Capacity: 68149313536 (63.47 GB)DFS Used: 8192 (8 KB)Non DFS Used: 5929324544 (5.52 GB)DFS Remaining: 62219980800 (57.95 GB)DFS Used%: 0.00%DFS Remaining%: 91.30%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: 1Last contact: Thu Nov 05 03:11:08 UTC Last Block Report: Thu Nov 05 02:52:23 UTC Name: 172.18.0.3:50010 (slave1.hadoop-net)Hostname: slave1Decommission Status : NormalConfigured Capacity: 68149313536 (63.47 GB)DFS Used: 8192 (8 KB)Non DFS Used: 5929324544 (5.52 GB)DFS Remaining: 62219980800 (57.95 GB)DFS Used%: 0.00%DFS Remaining%: 91.30%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: 1Last contact: Thu Nov 05 03:11:08 UTC Last Block Report: Thu Nov 05 02:52:23 UTC Name: 172.18.0.4:50010 (slave2.hadoop-net)Hostname: slave2Decommission Status : NormalConfigured Capacity: 68149313536 (63.47 GB)DFS Used: 8192 (8 KB)Non DFS Used: 5929324544 (5.52 GB)DFS Remaining: 62219980800 (57.95 GB)DFS Used%: 0.00%DFS Remaining%: 91.30%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: 1Last contact: Thu Nov 05 03:11:08 UTC Last Block Report: Thu Nov 05 02:52:23 UTC

/u012943767/article/details/79767670

docker设置容器固定ip

Docker 配置容器固定IP

docker 创建容器时指定容器ip

Windows连接容器

|----------------------------------------|||| |--------------------------------| || | | || | docker(CentOS) 172.18.0.2 | || |--------------------------------| |||| Virtual Machine(CentOS) 192.168.27.143 ||----------------------------------------|Windows 192.168.137.123

由于 docker 容器处于内网,外网不可以直接访问内网,需要添加路由进行转发。当然也可以端口映射,但添加端口有点麻烦。

route add将发送到 172.18.0.0/16 网段的数据有 192.168.27.143(具体IP) 来转发。(Ifconfig查看,-p永久)

route add -p 172.18.0.0 mask 255.255.0.0 192.168.27.143

道理都懂,找个中间人传递信息嘛,理论上是没问题的。可是为啥我就是 windows ping 不通 docker?这里我搞了好久,最终还是重头再装一次问题才解决(同样的操作,竟然神奇的通了。。。)

大家可以尝试打开并启动防火墙,然后在关闭防火墙,我有一次就是这样好了,也不知道为什么

Windows连接Linux虚拟机里面的Docker容器

在Windows系统浏览器中访问虚拟机CentOS里面Docker容器运行nginx服务器

解决 docker 容器无法通过 IP 访问宿主机问题

在Windows宿主机中连接虚拟机中的Docker容器

Windows连接虚拟机里面的Docker容器ip

在Windows宿主机中连接虚拟机中的Docker容器总结

测试集群

在浏览器输入http://master:50070/,检查 Datanode Information(有可能出现DataNode不够三个)

在浏览器输入http://slave1:8088/

运行 WordCount:

mkdir wcinput && vim wcinput/wc.input在刚创建的文件写下

touch touch

window window

sun sun sun sun sun

phone

hadoop hadoop hadoop上传文件到 HDFS:bin/hdfs dfs -put wcinput/wc.input /运行 WordCount:bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /wc.input /output

关闭集群

关闭集群:stop-cluster.sh

出现:nodemanager did not stop gracefully after 5 seconds: killing with kill -9

好吧,这个问题我没解决,不过这个问题影响不大,我就不理它了。大伙有兴趣可以自行解决。我把原因和解决方法贴下面:

原因:原因在 hadoop-daemon.sh 找不到pid文件了,pid文件默认存放在 /tmp,而系统会定时清理该目录中的文件

解决:

确保关闭了集群修改 hadoop 安装目录下的 sbin/hadoop-daemon.sh 的第 26 行

修改 hadoop 安装目录下的 sbin/yarn-daemon.sh 的第 26 行

mkdir /opt/hadoop-2.9.2/pid同步到其它集群:xsync /opt/hadoop-2.9.2/sbin

NodeManager did not stop gracefully after 5 seconds: kill

NodeManager did not stop gracefully after 5 seconds: kill

#docker cp /mnt/hgfs/share/kafka_2.12-2.6.0.tgz def8faf07d6b:/opt#docker cp /mnt/hgfs/share/apache-flume-1.9.0-bin.tar.gz def8faf07d6b:/opt#docker cp /mnt/hgfs/share/apache-hive-2.3.7-bin.tar.gz def8faf07d6b:/opt

编写快速启动容器脚本

效果如下:

#!/bin/bashpcount=$##没有参数则退出程序if((pcount==0));thenecho "Error: No args...";exit;fii=0#docker集群数组array=("master" "slave1" "slave2")#启动dockercase $1 in"start"){systemctl stop firewalld#开启docker服务systemctl start docker#将容器历史运行记录写到一个临时文件docker ps -a | sed '1d' > /tmp/dockerPs#循环读取运行记录的每一行while read linedofor target in ${array[*]}do#判断该行是否包含对应的容器result=`echo "$line" | grep "$target"`if [ "$result" != "" ];then#如果包含则取该行记录空格隔开的第一个字符串container_id=`echo $line | awk -F " " '{print $1}'`#启动容器并打印日志echo ==========start ${target}, container_id=`docker start ${container_id}`===========#下一个容器let i++fidone#全部容器启动完了就跳出循环if [ $i -eq ${#array[*]} ];thenbreakfidone < /tmp/dockerPsecho " "docker ps};;"stop"){while read linedofor target in ${array[*]}doresult=`echo "$line" | grep "$target"`if [ "$result" != "" ];thencontainer_id=`echo $line | awk -F " " '{print $1}'`echo ==========stop ${target}, container_id=`docker stop ${container_id}`==========let i++fidoneif [ $i -eq ${#array[*]} ];thenbreakfidone < /tmp/dockerPs#删除临时文件rm -rf /tmp/dockerPsecho " "docker ps#睡眠15秒,如果发现异常则可以退出sleep 15s#停止服务systemctl stop dockerecho " "systemctl status docker};;esac

shell 判断字符串包含的5种方法

shell 数组遍历的3种方法

shell变量计算长度及加减运算方法总结

shell脚本中大于,大于等于,小于,小于等于、不等于的表示方法

shell读取文件每一行的方式

shell字符串空格分隔取第一个_shell按空格分隔字符串

安装MySQL

Linux-VMware15下CentOS 7安装MySQL5.7.28(tar.gz)

安装Hive

Linux-CentOS 7-基于Hadoop安装与配置Hive-2.3.7

安装ZooKeeper

在主机将 ZooKeeper 复制到容器的 /opt 目录

docker cp /mnt/hgfs/share/zookeeper-3.4.14.tar.gz def8faf07d6b:/opt

解压压缩包到 /opt

tar -zxvf /opt/zookeeper-3.4.14.tar.gz -C /opt

更改文件的所有者和所在组:chown -R root:root /opt/zookeeper-3.4.14进入 ZooKeeper 目录,复制 zoo-sample.cfg 重命名为zoo.cfgcp conf/zoo_sample.cfg conf/zoo.cfg。这个名字固定写死,因为zookeeper启动会检查这个文件,根据这个配置文件里的信息来启动服务。

dataDir:指定zookeeper将数据保存在哪个目录下,如果不修改,默认在/tmp下,这个目录下的数据有可能会在磁盘空间不足或服务器重启时自动被linux清理,所以一定要修改这个地址。

加上 ZooKeeper 各个节点的 IP 和端口,2888原子广播端口,3888选举端口,zookeeper有几个节点,就配置几个server。

dataDir=/opt/zookeeper-3.4.14/datadataLogDir=/opt/zookeeper-3.4.14/dataLogserver.1=master:2888:3888server.2=slave1:2888:3888server.3=slave2:2888:3888

创建刚才指定的两个目录:mkdir data dataLogdataDir目录下生产一个myid文件,其中写上一个数字 X 表明当前机器是哪一个编号的机器(就是刚才的server.X)。同步:xsync /opt/zookeeper-3.4.14修改 slave1 和 slave2 的 myid建立脚本zkServervim /usr/local/bin/zkServerzkClientvim /usr/local/bin/zkClient

#!/bin/bashpcount=$#if((pcount==0));thenecho "Error: No args...";exit;fi# 获取当前主机名hostname=`hostname`for target in `cat /opt/hadoop-2.9.2/etc/hadoop/slaves`doecho ==================$target==================if [ "$target" != "$hostname" ];thenssh $target /opt/zookeeper-3.4.14/bin/zkServer.sh $@else/opt/zookeeper-3.4.14/bin/zkServer.sh $@fidone

#!/bin/bash/opt/zookeeper-3.4.14/bin/zkCli.sh

chmod a+x /usr/local/bin/zkServer && chmod a+x /usr/local/bin/zkClient在各个节点启动 ZooKeeper,再查看 ZooKeeper 状态

#启动ZK服务: bin/zkServer.sh start#停止ZK服务: bin/zkServer.sh stop#重启ZK服务: bin/zkServer.sh restart#查看ZK服务状态: bin/zkServer.sh status

Zookeeper完全分布式集群的搭建

Linux安装zookeeper集群(CentOS7+Zookeeper3.4.10)

zookeeper 集群搭建

Zookeeper系列一:Zookeeper基础命令操作

遇到的问题:

查看 zookeeper.out 报错:nohup: failed to run command `java’: No such file or directory。

解决方法:在~/.bashrc加上source /etc/profile,这样每次系统启动都会执行这个指令。找不到 myid,解决方法是在dataDir目录下生产一个myid文件

org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing /opt/zookeeper-3.4.14/bin/../conf/zoo.cfgat org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:156)at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:104)at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:81)Caused by: java.lang.IllegalArgumentException: /opt/zookeeper-3.4.14/data/myid file is missingat org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:408)at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:152)... 2 moreInvalid config, exiting abnormally

为什么每次进入命令都要重新source /etc/profile 才能生效?

myid文件缺失导致zookeeper无法启动(myid file is missing)

zookeeper环境搭建中的几个坑[Error contacting service. It is probably not running]的分析及解决

解决zookeeper集群重启 Error contacting service. It is probably not running 问题

安装Kafka

在主机将 Kafka 复制到容器的 /opt 目录

docker cp /mnt/hgfs/share/kafka_2.12-2.6.0.tgz def8faf07d6b:/opt

解压压缩包到 /opt,更改文件的所有者和所在组并重命名

tar -zxvf /opt/kafka_2.12-2.6.0.tgz -C /optchown -R root:root /opt/kafka_2.12-2.6.0mv /opt/kafka_2.12-2.6.0 /opt/kafka-2.6.0

修改vim /opt/kafka-2.6.0/config/server.properties

broker.id=1#listeners=PLAINTEXT://master:9092log.dirs=/opt/kafka-2.6.0/datazookeeper.connect=master:2181,slave1:2181,slave2:2181

创建目录:mkdir /opt/kafka-2.6.0/data同步:xsync /opt/kafka-2.6.0修改 slave1 和 slave2 的 server.properties 的broker.id编写脚本:kafkaServervim /usr/local/bin/kafkaServer

#!/bin/bashpcount=$#if((pcount==0));thenecho "Error: No args...";exit;fi# 获取当前主机名hostname=`hostname`case $1 in"start"){for target in `cat /opt/hadoop-2.9.2/etc/hadoop/slaves`doecho ==================$target==================if [ "$target" != "$hostname" ];thenssh $target /opt/kafka-2.6.0/bin/kafka-server-start.sh -daemon /opt/kafka-2.6.0/config/server.propertieselse/opt/kafka-2.6.0/bin/kafka-server-start.sh -daemon /opt/kafka-2.6.0/config/server.propertiesfidone};;"stop"){for target in `cat /opt/hadoop-2.9.2/etc/hadoop/slaves`doecho ==================$target==================if [ "$target" != "$hostname" ];thenssh $target /opt/kafka-2.6.0/bin/kafka-server-stop.shelse/opt/kafka-2.6.0/bin/kafka-server-stop.shfidone};;esac

chmod a+x /usr/local/bin/kafkaServer

启动 Kafka:kafkaServer start

创建主题(注意:副本数不能超过节点数,同一个节点两个副本没意义):bin/kafka-topics.sh --create --zookeeper master:2181 --replication-factor 2 --partitions 3 --topic test

查看主题列表:bin/kafka-topics.sh --list --zookeeper master:2181

查看主题详细信息:bin/kafka-topics.sh --describe --zookeeper master:2181 --topic test

运行producer并发送信息:bin/kafka-console-producer.sh --broker-list master:9092 --topic test

This is a message

This is another message

运行consumer并接收信息:bin/kafka-console-consumer.sh --bootstrap-server master:9092 --topic test --from-beginning(启动多个 consumer 也可以接收消息)

kafka中文教程

Kafka常用命令

安装Spark

在主机将 Kafka 复制到容器的 /opt 目录

docker cp /mnt/hgfs/share/spark-3.0.0-bin-hadoop2.7.tgz def8faf07d6b:/opt

解压压缩包到 /opt,更改文件的所有者和所在组并重命名

tar -zxvf /opt/spark-3.0.0-bin-hadoop2.7.tgz -C /optchown -R root:root /opt/spark-3.0.0-bin-hadoop2.7mv /opt/spark-3.0.0-bin-hadoop2.7 /opt/spark-3.0.0

进入 spark 目录并将 conf 下的 slaves.template 改为 slaves:mv conf/slaves.template conf/slavesvim conf/slaves将 localhost 修改如下

masterslave1slave2

将 conf 目录下的 spark-env.sh.template 改为 spark-env.sh:mv conf/spark-env.sh.template conf/spark-env.shvim conf/spark-env.sh修改 spark-env.sh 文件,添加 JAVA_HOME 环境变量和集群对应的 master 节点

export JAVA_HOME=/opt/jdk-1.8.0SPARK_MASTER_HOST=masterSPARK_MASTER_PORT=7077export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080-Dspark.history.fs.logDirectory=file:///opt/spark-2.4.8/directory-Dspark.history.retainedApplications=7"export SPARK_CONF_DIR=/opt/spark-2.4.8/confexport HADOOP_CONF_DIR=/opt/hadoop-2.10.1/etc/hadoopexport YARN_CONF_DIR=/opt/hadoop-2.10.1/etc/hadoopexport SPARK_EXECUTOR_CORES=2export SPARK_EXECUTOR_MEMORY=1Gexport SPARK_DRIVER_MEMORY=1Gexport SPARK_WORKER_MEMORY=4G

修改 conf 目录下的 spark-defaults.conf.template 为 spark-defaults.conf:mv conf/spark-defaults.conf.template conf/spark-defaults.conf,修改 spark-default.conf 文件,配置日志存储路径:vim conf/spark-defaults.conf

spark.eventLog.enabled truespark.eventLog.dir file:///opt/spark-3.0.0/directory

创建目录:mkdir /opt/spark-3.0.0/directory

同步:xsync /opt/spark-3.0.0

启动:sbin/start-all.shsbin/start-history-server.shjps查看

执行任务测试

bin/spark-submit \--class org.apache.spark.examples.SparkPi \--master spark://master:7077 \./examples/jars/spark-examples_2.12-3.0.0.jar \10

http://master:8080/http://master:18080/分别查看

连接外部部署好的 Hive:

把 ${HIVE_HOME}/conf/hive-site.xml 拷贝到 ${SPARK_HOME}/conf/ 目录下将mysql-connector-java-5.1.48-bin.jar驱动放到 ${SPARK_HOME}/jars/ 目录下如果访问不到 HDFS,则需要把 ${HIVE_HOME}/conf/core-site.xml 和 ${HIVE_HOME}/conf/hdfs-site.xml 拷贝到 ${SPARK_HOME}/conf/目录下启动 ${SPARK_HOME}/bin/spark-sql

IDEA 连接 Spark 操作 Hive:

导入依赖

<dependency><groupId>org.apache.spark</groupId><artifactId>spark-hive_2.12</artifactId><version>3.0.0</version></dependency><dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>2.3.7</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.48</version></dependency>

将 hive-site.xml 文件拷贝到项目的 resources 目录中代码验证连接是否成功

import org.apache.spark.SparkConfimport org.apache.spark.sql.SparkSessionobject SQL {def main(args: Array[String]): Unit = {val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("SparkSQL")val spark: SparkSession = SparkSession.builder().enableHiveSupport() //<---------要加上这个.config(conf).getOrCreate()spark.sql("show databases").showspark.close()}}

±--------------+

|namespace|

±--------------+

| default |

|study |

±--------------+

注意:在开发工具中创建数据库默认是在本地仓库,通过参数修改数据库仓库的地址:

config("spark.sql.warehouse.dir", "hdfs://master:8020/hive/warehouse")

如果遇到 HDFS 权限问题 Permission denied,可以代码最前面增加如下代码解决:

System.setProperty("HADOOP_USER_NAME", "root")

could only be replicated to 0 nodes instead of minReplication (=1). There are 1 datanode(s) running

解决方法:此时HDFS可以上传文件,说明不是HDFS的问题,关闭防火墙

安装PostgreSQL

对应版本可以在官网查看安装步骤:/download/linux/redhat/

安装RPM:yum install -y /pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

安装PostgreSQL:yum install -y postgresql96-server

初始化数据库:/usr/pgsql-9.6/bin/postgresql96-setup initdb

开机启动:systemctl enable postgresql-9.6systemctl start postgresql-9.6

yum安装postgresql,默认会建一个名为”postgres”的系统账号,用于执行PostgreSQL,同时数据库中也会生成一个名为”postgres”的数据库用户,且密码已自动生成,切换用户:su - postgres(切换用户后,提示符变更为“-bash-4.2$”)

PostgreSQL在数据库用户同名的系统账号下登录免密,进入数据库:psql -U postgres

修改密码:alter user postgres with password ‘123456’;

创建用户:create user root with password ‘123456’;

创建数据库:create database public_db owner root;

授权(未赋权则账户只能登录控制台):grant all privileges on database public_db to root;

退出:\q(列出所有库\l,列出所有用户\du,列出库下所有表\d),退出当前用户:exit

开启远程访问,取消 listen_addresses 的注释,将参数值改为“*”:vim /var/lib/pgsql/9.6/data/postgresql.conf

主机认证:vim /var/lib/pgsql/9.6/data/pg_hba.conf,添加对所有地址信任:host all all 0.0.0.0/0 trust

登录数据库:psql -U root -d public_db\q

开放5432端口,Navicat连接:systemctl start firewalldfirewall-cmd --zone=public --add-port=5432/tcp --permanentfirewall-cmd --reloadfirewall-cmd --zone=public --list-ports

CentOS安装PostgreSQL

动态添加端口映射

Docker动态添加端口映射方法总结【亲测有效】

在已运行的docker中增加映射端口

docker容器添加对外映射端口

遇到的问题

退出docker容器时出现there are stopped jobs如何解决?

Centos7 Docker容器中报错 Failed to get D-Bus connection: Operation not permitted

centos 下ssh命令找不到(-bash: ssh: command not found)

Can’t write viminfo file /*/.viminfo! 的解决办法

Docker 端口映射到宿主机后, 外部无法访问对应宿主机端口

附录:常见框架端口

大数据 默认各框架端口号(已给大佬么整理好,必知)

JAVA各种框架插件常用端口:redis、MySQL、rabbitmq、elasticsearch、tomcat等等

Hadoop集群的各部分常用端口

参考博客

基于 Docker 构建 Hadoop 平台

使用docker构建hadoop集群

Docker搭建Hadoop环境

Docker+Hadoop+Hive+Presto 使用Docker部署Hadoop环境和Presto

使用docker搭建hadoop分布式集群

基于Docker的Hadoop完全分布式安装

Docker安装Hadoop

使用Docker搭建Hadoop集群环境

基于docker的hadoop集群搭建

Docker 学习 | 第六篇:容器网络配置

docker设置容器固定ip

docker 创建容器时指定容器ip

如有错误,请指出哈─=≡Σ(((つ•̀ω•́)つ

VM虚拟机 - Docker - CentOS 7 - 快速使用Docker从零搭建Hadoop完全分布式集群详细教程(亲测有效 ※吐血推荐※)(内含快速启动容器脚本)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。