!! 以下教程默认使用root用户,如果不是root用户自行使用 sudo 来执行命令!

模块 A:大数据平台搭建(容器环境)

容器环境搭建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 搭建环境前要先查看centos的版本是否大于 7
cat /etc/redhat-release
# 安装docker需要的环境
yum -y install gcc
yum -y install gcc-c++
yum -y install yum-utils
# 设置稳定库
yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 更新yum软件包索引
yum makecache fast
# 安装docker ce
yum -y install docker-ce docker-ce-cli containerd.io
# 查看docker状态
systemctl status docker
# 启动docker
systemctl start docker
# 查看版本
docker version
1
2
3
# 到docker目录下创建deamon.json文件夹
cd /etc/docker/
vim deamon.json

将以下内容写入deamon.json

1
2
3
4
5
6
7
8
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.ccs.tencentyun.com",
"https://ahunh7pc.mirror.aliyuncs.com"
]
}

1
2
3
4
# 改写deamon.json文件后重启docker服务
systemctl daemon-reload
systemctl restart docker
systemctl status docker

拉取镜像之前要先重启docker

1
2
3
4
# 拉取centos基础镜像
docker pull centos:7.5.1804
# 查看拉取centos镜像是否成功
docker images

创建容器(创建文件 -> 文件创建镜像 -> 配置网络 -> 镜像创建容器)

新建文件 /opt/software/docker-file/Dockerfile 利用该文件创建镜像

1
2
3
cd /opt/software/
mkdir docker-file
vim Dockerfile

将以下内容写入 Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FROM centos:7.5.1804
RUN yum -y install openssh-server openssh-clients sudo vim net-tools
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
RUN groupadd -g 1124 bigdata && useradd -m -u 1124 -g bigdata xiaokang
RUN echo "xiaokang:xiaokang" | chpasswd
RUN echo "xiaokang ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
RUN mkdir -p /opt/module
RUN mkdir -p /opt/software
RUN chown -R xiaokang:bigdata /opt/module && chown -R xiaokang:bigdata /opt/software
ENV CENTOS_DEFAULT_HOME /root
WORKDIR $CENTOS_DEFAULT_HOME
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

centos7-image 为镜像名(可自定义)

1
docker build -f Dockerfile -t centos7-image .

创建容器前要先创建网络

mynetwork 为网络名(可自定义)

1
2
3
docker network create --subnet=172.22.0.0/24 mynetwork
# 查看网络
docker network ls

镜像id一定要是自己镜像创建的id


1
2
3
4
5
6
7
8
9
# 语法
# docker run -d --name 容器名 --hostname 主机名 --net 网络名 -P -p 端口 --privileged 镜像id /usr/sbin/init

# hadoop02
docker run -d --name hadoop02 --hostname hadoop02 --net mynetwork --ip 172.22.0.2 -P -p 50070:50070 -p 8088:8088 -p 19888:19888 --privileged c55cd0cef6f4 /usr/sbin/init
# hadoop03
docker run -d --name hadoop03 --hostname hadoop03 --net mynetwork --ip 172.22.0.3 -P -p 50090:50090 --privileged c55cd0cef6f4 /usr/sbin/init
# hadoop04
docker run -d --name hadoop04 --hostname hadoop04 --net mynetwork --ip 172.22.0.4 -P --privileged c55cd0cef6f4 /usr/sbin/init

使用容器

点击查看参考教程
  • 查看并进入容器

每次关闭再启动虚拟机后都要手动启动 docker 和容器,很麻烦,所以需要配置 docker 和容器的自启动

  • 配置docker自启动
1
2
3
4
# 开启自启动
systemctl enable docker
# 关闭自启动
systemctl disable docker
  • 配置容器自启动

--restart 参数介绍

参数描述
no默认策略,在容器退出时不重启容器
on-failure在容器非正常退出时(退出状态非0),才会重启容器
on-failure:$time在容器非正常退出时,最多重启$time次
always在容器退出时总是重启容器
1
2
3
4
5
6
7
8
9
10
11
12
# 开启容器自启动
# docker update --restart=always 容器名或容器ID
docker update --restart=always <CONTAINER ID>
# 例如将容器 hadoop02 设为自启动
docker update --restart=always hadoop02


# 关闭容器自启动
# docker update --restart=no 容器名或容器ID
# docker update --restart=no <CONTAINER ID>
# 例如关闭容器 hadoop02 的自启动
docker update --restart=no hadoop02
1
2
3
4
# 查看所有容器
docker ps -a
# 查看已启动的容器
docker ps
1
2
3
4
5
6
7
8
9
# 语法
docker exec -it 容器名 /bin/bash

# hadoop02
docker exec -it hadoop02 /bin/bash
# hadoop03
docker exec -it hadoop03 /bin/bash
# hadoop04
docker exec -it hadoop04 /bin/bash

修改容器的配置 hostshostname
到宿主机上查看容器配置文件位置,找到变量 HostnamePath

1
docker inspect hadoop02

关闭容器、关闭docker服务!



1
2
3
4
docker stop hadoop02
systemctl stop docker
# 确认docker服务状态
systemctl status docker

进入配置文件地址 /var/lib/docker/containers/80d717367d2432021ddb14f03b2399616be84020f469d9dcf719bc67641b9389

1
2
3
4
# 备份
cp config.v2.json config.v2.json.bk
cp hostname hostname.bk
cp hosts hosts.bk

修改配置文件 /var/lib/docker/containers/80d717367d2432021ddb14f03b2399616be84020f469d9dcf719bc67641b9389/config.v2.json 使用全局查找替换,找到所有 hadoop02 替换为 master

名称基本语法
全局查找并替换%s/原字符/新字符/g

修改配置文件 /var/lib/docker/containers/80d717367d2432021ddb14f03b2399616be84020f469d9dcf719bc67641b9389/hostname

1
2
- hadoop02
+ master

修改配置文件 /var/lib/docker/containers/80d717367d2432021ddb14f03b2399616be84020f469d9dcf719bc67641b9389/hosts

1
2
3
4
5
6
7
8
9
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.22.0.2 master
+ 172.22.0.3 slave1
+ 172.22.0.4 slave2

任务一:Hadoop 完全分布式安装配置

点击查看参考教程

1.1.1 拷贝文件

下载 hadoop-2.7.7.tar.gzjdk-8u212-linux-x64.tar.gz 并复制到容器 master 的 software 中(若路径不存在,则需新建,路径为:/opt/software

1
docker cp $pdir/$fname $dname:$pdir/
  1. $pdir:文件夹/文件目录
  2. $fname:文件名:(属性值)
    • 值为空,为空表示选择 $pdir/ 目录
    • 值为具体值,表示选择 $pdir/ 下的 $fname 文件
  3. $dname:容器名
1
docker cp /opt/software/hadoop-2.7.7.tar.gz master:/opt/software/
1
docker cp /opt/software/jdk-8u212-linux-x64.tar.gz master:/opt/software/

1.1.2 解压文件

将 master 节点 JDK 安装包解压到 module 路径中(若路径不存在,则需新建,路径为:/opt/module)

使用以下命令解压 /opt/software 中的文件到 /opt/module 下

打开文件夹 /opt/software 然后使用 ll(不是数字1也不是大写i) 查看文件 hadoop-2.7.7.tar.gzjdk-8u212-linux-x64.tar.gz 是否存在,如果文件存在就解压,不存在先传文件,文件不存在无法执行解压命令

1
tar [Required parameters] $fname -C $pdir
  1. [Required parameters]

    • 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。
      -c:建立压缩档案
      -x:解压
      -t:查看内容
      -r:向压缩归档文件末尾追加文件
      -u:更新原压缩包中的文件

    • 下面的参数是根据需要在压缩或解压档案时可选的。
      -z:有gzip属性的
      -j:有bz2属性的
      -Z:有compress属性的
      -v:显示所有过程
      -O:将文件解开到标准输出

    • -C <目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。

    • 下面的参数-f是必须的
      • -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
  2. $pdir:文件夹/文件目录

  3. $fname:文件名:(属性值)
    • 值为空,为空表示选择 $pdir/ 目录
    • 值为具体值,表示选择 $pdir/ 下的 $fname 文件
对应代码
解压file.tar包tar –xvf file.tar
解压file.tar.gztar -zxvf file.tar.gz
解压 file.tar.bz2tar -jxvf file.tar.bz2
解压file.tar.Ztar –Zxvf file.tar.Z
解压file.rarunrar e file.rar
解压file.zipunzip file.zip
对应代码
将当前目录里的file.txt文件打包成file.tartar –cvf file.tar file.txt
将当前目录里的file.txt文件打包成file.tar.gztar –czf file.tar.gz file.txt
将当前目录里的file.txt文件打包成file.tar.bz2tar –cjf file.tar.bz2 file.txt
将当前目录里的file.txt文件打包成file.tar.Ztar –cZf file.tar.Z file.txt
将当前目录里的file.txt文件打包成file.zipzip file.zip file.txt
1
tar zxvf hadoop-2.7.7.tar.gz -C /opt/module
1
tar zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module

解压完后到文件夹内查看是否解压成功!

1
2
cd /opt/module
ll

1.2.1 配置环境变量

修改容器中 profile 文件(路径为:/etc/profile

1
vim /etc/profile

可以切大写 CapsLock 然后按 G 跳至尾行,也可以使用 shift + g(小写)

1
2
3
4
# java & hadoop
export JAVA_HOME=/opt/module/jdk1.8.0_212
export HADOOP_HOME=/opt/module/hadoop-2.7.7
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

记得保存!

1
2
3
. /etc/profile
# 或
source /etc/profile
1
2
java -version
javac

1.3.1 使用 ssh 实现免密登录

1
2
3
4
# 登录hadoop103
ssh slave1
# 退出
exit
1
2
3
4
# 确保在家目录下,如果不在可以使用:
cd ~
# 创建 rsa 文件
ssh-keygen -t rsa -N ''

回车按到显示以下文本即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
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:7eq7ba8p2jm/VRW42nPzGJ6sZCDPNPJPmHlmxkRPGIk root@master
The key's randomart image is:
+---[RSA 2048]----+
| ..... |
| E .+ .|
| o o .|
| . . + . |
| S = + o |
| O X +.o |
| O @oo+o|
| .o+.% = .|
| .oBB*++. |
+----[SHA256]-----+
1
2
3
4
# 查看隐藏文件
ls -al
# 找到 .ssh文件夹,进入
cd .ssh/

将 master 下的 公钥 id_rsa.pub 拷贝给 slave1 和 slave2

1
2
# 拷贝给 slave1,slave2同理
ssh-copy-id slave1

首次需要输入密码(密码不可见)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@master .ssh]# ssh-copy-id hadoop103
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@slave1's password:

# 密码正确显示:


Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'slave1'"
and check to make sure that only the key(s) you wanted were added.

[root@master .ssh]#

因为本机登录也需要输入密码,所以需要传一份公钥给自己本机(master)

1.3.2 使用 scp 命令进行安全拷贝

1
scp -r $pdir/$fname $user@$host:$pdir/$fname
  1. $pdir:文件夹/文件目录
  2. $fname:文件名:(属性值)
    • 值为空,为空表示选择 $pdir/ 目录
    • 值为 *, 表示选择 $pdir/ 目录下的所有文件
    • 值为具体值,表示选择 $pdir/ 下的 $fname 文件
  3. $user:用户名(目标机的用户名)
  4. $host:IP地址(目标机的地址)

前提在master、slave1、slave2都创建好了module(路径:/opt/module)

将master中的jdk拷贝到slave1
1
2
3
4
cd /opt/module # 进 module 文件夹
ll # 列表展示所有文件
pwd # 查路径
scp -r jdk1.8.0_212/ xiaokang@slave1:/opt/module # 拷贝到 slave1 的 /opt/module 下 用户名为 xiaokang 文件夹为 jdk1.8.0_212/

首次拷贝需要进行确认和输入管理员密码,会出现以下提示:


1
2
3
4
5
6
7
The authenticity of host 'slave1 (192.168.10.103)' can't be established.
ECDSA key fingerprint is SHA256:PTPbUEReNUaje+/doeEYmZV5z68jauvds1z9GPrZUnQ.
ECDSA key fingerprint is MD5:d1:91:9e:d0:b7:24:44:c7:bd:82:25:48:48:e1:e7:94.
Are you sure you want to continue connecting (yes/no)? yes # 输入yes

Warning: Permanently added 'slave1,192.168.10.103' (ECDSA) to the list of known hosts.
xiaokang@slave1's password: # 输入管理员密码(密码不可见)

前提在 master 中存在该文件,拉取文件和拷贝文件都可以实现文件拷贝

从master中将jdk文件拉取到slave1、slave2
1
2
3
4
# 在 slave1 下操作
cd /opt/module # 进 module 文件夹
ll # 列表展示所有文件
scp -r xiaokang@master:/opt/module/hadoop-2.7.7 ./ # 从 master 的 /opt/module 下 拉取文件 用户名为 xiaokang 文件夹为 jdk1.8.0_212/ 存放在 slave1 的 /opt/module 下

首次拷贝需要进行确认和输入管理员密码,会出现以下提示:


1
2
3
4
5
6
7
The authenticity of host 'master (192.168.10.102)' can't be established.
ECDSA key fingerprint is SHA256:PTPbUEReNUaje+/doeEYmZV5z68jauvds1z9GPrZUnQ.
ECDSA key fingerprint is MD5:d1:91:9e:d0:b7:24:44:c7:bd:82:25:48:48:e1:e7:94.
Are you sure you want to continue connecting (yes/no)? yes # 输入yes

Warning: Permanently added 'master,192.168.10.102' (ECDSA) to the list of known hosts.
xiaokang@master's password: # 输入master 的管理员密码(密码不可见)

前提在 master 中存在该文件,并且 slave2 中存在所选文件夹

从slave1拉取master的文件到slave2
1
2
3
4
# 在 slave1 下操作
cd /opt/module # 进 module 文件夹
ll # 列表展示所有文件
scp -r xiaokang@master:/opt/module/* xiaokang@slave2:/opt/module/ # 从 master 的 /opt/module 下 拉取文件 用户名为 xiaokang 文件为全部文件 存放在 slave2 的 /opt/module/ 下

首次拷贝需要进行确认和输入管理员密码,会出现以下提示:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
The authenticity of host 'master (192.168.10.102)' can't be established.
ECDSA key fingerprint is SHA256:PTPbUEReNUaje+/doeEYmZV5z68jauvds1z9GPrZUnQ.
ECDSA key fingerprint is MD5:d1:91:9e:d0:b7:24:44:c7:bd:82:25:48:48:e1:e7:94.
Are you sure you want to continue connecting (yes/no)? yes # 输入yes

Warning: Permanently added 'master,192.168.10.102' (ECDSA) to the list of known hosts.
xiaokang@master's password: # 输入hadoop102 的管理员密码(密码不可见)

The authenticity of host 'slave2 (192.168.10.104)' can't be established.
ECDSA key fingerprint is SHA256:PTPbUEReNUaje+/doeEYmZV5z68jauvds1z9GPrZUnQ.
ECDSA key fingerprint is MD5:d1:91:9e:d0:b7:24:44:c7:bd:82:25:48:48:e1:e7:94.
Are you sure you want to continue connecting (yes/no)? yes # 输入yes

Warning: Permanently added 'slave2,192.168.10.104' (ECDSA) to the list of known hosts.
xiaokang@slave2's password: # 输入hadoop104 的管理员密码(密码不可见)

进 slave1 或 slave2 检查


1
2
3
# slave1
cd /opt/module # 进 slave1 的 module文件夹下
ll # 查看所有文件(检查是否拷贝成功,文件夹名为:jdk1.8.0_212 和 hadoop-2.7.7)

xsync相关配置(封装一个自动同步分配的文件)

1
xsync $fname
名称释义
$fname为需要拷贝的文件名

新建文件并编辑 /root/bin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi

#2. 遍历集群所有机器
for host in master slave1 slave2
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送

for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)

#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done

任务二:Sqoop 安装配置

点击查看参考教程

任务三:Hive 安装配置

点击查看参考教程

模块B:离线数据处理

模块C:数据挖掘

报错汇总

点击查看参考教程

failure: repodata/repomd.xml from runoob.com_docker_centos-docker-install.html: [Errno 256] No more mirrors to try.

解决方法:删除库重新下载,建议换个节点

1
2
3
4
# 删库方法
cd /etc/yum.repos.d
cd /etc/yum.repos.d | grep "docker"
rm -f $fname # $fname 为上一条命令查到的所有文件名

Error response from daemon: Container 80d717367d2432021ddb14f03b2399616be84020f469d9dcf719bc67641b9389 is not running

解决方法

1
docker start 80d717367d2432021ddb14f03b2399616be84020f469d9dcf719bc67641b9389

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

解决方法

1
systemctl docker start