前言

本文是对于前面一段时间学习的总结,可能会有点长,本文可能搭建各种可能会用到的环境的基本步骤,包括:Hadoop,Hive,Zookeeper,Kafka,Hbase,Spark,Storm,Sqoop等。在实际应用中可能未必需要用到所有的这些,请读者们按需取舍。

注意:因为有些环境之间存在相互依赖,所以在搭建环境或者使用其的过程中要注意顺序。比如说Hive是依赖于Hadoop的,搭建使用Hive前,Hadoop集群肯定要提前搭建好并启动起来;搭建使用Hbase时,由于其依赖于Hadoop和Zookeeper,所以需要提前搭建并启动好Hadoop和ZooKeeper集群。一定要注意!

系统说明

  • 系统:CentOS 7
  • 节点信息:
节点 ip
master 192.168.128.160
slave1 192.168.128.161
slave2 192.168.128.162

同时为了读者下载方便,现将本文用到的安装包放在百度网盘中

链接:https://pan.baidu.com/s/1hTMAMP3zw5CiyRdDDDGPfg
提取码:mvhu

读者自行下载

搭建步骤详述

一、节点基础配置

1、配置各节点网络

[root@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=6eb68369-bc2b-4489-aa2a-98c0de02e445
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.128.160
GATEWAY=192.168.128.2
NETMASK=255.255.255.0
DNS1=8.8.8.8



# 对其他两个slave节点也同样做上述操作,只不过在IPADDR值不一样,分别填其节点对应的ip

修改完记得重启网络

service network restart

2、修改每个节点主机名,添加各节点映射

# 在其他两个子节点的hostname处分别填slave1和slave2
[root@master ~]# vim /etc/hostname
master

[root@master ~]# vim /etc/hosts
192.168.128.160 master
192.168.128.161 slave1
192.168.128.162 slave2

#三个节点都要做

3、关闭防火墙

# 三个节点都要做

# 把SELINUX那值设为disabled
[root@master ~]# vim /etc/selinux/config
SELINUX=disabled


停止firewall

[root@master ~]# systemctl stop firewalld.service

禁止firewall开机启动

[root@master ~]# systemctl disable firewalld.service

测试

[root@master ~]# ping www.baidu.com
PING www.wshifen.com (104.193.88.77) 56(84) bytes of data.
64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=1 ttl=128 time=320 ms
64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=2 ttl=128 time=278 ms
64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=3 ttl=128 time=396 ms
^Z
[3]+ 已停止 ping www.baidu.com
[root@master ~]#

ping通了,则代表网络配置成功

4、配置节点间ssh免密登陆

[root@master ~]# ssh-keygen -t rsa
# 上面这条命令,遇到什么都别管,一路回车键敲下去


(注如果提示not found 可能是ssh没有安装,输入

yum install openssh-clients

安装openssh)


# 拷贝本密钥到三个节点上
[root@master ~]# ssh-copy-id master
[root@master ~]# ssh-copy-id slave1
[root@master ~]# ssh-copy-id slave2

# master节点上做完后,再在其他两个节点上重复上述操作

测试

[root@master ~]# ssh slave1
Last login: Mon Dec 23 10:12:59 2019 from master
[root@slave1 ~]# exit
登出
Connection to slave1 closed.
[root@master ~]#

发现在master节点上免密登陆到了slave1,代表ssh免密登录配置成功

5、安装java

# 我们所有的环境配置包都放到/usr/local/software下

[root@master ~]# cd /usr/local/src/software/
[root@master software]# tar -zxvf jdk-8u121-linux-x64.gz -C /usr/local/src/


# 配置环境变量,在profile文件最后添加java的环境变量
[root@master software]# vim /root/.bash_profile

#java
export JAVA_HOME=/usr/local/src/jdk1.8.0_121
export PATH=$PATH:$JAVA_HOME/bin



[root@master software]# source /root/.bash_profile
[root@master software]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)


# 在其他两个节点上重复上述操作
# 或者也可以发送jdk到其他两台节点上
[root@master src]# scp -r jdk1.8.0_191/ root@slave1:/usr/local/src/
[root@master src]# scp -r jdk1.8.0_191/ root@slave2:/usr/local/src/

二、Hadoop安装和配置

– 介绍:

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。
HDFS,Hadoop Distributed File System,是一个分布式文件系统,用来存储 Hadoop 集群中所有存储节点上的文件,包含一个 NameNode 和大量 DataNode。NameNode,它在 HDFS 内部提供元数据服务,负责管理文件系统名称空间和控制外部客户机的访问,决定是否将文件映射到 DataNode 上。DataNode,它为 HDFS 提供存储块,响应来自 HDFS 客户机的读写请求。
MapReduce是一种编程模型,用于大规模数据集的并行运算。概念"Map(映射)“和"Reduce(归约)”,是它们的主要思想,即指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

1、解压

[root@master software]# tar -zxvf hadoop-2.6.0.tar.gz -C /usr/local/src/

2、配置环境变量

[root@master software]# vim /root/.bash_profile

#hadoop
export HADOOP_HOME=/usr/local/src/hadoop-2.6.0
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

[root@master software]# source /root/.bash_profile


[root@master software]# hadoop version
Hadoop 2.6.0
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1
Compiled by jenkins on 2014-11-13T21:10Z
Compiled with protoc 2.5.0
From source with checksum 18e43357c8f927c0695f1e9522859d6a
This command was run using /usr/local/src/hadoop-2.6.0/share/hadoop/common/hadoop-common-2.6.0.jar

3、 修改配置文件

1.core-site.xml

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>


<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/src/hadoop-2.6.0/tmp</value>
</property>
</configuration>

2.hdfs-site.xml

<configuration>

<property>
<name>dfs.replication</name>
<value>3</value>
</property>

<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>

<property>
<name>dfs.data.dir</name>
<value>/usr/local/src/hadoop-2.6.0/tmp/data</value>
</property>

<property>
<name>dfs.name.dir</name>
<value>/usr/local/src/hadoop-2.6.0/tmp/name</value>
</property>


</configuration>

3.hadoop-env.sh

export JAVA_HOME=/usr/local/src/jdk1.8.0_121

4.yarn-env.sh

export JAVA_HOME=/usr/local/src/jdk1.8.0_121

5.mapred-site.xml

<configuration>

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>

<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>

</configuration>

6.yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>

</configuration>

7.slaves

master
slave1
slave2

8.直接把配置好的hadoop包传到剩下两个子节点同样的位置下

[root@master src]# scp -r hadoop-2.6.0/ slave1:/usr/local/src/
[root@master src]# scp -r hadoop-2.6.0/ slave2:/usr/local/src

9.测试

# 只要在主节点上启动,执行过程可能稍慢,耐心等待

# 先格式化
[root@master hadoop-2.6.0]# bin/hdfs namenode -format

#启动
[root@master hadoop-2.6.0]# sbin/start-all.sh



master上的节点

mark

slave1上的节点

mark

slave2上的节点

mark

在浏览器上访问可视化页面:http://192.168.128.160:50070/

mark

到此为止,hadoop配置就结束了。

三、安装Zookeeper

– 介绍:

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

(提示)

这步安装zookeeper是因为在安装完zookeeper后我们就可以把之前安装的完全分布式的hadoop集群改为高可用的hadoop了

1、解压

[root@master software]# tar -zxvf zookeeper-3.4.5.tar.gz -C /usr/local/src/
[root@master software]# cd ..
[root@master src]# mv zookeeper-3.4.5/ zookeeper/

2、配置环境变量

[root@master software]# vim /root/.bash_profile

#zookpeeper
export ZOOKEEPER_HOME=/usr/local/src/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin


[root@master software]# source /root/.bash_profile

# 在其他两个节点上重复上述操作


3、 修改配置文件

我们在zookpeeper的目录下能看到一个conf的文件夹,进入把zoo_sample.cfg重命名

mv zoo_sample.cfg zoo.cfg

然后进入zoo.cfg

vim zoo.cfg

在文件中修改datadir的路径和添加server的配置

例如可以改为

mark

同时创建dataDir属性值所指定的目录

在zkData目录下创建myid文件,修改值为1,如:

[root@master ~]# cd /usr/local/src/zookeeper/data/


[root@master data]# touch myid

[root@master data]# echo 1 > myid

然后在其他两台机器上进行相同的操作,只不过要把myid的值改为2和3就行

安装完成后

在zookpeeper目录下

在三个节点上分别执行命令,启动服务: zkServer.sh start
在三个节点上分别执行命令,查看状态: zkServer.sh status
正确结果应该是:三个节点中其中一个是
leader ,另外两个是 follower
在三个节点上分别执行命令:
jps
检查三个节点是否都有
QuromPeerMain 进程

master上

mark

slave1上

mark

slave2上

mark

这里可以看出我们的zookeeper安装完成了

四、修改Hadoop集群架构

这里我们需要把之前搭建的hadoop完全分布式改成HA高可用的形式,对于高可用的介绍在我之前的文章里有提过,有兴趣的读者可以去看看

我们需要先把之前格式化生成的文件删除,并且修改hadoop的配置文件,基本等同于重新搭建了一个hadoop集群

#删除之前的缓存文件
[root@master hadoop-2.6.0]# rm -rf tmp/ logs/

修改配置文件

core-site.xml

<configuration>
<!-- 指定 hdfs 的 nameservice 为 myhadoop -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://myhadoop</value>
</property>

<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/src/hadoop-2.6.0/tmp</value>
</property>

<!-- 指定 zookeeper 地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>

</configuration>

hdfs-site.xml

<!-- 指定副本数 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>

<property>
<name>dfs.name.dir</name>
<value>/usr/local/src/hadoop-2.6.0/tmp/name</value>
</property>

<property>
<name>dfs.data.dir</name>
<value>/usr/local/src/hadoop-2.6.0/tmp/data</value>
</property>

<!--指定 hdfs 的 nameservice 为 myhadoop>
<property>
<name>dfs.nameservices</name>
<value>myhadoop</value>
</property>

<property>
<name>dfs.ha.namenodes.myhadoop</name>
<value>nn1,nn2</value>
</property>
<!-- master 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.myhadoop.nn1</name>
<value>master:9000</value>
</property>
<!-- slave1 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.myhadoop.nn2</name>
<value>slave1:9000</value>
</property>

<!-- master 的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.myhadoop.nn1</name>
<value>master:50070</value>
</property>

<!-- slave1 的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.myhadoop.nn2</name>
<value>slave1:50070</value>
</property>

<!-- 指定 NameNode 的 edits 元数据的共享存储位置。也就是 JournalNode 列表
该 url 的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId
journalId 推荐使用 nameservice,默认端口号是:8485 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave1:8485;slave2:8485/myhadoop</value>
</property>

<!-- 指定 JournalNode 在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/src/hadoop-2.6.0/tmp/jn</value>
</property>

<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>

<property>
<name>dfs.permissions.enable</name>
<value>false</value>
</property>

<!-- 使用 sshfence 隔离机制时需要 ssh 免登陆 -->
<property>
<name>dfs.ha.fencing.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>


<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.myhadoop</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 开启 NameNode 失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>

</configuration>

yarn-site.xml

<configuration>

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

<!--启用resourcemanager ha-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>

<!--声明两台resourcemanager的地址-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster-yarn1</value>
</property>

<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>

<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master</value>
</property>

<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave1</value>
</property>

<!--指定zookeeper集群的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>

<!--启用自动恢复-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>

<!--指定resourcemanager的状态信息存储在zookeeper集
群-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
</configuration>

mapred-site.xml之前配置过不用修改

hadoop-env.sh之前配置过不用修改

yarn-site.sh之前配置过不用修改

slaves之前配置过不用修改

修改完成后,

启动

在保证zookeeper启动的情况下

启动各节点的journalnode

[root@master hadoop-2.6.0]# sbin/hadoop-daemon.sh start journalnode
[root@slave1 hadoop-2.6.0]# sbin/hadoop-daemon.sh start journalnode
[root@slave2 hadoop-2.6.0]# sbin/hadoop-daemon.sh start journalnode

启动成功后,进行格式化

[root@master hadoop-2.6.0]# bin/hdfs namenode -format

格式化成功

mark

显示格式化成功后,我们启动master上的NameNode

sbin/hadoop-daemon.sh start namenode

启动成功后,在slave1上进行元数据的同步

在slave1的hadoop文件夹下输入

bin/hdfs namenode -bootstrapStandby

如图显示同步成功后:

mark

把master上的NameNode关闭

关闭master上的NameNode后,我们还需要初始化zookpeeper的状态

bin/hdfs zkfc -formatZK

我们看到如图所示的时候代表初始化成功:

mark

测试

当我们上面的步骤都完成后,我们可以开始启动集群进行测试HA环境的搭建是否成功

先在master上启动所有节点

sbin/start-all.sh

之后我们还需要手动启动jobhistoryserver

sbin/mr-jobhistory-daemon.sh start historyserver 

然后在slave1上我们还布置了一个resourcemanager,这个也是在start-all.sh时无法启动,我们需要在slave1下自行启动

在slave1的hadoop目录下,执行

sbin/yarn-daemon.sh start resourcemanager

这就是启动HadaoopHA上要启动的节点

master上的

mark

slave1上的

mark

slave2的

mark

我们看下web端的显示信息

mark

mark

mark

mark

现在在活动的节点是slave1上的namenode,resourcemanager我们可以手动kill掉,看看故障是否会自动转移,实现ha的基本意义

mark

kill掉slave1上的namenode,查看网页端

mark

发现master上的namenode变为了active,也就是自动故障转移了,resourcemanager的就不在演示了

这里基本可以说明我们的hadoop的ha配置完成了

五、安装Hive

– 介绍:

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过和SQL类似的HiveQL语言快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

Hive 没有专门的数据格式。所有Hive 的数据都存储在Hadoop兼容的文件系统(例如HDFS)中。Hive 在加载数据过程中不会对数据进行任何的修改,只是将数据移动到HDFS中Hive 设定的目录下,因此,Hive 不支持对数据的改写和添加,所有的数据都是在加载的时候确定的。

1、解压

# 注意:Hive只需要在master节点上安装配置

[root@master ~]# cd /usr/local/src/software/
[root@master software]# tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /usr/local/src/
[root@master software]# cd ..
[root@master src]# mv apache-hive-1.2.1-bin/ hive

2、配置环境变量

[root@master hive]# vim /root/.bash_profile 

#hive
export HIVE_HOME=/usr/local/src/hive
export PATH=$PATH:$HIVE_HOME/bin

[root@master hive]# source /root/.bash_profile

3、 安装mysql

hive它有自己的内置数据库derby,但是hive 使用derby 数据库存在不支持多个连接的问题,所以我们一般会使用mysql来代替hive的元数据库

我们的mysql版本为5.7.18,安装文件如下:
mysql-community-client-5.7.18-1.el7.x86_64.rpm
mysql-community-common-5.7.18-1.el7.x86_64.rpm
mysql-community-libs-5.7.18-1.el7.x86_64.rpm
mysql-community-server-5.7.18-1.el7.x86_64.rpm


我们按照顺序安装即可
注之前的liunx带的MariaDB要卸载
[root@master ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.52-2.el7.x86_64
然后卸载
[root@master ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64


[root@master 5.7.18]#rpm -ivh mysql-community-common-5.7.18-1.el7.x86_64.rpm

[root@master 5.7.18]# rpm -ivh mysql-community-libs-5.7.18-1.el7.x86_64.rpm
[root@master 5.7.18]# rpm -ivh mysql-community-client-5.7.18-1.el7.x86_64.rp
m
[root@master 5.7.18]# rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rp
m

安装之后查看安装情况
[root@master 5.7.18]# rpm -qa | grep mysql
mysql-community-common-5.7.18-1.el7.x86_64
mysql-community-client-5.7.18-1.el7.x86_64
mysql-community-libs-5.7.18-1.el7.x86_64
mysql-community-server-5.7.18-1.el7.x86_64

之后自己修改一下mysql的密码即可
修改过程可以看这个博客 https://blog.csdn.net/qq_35354260/article/details/83182900
[root@master ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.18 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


安装完成

同时我们还需要去网上下载mysql的驱动包(mysql-connector-java-5.1.26.jar)把这个驱动包放置在hive目录下的lib目录下。



4、 修改配置文件

[root@master software]# cd ..
[root@master src]# cd hive/
[root@master hive]# cd conf/
[root@master conf]# vim hive-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>


<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>

<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>

<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>


<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hivepwd</value>
</property>

<property>
<name>hive.exec.scratchdir</name>
<value>/usr/local/src/set/hive/tmp</value>
</property>

<property>
<name>hive.exec.local.scratchdir</name>
<value>/usr/local/src/set/hive/tmp/local</value>
</property>

<property>
<name>hive.downloaded.resources.dir</name>
<value>/usr/local/src/set/hive/tmp/resources</value>
</property>


</configuration>


[root@master conf]# vim hive-env.sh
export HADOOP_HOME=/usr/local/src/hadoop-2.6.0
export JAVA_HOME=/usr/local/src/jdk1.8.0_121

配置mysql

初始化mysql

[root@master hive-1.1.0]#   schematool -initSchema -dbType mysql

显示如下就是成功

mark

这样
Hive 的元数据库就配置完成

注:如果没成功的话.可能是hadoop目录下的**/share/hadoop/yarn/lib/** 中的jline-0.9.94.jar文件太老了,我们需要将hive的lib中的jline-2.12.jar放到hadoop的/share/hadoop/yarn/lib/中,同时将老版本的jline删除

另外注:如果hive的初始化失败,可能是在mysql中没赋权的原因,需要在mysql中配置

mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION;

才能顺利初始化

测试

进入Hive 命令行 执行命令 创建一个名为 test 的表 查询该表的记录数:

hive> create table test(id int);

hive> select count(*) from test;

如果查询结果为0,则成功

mark

到这里,hive的安装也就完成了

六、安装Scala

scala是安装spark和kafka的前置条件,所以我们先需要安装配置Scala。

1、解压

[root@master ~]# cd /usr/local/src/software/
[root@master software]# tar -zxvf scala-2.11.6.tgz -C /usr/local/src/

2、配置环境变量

root@master scala-2.11.6]# vim /root/.bash_profile 

#scala
export SCALA_HOME=/usr/local/src/scala-2.11.6
export PATH=$PATH:$SCALA_HOME/bin

root@master scala-2.11.6]# source /root/.bash_profile
[root@master scala-2.11.6]# scala -version
Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL

然后在剩下两个子节点中重复上述步骤!

[root@slave1 src]# scala -version
Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL

[root@slave2 ~]# scala -version
Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL

安装完成

七、安装spark

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎是类似于Hadoop MapReduce的通用并行框架。

Spark拥有Hadoop MapReduce所具有的优点,但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。Spark实际上是对Hadoop的一种补充,可以很好的在Hadoop 文件系统中并行运行。

1、解压

[root@master ~]# cd /usr/local/src/software/
[root@master software]# tar -zxvf spark-2.0.0-bin-hadoop2.6.gz -C /usr/local/src/

2、配置环境变量

[root@master src]# mv spark-2.0.0-bin-hadoop2.6/ spark-2.0.0
[root@master src]# cd spark-2.0.0
[root@master spark-2.0.0]# vim /root/.bash_profile

#spark
export SPARK_HOME=/usr/local/src/spark-2.0.0
export PATH=$PATH:$SPARK_HOME/bin



[root@master spark-2.0.0]# source /root/.bash_profile
# 在其他两个节点上重复上述操作


3、 修改配置文件(spark的HA)

[root@master spark-2.0.0]# cd conf/
root@master conf]# mv spark-env.sh.template spark-env.sh
[root@master conf]# vim spark-env.sh

export JAVA_HOME=/usr/local/src/jdk1.8.0_121
export SPARK_MASTER_PORT=7077
export HADOOP_HOME=/usr/local/src/hadoop-2.6.0
export HADOOP_CONF_DIR=/usr/local/src/hadoop-2.6.0/etc/hadoop
export SCALA_HOME=/usr/local/src/scala-2.11.6
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master:2181,slave1:2181,slave2:2181 -Dspark.deploy.zookeeper.dir=/spark"


[root@master conf]# mv slaves.template slaves
[root@master conf]# vim slaves

master
slave1
slave2


然后在剩下两个子节点中重复上述步骤!

开启与测试

当在三台机器上配置完成后,在master上的节点上启动

[root@master spark-2.0.0]# sbin/start-all.sh 

starting org.apache.spark.deploy.master.Master, logging to /usr/local/src/spark-2.0.0/logs/spark-root-org.apache.spark.deploy.master.Master-1-master.out
slave1: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/src/spark-2.0.0/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave1.out
slave2: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/src/spark-2.0.0/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave2.out
master: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/src/spark-2.0.0/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-master.out


[root@master spark-2.0.0]# jps
4001 JobHistoryServer
2930 DataNode
6531 Master
3125 JournalNode
3301 DFSZKFailoverController
6600 Worker
3401 ResourceManager
3497 NodeManager
2686 QuorumPeerMain
2830 NameNode
6702 Jps


[root@slave1 hadoop-2.6.0]# jps
2434 DataNode
2307 QuorumPeerMain
2372 NameNode
6103 Worker
6184 Jps
2681 NodeManager
3082 ResourceManager
2587 DFSZKFailoverController
2511 JournalNode


[root@slave2 spark-2.0.0]# jps
2274 QuorumPeerMain
2403 JournalNode
2518 NodeManager
4296 Worker
2332 DataNode
4463 Jps

查看进程发现spark集群只有master成功启动了Master进程,其他2个节点均没有启动成功,需要手动启动

root@slave1 spark-2.0.0]# sbin/start-master.sh 
starting org.apache.spark.deploy.master.Master, logging to /usr/local/src/spark-2.0.0/logs/spark-root-org.apache.spark.deploy.master.Master-1-slave1.out
[root@slave1 spark-2.0.0]# jps
2434 DataNode
2307 QuorumPeerMain
2372 NameNode
6103 Worker
6296 Jps
2681 NodeManager
3082 ResourceManager
2587 DFSZKFailoverController
2511 JournalNode
6223 Master



[root@slave2 spark-2.0.0]# sbin/start-master.sh
starting org.apache.spark.deploy.master.Master, logging to /usr/local/src/spark-2.0.0/logs/spark-root-org.apache.spark.deploy.master.Master-1-slave2.out
[root@slave2 spark-2.0.0]# jps
2274 QuorumPeerMain
2403 JournalNode
2518 NodeManager
4296 Worker
2332 DataNode
4399 Master
4463 Jps

这里我们可以进入web端查看spark的状态

master处于是ALIVE状态

mark

slave1与slave2处于均是STANDBY状态

mark

mark

跑了pi试下

[root@master spark-2.0.0]# bin/spark-submit --class org.apache.spark.examples.SparkPi --master local examples/jars/spark-examples_2.11-2.0.0.jar

mark

成功了

spark安装完成

八、安装Hbase

HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

1、解压


[root@master ~]# cd /usr/local/src/software/
[root@master software]# tar -zxvf hbase-1.2.0-bin.tar.gz -C /usr/local/src/

2、配置环境变量


[root@master hbase-1.2.0]# vim /root/.bash_profile

#hbase
export HBASE_HOME=/usr/local/src/hbase-1.2.0
export PATH=$PATH:$HBASE_HOME/bin

[root@master hbase-1.2.0]# source /root/.bash_profile

# 在其他两个节点上重复上述操作

3、 修改配置文件

我们需要修改hbase-env.sh和hbase-site.xml,还有regionservers文件

[root@master hbase-1.2.0]# cd conf/

[root@master conf]# vim hbase-env.sh

export JAVA_HOME=/usr/local/src/jdk1.8.0_121
export HBASE_LOG_DIR=${HBASE_HOME}/logs
export HBASE_MANAGES_ZK=false


[root@master conf]# vim hbase-site.xml

<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>

<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>

<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>

<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/src/zookeeper/data</value>
</property>

<property>
<name>hbase.tmp.dir</name>
<value>/usr/local/src/hbase-1.2.0/data</value>
</property>

<property>
<name>hbase.master</name>
<value>hdfs://master:60000</value>
</property>

<property>
<name>hbase.master.info.port</name>
<value>16010</value>
</property>

<property>
<name>hbase.regionserver.info.port</name>
<value>16030</value>
</property>
</configuration>

[root@master conf]# vim regionservers
master
slave1
slave2

修改完配置文件后,之后创建data文件夹,按上面写的目录创建

4、其他两个子节点的配置

把上面配置好的hbase整个文件夹传过去

[root@master src]# scp -r hbase-1.2.0/ slave1:/usr/local/src/
[root@master src]# scp -r hbase-1.2.0/ slave2:/usr/local/src/

5、测试

注意:测试Hbase之前,zookeeper和hadoop需要提前启动起来

[root@master hbase-1.2.0]# bin/start-hbase.sh 
[root@master hbase-1.2.0]# jps

mark

正确结果:主节点上显示:HMaster / 子节点上显示:HRegionServer

进入192.168.128.160:16010

mark

到此为止,Hbase配置就结束了

九、安装Sqoop

Sqoop是一款在Hadoop和其它关系型数据库之间传递数据的工具。

核心的功能有两个:

导入数据:MySQL,Oracle 导入数据到 Hadoop 的 HDFS、HIVE、HBASE 等数据存储系统;
导出数据:从 Hadoop 的文件系统中导出数据到关系数据库 mysql 等。

1、解压

# 注意:Sqoop只需要在master节点上安装配置

[root@master ~]# cd /usr/local/src/software/
[root@master software]# tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /usr/local/src/

2、配置环境变量

[root@master src]# mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop-1.4.6

[root@master src]# vim /root/.bash_profile

#sqoop
export SQOOP_HOME=/usr/local/src/sqoop-1.4.6
export PATH=$PATH:$SQOOP_HOME/bin

[root@master src]# source /root/.bash_profile


验证环境变量配置是否成功

mark

出现类似上图即成功,如果出现警告信息可以参考这篇文章,需要注释一些配置文件

https://blog.csdn.net/wx1528159409/article/details/87948866

3、修改配置文件

[root@master sqoop-1.4.6]# cd conf/
[root@master conf]# mv sqoop-env-template.sh sqoop-env.sh

[root@master conf]# vim sqoop-env.sh

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/usr/local/src/hadoop-2.6.0

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/usr/local/src/hadoop-2.6.0

#set the path to where bin/hbase is available
export HBASE_HOME=/usr/local/src/hbase-1.2.0

#Set the path to where bin/hive is available
export HIVE_HOME=/usr/local/src/hive

#Set the path for where zookeper config dir is
export ZOOCFGDIR=/usr/local/src/zookeeper/conf

4、上传mysql-connector-java.jar到到sqoop的lib目录

在修改完配置文件后,把mysql的jar包上传的sqoop的lib目录下

也就是在安装hive时使用的jar包

5、验证sqoop连接mysql数据库是否成功

保证mysql数据库正在运行,mysql数据库的配置可以参考这篇博客:https://blog.csdn.net/baidu_32872293/article/details/80557668?tdsourcetag=s_pcqq_aiomsg

将mysql数据库的密码设置为123456

我们输入

sqoop list-databases --connect jdbc:mysql://master:3306 --username root --password 123456

如果连接成功,会返回类似这样的结果

mark

连接成功.

sqoop的安装与测试就到这里了

十、安装Storm

Apache Storm是一个分布式的、可靠的、容错的实时数据流处理框架。它与Spark Streaming的最大区别在于它是逐个处理流式数据事件,而Spark Streaming是微批次处理,因此,它比Spark Streaming更实时。

1、解压

[root@master src]# cd software/
[root@master software]# tar -zxvf apache-storm-1.0.4.tar.gz -C /usr/local/src/
[root@master software]# cd ..
[root@master src]# mv apache-storm-1.0.4/ storm-1.0.4/

2、配置环境变量

[root@master storm-1.0.4]# vim /root/.bash_profile 

#storm
export STORM_HOME=/usr/local/src/storm-1.0.4
export PATH=$PATH:$STORM_HOME/bin

[root@master storm-1.0.4]# source /root/.bash_profile

# 在其他两个节点上重复上述操作

3、 修改配置文件

[root@master storm-1.0.4]# cd conf/
[root@master conf]# vim storm.yaml

storm.zookeeper.servers:
- "master"
- "slave1"
- "slave2"
storm.local.dir: "/usr/local/src/storm-1.0.4/localdir"
storm.zookeeper.port: 2181
nimbus.seeds: ["master"]
ui.host: 0.0.0.0
ui.port: 8080
supervisor.slots.ports:
- 6700
- 6701
- 6702

storm.zookeeper.servers这个参数中写的master,slave1,slave2和zookpeeper配置文件中写的必须一致

storm.local.dir: 这个参数是storm使用的本地文件系统目录(必须存在并且storm进程可读写)

这个可以自己配置,自己选择的文件目录

提一下,细心的读者可能这里发现了ui.port端口是8080端口,而在上文中的spark的网页端端口也是8088,这里我们可以修改spark的网页端口,可以参考这篇文章https://www.iteye.com/blog/daizj-2227382

我在这里把之前的spark端口改为8081

mark

同时创建

本地文件系统目录

[root@master storm-1.0.4]# mkdir localdir

4、其他两个子节点的配置

把上面配置好的storm整个文件夹传过去

[root@master src]# scp -r storm-1.0.4/ slave1:/usr/local/src/
[root@master src]# scp -r storm-1.0.4/ slave2:/usr/local/src/

5、启动

#master上启动nimbus和ui进程
[root@master storm-1.0.4]# storm nimbus &
[1] 8089
[root@master storm-1.0.4]# storm ui &
[2] 8126
[root@master storm-1.0.4]#

当出现这样的信息时

mark

再按下回车

#在slave1和slave2下启动supervisor进程

[root@slave1 storm-1.0.4]# storm supervisor &
[1] 4865


[root@slave2 storm-1.0.4]# storm supervisor &
[1] 3555

mark

mark

出现类似的按下回车

查看jps进程

master上的

mark

slave1上的

mark

slave2上的

mark

master上应该有nimbus节点和core节点,slave1和slave2上应该有supervisor节点

然后打开web端http://192.168.128.160:8080

mark

到这里storm的安装也就完成了

十一、安装Kafka

Kafka是由Apache软件基金会开发的一个开源流处理平台,由ScalaJava编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

1、解压

[root@master ~]# cd /usr/local/src/software/
[root@master software]# tar -zxvf kafka_2.11-1.0.0.tgz -C /usr/local/src/

2、配置环境变量

[root@master software]# cd ..
[root@master src]# mv kafka_2.11-1.0.0/ kafka_2.11
[root@master src]# cd kafka_2.11/
[root@master kafka_2.11]# vim /root/.bash_profile


#kafka
export KAFKA_HOME=/usr/local/src/kafka_2.11
export PATH=$PATH:$KAFKA_HOME/bin

[root@master kafka_2.11]# source /root/.bash_profile

# 在其他两个节点上重复上述操作


3、修改配置文件




[root@master kafka_2.11]# cd config/
[root@master config]# vim server.properties

broker.id=0
listeners=PLAINTEXT://192.168.128.160:9092
advertised.listeners=PLAINTEXT://192.168.128.160:9092
zookeeper.connect=192.168.128.160:2181,192.168.128.161:2181,192.168.128.162:2181



# 而在另外两个节点上,对server.properties要有几处修改
# broker.id 分别修改成: 1 和 2
# listeners 在ip那里分别修改成子节点对应的,即 PLAINTEXT://192.168.128.161:9092 和 PLAINTEXT://192.168.128.162:9092
# advertised.listeners 也在ip那里分别修改成子节点对应的,即 PLAINTEXT://192.168.128.161:9092 和 PLAINTEXT://192.168.128.162:9092
# zookeeper.connect 不需要修改

然后在剩下两个子节点中重复上述步骤!

4、启动测试

kafka在启动之前一定要启动zookpeeper,否则启动kafka会报错.

[root@master kafka_2.11]# bin/kafka-server-start.sh config/server.properties &

[root@slave1 kafka_2.11]# bin/kafka-server-start.sh config/server.properties &

[root@slave2 kafka_2.11]# bin/kafka-server-start.sh config/server.properties &

mark

kafka节点已经启动

启动后,我们开始测试,在master上输入

kafka-topics.sh --zookeeper 192.168.128.160:2181,192.168.128.161:2181,192.168.128.162:2181 --topic Test --replication-factor 1 --partitions 1 --create

创建test主题

mark

创建主题Test成功

创建成功后在master上输入

[root@master kafka_2.11]# kafka-console-producer.sh --broker-list 192.168.128.160:9092,192.168.128.161:9092,192.168.128.162:9092 --topic Test

之后

启动生产者

[root@slave1 kafka_2.11]# kafka-console-consumer.sh --bootstrap-server 192.168.128.161:9092 --topic Test --from-beginning


[root@slave2 kafka_2.11]# kafka-console-consumer.sh --bootstrap-server 192.168.128.162:9092 --topic Test --from-beginning

之后在主节点上的命令行上输入一句话,例如:hello,如果成功的话,应该是这样的,如图:

mark

在主节点上输入的,会自动同步在其他两台节点上

这里我们的kafka也就搭建完成了。

关闭kafka方法,在命令行下,按ctrl加c,退出命令行,输入

[root@master kafka_2.11]# bin/kafka-server-stop.sh

[root@slave1 kafka_2.11]# bin/kafka-server-stop.sh

[root@slave2 kafka_2.11]# bin/kafka-server-stop.sh

应该会得到类似提示

mark

按回车。

即可退出

我们可以使用jps查看一下当前进程

mark

kafka进程已经停止了

就代表kafka已经关闭了