前言
本文是对于前面一段时间学习的总结,可能会有点长,本文可能搭建各种可能会用到的环境的基本步骤,包括:Hadoop,Hive,Zookeeper,Kafka,Hbase,Spark,Storm,Sqoop等。在实际应用中可能未必需要用到所有的这些,请读者们按需取舍。
注意:因为有些环境之间存在相互依赖,所以在搭建环境或者使用其的过程中要注意顺序。比如说Hive是依赖于Hadoop的,搭建使用Hive前,Hadoop集群肯定要提前搭建好并启动起来;搭建使用Hbase时,由于其依赖于Hadoop和Zookeeper,所以需要提前搭建并启动好Hadoop和ZooKeeper集群。一定要注意!
系统说明
节点
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
修改完记得重启网络
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>
export JAVA_HOME=/usr/local/src/jdk1.8.0_121
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
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上的节点
slave1上的节点
slave2上的节点
在浏览器上访问可视化页面:http://192.168.128.160:50070/
到此为止,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
在文件中修改datadir的路径和添加server的配置
例如可以改为
同时创建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上
slave1上
slave2上
这里可以看出我们的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
格式化成功
显示格式化成功后,我们启动master上的NameNode
sbin/hadoop-daemon.sh start namenode
启动成功后,在slave1上进行元数据的同步
在slave1的hadoop文件夹下输入
bin/hdfs namenode -bootstrapStandby
如图显示同步成功后:
把master上的NameNode关闭
关闭master上的NameNode后,我们还需要初始化zookpeeper的状态
我们看到如图所示的时候代表初始化成功:
测试
当我们上面的步骤都完成后,我们可以开始启动集群进行测试HA环境的搭建是否成功
先在master上启动所有节点
之后我们还需要手动启动jobhistoryserver
sbin/mr-jobhistory-daemon.sh start historyserver
然后在slave1上我们还布置了一个resourcemanager,这个也是在start-all.sh时无法启动,我们需要在slave1下自行启动
在slave1的hadoop目录下,执行
sbin/yarn-daemon.sh start resourcemanager
这就是启动HadaoopHA上要启动的节点
master上的
slave1上的
slave2的
我们看下web端的显示信息
现在在活动的节点是slave1上的namenode,resourcemanager我们可以手动kill掉,看看故障是否会自动转移,实现ha的基本意义
kill掉slave1上的namenode,查看网页端
发现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
显示如下就是成功
这样
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,则成功
到这里,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状态
slave1与slave2处于均是STANDBY状态
跑了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
成功了
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
正确结果:主节点上显示:HMaster / 子节点上显示:HRegionServer
进入192.168.128.160:16010
到此为止,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
验证环境变量配置是否成功
出现类似上图即成功,如果出现警告信息可以参考这篇文章,需要注释一些配置文件
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
如果连接成功,会返回类似这样的结果
连接成功.
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
同时创建
本地文件系统目录
[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]#
当出现这样的信息时
再按下回车
#在slave1和slave2下启动supervisor进程 [root@slave1 storm-1.0.4]# storm supervisor & [1] 4865 [root@slave2 storm-1.0.4]# storm supervisor & [1] 3555
出现类似的按下回车
查看jps进程
master上的
slave1上的
slave2上的
master上应该有nimbus节点和core节点,slave1和slave2上应该有supervisor节点
然后打开web端http://192.168.128.160:8080
到这里storm的安装也就完成了
十一、安装Kafka
Kafka 是由Apache软件基金会 开发的一个开源流处理平台,由Scala 和Java 编写。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 &
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主题
创建主题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,如果成功的话,应该是这样的,如图:
在主节点上输入的,会自动同步在其他两台节点上
这里我们的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
应该会得到类似提示
按回车。
即可退出
我们可以使用jps查看一下当前进程
kafka进程已经停止了
就代表kafka已经关闭了