本地虚拟机集群数仓搭建实践

本文参考尚硅谷的视频配置,组件较多,可根据需要酌情配置

一. 环境准备

  1. 内存4G,硬盘50G (根据自己的电脑配置酌情决定,内存最好4G起步)
  2. 安装好linux /boot 200M /swap 2g / 剩余
  3. *安装VMTools
  4. 关闭防火墙
 sudo service iptables stop
 sudo chkconfig iptables off
复制代码
  1. 设置静态IP,改主机名 编辑vim /etc/sysconfig/network-scripts/ifcfg-eth0,这里以192.168.1.101 这个ip为例,具体的ip要看自己电脑网络 改成
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
NAME="eth0"
IPADDR=192.168.1.101
PREFIX=24
GATEWAY=192.168.1.2
DNS1=192.168.1.2
复制代码
编辑vim /etc/sysconfig/network
改HOSTNAME=那一行
复制代码
  1. 配置/etc/hosts vim /etc/hosts
192.168.1.100   hadoop100
192.168.1.101   hadoop101
192.168.1.102   hadoop102
192.168.1.103   hadoop103
192.168.1.104   hadoop104
192.168.1.105   hadoop105
复制代码
  1. 创建一个一般用户xxx (自己指定),给他配置密码 useradd xxx passwd xxx

  2. 配置这个用户为sudoers vim /etc/sudoers 在root ALL=(ALL) ALL 添加xxx ALL=(ALL) NOPASSWD:ALL 保存时wq!强制保存

  3. *在/opt目录下创建两个文件夹module和software,并把所有权赋给刚刚创建的xxx(自己指定用户) mkdir /opt/module /opt/software chown xxx:xxx /opt/module /opt/software

  4. 关机,快照,克隆(根据自己需要,至少克隆三台以上虚拟机)

从这里开始要以一般用户xxx登陆

  1. 克隆的虚拟机改IP,参见上面第4,5条

  2. 搞一个分发脚本 cd ~ vim xsync 内容如下:

#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi

#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称
user=`whoami`

#5 循环
for((host=102; host<104; host++)); do
        echo ------------------- hadoop$host --------------
        rsync -av $pdir/$fname $user@hadoop$host:$pdir
done
复制代码
chmod +x xsync

sudo cp xsync /bin

sudo xsync /bin/xsync
复制代码
  1. 配置免密登陆

    1. 生成密钥对
    ssh-keygen -t rsa 三次回车
    
    2. 发送公钥到本机
    ssh-copy-id hadoop102 输入一次密码
    
    3. 分别ssh登陆一下所有虚拟机
    ssh hadoop102
    exit
    ssh hadoop103
    exit
    ssh hadoop104
    exit
    
    4. 把/home/xxx/.ssh 文件夹发送到集群所有服务器
    xsync /home/xxx/.ssh
    复制代码
  2. 在一台机器上安装Java和Hadoop,并配置环境变量,并分发到集群其他机器

    1. 拷贝文件到/opt/software,两个tar包
    
    2. tar -zxf h"+tab" -C /opt/module
    
    3. tar -zxf j"+tab" -C /opt/module
    
    4. sudo vim /etc/profile
    
    在文件末尾添加
    复制代码
 #JAVA_HOME
        export JAVA_HOME=/opt/module/jdk1.8.0_144
        export PATH=$PATH:$JAVA_HOME/bin

        #HADOOP_HOME
        export HADOOP_HOME=/opt/module/hadoop-2.7.2
        export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
复制代码
    保存
    5. source /etc/profile
    
    6. sudo xsync /etc/profile
    
    7. 在其他机器分别执行source /etc/profile
复制代码

###所有配置文件都在$HADOOP_HOME/etc/hadoop 14. 首先配置hadoop-env.sh, yarn-env.sh, mapred-env.sh文件,配置JAVA_HOME 在每个文件第二行添加 export JAVA_HOME=/opt/module/jdk1.8.0_144

  1. 配置Core-site.xml

    <!-- 指定HDFS中NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop102:9000</value>
    </property>
    
    <!-- 指定Hadoop运行时产生文件的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-2.7.2/data/tmp</value>
    </property>
    复制代码
  2. 配置hdfs-site.xml dfs.replication 3 dfs.namenode.secondary.http-address hadoop104:50090

  3. 配置yarn-site.xml

    <!-- Site specific YARN configuration properties -->
    <!-- Reducer获取数据的方式 -->
    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>
    
    <!-- 指定YARN的ResourceManager的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop103</value>
    </property>
    <!-- 日志聚集功能使能 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    
    <!-- 日志保留时间设置7天 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>
    复制代码
  4. 配置mapred-site.xml mapreduce.framework.name yarn

    mapreduce.jobhistory.address hadoop104:10020 mapreduce.jobhistory.webapp.address hadoop104:19888

    启动历史服务器:mr-jobhistory-daemon.sh start historyserver

  5. 配置Slaves hadoop102 hadoop103 hadoop104

  6. 分发配置文件 xsync /opt/module/hadoop-2.7.2/etc

  7. 格式化Namenode 在hadoop102 hdfs namenode -format

  8. 启动hdfs start-dfs.sh

  9. 在配置了Resourcemanager机器上执行 在Hadoop103上启动start-yarn.sh

  10. mkdir input vim input/input hadoop fs -put input / hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output

  11. 关 集群 stop-dfs.sh stop-yarn.sh

  12. hadoop-daemon.sh start namenode或datanode

yarn-daemon.sh start resourcemanager或nodemanager

如果集群出了问题
    cd $HADOOP_HOME
    rm -rf data logs
    回到21
复制代码

二. JDK安装

JDK 是 Java 的开发工具箱,是整个 Java 的核心,包括 Java 运行环境、Java 工具和 Java基础类库,JDK 是学习大数据技术的基础。即将搭建的 Hadoop 分布式集群的安装程序就是用 Java 开发的,所有 Hadoop 分布式集群想要正常运行,必须安装 JDK。

(1)在 3 台虚拟机上分别卸载现有的 JDK。

① 检查计算机中是否已安装 Java 软件。
复制代码

[xxx@hadoop102 opt]$ rpm -qa | grep java

② 如果安装的版本低于 1.7,则卸载该 JDK。
复制代码

[xxx@hadoop102 opt]$ sudo rpm -e 软件包

(2)将 JDK 导入 opt 目录下的 software 文件夹中。

① 在 Linux 下的 opt 目录中查看软件包是否导入成功。

[xxx@hadoop102 opt] c d s o f t w a r e / [ x x x @ h a d o o p 102 s o f t w a r e ] cd software/ [xxx@hadoop102 software] ls hadoop-2.7.2.tar.gz jdk-8u144-linux-x64.tar.gz

 ② 解压 JDK 到/opt/module 目录下,tar 命令用来解压.tar 或者.tar.gz 格式的压缩包,通过-z 选项指定解压.tar.gz 格式的压缩包。-f 选项用于指定解压文件,-x 选项用于指定解包操作,-v 选项用于显示解压过程,-C 选项用于指定解压路径。
复制代码

[xxx@hadoop102 software]$ tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/ module/

(3)配置 JDK 环境变量,方便使用到 JDK 的程序调用 JDK。

① 先获取 JDK 路径。
复制代码

[xxx@hadoop102 jdk1.8.0_144]$ pwd /opt/module/jdk1.8.0_144

② 打开/etc/profile 文件,需要注意的是,/etc/profile 文件属于 root 用户,需要使用 sudo vim 命令才可以对它进行编辑。
复制代码

[xxx@hadoop102 software]$ sudo vim /etc/profile 在 profile 文件末尾添加 JDK 路径,添加的内容如下。

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin 
复制代码

保存后退出。 :wq

③ 修改/etc/profile 文件后,需要执行 source 命令使修改后的文件生效。
复制代码

[xxx@hadoop102 jdk1.8.0_144]$ source /etc/profile

(4)通过执行 java -version 命令,测试 JDK 是否安装成功。

[xxx@hadoop102 jdk1.8.0_144]# java -version java version "1.8.0_144" 重启(如果 java -version 命令可以用,则不用重启)。

[xxx@hadoop102 jdk1.8.0_144] s y n c [ x x x @ h a d o o p 102 j d k 1.8. 0 1 44 ] sync [xxx@hadoop102 jdk1.8.0_144] sudo reboot

(5)分发 JDK 给所有节点服务器。 [xxx@hadoop102 jdk1.8.0_144]$ xsync /opt/module/jdk1.8.0_144

(6)分发环境变量。 [xxx@hadoop102 jdk1.8.0_144]$ xsync /etc/profile

(7)执行 source 命令,使环境变量在每台虚拟机上生效。 [xxx@hadoop103 jdk1.8.0_144] s o u r c e / e t c / p r o f i l e [ x x x @ h a d o o p 104 j d k 1.8. 0 1 44 ] source /etc/profile [xxx@hadoop104 jdk1.8.0_144] source /etc/profile

三. Hadoop安装过程

在搭建 Hadoop 分布式集群时,每个节点服务器上的 Hadoop 配置基本相同,所以只需要在 hadoop102 节点服务器上进行操作,配置完成之后同步到另外两个节点服务器上即可。

(1)将 Hadoop 的安装包 hadoop-2.7.2.tar.gz 导入 opt 目录下的 software 文件夹中,该文件夹被指定用来存储各软件的安装包。

① 进入 Hadoop 安装包路径。 [xxx@hadoop102 ~]$ cd /opt/software/

② 解压安装包到/opt/module 文件中。 [xxx@hadoop102 software]$ tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/

③ 查看是否解压成功。 [xxx@hadoop102 software]$ ls /opt/module/hadoop-2.7.2

(2)将 Hadoop 添加到环境变量,可以直接使用 Hadoop 的相关指令进行操作, 而不用指定 Hadoop 的目录。

① 获取 Hadoop 安装路径。 [xxx@ hadoop102 hadoop-2.7.2]$ pwd /opt/module/hadoop-2.7.2

② 打开/etc/profile 文件。 [xxx@ hadoop102 hadoop-2.7.2]$ sudo vim /etc/profile 在 profile 文件末尾添加 Hadoop 路径,添加的内容如下。

##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
复制代码

③ 保存后退出。 :wq

④ 执行 source 命令,使修改后的文件生效。

[xxx@ hadoop102 hadoop-2.7.2]$ source /etc/profile

(3)测试是否安装成功。

[xxx@hadoop102 ~]$ hadoop version Hadoop 2.7.2

(4)重启(如果 hadoop 命令可以用,则不用重启)。

[xxx@ hadoop101 hadoop-2.7.2]$ sync

[xxx@ hadoop101 hadoop-2.7.2]$ sudo reboot

(5)分发 Hadoop 给所有节点。 [xxx@hadoop100 hadoop-2.7.2]$ xsync /opt/module/hadoop-2.7.2

(6)分发环境变量。 [xxx@hadoop100 hadoop-2.7.2]$ xsync /etc/profile

(7)执行 source 命令,使环境变量在每台虚拟机上生效。

[xxx@hadoop103 hadoop-2.7.2]$ source /etc/profile

[xxx@hadoop104 hadoop-2.7.2]$ source /etc/profile

Hadoop的运行模式包括本地模式、伪分布式模式及完全分布式模式。本次主要搭建实际生产环境中比较常用的完全分布式模式,搭建完全分布式模式之前需要对集群部署进行提前规划,不要将过多的服务集中到一台节点服务器上。我们将负责管理工作的 NameNode和 ResourceManager 分 别 部 署 在 两 台 节 点 服 务 器 上 , 另 一 台 节 点 服 务 器 上 部 署SecondaryNameNode,所有节点服务器均承担 DataNode 和 NodeManager 角色,并且 DataNode和 NodeManager 通常存储在同一台节点服务器上,所有角色尽量做到均衡分配。

(1)集群部署规划如表 3-1。 在这里插入图片描述

(2)对集群角色的分配主要依靠配置文件,配置集群文件的细节如下。

① 核心配置文件为 core-site.xml,该配置文件属于 Hadoop 的全局配置文件,我们主要对分布式文件系统 NameNode 的入口地址和分布式文件系统中数据落地到服务器本地磁盘的位置进行配置,代码如下。

[xxx@hadoop102 hadoop]$ vim core-site.xml

<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<!-- 其中,hdfs 为协议名称,hadoop102 为 NameNode 的节点服务器主机名称,9000 为端口-->
<value>hdfs://hadoop102:9000</value>
</property>
<!-- 指定 Hadoop 运行时产生的文件的存储目录,该目录需要单独创建 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
复制代码

② Hadoop 的环境配置文件为 hadoop-env.sh,在这个配置文件中我们主要需要指定 JDK的路径 JAVA_HOME,避免程序运行中出现 JAVA_HOME 找不到的异常。

[xxx@hadoop102 hadoop]$ vim hadoop-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144
复制代码

③ HDFS 的配置文件为 hdfs-site.xml,在这个配置文件中我们主要对 HDFS 文件系统的属性进行配置。

[xxx@hadoop102 hadoop]$ vim hdfs-site.xml

<!-- 指定 HDFS 存储内容的副本个数 -->
<!-- Hadoop 通过使用文件的冗余来确保文件存储的可靠性,由于有 3 个 DataNode,所以我们可以将
副本数量设置为 3 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--配置 Hadoop 分布式集群的 SecondaryNameNode-->
<!--SecondaryNameNode 主要作为 NameNode 的辅助,端口为 50090 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
复制代码

④ YARN 的环境配置文件为 yarn-env.sh,同样指定 JDK 的路径 JAVA_HOME。

[xxx@hadoop102 hadoop]$ vim yarn-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

⑤ 关于 YARN 的配置文件 yarn-site.xml,主要配置如下两个参数。

[xxx@hadoop102 hadoop]$ vim yarn-site.xml

<!-- reducer 获取数据的方式 -->
<!-- yarn.nodemanager.aux-services 是 NodeManager 上运行的附属服务,其值需要配置成
mapreduce_shuffle 才可以运行 MapReduce 程序 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
复制代码

⑥ MapReduce 的环境配置文件为 mapred-env.sh,同样指定 JDK 的路径 JAVA_HOME。

[xxx@hadoop102 hadoop]$ vim mapred-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144
复制代码

⑦ 关于 MapReduce 的配置文件 mapred-site.xml,主要配置一个参数,指明 MapReduce的运行框架为 YARN。

[xxx@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml

[xxx@hadoop102 hadoop]$ vim mapred-site.xml

<!-- MapReduce 计算框架的资源交给 YARN 来管理 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
复制代码

⑧ 主节点服务器 NameNode 和 ResourceManager 的角色在配置文件中已经进行了配置,而从节点服务器的角色还需指定,配置文件 slaves 就是用来配置 Hadoop 分布式集群中各个从节点服务器的角色的。如下所示,对 slaves 文件进行修改,将 3 台节点服务器全部指定为从节点,启动 DataNode 和 NodeManager 进程。

/opt/module/hadoop-2.7.2/etc/hadoop/slaves

[xxx@hadoop102 hadoop]$ vim slaves

hadoop102
hadoop103
hadoop104
复制代码

⑨ 在集群上分发配置好的 Hadoop 配置文件,这样 3 台节点服务器都可享有相同的Hadoop 的配置,接下来即可通过不同的进程启动命令了。

[xxx@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/

⑩ 查看文件分发情况。

[xxx@hadoop103 hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml

(3)创建数据目录。 根据core-site.xml文件中配置的分布式文件系统最终落地到各个数据节点上的本地磁盘位置信息/opt/module/hadoop-2.7.2/data/tmp,自行创建该目录。

[xxx@hadoop102 hadoop-2.7.2]$ mkdir /opt/module/hadoop-2.7.2/data/tmp

[xxx@hadoop103 hadoop-2.7.2]$ mkdir /opt/module/hadoop-2.7.2/data/tmp

[xxx@hadoop104 hadoop-2.7.2]$ mkdir /opt/module/hadoop-2.7.2/data/tmp

(4)启动 Hadoop 分布式集群。

① 如果第一次启动集群,则需要格式化 NameNode。

[xxx@hadoop102 hadoop-2.7.2]$ hadoop namenode -format

② 在配置了 NameNode 的节点服务器后,通过执行 start-dfs.sh 命令启动 HDFS,即可同时启动所有的 DataNode 和 SecondaryNameNode。

[xxx@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh

[xxx@hadoop102 hadoop-2.7.2]$ jps

4166 NameNode

4482 Jps

4263 DataNode

[xxx@hadoop103 hadoop-2.7.2]$ jps

3218 DataNode

3288 Jps

[xxx@hadoop104 hadoop-2.7.2]$ jps

3221 DataNode

3283 SecondaryNameNode

3364 Jps

③ 通过执行 start-yarn.sh 命令启动 YARN,即可同时启动 ResourceManager 和所有的NodeManager。需要注意的是,NameNode 和 ResourceManger 如果不在同一台服务器上,则不能在 NameNode 上启动 YARN,应该在 ResouceManager 所在的服务器上启动 YARN。

[xxx@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh

通过执行 jps 命令可在各台节点服务器上查看进程启动情况,若显示如下内容,则表示启动成功。

[xxx@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh

[xxx@hadoop102 hadoop-2.7.2]$ jps

4166 NameNode 4482 Jps 4263 DataNode 4485 NodeManager

[xxx@hadoop103 hadoop-2.7.2]$ jps

3218 DataNode 3288 Jps 3290 ResourceManager 3299 NodeManager

[xxx@hadoop104 hadoop-2.7.2]$ jps

3221 DataNode 3283 SecondaryNameNode 3364 Jps 3389 NodeManager

(5)通过 Web UI 查看集群是否启动成功。

① 在 Web 端输入之前配置的 NameNode 的节点服务器地址和端口 50070,即可查看HDFS 文件系统。例如,在浏览器中输入 http://hadoop102:50070,可以检查 NameNode 和DataNode 是否正常。NameNode 的 Web 端如图 3-40 所示。

在这里插入图片描述

② 通过在 Web 端输入 ResourceManager 地址和端口 8088,可以查看 YARN 上任务的运行情况。例如,在浏览器输入 http://hadoop103:8088 ,即可查看本集群 YARN 的运行情况。YARN 的 Web 端如图 3-41 所示。

在这里插入图片描述

(6)运行 PI 实例,检查集群是否启动成功。 在集群任意节点服务器上执行下面的命令,如果看到如图 3-42 所示的运行结果,则说明集群启动成功。

[xxx@hadoop102 hadoop]$ cd /opt/module/hadoop2.7.2/share/hadoop/mapreduce/

[xxx@hadoop102 mapreduce]$ hadoop jar hadoop-mapreduce-examples2.7.2.jar pi 10 10

在这里插入图片描述 最后输出为 Estimated value of Pi is 3.20000000000000000000。

四. Zookeeper安装

1.集群规划 在 hadoop102、hadoop103 和 hadoop104 三台节点服务器上部署 Zookeeper。

2.解压安装 (1)解压 Zookeeper 安装包到/opt/module/目录下。 [xxx@hadoop102 software]$ tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/

(2)在/opt/module/zookeeper-3.4.10 目录下创建 zkData 文件夹,用于保存 Zookeeper的相关数据。

mkdir -p zkData

3.配置 zoo.cfg 文件 (1)重命名/opt/module/zookeeper-3.4.10/conf 目录下的 zoo_sample.cfg 为 zoo.cfg,我们可以对其中的配置进行自定义设置。

mv zoo_sample.cfg zoo.cfg

(2)具体配置,在配置文件中找到如下内容,将数据存储目录 dataDir 设置为上文中自行创建的 zkData 文件夹。

dataDir=/opt/module/zookeeper-3.4.10/zkData

增加如下配置,如下配置指出了 Zookeeper 集群的 3 台节点服务器信息。 #######################cluster########################## server.2=hadoop102:2888:3888 server.3=hadoop103:2888:3888 server.4=hadoop104:2888:3888

(3)配置参数解读。 Server.A=B:C:D。 A 是一个数字,表示第几台服务器; B 是这台服务器的 IP 地址; C 是这台服务器与集群中的 Leader 服务器交换信息的端口; D 表示当集群中的 Leader 服务器无法正常运行时,需要一个端口来重新进行选举,选出一个新的 Leader 服务器,而这个端口就是用来执行选举时服务器相互通信的端口。在集群模式下配置一个文件 myid,这个文件在 dataDir 目录下,其中有一个数据就是 A的值,Zookeeper 启动时读取此文件,并将里面的数据与 zoo.cfg 文件里面的配置信息进行比较,从而判断到底是哪台服务器。

4.集群操作 (1)在/opt/module/zookeeper-3.4.10/zkData 目录下创建一个 myid 文件,当集群启动时由Zookeeper 读取此文件。

touch myid

注意:当添加 myid 文件时,一定要在 Linux 中创建,在文本编辑工具中创建有可能出现乱码。

(2)编辑 myid 文件。

vim myid

在文件中添加与 Server 对应的编号,根据在 zoo.cfg 文件中配置的 Server ID 与节点服务器的 IP 地址对应关系添加,如在 hadoop102 节点服务器中添加 2。

(3)复制配置好的 Zookeeper 到其他服务器上。

xsync /opt/module/zookeeper-3.4.10

分别修改 hadoop103 和 hadoop104 节点服务器中 myid 文件的内容为 3 和 4。

(4)在 3 台节点服务器中分别启动 Zookeeper。

[root@hadoop102 zookeeper-3.4.10]# bin/zkServer.sh start

[root@hadoop103 zookeeper-3.4.10]# bin/zkServer.sh start

[root@hadoop104 zookeeper-3.4.10]# bin/zkServer.sh start

(5)执行如下命令,在 3 台节点服务器中查看 Zookeeper 的服务状态。

[root@hadoop102 zookeeper-3.4.10]# bin/zkServer.sh status

JMX enabled by default Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg Mode: follower

[root@hadoop103 zookeeper-3.4.10]# bin/zkServer.sh status

JMX enabled by default Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg Mode: leader

[root@hadoop104 zookeeper-3.4.5]# bin/zkServer.sh status

JMX enabled by default Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg Mode: follower

(6)编写ZK集群启动停止脚本

1)在 hadoop102 的/home/xxx/bin 目录下创建脚本

[xxx@hadoop102 bin]$ vim zk.sh

在脚本中编写如下内容

#! /bin/bash
case $1 in
"start"){
	for i in hadoop102 hadoop103 hadoop104
	do
		ssh $i "/opt/module/zookeeper-3.4.10/bin/zkServer.sh start"
	done
};;
"stop"){
	for i in hadoop102 hadoop103 hadoop104
	do
		ssh $i "/opt/module/zookeeper-3.4.10/bin/zkServer.sh stop"
	done
};;
"status"){
	for i in hadoop102 hadoop103 hadoop104
	do
		ssh $i "/opt/module/zookeeper-3.4.10/bin/zkServer.sh status"
	done
};;
esac
复制代码

2)增加脚本执行权限 [xxx@hadoop102 bin]$ chmod 777 zk.sh

3)Zookeeper 集群启动脚本 [xxx@hadoop102 module]$ zk.sh start

4)Zookeeper 集群停止脚本 [xxx@hadoop102 module]$ zk.sh stop

五. Flume安装

(1)将 apache-flume-1.7.0-bin.tar.gz 上传到 Linux 的/opt/software 目录下。

(2)解压 apache-flume-1.7.0-bin.tar.gz 到/opt/module/目录下。

[xxx@hadoop102 software]$ tar -zxf apache-flume-1.7.0-bin.tar.gz -C /opt/module/

(3)修改 apache-flume-1.7.0-bin 的名称为 flume。

[xxx@hadoop102 module]$ mv apache-flume-1.7.0-bin flume

(4)将 flume/conf 目录下的 flume-env.sh.template 文件的名称修改为 flume-env.sh,并配置 flume-env.sh 文件,在配置文件中增加 JAVA_HOME 路径,如下所示。

[xxx@hadoop102 conf]$ mv flume-env.sh.template flume-env.sh

[xxx@hadoop102 conf]$ vim flume-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

(5)将配置好的 Flume 分发到集群中其他节点服务器上。

(6)编写Flume启动停止脚本

1)在/home/xxx/bin 目录下创建脚本日志采集脚本 f1.sh [xxx@hadoop102 bin]$ vim f1.sh 在脚本中填写如下内容

#! /bin/bash
case $1 in
"start"){
	for i in hadoop102 hadoop103
	do
		echo " --------启动 $i 采集 flume-------"
		ssh $i "nohup /opt/module/flume/bin/flume-ng agent --conf-file /opt/module/flume/conf/file-flume-kafka.conf --name a1 -Dflume.root.logger=INFO,LOGFILE >/opt/module/flume/test1 2>&1 &"
	done
};;
"stop"){
	for i in hadoop102 hadoop103
	do
		echo " --------停止 $i 采集 flume-------"
		ssh $i "ps -ef | grep file-flume-kafka | grep -v grep |awk '{print \$2}' | xargs kill"
		done
};;
esac
复制代码

说明 1:nohup,该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup 就是不挂起的意思,不挂断地运行命令。 说明 2:awk 默认分隔符为空格 说明 3:xargs 表示取出前面命令运行的结果,作为后面命令的输入参数。

2)增加脚本执行权限 [xxx@hadoop102 bin]$ chmod 777 f1.sh

3)f1 集群启动脚本 [xxx@hadoop102 module]$ f1.sh start

4)f1 集群停止脚本 [xxx@hadoop102 module]$ f1.sh stop

5). 创建日志消费 Flume 启动停止脚本

1)在/home/xxx/bin 目录下创建脚本 f2.sh [xxx@hadoop102 bin]$ vim f2.sh 在脚本中填写如下内容

#! /bin/bash
case $1 in
"start"){
	for i in hadoop104
	do
		echo " --------启动 $i 消费 flume-------"
		ssh $i "nohup /opt/module/flume/bin/flume-ng agent --conf-file /opt/module/flume/conf/kafka-flume-hdfs.conf --name a1  -Dflume.root.logger=INFO,LOGFILE >/opt/module/flume/log.txt 2>&1 &"
	done
};;
"stop"){
	for i in hadoop104
	do
		echo " --------停止 $i 消费 flume-------"
		ssh $i "ps -ef | grep kafka-flume-hdfs | grep -v grep |awk '{print \$2}' | xargs kill"
	done
};;
esac
复制代码

2)增加脚本执行权限 [xxx@hadoop102 bin]$ chmod 777 f2.sh

3)f2 集群启动脚本 [xxx@hadoop102 module]$ f2.sh start

4)f2 集群停止脚本 [xxx@hadoop102 module]$ f2.sh stop

六. Kafka安装

Kafka 是一个优秀的分布式消息队列系统,通过将日志消息先发送至 Kafka,可以规避数据丢失的风险,增加数据处理的可扩展性,提高数据处理的灵活性和峰值处理能力,提高系统可用性,为消息消费提供顺序保证,并且可以控制优化数据流经系统的速度,解决消息生产和消息消费速度不一致的问题。Kafka 集群需要依赖 Zookeeper 提供服务来保存一些元数据信息,以保证系统可用性。在完成 Zookeeper 的安装之后,就可以安装 Kafka 了,具体安装步骤如下。

(1)Kafka 集群规划如表 4-1 所示。 在这里插入图片描述

(2)下载安装包。 下载 Kafka 的安装包。地址为 kafka.apache.org/downloads.h…

(3)解压安装包。 [xxx@hadoop102 software]$ tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/module/

(4)修改解压后的文件名称。 [xxx@hadoop102 module]$ mv kafka_2.11-0.11.0.0/ kafka

(5)在/opt/module/kafka 目录下创建 logs 文件夹,用于保存 Kafka 运行过程中产生的日志文件。 [xxx@hadoop102 kafka]$ mkdir logs

(6)进入 Kafka 的配置目录,打开 server.properties,修改配置文件,Kafka 的配置文件都是以键值对的形式存在的,主要需要修改的内容如下。

[xxx@hadoop102 kafka]$ cd config/

[xxx@hadoop102 config]$ vi server.properties

找到对应的配置并按照如下内容进行修改。

#broker 的全局唯一编号,不能重复
broker.id=0
#配置删除 Topic 功能为 true,即在 Kafka 中删除 Topic 为真正删除,而不是标记删除
delete.topic.enable=true
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘 I/O 的线程数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#Kafka 运行日志存放的路径,配置为自行创建的 logs 文件夹
log.dirs=/opt/module/kafka/logs
#Topic 在当前 broker 上的分区个数
num.partitions=1
#用来恢复和清理 data 下数据的线程数量
num.recovery.threads.per.data.dir=1
#数据文件保留的最长时间,超时则被删除
log.retention.hours=168
#配置连接 Zookeeper 集群的地址
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181
复制代码

(7)配置环境变量,将 Kafka 的安装目录配置到系统环境变量中,可以更加方便用户执行 Kafka 的相关命令。在配置完环境变量后,需要执行 source 命令使环境变量生效。

[root@hadoop102 module]# vim /etc/profile

#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka
export PATH=$PATH:$KAFKA_HOME/bin
复制代码

[root@hadoop102 module]# source /etc/profile

(8)安装配置全部修改完成后,分发安装包和环境变量到集群其他节点服务器,并使环境变量生效。

[root@hadoop102 etc]# xsync profile

[xxx@hadoop102 module]$ xsync kafka/

(9)修改 broker.id。 分别在 hadoop103 和 hadoop104 上修改配置件/opt/module/kafka/config/server. operties中的 broker.id=1、broker.id=2。 注意:broker.id 为识别 Kafka 集群不同节点服务器的标识,不可重复。 (10)启动集群。 依次在 hadoop102、hadoop103 和 hadoop104 上启动 Kafka。

[xxx@hadoop102 kafka]$ bin/kafka-server-start.sh config/server.properties &

[xxx@hadoop103 kafka]$ bin/kafka-server-start.sh config/server.properties &

[xxx@hadoop104 kafka]$ bin/kafka-server-start.sh config/server.properties &

(11)关闭集群。

[xxx@hadoop102 kafka]$ bin/kafka-server-stop.sh stop

[xxx@hadoop103 kafka]$ bin/kafka-server-stop.sh stop

[xxx@hadoop104 kafka]$ bin/kafka-server-stop.sh stop

(12)kafka集群启动停止脚本

1)在/home/xxx/bin 目录下创建脚本 kf.sh [xxx@hadoop102 bin]$ vim kf.sh 在脚本中填写如下内容

#! /bin/bash
case $1 in
"start"){
	for i in hadoop102 hadoop103 hadoop104
	do
		echo " --------启动 $i Kafka-------"
		ssh $i "/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties "
	done
};;
"stop"){
	for i in hadoop102 hadoop103 hadoop104
	do
		echo " --------停止 $i Kafka-------"
		ssh $i "/opt/module/kafka/bin/kafka-server-stop.sh stop"
	done
};;
esac
复制代码

2)增加脚本执行权限

[xxx@hadoop102 bin]$ chmod 777 kf.sh

3)kf 集群启动脚本

[xxx@hadoop102 module]$ kf.sh start

4)kf 集群停止脚本

[xxx@hadoop102 module]$ kf.sh stop

七. MySQL安装

1.安装包准备 (1)使用 rpm 命令配合管道符查看 MySQL 是否已经安装,其中,-q 选项为 query,-a 选项为 all,意思为查询全部安装,如果已经安装 MyAQL,则将其卸载。

① 查看 MySQL 是否已经安装。

[root@hadoop102 桌面]# rpm -qa | grep MySQL

mysql-libs-5.1.73-7.el6.x86_64

② 卸载,-e 选项表示卸载,--nodeps 选项表示无视所有依赖强制卸载。

[root@hadoop102 桌面]# rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64

(2)将 MySQL 安装包 mysql-libs.zip 上传至/opt/software 目录下,并解压。

[root@hadoop102 software]# unzip mysql-libs.zip

[root@hadoop102 software]# ls mysql-libs.zip mysql-libs

2.安装 MySQL 服务器

(1)安装 MySQL 服务器端,使用 rpm 命令安装 MySQL,-i 选项为 install,-v 选项为vision,-h 选项为展示安装过程。

[root@hadoop102 mysql-libs]# rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm

(2)服务器端安装完成后会生成一个默认随机密码,存储在/root/.mysql_secret 文件中,root 用户可以直接使用 cat 命令或 sudo cat 命令查看产生的随机密码,登录 MySQL 后需要立即更改密码。

[root@hadoop102 mysql-libs]# cat /root/.mysql_secret OEXaQuS8IWkG19Xs

(3)以 root 用户身份登录,或者使用 sudo 命令查看 MySQL 服务运行状态,可以看到现在是“MySQL is not running…”状态。

[root@hadoop102 mysql-libs]# service mysql status MySQL is not running…

(4)以 root 用户身份登录,或者使用 sudo 命令启动 MySQL。

[root@hadoop102 mysql-libs]# service mysql start

3.安装 MySQL 客户端 (1)使用 rpm 命令安装 MySQL 客户端。

[root@hadoop102 mysql-libs]# rpm -ivh MySQL-client-5.6.24-1.el6.x86_64.rpm

(2)登录 MySQL,以 root 用户身份登录,密码为安装服务器端时自动生成的随机密码。

[root@hadoop102 mysql-libs]# mysql -uroot -pOEXaQuS8IWkG19Xs

(3)进入 MySQL 后,立即修改密码,修改密码后记住该密码。

mysql>SET PASSWORD=PASSWORD('000000');

(4)退出 MySQL。

mysql>exit

4.MySQL 中 user 表的主机配置 由于 MySQL 需要被 Hive 连接访问,为避免出现权限问题,我们可以配置 MySQL 在任何主机上只要使用 root 用户名和密码均可登录 MySQL。为此我们需要修改 MySQL 的 user表,具体步骤如下。

(1)以 root 用户身份输入设置的密码登入 MySQL。

[root@hadoop102 mysql-libs]# mysql -uroot -p000000

(2)显示目前 MySQL 的所有数据库。

mysql>show databases;

(3)使用 MySQL 数据库。

mysql>use mysql;

(4)显示 MySQL 数据库中的所有表。

mysql>show tables;

(5)user 表中存储了允许登录 MySQL 的用户、密码等信息,展示 user 表的结构,可以发现 user 表的字段非常多。

mysql>desc user;

(6)查询 user 表中的部分字段 host、user、password,显示关键信息,可以看到 4 条信息,host 分别是 localhost、hadoop102、127.0.0.1、::1,这 4 个 host 都表明只有本机可以连接 MySQL。

mysql>select user, host, password from user;

(7)修改 user 表,把 host 字段值修改为%,使任何 host 都可以通过 root 用户+密码连接MySQL。

mysql>update user set host='%' where host='localhost';

(8)需要删除 root 用户的其他 host,才能使“%”生效。

mysql>delete from user where Host='hadoop102 '; mysql>delete from user where Host='127.0.0.1'; mysql>delete from user where Host='::1';

(9)刷新权限,使修改生效。

mysql>flush privileges;

(10)退出。

mysql> quit;

八. Sqoop安装

Sqoop 是一个用于将关系型数据库和 Hadoop 中的数据进行相互转移的工具,可以将一个关系型数据库(如 MySQL、Oracle)中的数据导入 Hadoop(如 HDFS、Hive、HBase)中,也可以将 Hadoop(如 HDFS、Hive、HBase)中的数据导入关系型数据库(如 MySQL、Oracle)中。安装步骤如下。

1.下载并解压 (1)下载安装包。

(2)上传安装包 sqoop-1.4.6.bin_hadoop-2.0.4-alpha.tar.gz 到虚拟机中。

(3)解压 Sqoop 安装包到指定目录。

[xxx@hadoop102 software]$ tar -zxf sqoop-1.4.6.bin_hadoop-2.0.4-alpha.tar. gz -C /opt/module/

(4)改名 mv sqoop-1.4.6.bin_hadoop-2.0.4-alpha sqoop

2.修改配置文件

Sqoop 的配置文件与大多数大数据框架类似,在 Sqoop 根目录的 conf 目录下。

(1)重命名配置文件。

[xxx@hadoop102 conf]$ mv sqoop-env-template.sh sqoop-env.sh

(2)修改配置文件 sqoop-env.sh。

[xxx@hadoop102 conf]$ vim sqoop-env.sh

增加如下内容。

export HADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2
export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10
export ZOOCFGDIR=/opt/module/zookeeper-3.4.10
export HIVE_HOME=/opt/module/hive
export HBASE_HOME=/opt/module/hbase
复制代码

3.复制 JDBC 驱动

复制 JDBC 驱动到 Sqoop 的 lib 目录下。

[xxx@hadoop102 mysql]$ cp mysql-connector-java-5.1.27-bin.jar /opt/module/sqoop/lib/

4.验证 Sqoop

我们可以通过如下命令来验证 Sqoop 配置是否正确。

[xxx@hadoop102 sqoop]$ bin/sqoop help

出现 Warning 警告(警告信息已省略),并伴随着帮助命令的输出。

Available commands:
codegen Generate code to interact with database records
create-hive-table Import a table definition into Hive
eval Evaluate a SQL statement and display the results
export Export an HDFS directory to a database table
help List available commands
import Import a table from a database to HDFS
import-all-tables Import tables from a database to HDFS
import-mainframe Import datasets from a mainframe server to HDFS
job Work with saved jobs
list-databases List available databases on a server
list-tables List available tables in a database
merge Merge results of incremental imports
metastore Run a standalone Sqoop metastore
version Display version information
复制代码

5.测试 Sqoop 是否能够成功连接数据库

[xxx@hadoop102 sqoop]$ bin/sqoop list-databases --connect

jdbc:mysql://hadoop102:3306/ --username root --password 000000

出现如下输出则表示连接成功。

information_schema
metastore
mysql
oozie
performance_schema
复制代码

九. Hive安装

1.安装及配置 Hive

(1)把 Hive 的安装包 apache-hive-3.1.2-bin.tar.gz 上传到 Linux 的/opt/software 目录下,解压 apache-hive-3.1.2-bin.tar.gz 到/opt/module/目录下。

[xxx@hadoop102 software]$ tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/

(2)修改 apache-hive-3.1.2-bin 的名称为 hive。

[xxx@hadoop102 module]$ mv apache-hive-1.2.1-bin/ hive

(3)修改/etc/profile.d/my_env.sh 文件,添加环境变量。

[xxx@hadoop102 software]$ sudo vim /etc/profile.d/my_env.sh 添加以下内容。

#HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin 
复制代码

执行以下命令使环境变量生效。

[xxx@hadoop102 software]$ source /etc/profile.d/my_env.sh

(4)进到/opt/module/hive/lib 目录下执行以下命令,解决日志 jar 包冲突。

[xxx@hadoop102 lib]$ mv log4j-slf4j-impl-2.10.0.jar

log4j-slf4j-impl-2.10.0.jar.bak

2.驱动复制

(1)在/opt/software/mysql-libs 目录下解压 mysql-connector-java-5.1.27.tar.gz 驱动包。

[root@hadoop102 mysql-libs]# tar -zxvf mysql-connector-java-5.1.27.tar.gz

(2) 复 制 /opt/software/mysql-libs/mysql-connector-java-5.1.27 目 录 下 的 mysql-connector-java-5.1.27-bin.jar 到/opt/module/hive/lib/目录下,用于稍后启动 Hive 时连接MySQL。

[root@hadoop102 mysql-connector-java-5.1.27]# cp mysql-connector-java-5.1.27-bin.jar /opt/module/hive/lib/

3.配置 Metastore 到 MySQL

(1)在/opt/module/hive/conf 目录下创建一个 hive-site.xml 文件

[xxx@hadoop102 conf]$ touch hive-site.xml

[xxx@hadoop102 conf]$ vim hive-site.xml

(2)根据官方文档配置参数,复制数据到 hive-site.xml 文件中。

cwiki.apache.org/confluence/…

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--配置 Hive 保存元数据信息所需的 MySQL URL 地址,此处使用 Keepalived 服务对外提供的虚拟
IP 地址-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop100:3306/metastore?createDatabaseIfNotExist=true
</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<!--配置 Hive 连接 MySQL 的驱动全类名-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<!--配置 Hive 连接 MySQL 的用户名 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<!--配置 Hive 连接 MySQL 的密码 -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>000000</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop102:9083</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop102</value>
</property>
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
</configuration>
复制代码

4.初始化元数据库

(1)启动 MySQL。

[xxx@hadoop103 mysql-libs]$ mysql -uroot -p000000

(2)新建 Hive 元数据库。

mysql> create database metastore;

mysql> quit;

(3)初始化 Hive 元数据库。

[xxx@hadoop102 conf]$ schematool -initSchema -dbType mysql -verbose

5.启动 Hive

(1)Hive 2.x 以上版本,要先启动 Metastore 和 Hiveserver2 服务,否则会报错。

FAILED: HiveException java.lang.RuntimeException: Unable to instantiate
org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
复制代码

(2)在/opt/module/hive/bin 目录下编写 Hive 服务启动脚本,在脚本中启动 Metastore 和Hiveserver2 服务。

[xxx@hadoop102 bin]$ vim hiveservices.sh

脚本内容如下。

#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
mkdir -p $HIVE_LOG_DIR
#检查进程是否运行正常,参数 1 为进程名,参数 2 为进程端口
function check_process()
{
pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')
ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/'
-f 1)
echo $pid
[[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
}
function hive_start()
{
metapid=$(check_process HiveMetastore 9083)
cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &"
cmd=$cmd" sleep 4; hdfs dfsadmin -safemode wait >/dev/null 2>&1"
[ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动"
server2pid=$(check_process HiveServer2 10000)
cmd="nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1
&"
[ -z "$server2pid" ] && eval $cmd || echo "HiveServer2 服务已启动"
}
function hive_stop()
{
metapid=$(check_process HiveMetastore 9083)
[ "$metapid" ] && kill $metapid || echo "Metastore 服务未启动"
server2pid=$(check_process HiveServer2 10000)
[ "$server2pid" ] && kill $server2pid || echo "HiveServer2 服务未启动"
}
case $1 in
"start")
hive_start
;;
"stop")
hive_stop
;;
"restart")
hive_stop
sleep 2
hive_start
;;
"status")
check_process HiveMetastore 9083 >/dev/null && echo "Metastore 服务运行正常"
|| echo "Metastore 服务运行异常"
check_process HiveServer2 10000 >/dev/null && echo "HiveServer2 服务运行正常
" || echo "HiveServer2 服务运行异常"
;;
*)
echo Invalid Args!
echo 'Usage: '$(basename $0)' start|stop|restart|status'
;;
esac
复制代码

(3)增加脚本执行权限。

[xxx@hadoop102 bin]$ chmod +x hiveservices.sh

(4)启动 Hive 后台服务。

[xxx@hadoop102 bin]$ hiveservices.sh start

(5)查看 Hive 后台服务运行情况。

[xxx@hadoop102 bin]$ hiveservices.sh status

Metastore 服务运行正常

HiveServer2 服务运行正常

(6)启动 Hive 客户端。

[xxx@hadoop102 hive]$ bin/hive

十. 安装ES5.2

1)上传 elasticsearch-5.2.2.tar.gz 到 hadoop102 的/opt/software 目录,并解压到/opt/module目录

[xxx@hadoop102 software]$ tar -zxvf

elasticsearch-5.2.2.tar.gz -C /opt/module/

2)修改/opt/module/elasticsearch-5.2.2/config/elasticsearch.yml 配置文件

[xxx@hadoop102 config]$ vim elasticsearch.yml

network.host: hadoop102
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
复制代码

3)修改 Linux 系统配置文件/etc/security/limits.conf

[xxx@hadoop102 elasticsearch-5.2.2]$ sudo vim

/etc/security/limits.conf

#添加如下内容
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
复制代码

[xxx@hadoop102 elasticsearch-5.2.2]$ sudo vim /etc/sysctl.conf

#添加
vm.max_map_count=655360
复制代码

[xxx@hadoop102 elasticsearch-5.2.2]$ sudo vim /etc/security/limits.d/90-nproc.conf

#修改配置
* soft nproc 2048
复制代码

[xxx@hadoop102 elasticsearch-5.2.2]$ sudo sysctl -p

4)需要重新启动虚拟机 [xxx@hadoop102 elasticsearch-5.2.2]$ su root root@hadoop102 elasticsearch-5.2.2]# reboot

5)在/opt/module/elasticsearch-5.2.2 路径上,启动 ES

[xxx@hadoop102 elasticsearch-5.2.2]$ bin/elasticsearch

6)在 ES 里创建 griffin 索引

[xxx@hadoop102 ~]$ curl -XPUT http://hadoop102:9200/griffin -d '
{
	"aliases": {},
	"mappings": {
		"accuracy": {
			"properties": {
				"name": {
					"fields": {
						"keyword": {
							"ignore_above": 256,
							"type": "keyword"
											}
									},
							"type": "text"
								},
						"tmst": {
						"type": "date"
									}
								}
							}
							},
				"settings": {
				"index": {
					"number_of_replicas": "2",
					"number_of_shards": "5"
							}
					}
			} '
复制代码

十一. 安装 Spark2.4.3

1)把 spark-2.4.3-bin-hadoop2.7.tgz 上传到/opt/software 目录,并解压到/opt/module

[xxx@hadoop102 software]$ tar -zxvf spark-2.4.3-bin-hadoop2.7.tgz -C /opt/module/

2)修改名称/opt/module/spark-2.4.3-bin-hadoop2.7 名称为 spark

[xxx@hadoop102 module]$ mv spark-2.4.3-bin-hadoop2.7/ spark

3)修改/opt/module/spark/conf/spark-defaults.conf.template 名称为 spark-defaults.conf

[xxx@hadoop102 conf]$ mv spark-defaults.conf.template spark-defaults.conf

4)在 hadoop 集群上提前创建 spark_directory 日志路径

[xxx@hadoop102 spark]$ hadoop fs -mkdir /spark_directory

5)在 spark-default.conf 文件中配置 Spark 日志路径

[xxx@hadoop102 conf]$ vim spark-defaults.conf

#添加如下配置
spark.eventLog.enabled true
spark.eventLog.dir
hdfs://hadoop102:9000/spark_directory
复制代码

6)修改/opt/module/spark/conf/spark-env.sh.template 名称为 spark-env.sh

[xxx@hadoop102 conf]$ mv spark-env.sh.template spark-env.sh

7)在/opt/module/spark/conf/spark-env.sh 文件中配置 YARN 配置文件路径、配置历史服务器相关参数

[xxx@hadoop102 conf]$ vim spark-env.sh

#添加如下参数
YARN_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080
-Dspark.history.retainedApplications=30
-Dspark.history.fs.logDirectory=hdfs://hadoop102:9000/spark_directory"
复制代码

8 ) 把 Hive 中 /opt/module/hive-2.3.6/lib/datanucleus-*.jar 包 拷 贝 到 Spark 的 /opt/module/spark/jars 路径

[xxx@hadoop102 lib]$ cp /opt/module/hive-2.3.6/lib/datanucleus-*.jar /opt/module/spark/jars/

9 ) 把 Hive 中 /opt/module/hive-2.3.6/conf/hive-site.xml 包 拷 贝 到 Spark 的

/opt/module/spark/conf 路径

[xxx@hadoop102 conf]$ cp /opt/module/hive-2.3.6/conf/hive-site.xml /opt/module/spark/conf/

10)测试环境 [xxx@hadoop102 spark]$ bin/spark-shell

scala>spark.sql("show databases").show

十二. 安装Livy

1)上传 livy-server-0.3.0.zip 到 hadoop102 的/opt/software 目录下,并解压到/opt/module

[xxx@hadoop102 software]$ unzip livy-server-0.3.0.zip -d /opt/module/

2)修改/opt/module/livy-server-0.3.0 文件名称为 livy

[xxx@hadoop102 module]$ mv livy-server-0.3.0/ livy

3)修改/opt/module/livy/conf/livy.conf 文件,配置 livy 与 spark 相关参数

livy.server.host = Hadoop102
livy.spark.master =yarn
livy.spark.deployMode = client
livy.repl.enableHiveContext = true
livy.server.port = 8998
复制代码

4)配置需要的环境变量

[xxx@hadoop102 conf]$ sudo vim /etc/profile

#SPARK_HOME
export SPARK_HOME=/opt/module/spark
export PATH=$PATH:$SPARK_HOME/bin
复制代码

[xxx@hadoop102 conf]$ source /etc/profile

5)在/opt/module/livy/路径上,启动 livy 服务

[xxx@hadoop102 livy]$ bin/livy-server start

十三. Maven

1)Maven 下载:maven.apache.org/download.cg…

2)把 apache-maven-3.6.1-bin.tar.gz 上传到 linux 的/opt/software 目录下

3)解压 apache-maven-3.6.1-bin.tar.gz 到/opt/module/目录下面

[xxx@hadoop102 software]$ tar -zxvf apache-maven-3.6.1-bin.tar.gz -C /opt/module/

4)修改 apache-maven-3.6.1 的名称为 maven

[xxx@hadoop102 module]$ mv apache-maven-3.6.1/ maven

5)添加环境变量到/etc/profile 中

[xxx@hadoop102 module]$ sudo vim /etc/profile

#MAVEN_HOME
export MAVEN_HOME=/opt/module/maven
export PATH=$PATH:$MAVEN_HOME/bin
复制代码

6)测试安装结果

[xxx@hadoop102 module]$ source /etc/profile

[xxx@hadoop102 module]$ mvn -v

7)修改 setting.xml,指定为阿里云

[xxx@hadoop102 maven]$ cd conf

[xxx@hadoop102 maven]$ vim settings.xml

<!-- 添加阿里云镜像-->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</ur
l>
</mirror>
<mirror>
<id>UK</id>
<name>UK Central</name>
<url>http://uk.maven.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
复制代码

8)在/home/xxx目录下创建.m2 文件夹

[xxx@hadoop102

十四. Apache Griffin编译

1)上传 griffin-master.zip 到 hadoop102 的/opt/software 目录,并解压 tar.gz 包到/opt/module

[xxx@hadoop102 software]$ unzip griffin-master.zip -d /opt/module/

2)修改/opt/module/griffin-master/service/pom.xml 文件,注释org.postgresql,添加 mysql依赖。

[xxx@hadoop102 service]$ vim pom.xml

<!--
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
注意:版本号删除掉
复制代码

griffin其余的编译步骤,请参考这篇文章

猜你喜欢

转载自juejin.im/post/6980245539866542111