大数据实验环境搭建
一、实验简介
1.1 实验内容
本次实训是基于国产化操作系统openEuler上搭建大数据学习环境,实验主要内容分为两部分:
- 环境搭建,具体包括:
- Hadoop的分布式环境
- Spark分布式环境
- Zookeeper分布式环境
- HBase分布式环境
- Flume单机环境
- Hive单机环境
- Sqoop单机环境
- 大数据组件的基本用法
1.2 环境及其资源规划
-
所需软件
软件 说明 VMware workstation 16 虚拟机软件 Hadoop 版本为 2.7.4 HBase 版本为 1.4.8 Spark 版本为 2.3.2 Zookeeper 版本为 3.4.5 Hive 版本为 2.3.3 Flume 版本为 1.9.0 Sqoop 版本为 1.4.7 JDK 版本为 1.8+ -
拓扑图
三台虚拟机构建一个全分布式的环境,拓扑图如下:
主从节点上各自运行的进程分布规划:
节点类型 资源规划 主要组件名称 主要进程名称 主节点 至少4GB内存 2vCPU Hadoop、Spark、HBase、Zookeeper、Flume NameNode、SecondaryNameNode、DataNode、ResourceManager、NodeManager、HMatster、HRegionServer、QuorumPeerMain、Bootstrap、Master、Worker 从节点 至少2GB内存 1vCPU Hadoop、Spark、HBase、Zookeeper DataNode、NodeManager、HRegionServer、Worker、QuorumPeerMain
二、实验目的
本次实验的目的是希望学生能够从零开始搭建一套用于学习的大数据环境,包括Hadoop、HBase、Spark等分布式环境。
三、实验过程
3.1 安装虚拟机软件及操作系统
请自行参考如下资料进行操作,确保虚拟机及操作系统正常安装
- 安装虚拟机VMware或者VirtualBox
可以参考我另外一篇博客: Linux基础之虚拟机的创建 - 创建虚拟机和安装操作系统openEuler或者CentOS7
可以参考我另外一篇博客:在VMware上虚拟机上安装CentOS-7操作系统
这里选择安装openEuler,具体步骤如下:-
创建虚拟机
-
安装操作系统
然后确定。最后,启动虚拟机,进行操作系统的安装。
启动后,选择如下选项,选择好后,回车:
之后,等待一小会儿,就会出现如下界面,保持默认,点击continue按钮:
然后进入下一个界面,如下图所示,其中红色框框起来的部分是需要进行修配置的:
安装上图顺序,先从序号为1的地方开始,点击Installation Destination,进入配置页面,如下图所示,只需要点击Done按钮即可:
然后点击序号为2的部分,进入配置页面,如下图所示:
然后点击序号为3的部分,进入配置页面,如下图所示:
然后点击序号为4的部分,进入配置页面,如下图所示:
上述4个地方都配置后,就可以点击Begin Installation按钮了,如下图所示:
接下来就是比较漫长的等待过程了,这个过程估计5-15分钟左右不等。
当安装结束后,点击Reboot System
按钮重启下系统:
系统如正常启动,就会显示登录的交互式界面,然后你输入root以及对应的密码即可正常进入到系统中了。
到此,openEuler22.03版本的操作系统已经被正常的安装。 -
克隆出另外两台虚拟机
我们需要三台虚拟机,另外两台虚拟机就可以利用VMWare Workstation软件的克隆功能,以之前新建好的虚拟机作为克隆的对象即可。具体操作如下:- 先将新建好的虚拟机关机,然后再进行克隆
- 重复上述操作,然后再次克隆出s3虚拟机出来。
- 修改新克隆出来的虚拟机s2和s3的内存大小和CPU核心数
- 先将新建好的虚拟机关机,然后再进行克隆
-
- 将三台虚拟机按顺序启动,设置静态IP地址
- 登录s1虚拟机中,设置静态IP地址:
进入网卡配置文件所在目录:
编辑网卡配置文件:cd /etc/sysconfig/network-scripts/
按照如下图所示,进行设置:vim ifcfg-ens33
为方便将上图所示内容进行复制后修改,提供如下内容作为参考,大家根据自己虚拟机实际IP地址进行修改即可:
最后,重启网卡:BOOTPROTO=static IPADDR=192.168.85.142 NETMASK=255.255.255.0 GATEWAY=192.168.85.2 DNS1=192.168.85.2 DNS2=114.114.114.114
重启命令为:
效果如下:ifdown ens33 # 停止,ens33是网卡名称 ifup ens33 # 启动
- 登录s2和s3,按照上述相同的操作设置:
- 将s2的IP地址设置成: 192.168.85.143
- 将s3的IP地址设置成: 192.168.85.144
- 登录s1虚拟机中,设置静态IP地址:
3.2 创建安装目录(在主节点上操作)
-
连接虚拟机:使用MobaXterm工具连接到刚刚创建的好的虚拟机
输入密码,当输入密码时界面上没有任何反应上正常的,只要输入正确后,按回车即可正常登录系统中了:
后续实验涉及到利用该工具连接虚拟机,可按照这个方法登录即可。
-
创建必要的目录:在所有主机上的根目录/下创建tools和mysoft两个目录
mkdir /tools mkdir /mysoft
执行成功如下:
-
上传安装包:利用MobXtrem工具上传jdk、hadoop等安装包到/tools目录下
上传成功后,会在这里看到:
后续实验涉及到的其他的安装包按照这种方式自行上传即可。
3.2 安装JDK及基本设置(所有节点都需要操作)
-
设置虚拟机主机名
先登录s2虚拟机,然后执行如下命令:# 设置s2的主机名称 hostnamectl --static set-hostname s2 exit
再登录s3虚拟机,然后执行如下命令:# 设置s3的主机名称 hostnamectl --static set-hostname s3 exit
-
JDK的安装
- 分别登录s1、s2、s3三台虚拟机,然后在各自的节点上执行如下操作:
这里我以s1节点为例子进行说明,其他两个节点执行相同操作即可。
- 进入tools目录,然后执行下面的命令进行解压安装
cd /tools tar -zvxf jdk-8u171-linux-x64.tar.gz -C /mysoft/
- 配置环境变量,执行:
在.bash_profile文件中添加如下信息:vim ~/.bash_profile
export JAVA_HOME=/mysoft/jdk1.8.0_171 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin;
- 让环境变量生效
source ~/.bash_profile
- 验证jdk是否安装成功
结果如下:java -version
[root@s1 tools]# java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode) [root@s1 tools]#
其他s2和s3需要执行上述相同的操作。
- 分别登录s1、s2、s3三台虚拟机,然后在各自的节点上执行如下操作:
-
虚拟机中配置主机名与ip地址的映射关系
- 所有主机都需要配置主机名映射关系,编辑hosts文件,执行:
在文件末尾添加如下内容,注意:vim /etc/hosts
IP地址改成你自己环境的IP地址
:
效果如下:192.168.85.142 s1 192.168.85.143 s2 192.168.85.144 s3
- 所有主机都需要配置主机名映射关系,编辑hosts文件,执行:
-
关闭防火墙
-
所有主机都需要关闭防火墙,每台节点都需要执行命令:
systemctl stop firewalld.service systemctl disable firewalld.service
效果如下所示:
-
-
配置免密码登录
-
所有主机都需要生成密钥对并将公钥分发给其他节点,每台节点都需要执行命令:
生成密钥对:cd /root ssh-keygen -t rsa # 执行命令后,只需敲三次回车键
效果如下:
三台虚拟机上都需要执行如下命令:在执行命令时需要先输入
yes
,然后输入对于节点的密码:ssh-copy-id -i .ssh/id_rsa.pub root@s1 ssh-copy-id -i .ssh/id_rsa.pub root@s2 ssh-copy-id -i .ssh/id_rsa.pub root@s3
在
s1
虚拟机上执行的效果如下(s2和s3上也需要执行相同的命令
):
当三台虚拟机都执行完成后,可以验证一下是否可以从s1通过ssh协议登录到s2,执行如下命令:ssh s2
如能正常登录的话,会如下图所示:
-
3.3 安装Hadoop
以下操作只需在主节点s1上执行如下操作,如有特殊说明的请注意按照要求进行执行。
-
上传hadoop-2.7.4.tar.gz到/tools目录下
执行下面的命令进行解压安装tar -zvxf /tools/hadoop-2.7.4.tar.gz -C /mysoft/ mv /mysoft/hadoop-2.7.4 /mysoft/hadoop
-
配置环境变量:
vim ~/.bash_profile
添加如下信息:
export HADOOP_HOME=/mysoft/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
-
让环境变量生效:
source ~/.bash_profile
-
验证是否生效:
执行:hdfs version
效果如下:[root@s1 tools]# hdfs version Hadoop 2.7.4 Subversion https://shv@git-wip-us.apache.org/repos/asf/hadoop.git -r cd915e1e8d9d0131462a0b7301586c175728a282 Compiled by kshvachk on 2017-08-01T00:29Z Compiled with protoc 2.5.0 From source with checksum 50b0468318b4ce9bd24dc467b7ce1148 This command was run using /mysoft/hadoop/share/hadoop/common/hadoop-common-2.7.4.jar [root@s1 tools]#
-
新建tmp目录:
进入到hadoop安装目录下,执行:mkdir /mysoft/hadoop/tmp
-
配置Hadoop配置文件
只需对五个配置文件进行配置即可:
hadoop-env.sh hdfs-site.xml core-site.xml mapred-site.xml yarn-site.xml
配置文件所在目录:
/mysoft/hadoop/etc/hadoop
-
配置 hadoop-env.sh文件
编辑该文件,执行:vim /mysoft/hadoop/etc/hadoop/hadoop-env.sh
找到JAVA_HOME所在地方,将
${JAVA_HOME}
改成/mysoft/jdk1.8.0_171
:export JAVA_HOME=/mysoft/jdk1.8.0_171
-
配置 hdfs-site.xml
编辑该文件,执行:vim /mysoft/hadoop/etc/hadoop/hdfs-site.xml
在
<configuration></configuration>
之间添加<property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property>
效果如下:
-
配置 core-site.xml
编辑该文件,执行:vim /mysoft/hadoop/etc/hadoop/core-site.xml
在
<configuration></configuration>
之间添加<property> <name>fs.defaultFS</name> <value>hdfs://s1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/mysoft/hadoop/tmp</value> </property>
效果如下:
-
配置 mapred-site.xml
编辑该文件,执行:cp /mysoft/hadoop/etc/hadoop/mapred-site.xml.template /mysoft/hadoop/etc/hadoop/mapred-site.xml vim /mysoft/hadoop/etc/hadoop/mapred-site.xml
在
<configuration></configuration>
之间添加<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>s1:10020</value> </property> <!-- 历史服务器 web 端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>s1:19888</value> </property>
-
配置 yarn-site.xml
编辑该文件,执行:vim /mysoft/hadoop/etc/hadoop/yarn-site.xml
在
<configuration></configuration>
之间添加<!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.hostname</name> <value>s1</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 设置内存 --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>1600</value> </property> <!-- 设置cpu 核数 --> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>1</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> <!--配置Log Server --> <property> <name>yarn.log.server.url</name> <value>http://s1:19888/jobhistory/logs</value> </property>
-
修改slaves文件,将原来的内容删除掉,然后添加如下内容:
编辑该文件,执行:vim /mysoft/hadoop/etc/hadoop/slaves
添加如下内容:
s1 s2 s3
-
格式化:HDFS
执行命令:hdfs namenode -format
如格式化成功,在打印出来的日志可以看到如下信息:
…… Storage directory /mysoft/hadoop/tmp/dfs/name has been successfully formatted. ……
-
分发到从节点
将上述配置好后的环境即hadoop整个目录分别远程复制到其他两台从节点上(s2,s3)上,在s1节点上执行如下命令:scp -r /mysoft/hadoop/ root@s2:/mysoft/ scp -r /mysoft/hadoop/ root@s3:/mysoft/
-
分别在s2和s3两个节点上配置hadoop环境变量:
vim ~/.bash_profile
添加如下信息:
export HADOOP_HOME=/mysoft/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
让环境变量生效:
source ~/.bash_profile
-
在主节点(s1)上启动Hadoop集群
启动hadoop集群服务 :start-all.sh
效果如下:
-
验证:
首先在 web界面进行验证,浏览器分别访问如下地址:
访问HDFS:http://IP(s1的IP地址):50070
,正常会看到如下界面
访问Yarn:
http://IP(s1的IP地址):8088
,正常会看到如下界面
然后,在主机点
s1
上执行jps
命令,正常情况下会有如下进程:NameNode DataNode SecondaryNameNode ReourceManager NodeManager
最后,在两台从节点(s2和s3)上执行jps命令,正常情况下会有如下进程:
DataNode NodeManager
如需要关闭hadoop集群,在s1主节点上执行:
stop-all.sh
至此,Hadoop全分布式环境已经全部搭建完成,大家试试看吧!
3.4 安装Zookeeper
以下操作只需要在s1主节点
上进行操作,有特别说明的除外:
-
上传zookeeper-3.4.5.tar.gz到/tools目录下
-
解压安装
cd /tools tar -zvxf zookeeper-3.4.5.tar.gz -C /mysoft/ mv /mysoft/zookeeper-3.4.5 /mysoft/zookeeper
-
配置环境变量(
所有节点都需要配置
)
编辑~/.bash_profile文件:vim ~/.bash_profile
在文件尾部添加如下内容:
export ZK_HOME=/mysoft/zookeeper export PATH=$PATH:$ZK_HOME/bin
-
创建临时目录tmp和myid文件
在zookeeper安装路径下创建tmp目录,用于存储临时文件:mkdir /mysoft/zookeeper/tmp
在/mysoft/zookeeper/tmp目录下创建一个myid的空文件:
echo 1 > /mysoft/zookeeper/tmp/myid
-
配置zoo.cfg文件
该文件并不存在,需要从模板文件复制:cp /mysoft/zookeeper/conf/zoo_sample.cfg /mysoft/zookeeper/conf/zoo.cfg
编辑zoo.cfg:
vim /mysoft/zookeeper/conf/zoo.cfg
然后将zoo.cfg内容中的
dataDir
的值改成/mysoft/zookeeper/tmp
dataDir=/mysoft/zookeeper/tmp
在zoo.cfg的末尾,再添加如下内容:
server.1=s1:2888:3888 server.2=s2:2888:3888 server.3=s3:2888:3888
效果如下:
-
分发安装包
将配置好的zookeeper拷贝到s2和s3两个节点上:scp -r /mysoft/zookeeper/ s2:/mysoft/ scp -r /mysoft/zookeeper/ s3:/mysoft/
-
修改s2节点上的myid
登录s2节点
上,修改myid内容为2:echo 2 > /mysoft/zookeeper/tmp/myid
-
修改s3节点上的myid
登录s3节点
上,修改myid内容为3:echo 3 > /mysoft/zookeeper/tmp/myid
-
让所有节点环境变量生效
在所有节点
上都需要执行让环境变量生效的命令:source ~/.bash_profile
-
在所有节点上启动zookeeper
在所有节点
上都需要执行启动命令,执行:zkServer.sh start
效果如下图所示:
-
在所有节点上检查zookeeper启动状态
在所有节点
上都需要执行启动命令,执行:zkServer.sh status
效果如下:
-
如果需要停止zookeeper集群,则需在
所有节点
上执行:zkServer.sh stop
3.5 安装HBase
以下没有特殊说明的情况下,在s1主节点
上进行配置,有特殊说明按照说明进行:
-
上传hbase-1.4.8-bin.tar.gz到/tools目录下
-
解压安装
cd /tools tar -zvxf hbase-1.4.8-bin.tar.gz -C /mysoft/ mv /mysoft/hbase-1.4.8 /mysoft/hbase
-
配置环境变量(
三台节点都需要配置
)
编辑:vim ~/.bash_profile
添加如下内容:
export HBASE_HOME=/mysoft/hbase export PATH=$HBASE_HOME/bin:$PATH
-
修改配置文件
-
修改
hbase-env.sh
配置文件:vim /mysoft/hbase/conf/hbase-env.sh
找到
# export JAVA_HOME=/usr/java/jdk1.6.0/
这句代码,将#号
去掉,将/usr/java/jdk1.6.0改成你自己的JAVA_HOME路径。修改好之后的样子为:export JAVA_HOME=/mysoft/jdk1.8.0_171
找到# export HBASE_MANAGES_ZK=true
, 将#号
去掉,然后将true
改成false
。
按照下图所示,用#号
注释掉如下两行代码即可:
-
修改
hbase-site.xml
配置文件:
编辑:vim /mysoft/hbase/conf/hbase-site.xml
在
<configuration></configuration>
之间添加配置内容:<!--HBase的数据保存在HDFS对应目录,hadoop是全分布式--> <property> <name>hbase.rootdir</name> <value>hdfs://s1:9000/hbase</value> </property> <!--是否是分布式环境--> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!--配置ZK的地址--> <property> <name>hbase.zookeeper.quorum</name> <value>s1,s2,s3</value> </property> <!--冗余度--> <property> <name>dfs.replication</name> <value>3</value> </property> <!--主节点和从节点允许的最大时间误差--> <property> <name>hbase.master.maxclockskew</name> <value>180000</value> </property>
-
修改
regionservers
配置文件:
编辑:vim /mysoft/hbase/conf/regionservers
将localhost删除掉,再添加如下内容:
s1 s2 s3
-
-
分发HBase安装目录
将/mysoft/hbase
整个目录复制到其他两个从节点上:scp -r /mysoft/hbase/ root@s2:/mysoft/ scp -r /mysoft/hbase/ root@s3:/mysoft/
-
让所有节点环境变量生效
在所有节点
上都需要执行让环境变量生效的命令:source ~/.bash_profile
-
启动HBase
特别注意:
启动HBase之前,必须确保hadoop集群、zookeeper集群已经事先启动了。如没有启动hadoop和zookeeper,需要先启动这两个组件。否则,HBase将启动失败。
在
s1主节点
上启动HBase:start-hbase.sh
-
检查HBase的启动状态
- 使用jps命令查看,是否已经启动了如下进程,如果进程存在,则说明安装配置hbase成功了:
从节点:HRegionServer
主节点:HMaster
- 登录http://IP(s1的IP):16010地址查看HBase的Web页面是否正常打开:
- 使用jps命令查看,是否已经启动了如下进程,如果进程存在,则说明安装配置hbase成功了:
3.6 安装Spark
以下没有特殊说明的情况下,在s1主节点
上进行配置,有特殊说明按照说明进行:
-
上传spark-2.3.2-bin-hadoop2.7.tgz到/tools目录下
-
解压安装
cd /tools tar -zvxf spark-2.3.2-bin-hadoop2.7.tgz -C /mysoft/ mv /mysoft/spark-2.3.2-bin-hadoop2.7 /mysoft/spark
-
修改配置文件
- 修改spark-env.sh
编辑:
修改如下内容:mkdir /mysoft/spark/history cp /mysoft/spark/conf/spark-env.sh.template /mysoft/spark/conf/spark-env.sh vim /mysoft/spark/conf/spark-env.sh
export JAVA_HOME=/mysoft/jdk1.8.0_171 export SPARK_MASTER_HOST=s1 export SPARK_MASTER_PORT=7077 #history 配置历史服务 export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=file:///mysoft/spark/history"
- 修改slaves
编辑:
将localhost先删除,然后添加如下内容:cp /mysoft/spark/conf/slaves.template /mysoft/spark/conf/slaves vim /mysoft/spark/conf/slaves
s1 s2 s3
- 修改spark-defaults.conf
编辑:
在末尾添加如下内容:mkdir /mysoft/spark/logs cp /mysoft/spark/conf/spark-defaults.conf.template /mysoft/spark/conf/spark-defaults.conf vim /mysoft/spark/conf/spark-defaults.conf
spark.eventLog.enabled true spark.eventLog.dir /mysoft/spark/logs
- 修改spark-env.sh
-
分发spark目录
将/mysoft/spark
整个目录复制到其他两个从节点上:scp -r /mysoft/spark/ root@s2:/mysoft/ scp -r /mysoft/spark/ root@s3:/mysoft/
-
启动Spark集群
在s1主节点
,执行启动命令:/mysoft/spark/sbin/start-all.sh
效果如下:
-
检查Spark集群状态
-
执行jps命令,验证进程:
-
访问SparkUI界面:http://IP(s1的IP):8080
-
3.7 安装Hive
Hive默认的元数据存储是Derby,在测试时使用。由于生成环境中需要使用其他的存储系统替换Derby数据库,以支持高并发场景。故,这里我们需要安装MySQL来作为Hive元数据存储系统。接下来,需先安装MySQL,然后再安装hive。以下操作是在s1主节点
上操作:
-
安装MySQL(这里安装MySQL5.7)
- 以root用户执行如下命令,使用yum来简单安装MySQL5.7+:
注意:安装成功后,root用户密码默认为空# 用yum查询目前操作系统下yum仓库中支持的MySQL版本,目前该仓库只支持MySQL5 yum search mysql # 利用yum来安装MySQL5 yum install mysql5-server.x86_64 -y
启动MySQL服务:
启动成功后,查看下MySQL的运行状态,如下图所示:systemctl start mysqld
- 修改root默认密码为123456,并授权允许root用户远程访问,执行如下命令:
效果如下图所示:[root@s1 ~]# 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.21 MySQL Community Server (GPL) Copyright (c) 2000, 2018, 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> alter user 'root'@'localhost' identified by '123456'; # 修改MySQL密码为123456 Query OK, 0 rows affected (0.00 sec) mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; # 修改允许root用户远程登录MySQL Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> exit; Bye
- 创建用于存储hive元数据的数据库
重新登录MySQL:
创建名为hive的database:mysql -uroot -p123456
效果如下:CREATE DATABASE hive CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 以root用户执行如下命令,使用yum来简单安装MySQL5.7+:
-
安装Hive
-
上传apache-hive-2.3.3-bin.tar.gz到/tools目录下
-
解压安装
cd /tools tar -zvxf apache-hive-2.3.3-bin.tar.gz -C /mysoft/ mv /mysoft/apache-hive-2.3.3-bin /mysoft/hive
-
配置环境变量
编辑:vim ~/.bash_profile
添加如下内容:
export HIVE_HOME=/mysoft/hive export PATH=$HIVE_HOME/bin:$PATH
让环境变量生效:
source ~/.bash_profile
-
新增hive-site.xml配置文件
编辑:vim /mysoft/hive/conf/hive-site.xml
添加如下内容:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://s1:3306/hive?useSSL=false</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> </property> </configuration>
-
上传MySQL驱动到hive安装路径下的/lib目录下
注意一定要使用高版本的MySQL驱动(5.1.43以上的版本)
-
初始化MySQL
以root用户执行如下命令:schematool -dbType mysql -initSchema
效果如下:
-
验证Hive是否可用
需保证hadoop集群处于正常运行状态
,可参考hadoop实验需保证MySQL是处于正常运行状态
hadoop正常和MySQL正常运行状态下,进行如下测试
:
在s1主节点上,执行如下命令:
正常情况下,如下图所示:hive # 回车即可
-
启动hiveserver2服务(
可选做
)
该服务用于支持其他程序连接到Hive中,且可以使用beeline进行操作,便于写SQL。
以后台方式启动,执行:hive --service hiveserver2 &
效果如下:
使用beeline命令登录hive的验证:beeline -u jdbc:hive2://s1:10000 -n root
如果报错:
beeline> !connect jdbc:hive2://s1:10000 Connecting to jdbc:hive2://s1:10000 Enter username for jdbc:hive2://s1:10000: root Enter password for jdbc:hive2://s1:10000: ****** 24/12/10 16:48:56 [main]: WARN jdbc.HiveConnection: Failed to connect to s1:10000 Error: Could not open client transport with JDBC Uri: jdbc:hive2://s1:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate root (state=08S01,code=0) beeline>
则需要配置hadoop安装目录下/mysoft/hadoop/etc/hadoop/core-site.xml,加入如下配置:
<property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property>
还需要修改/mysoft/hadoop/etc/hadoop/hdfs-site.xml,添加如下:
<property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property>
重启hadoop集群与hive的hiveserver2服务,再重新使用beeline连接:
先停止:
再次启动hadoop和hiveserver2:start-all.sh hive --service hiveserver2 &
效果如下:
此时,再次使用beeline重新登录,正常登录的效果如下
:
-
3.8 安装Flume
以下操作均在s1主节点
上进行操作:
-
上传apache-flume-1.9.0-bin.tar.gz到/tools目录下
-
解压安装
cd /tools tar -zvxf apache-flume-1.9.0-bin.tar.gz -C /mysoft/ mv /mysoft/apache-flume-1.9.0-bin /mysoft/flume
-
配置环境变量
编辑:vim ~/.bash_profile
添加如下内容:
export FLUME_HOME=/mysoft/flume export PATH=$PATH:$FLUME_HOME/bin
让环境变量生效:
source ~/.bash_profile
-
验证Flume环境是否正常
flume-ng version
正常情况下,会打印如下内容:
[root@s1 mysoft]# flume-ng version Flume 1.9.0 Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git Revision: d4fcab4f501d41597bc616921329a4339f73585e Compiled by fszabo on Mon Dec 17 20:45:25 CET 2018 From source with checksum 35db629a3bda49d23e9b3690c80737f9 [root@s1 mysoft]#
-
入门小案例测试Flume功能正常与否
本案例是通过在s1节点
上安装NetCat工具(简称nc),然后由nc发送数据,最后由部署在s1节点
中的flume接收数据。具体步骤如下:-
在
s1节点
上安装ncyum install nc -y
-
在
s1节点
上创建flume配置文件
新建配置文件:nc-to-flume.confvim /mysoft/flume/conf/nc-to-flume.conf
添加如下内容:
#声明Agent三种组件 a1.sources = r1 a1.channels = c1 a1.sinks = k1 #定义source信息 a1.sources.r1.type=netcat a1.sources.r1.bind=s1 a1.sources.r1.port=8888 #定义sink信息 a1.sinks.k1.type=logger #定义channel信息 a1.channels.c1.type=memory #绑定在一起 a1.sources.r1.channels=c1 a1.sinks.k1.channel=c1
-
在
s1节点
上启动flumeflume-ng agent -f /mysoft/flume/conf/nc-to-flume.conf -n a1 -Dflume.root.logger=INFO,console
启动成功后,当前会话会处于类似卡死的状态,这是因为当前flume是以前台方式启动,属于正常现象,启动效果如下图所示:
-
重新打开一个SSH会话连接到
s1节点
,然后在s1节点
上启动nc客户端,发送数据:nc s1 8888
并输入数据,如hello world
此时观察另外flume启动的窗口是否能接收到数据,正常如下图所示:
到此,flume采集nc的数据实验到此结束,大家可以自行测试。
-
-
入门案例2:监听日志目录,将其采集到HDFS上
-
将hadoop-2.7.4安装路径下的依赖的jar导入到/apache-flume-1.9.0-bin/lib下:
share/hadoop/common/hadoop-common-2.7.4.jar share/hadoop/common/lib/commons-configuration-1.6.jar share/hadoop/common/lib/hadoop-auth-2.7.4.jar share/hadoop/hdfs/hadoop-hdfs-2.7.4.jar share/hadoop/common/lib/htrace-core-3.1.0-incubating.jar share/hadoop/common/lib/commons-io-2.4.jar
可以执行如下命令:
cp /training/hadoop-2.7.4/share/hadoop/common/hadoop-common-2.7.4.jar /training/apache-flume-1.9.0-bin/lib/ cp /training/hadoop-2.7.4/share/hadoop/common/lib/commons-configuration-1.6.jar /training/apache-flume-1.9.0-bin/lib/ cp /training/hadoop-2.7.4/share/hadoop/common/lib/hadoop-auth-2.7.4.jar /training/apache-flume-1.9.0-bin/lib/ cp /training/hadoop-2.7.4/share/hadoop/hdfs/hadoop-hdfs-2.7.4.jar /training/apache-flume-1.9.0-bin/lib/ cp /training/hadoop-2.7.4/share/hadoop/common/lib/htrace-core-3.1.0-incubating.jar /training/apache-flume-1.9.0-bin/lib/ cp /training/hadoop-2.7.4/share/hadoop/common/lib/commons-io-2.4.jar /training/apache-flume-1.9.0-bin/lib/
-
配置Flume HDFS Sink:
在/training/apache-flume-1.9.0-bin/conf/新建一个flume-hdfs.conf
添加如下内容:# define the agent a1.sources=r1 a1.channels=c1 a1.sinks=k1 # define the source #上传目录类型 a1.sources.r1.type=spooldir a1.sources.r1.spoolDir=/training/nginx/logs/flumeLogs #定义自滚动日志完成后的后缀名 a1.sources.r1.fileSuffix=.FINISHED #根据每行文本内容的大小自定义最大长度4096=4k a1.sources.r1.deserializer.maxLineLength=4096 # define the sink a1.sinks.k1.type = hdfs #上传的文件保存在hdfs的/flumeLogs目录下 a1.sinks.k1.hdfs.path = hdfs://bigdata:9000/flumeLogs/%y-%m-%d/%H/%M/%S a1.sinks.k1.hdfs.filePrefix=access_log a1.sinks.k1.hdfs.fileSufix=.log a1.sinks.k1.hdfs.batchSize=1000 a1.sinks.k1.hdfs.fileType = DataStream a1.sinks.k1.hdfs.writeFormat= Text # roll 滚动规则:按照数据块128M大小来控制文件的写入,与滚动相关其他的都设置成0 #为了演示,这里设置成500k写入一次 a1.sinks.k1.hdfs.rollSize= 512000 a1.sinks.k1.hdfs.rollCount=0 a1.sinks.k1.hdfs.rollInteval=0 #控制生成目录的规则:一般是一天或者一周或者一个月一次,这里为了演示设置10秒 a1.sinks.k1.hdfs.round=true a1.sinks.k1.hdfs.roundValue=10 a1.sinks.k1.hdfs.roundUnit= second #是否使用本地时间 a1.sinks.k1.hdfs.useLocalTimeStamp=true #define the channel a1.channels.c1.type = memory #自定义event的条数 a1.channels.c1.capacity = 500000 #flume事务控制所需要的缓存容量1000条event a1.channels.c1.transactionCapacity = 1000 #source channel sink cooperation a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1
注意:- 需要先在/training/nginx/logs/创建flumeLogs
- 需要在hdfs的根目录/下创建flumeLogs -
修改conf/flume-env.sh(该文件事先是不存在的,需要复制一份)
复制:cp flume-env.template.sh flume-env.sh
编辑文件,并设置如下内容:
#设置JAVA_HOME: export JAVA_HOME = /training/jdk1.8.0_171 #修改默认的内存: export JAVA_OPTS="-Xms1024m -Xmx1024m -Xss256k -Xmn2g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit"
-
启动flume
- 测试数据:把 /training/nginx/logs/access.log 复制到
/training/nginx/logs/flumeLogs/access_201904251200.log - 启动
在/training/apache-flume-1.9.0-bin目录下,执行如下命令进行启动:bin/flume-ng agent --conf ./conf/ -f ./conf/flume-hdfs.conf --name a1 -Dflume.root.logger=INFO,console
- 到Hadoop的控制台http://bigdata:50070/flumeLogs 查看有没有数据
- 编写Linux脚本rollingLog.sh,实现/training/nginx/logs/access.log日志的自动滚动到flumeLogs目录下
- 在~目录下新建rollingLog.sh,并添加如下内容:
#!/bin/bash #定义日期格式 dataformat=`date +%Y-%m-%d-%H-%M-%S` #复制access.log并重命名 cp /training/nginx/logs/access.log /training/nginx/logs/access_$dataformat.log host=`hostname` sed -i 's/^/'${host}',&/g' /training/nginx/logs/access_$dataformat.log #统计日志文件行数 lines=`wc -l < /training/nginx/logs/access_$dataformat.log` #将格式化的日志移动到flumeLogs目录下 mv /training/nginx/logs/access_$dataformat.log /training/nginx/logs/flumeLogs #清空access.log的内容 sed -i '1,'${lines}'d' /training/nginx/logs/access.log #重启nginx , 否则 log can not roll. kill -USR1 `cat /training/nginx/logs/nginx.pid` ##返回给服务器信息 ls -al /training/nginx/logs/flumeLogs/
- 编写启动Flume脚本 flume_start.sh,启动Flume
#!/bin/bash /training/apache-flume-1.9.0-bin/bin/flume-ng agent -c /training/apache-flume-1.9.0-bin/conf/ -f /training/apache-flume-1.9.0-bin/conf/flume-hdfs.conf -n a1 -Dflume.root.logger=INFO,console &
- 编写停止Flume脚本 flume_stop.sh,停止Flume
#!/bin/bash JAR="flume" #停止flume函数 echo "begin stop flume process.." num=`ps -ef|grep java|grep $JAR|wc -l` echo "当前已经启动的flume进程数:$num" if [ "$num" != "0" ];then #正常停止flume ps -ef|grep java|grep $JAR|awk '{print $2;}'|xargs kill echo "进程已经关闭..." else echo "服务未启动,无须停止..." fi
- 编写重启Flume脚本 flume_to_hdfs.sh,综合了前两个脚本
#!/bin/bash #先停止正在启动的flume ./flume_stop.sh #用法:nohup ./start-dishi.sh >output 2>&1 & nohup ./flume_start.sh > nohup_output.log 2>&1 & echo "启动flume成功……"
-
3.9 安装Sqoop
以下操作在s1节点
上进行:
-
上传sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz到/tools目录下
-
解压安装
cd /tools tar -zvxf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /mysoft/ mv /mysoft/sqoop-1.4.7.bin__hadoop-2.6.0 /mysoft/sqoop
-
配置环境变量
编辑:vim ~/.bash_profile
添加如下内容:
# sqoop export SQOOP_HOME=/mysoft/sqoop export PATH=$PATH:$SQOOP_HOME/bin
让环境变量生效:
source ~/.bash_profile
-
修改配置文件
- 配置【sqoop-site.xml】
添加如下内容:echo "" > /mysoft/sqoop/conf/sqoop-site.xml vim /mysoft/sqoop/conf/sqoop-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>sqoop.metastore.client.enable.autoconnect</name> <value>true</value> <description>If true, Sqoop will connect to a local metastore for job management when no other metastore arguments are provided. </description> </property> <property> <name>sqoop.metastore.client.autoconnect.url</name> <value>jdbc:hsqldb:file:/tmp/sqoop-meta/meta.db;shutdown=true</value> <description>The connect string to use when connecting to a job-management metastore. If unspecified, uses ~/.sqoop/. You can specify a different path here. </description> </property> <property> <name>sqoop.metastore.client.autoconnect.username</name> <value>SA</value> <description>The username to bind to the metastore. </description> </property> <property> <name>sqoop.metastore.client.autoconnect.password</name> <value></value> <description>The password to bind to the metastore. </description> </property> <property> <name>sqoop.metastore.client.record.password</name> <value>true</value> <description>If true, allow saved passwords in the metastore. </description> </property> <property> <name>sqoop.metastore.server.location</name> <value>/tmp/sqoop-metastore/shared.db</value> <description>Path to the shared metastore database files. If this is not set, it will be placed in ~/.sqoop/. </description> </property> <property> <name>sqoop.metastore.server.port</name> <value>16000</value> <description>Port that this metastore should listen on. </description> </property> </configuration>
- 配置【sqoop-env.sh】
添加如下内容:cp /mysoft/sqoop/conf/sqoop-env-template.sh /mysoft/sqoop/conf/sqoop-env.sh vim /mysoft/sqoop/conf/sqoop-env.sh
#Set path to where bin/hadoop is available export HADOOP_COMMON_HOME=/mysoft/hadoop #Set path to where hadoop-*-core.jar is available export HADOOP_MAPRED_HOME=/mysoft/hadoop #set the path to where bin/hbase is available export HBASE_HOME=/mysoft/hbase #Set the path to where bin/hive is available export HIVE_HOME=/mysoft/hive #Set the path for where zookeper config dir is export ZOOCFGDIR=/mysoft/zookeeper
- 配置【sqoop-site.xml】
-
将MySQL数据库的驱动
mysql-connector-java-5.1.44-bin.jar
上传到sqoop安装目录下的lib目录下
-
由于sqoop缺少
java-json.jar
包进行解析json,需上传到sqoop安装目录下的lib目录下
-
验证,命令行中输入:
sqoop version
,看到如下即为安装成功:
关于sqoop的测试案例,可以参考我的一篇博客:Sqoop-1.4.7基本命令使用案例说明
四、实验小结
本次实训我们已经完成了hadoop集群、zookeeper集群、hbase集群、spark集群的安装配置以及hive、flume、sqoop单机安装部署。希望大家能够对大数据环境搭建的过程有所了解和掌握安装的过程。