大数据备赛
in 默认分类 with 0 comment
大数据备赛
in 默认分类 with 0 comment

一 基础搭建


本次集群搭建共有三个节点,包括一个主节点master,和两个从节点slave1
和slave2。具体操作如下:

1.1更改主机名

使用finalshell连接平台所提供的master,slave1,slave2三台机器,并按照提供linux账号和密码登录,登录成功后进行以下操作:

2024-06-18T07:56:21.png
2024-06-18T07:56:55.png
2024-06-18T07:57:06.png
同上图所示更改主机名

1.2配置hosts文件

可以通过 ifconfig 命令进行查看机器的 ip 地址或者直接输入比赛平台提供的 ip 地址。
查看节点地址之后将三个节点的内网 ip 地址以及其对应的名称写进 hosts 文件。这里我们设置为 master、slave1、slave2。注意保存退出。
vim /etc/hosts(三台机器都执行)
2024-06-18T07:59:53.png
2024-06-18T07:59:31.png
三台机器的操作完全相同

1.3 选择时区,将时区改为上海时区(CST+0800时区)

5->Asia
9->China
1->Beijing Time

2024-06-18T08:16:44.png
2024-06-18T08:17:44.png
2024-06-18T08:18:49.png

1.4 配置时间服务器+开启NTP服务

只需要在master中操作
环境中已经安装 ntp 服务,无需重复下载。可以使用命令进行查看:rpm -qa | grep ntp
2024-06-18T08:22:47.png

1)master 作为 ntp 服务器:

修改 ntp 配置文件,屏蔽掉默认的 server,设置 master 作为局域网内时钟源(本地时间服务器),设置时间服务器的层级为 10,为集群主机提供时间服务。
vim /etc/ntp.conf之后
2024-06-18T08:31:32.png

#注释掉 server 0 ~ n
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10 #stratum 设置为其它值也是可以的,其范围为 0~15(题目选择10)

2024-06-18T08:28:27.png
2024-06-18T08:28:58.png
2024-06-18T08:31:02.png

2)master 上重启 ntp 服务

systemctl restart ntpd.service
2024-06-18T08:33:44.png

3)在 slave1,slave2 中进行同步:

ntpdate master
2024-06-18T08:33:58.png
2024-06-18T08:34:39.png

1.5 制作定时任务

环境中已经开启相应服务,查看 crontab 状态:service crond status
2024-06-18T08:41:30.png
要求:从节点(slave1、slave2)在早十-晚五时间段每隔半个小时同步一次时间
crontab -e
输入 i
添加定时任务:*/30 10-17 * * * /usr/sbin/ntpdate master
2024-06-18T08:42:26.png
查看定时任务列表:crontab -l
2024-06-18T08:45:11.png
slave2一样的操作
2024-06-18T08:46:52.png

1.6配置 ssh 免密(RSA)

非对称算法--RSA
在 master 上执行如下命令生成公私密钥:(注意 master 上执行,默认为 rsa 类型)
ssh-keygen
ssh-keygen -t rsa
然后将公钥文件内容添加到授权文件。
ssh-copy-id -i /root/.ssh/id_rsa.pub master
ssh-copy-id -i /root/.ssh/id_rsa.pub localhost
(或者使用 localhost 也可已完成本地免密)
可以将 master 授权文件复制到 slave1、slave2 信任授权设置。
ssh-copy-id -i slave1
ssh-copy-id -i slave2
输入机器密码,其余都enteroryes
2024-06-18T09:26:01.png

1.7 安装 JDK

以下操作为先在 master 上操作,然后远程复制到 slave1slave2
首先在根目录下建立工作路径/usr/java。

mkdir -p /usr/java

进入创建的 java 工作路径。

cd /usr/java

解压 java 安装包(master 上执行)。

tar -zxvf /usr/package277/jdk-8u221-linux-x64.tar.gz -C /usr/java/

2024-06-18T09:28:37.png
修改环境变量:vim /etc/profile
添加内容如下:

export JAVA_HOME=/usr/java/jdk1.8.0_221
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

2024-06-18T09:29:45.png

2024-06-18T09:30:55.png

在 master 中将 JDK 复制到 slave1slave2 中。(在 master 执行)
scp -r /usr/java root@slave1:/usr/
scp -r /usr/java root@slave2:/usr/

此时需要去 slave1 和 slave2 上配置 java 的环境变量,并使环境变量生效。
2024-06-18T09:34:38.png
2024-06-18T09:34:51.png

2.1 安装Zookeeper

三个服务器上都解压一遍
创建工作路径/usr/zookeeper,解压软件至工作路径。

mkdir -p /usr/zookeeper && cd /usr/zookeeper
tar -zxvf /usr/package277/zookeeper-3.4.14.tar.gz -C /usr/zookeeper/

2.2 配置 zookeeper 环境变量

vim /etc/profile

#zookeeper
export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.14
PATH=$PATH:$ZOOKEEPER_HOME/bin

生效环境变量:source /etc/profile
2024-06-18T09:41:55.png
2024-06-18T09:43:13.png

2.3配置文件 zoo.cfg

1.进入 zookeeper 配置文件夹 conf,将 zoo_sample.cfg 文件拷贝一份命名为 zoo.cfg,Zookeeper 在启动时会找这个文件作为默认配置文件。

cd /usr/zookeeper/zookeeper-3.4.14/conf/ && vim zoo.cfg

2.对 zoo.cfg 文件配置如下:

vim zoo.cfg

修改如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/zookeeper/zookeeper-3.4.14/zkdata
clientPort=2181
dataLogDir=/usr/zookeeper/zookeeper-3.4.14/zkdatalog
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

2024-06-18T09:45:07.png

2.4 创建日志文件

在 zookeeper 的目录中,创建配置中所需的 zkdatazkdatalog 两个文件夹。(在 master 执行)

cd /usr/zookeeper/zookeeper-3.4.14 && mkdir zkdata zkdatalog

master 中将 zookeeper 复制到 slave1slave2 中。(在 master 执行)

scp -r /usr/zookeeper root@slave1:/usr/
scp -r /usr/zookeeper root@slave2:/usr/

注意修改 myid 和环境变量。
进入 zkdata 文件夹,创建文件 myid,用于表示是几号服务器,用来标识当前主机。
master 主机中,设置服务器 id 为 1。(集群中设置 master 为 1 号服务器,slave1 为 2 号服务器,slave2 为3 号服务器),在三个服务器中写入对应的标识主机服务器序号
cd /usr/zookeeper/zookeeper-3.4.14/zkdata
echo 1 >> myid
2024-06-18T09:49:14.png
2024-06-18T09:49:49.png
2024-06-18T09:50:15.png

2.5 启动ZooKeeper集群

在 ZooKeeper 集群的每个结点上,执行启动 ZooKeeper 服务的脚本。注意在 zookeeper 目录下:(三台机器都执行)
开启服务:zkServer.sh start
查看状态:zkServer.sh status(稍等片刻)
2024-06-18T09:52:18.png
2024-06-18T09:52:29.png
2024-06-18T09:52:38.png

2.6 Hadoop集群解压安装包,配置环境变量

即 hadoop 安装同样在主节点 master 上进行配置操作,然后将文件复制到到子节点 slave1 和 slave2。

  1. 创建工作路径/usr/hadoop,相应软件解压至工作路径。
    mkdir -p /usr/hadoop && cd /usr/hadoop
    tar -zxvf /usr/package277/hadoop-2.7.7.tar.gz -C /usr/hadoop/
  2. 添加 hadoop 系统变量(三台机器执行)

    vim /etc/profile

添加如下内容:

#hadoop
#配置 Hadoop 安装目录
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.7
#在原 PATH 基础上加入 Hadoop 的 bin 和 sbin 目录
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

使用以下命令使 profile 生效:

source /etc/profile

3.1 安装 hadoop

以下步骤逻辑仅供选手参考:即 hadoop 安装同样在主节点 master 上进行配置操作,然后将文件复制到到子
节点 slave1 和 slave2。
4.1 解压安装包,配置环境变量

  1. 创建工作路径/usr/hadoop,相应软件解压至工作路径。

    mkdir -p /usr/hadoop && cd /usr/hadoop
    tar -zxvf /usr/package277/hadoop-2.7.7.tar.gz -C /usr/hadoop/

  2. 添加 hadoop 系统变量(三台机器执行)

    vim /etc/profile

添加如下内容:

#hadoop
#配置 Hadoop 安装目录
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.7
#在原 PATH 基础上加入 Hadoop 的 bin 和 sbin 目录
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

2024-06-21T05:01:17.png
使用以下命令使 profile 生效:

source /etc/profile

4.2 配置 hadoop 各组件

hadoop 的各个组件的都是使用 XML 进行配置,这些文件存放在 hadoop 的 etc/hadoop 目录下。

  1. hadoop-env.sh 运行环境

    cd $HADOOP_HOME/etc/hadoop
    vim hadoop-env.sh

输入以下内容,修改 java 环境变量:

export JAVA_HOME=/usr/java/jdk1.8.0_221

2024-06-21T05:03:38.png
也可以直接输入命令:

echo "export JAVA_HOME=/usr/java/jdk1.8.0_221" >> hadoop-env.sh

键入“Esc”,退出编辑模式,使用命令“:wq”进行保存退出。

  1. core-site.xml 全局参数

    vim core-site.xml



    fs.default.name

    hdfs://master:9000


    hadoop.tmp.dir

    /root/hadoopData/tmp


    2024-06-21T05:05:15.png
    master:在主节点的 ip 或者映射名。
    9000:主节点和从节点配置的端口都是 9000。

  2. hdfs-site.xml 配置文件
    dfs.replication:因为 hadoop 是具有可靠性的,它会备份多个文本,这里 value 就是指备份的数量(小于等于从节点的数量)。

    vim hdfs-site.xml

中加入以下代码:

<property>
<name>dfs.replication</name>
<!-- 数据块副本的数量,默认为 3 -->
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<!-- NameNode 在本地文件系统中持久存储命名空间和事务日志的路径 -->
<value>/root/hadoopData/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<!-- DataNode 在本地文件系统中存放块的路径 -->
<value>/root/hadoopData/data</value>
</property>
<property>
<name>dfs.permissions</name>
<!-- 关闭 hadoop 集群权限校验 -->
<value>false</value>
</property>
<property>
<name>dfs.datanode.use.datanode.hostname</name>
<!-- datanode 之间的通信也通过域名方式 -->
<value>true</value>
</property>

2024-06-21T05:06:57.png

  1. YARN 框架运行环境
    找到 JAVA_HOME 参数位置,将前面的#去掉,将其值修改为本机安装的 JDK 的实际位置。

    vim yarn-env.sh

    export JAVA_HOME=/usr/java/jdk1.8.0_221
    2024-06-21T05:08:37.png
    也可以直接输入命令:

    echo "export JAVA_HOME=/usr/java/jdk1.8.0_221" >> yarn-env.sh

  2. YARN 框架的核心配置
    YARN 框架的核心配置文件,用于配置 YARN 进程及 YARN 的相关属性。
    首先需要指定 ResourceManager 守护进程所在主机,默认为 0.0.0.0,即当前设备,所以这里指定为 master,
    端口为 18141;
    其次需要设置 NodeManager 上运行的辅助服务,需配置成 mapreduce_shuffle 才可运行 MapReduce 程序。

    vim yarn-site.xml

中加入以下代码:

<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<!-- 指定 reducer 获取数据的方式-->
<!-- NodeManager 上运行的附属服务,也可以理解为 mapreduce 获取数据的方式 -->
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>

2024-06-21T05:10:14.png

  1. 编辑配置计算框架
    该文件是 MapReduce 的核心配置文件,用于指定 MapReduce 运行时框架。

    cp mapred-site.xml.template mapred-site.xml && vim mapred-site.xml

中加入以下代码:

<property>
<!--指定 Mapreduce 运行在 yarn 上-->
<!-- 指定使用 YARN 运行 MapReduce 程序,默认为 local -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

2024-06-21T05:11:50.png
注意保存退出

  1. 编写 slaves 和 master 文件
    编写 slaves 文件,添加子节点 slave1 和 slave2;
    编写 master 文件,添加主节点 master。

    echo master > master && echo slave1 > slaves && echo slave2 >> slaves

在 master 中将 hadoop 复制到 slave1 和 slave2 中。(在 master 执行)

scp -r /usr/hadoop root@slave1:/usr/
scp -r /usr/hadoop root@slave2:/usr/
  1. 格式化 hadoop
    格式化 namenode:hadoop namenode -format (仅在 master 中进行操作)
    当出现“Storage directory /usr/hadoop/hadoop-2.7.7/hdfs/name has been successfully formatted.”的时候,表明
    格式化成功。

    格式化本质是进行文件系统的初始化操作,创建一些 hadoop 自己所需要的文件。
  2. 开启 hadoop 集群
    仅在 master 主机上开启操作命令。它会带起从节点的启动。(仅在 master 中进行操作)
    主节点开启服务:start-all.sh
    使用 hadoop 命令“hadoop fs”进行相关操作。
    查看集群状态: hdfs dfsadmin -report
    2024-06-21T05:15:20.png
    2024-06-21T05:15:57.png

4.1 slave2 上安装 MySQL server

实验中我们选用 hive 的远程模式,slave2 安装 mysql server 用于存放元数据,slave1 作为 hive server 作为 thrift服务器,master 作为 client 客户端进行操作。
  1. 配置过本地源了,环境中已经安装 MySQL Server,同时环境中已经关闭开机自启服务,本步骤无需操作。(slave2)

    • 关闭开机自启:systemctl disable mysqld
    • 查看开启自启服务:systemctl list-unit-files
    • 查看是否加入开机启动项:systemctl list-unit-files |grep mysqld.service

    2024-06-21T05:18:46.png
    2024-06-21T05:19:03.png

  • 关闭:systemctl disable mysqld
  1. 启动服务

    • 开启服务:systemctl start mysqld

    第一次启动后会有个初始化的过程,会产生 root 账户的随机密码

  2. 登陆 MySQL
    安装完毕后,MySQL 会在/var/log/mysqld.log 这个文件中会自动生成一个随机的密码,获取得这个随机密码,
    以用于登录 MySQL 数据库:

    • 获取初密码: grep "temporary password" /var/log/mysqld.log
    • 登陆 MySQL:mysql -uroot -p(注意中英文)

    2024-06-21T05:21:34.png
    2024-06-21T05:21:58.png
    成功进入

4.MySQL 密码安全策略设置
设置密码强度为低级:set global validate_password_policy=0;
设置密码长度:set global validate_password_length=4;
修改本地密码:alter user 'root'@'localhost' identified by '123456';

密码强度分级如下:
  1. 设置远程登录

    • 创建用户:create user 'root'@'%' identified by '123456';
    • 允许远程连接:grant all privileges on . to 'root'@'%' with grant option;
    • 刷新权限:flush privileges;

    同等命令:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

    将 host 字段的值改为%就表示在任何客户端机器上能以 root 用户登录到 MySQL 服务器,建议在开发时设为%。
    2024-06-21T05:24:02.png
    2024-06-21T05:24:21.png
    2024-06-21T05:25:38.png
    exit退出sql

4.2 数据仓库下载安装

  1. 下载解压
    同样 master 上建立文件夹/usr/hive,然后 master 中将安装包远程复制到 slave1。

    mkdir -p /usr/hive && cd /usr/hive
    tar -zxvf /usr/package277/apache-hive-2.3.4-bin.tar.gz -C /usr/hive/

  2. 设置系统变量
    修改/etc/profile 文件设置 hive 环境变量。(master 和 slave1 都执行)

    vim /etc/profile

    #hive
    export HIVE_HOME=/usr/hive/apache-hive-2.3.4-bin
    export PATH=$PATH:$HIVE_HOME/bin

生效环境变量:source /etc/profile
2024-06-21T05:26:41.png

  1. 设置 HIVE 运行环境

    cd $HIVE_HOME/conf && vim hive-env.sh

对应设置如下:

# 配置 Hadoop 安装路径
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.7
# 配置 Hive 配置文件存放路径
export HIVE_CONF_DIR=/usr/hive/apache-hive-2.3.4-bin/conf
# 配置 Hive 运行资源库路径
export HIVE_AUX_JARS_PATH=/usr/hive/apache-hive-2.3.4-bin/lib

2024-06-21T05:27:56.png

  1. jline 版本冲突问题
    由于客户端需要和 hadoop 通信,所以需要更改 Hadoop 中 jline 的版本,即保留一个高版本的 jline-jar 包。

    cp $HIVE_HOME/lib/jline-2.12.jar $HADOOP_HOME/share/hadoop/yarn/lib/

5.安装包复制到 slave1

scp -r /usr/hive root@slave1:/usr/

4.3 hive 元数据配置到 MySQL(服务器端 slave1)

  1. 驱动拷贝
    因为服务端需要和 Mysql 通信,所以服务端需要将 Mysql 的依赖包放在 Hive 的 lib 目录下。
    mysql-connector-java 是 MySQL 的 JDBC 驱动包,用 JDBC 连接 MySQL 数据库时必须使用该 jar 包。

    cp /usr/package277/mysql-connector-java-5.1.47-bin.jar /usr/hive/apache-hive-2.3.4-bin/lib/

  2. Slave1 作为服务器端配置 hive

    cd $HIVE_HOME/conf

hive 配置可以参考官方文档:
https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration

vim hive-site.xml

<configuration>
<!-- Hive 产生的元数据存放位置-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<!-- 数据库连接 driver,即 MySQL 驱动-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- 数据库连接 JDBC 的 URL 地址-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://slave2:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
</property>
<!-- MySQL 数据库用户名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- MySQL 数据库密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
</configuration>

2024-06-21T05:30:57.png

4.4 Master 作为客户端配置 hive

和 slave1 中配置方式类似,直接进入 conf,进行设置。
Hive 服务和 metastore 在不同的进程内,可能是不同的机器,该模式需要将 hive.metastore.local 设置为 false。
将 hive.metastore.uris 设置 metastore 服务器 URL,端口设定为 9083。

cd $HIVE_HOME/conf
vim hive-site.xml

<configuration>
<!-- Hive 产生的元数据存放位置-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<!--- 使用本地服务连接 Hive,默认为 true-->
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<!-- 连接服务器-->
<property>
<name>hive.metastore.uris</name>
<value>thrift://slave1:9083</value>
</property>
</configuration>

2024-06-21T05:33:19.png

Hive 服务和 metastore 在不同的进程内,可能是不同的机器,该模式需要将 hive.metastore.local 设置为 false,
将 hive.metastore.uris 设置为 metastore 服务器 URL。
指向 metastore 服务的主机

4.5 成功启动 Hive

  1. 服务器端 slave1 初始化数据库
    slave1 上:

    schematool -dbType mysql -initSchema

  2. 启动 hive server 服务(slave1)
    设置成远程模式之后必须保证先启动 metastore 服务或者进程,之后才能进行开启客户端。

    hive --service metastore &(注意空格,后台运行)

2024-06-21T05:34:44.png

  1. 客户端 master 启动 hive client

    hive

创建数据库 hive

hive>create database hive;

2024-06-21T05:35:09.png
2024-06-21T05:38:13.png

二 hive分析

1 开启单节点集群环境

  1. 连接
    2024-06-21T05:41:46.png
  2. 发现未对主机名进行修改

    • 修改主机名 hostnamectl set-hostname hadoop000
    • 完成之后 bash
    • 修改成功

    2024-06-21T05:44:04.png

  3. 改host文件 vim/etc/hosts
    比赛时会提供内网IP,修改后如下
    2024-06-21T05:45:55.png
  4. 免密ssh已处理

    ssh hadoop000

  5. hadoop namenode -format进行格式化
    2024-06-21T05:48:16.png
  6. 启动Hadoop集群

使用脚本命令一键启动 start-all.sh
启动完成后,我们可以用 jps 看一下
2024-06-21T05:50:15.png
5个节点都已启动,代表启动完毕

  1. 开启mysql服务
    这里的环境是已经安装好了的,只需要开启对应的服务即可
    开启服务 systemctl start mysqld.service

8.初始化Hive元数据库(数据库类型为mysql),进入Hive客户端,创建hive数据库
schematool -dbType mysql -initSchema 回车
2024-06-21T05:52:07.png
安装完成后跟上面图示一样 证明hive元数据库格式化完成
进入hive 客户端 hive 回车
创建hive对应数据库 create database hive;
2024-06-21T05:52:31.png
2024-06-21T05:53:40.png
创建成功
2024-06-21T05:54:46.png

2 网络诈骗

  1. 创建project数据库
    进入hive的终端

创建 create database if not exsits project;

创建成功

The article has been posted for too long and comments have been automatically closed.