本书的可视化分析是基于Hadoop集群展开的,因此首先需要搭建集群,我们这里基于3台虚拟机搭建了一个由3个节点(master、slave1、slave2)构成的Hadoop完全分布式集群,节点安装的操作系统为CentOS 6.5,Hadoop版本选择2.5.2。
本章将简单介绍一些Hadoop集群的基础知识,包括集群中存储的案例数据集,以及几种常用的连接集群的图形界面工具。
Hadoop在2006年成为雅虎项目,随后晋升为顶级Apache开源项目。它是一种通用的分布式系统基础架构,具有多个组件:Hadoop分布式文件系统(Hadoop Distributed File System,HDFS),将文件以Hadoop本机格式存储并在集群中并行化;YARN,协调应用程序运行时的调度程序;MapReduce,实际并行处理数据的算法。此外,通过一个Thrift客户端,用户可以编写MapReduce或者Python代码,本书就是使用Python对集群中的数据进行可视化分析的。
Hadoop分布式文件系统是一种文件系统实现,类似于NTFS、EXT3、EXT4等,它将存储在集群中的文件分成块,每块默认为64MB,比一般文件系统块大得多,并分布在多台机器上,每块又会有多块冗余备份(默认为3),以增强文件系统的容错能力,在具体实现中主要有以下几个部分:
(1)名称节点(NameNode)
名称节点的职责在于存储整个文件系统的元数据,这是一个非常重要的角色。元数据在集群启动时会加载到内存中,元数据的改变也会写到磁盘的系统映像文件中,同时还会维护对元数据的编辑日志。HDFS存储文件时是将文件划分成逻辑上的块存储的,对应关系都存储在名称节点上,如果有损坏,整个集群的数据就会不可用。
我们可以采取一些措施备份名称节点的元数据,例如将名称节点目录同时设置到本地目录和一个NFS目录,这样任何元数据的改变都会写入两个位置进行冗余备份,使得使用中的名称节点关机后,可以使用NFS上的备份文件恢复文件系统。
(2)第二名称节点(SecondaryNameNode)
这个角色的作用是定期通过编辑日志合并命名空间映像,防止编辑日志过大。不过第二名称节点的状态滞后于主名称节点,如果主名称节点突然关闭,那么必定会有一些文件损失。
(3)数据节点(DataNode)
这是HDFS中具体存储数据的地方,一般有多台机器。除了提供存储服务外,还定时向名称节点发送存储的块列表。名称节点没有必要永久保存每个文件、每个块所在的数据节点,这些信息会在系统启动后由数据节点重建。
Hadoop一般采用MapReduce计算框架,在系统架构上,它是一种主从架构,由一个单独的JobTracker节点和多个TaskTracker节点共同组成,核心是将任务分解成小任务,由不同计算者同时参与计算,并将各个计算者的计算结果合并,得出最终结果。模型本身非常简单,一般只需要实现两个接口即可,关键在于怎样将实际问题转化为MapReduce任务。
Hadoop的MapReduce主要由以下两部分组成:
(1)作业跟踪节点(JobTracker)
负责调度构成一个作业的所有任务,这些任务分布在不同的TaskTracker节点上,监控它们的执行,以及重新执行已经失败的任务等。
(2)任务跟踪节点(TaskTracker)
负责具体的任务执行。TaskTracker通过“心跳”的方式告知JobTracker其状态,并由JobTracker根据报告的状态为其分配任务。TaskTracker会启动一个新JVM运行任务,当然JVM实例也可以被重用。
Hadoop在大数据领域的应用前景很大,不过因为是开源技术,实际应用过程中存在很多问题。于是出现了各种Hadoop发行版,国外目前主要有3家创业公司在做这项业务:Cloudera、Hortonworks和MapR。
Cloudera和MapR的发行版是收费的,它们基于开源技术,提高了稳定性,同时强化了一些功能,定制化程度较高,核心技术是不公开的,收入主要来自软件。Hortonworks则走向另一条路,它将核心技术完全公开,用于推动Hadoop社区的发展。这样做的好处是,如果开源技术有很大提升,他们的受益就会很大,因为定制化程度较少,自身不会受到技术提升的冲击。
本书使用的Hadoop集群是基于3台虚拟机搭建的,它是由3个节点(master、slave1、slave2)构成的Hadoop完全分布式集群,节点使用的操作系统为CentOS 6.5,Hadoop版本为2.5.2。
首先,需要下载并安装VMware,这里我们选择的是VMware Workstation Pro 15.1.0,这是一款先进的虚拟化软件,能够提高生产效率,是为各类用户设计的桌面虚拟化解决方案,是开展业务不可或缺的利器,具体安装过程可参考网上的相关教程,这里不进行介绍。
然后,我们需要下载并安装CentOS 6.5系统。CentOS是一个基于Red Hat Linux提供的可自由使用源代码的企业级Linux发行版本,每个版本的CentOS都会获得10年的支持。具体安装过程可参考网上的相关教程,这里也不进行具体介绍。
本书使用的Hadoop集群上安装的软件及其版本如下:
apache-hive-1.2.2-bin.tar.gz hadoop-2.5.2.tar.gz jdk-7u71-linux-x64.tar.gz mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz scala-2.10.4.tgz spark-1.4.0-bin-hadoop2.4.tgz sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz zeppelin-0.7.3-bin-all.tgz
其中,集群主节点master上安装的软件如下:
apache-hive-1.2.2 hadoop-2.5.2 jdk-7u71 mysql-5.7.20 scala-2.10.4 spark-1.4.0 sqoop-1.4.6 zeppelin-0.7.3
集群主节点/etc/profile文件的配置如下:
export JAVA_HOME=/usr/java/jdk1.7.0_71/ export HADOOP_HOME=/home/dong/hadoop-2.5.2 export SCALA_HOME=/home/dong/scala-2.10.4 export SPARK_HOME=/home/dong/spark-1.4.0-bin-hadoop2.4 export HIVE_HOME=/home/dong/apache-hive-1.2.2-bin export SQOOP_HOME=/home/dong/sqoop-1.4.6.bin__hadoop-2.0.4-alpha export PYTHONPATH=/home/dong/spark-1.4.0-bin-hadoop2.4/Python export RPATH=/home/dong/spark-1.4.0-bin-hadoop2.4/R export ZEPPELIN_HOME=/home/dong/zeppelin-0.7.3-bin-all export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SCALA_HOME/bin:$JAVA_HOME/bin:$SPARK_HOME/bin:$HIVE_HOME/bin:$SQOOP_HOME/bin:/usr/local/mysql/bin:$ZEPPELIN_HOME/bin:$PATH
此外,集群两个从节点slave1与slave2上安装的软件如下:
hadoop-2.5.2 jdk-7u71 scala-2.10.4 spark-1.4.0
集群两个从节点/etc/profile文件的配置如下:
export JAVA_HOME=/usr/java/jdk1.7.0_71/ export HADOOP_HOME=/home/dong/hadoop-2.5.2 export SCALA_HOME=/home/dong/scala-2.10.4 export SPARK_HOME=/home/dong/spark-1.4.0-bin-hadoop2.4 export PYTHONPATH=/home/dong/spark-1.4.0-bin-hadoop2.4/Python export RPATH=/home/dong/spark-1.4.0-bin-hadoop2.4/R export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SCALA_HOME/bin:$JAVA_HOME/bin:$SPARK_HOME/bin:$PATH
为了使得集群既能相互之间进行通信,又能够进行外网通信,需要为节点添加网卡,上网方式均采用桥接模式,外网IP设置为自动获取,通过此网卡进行外网访问,配置应该按照当前主机的上网方式进行合理配置,如果不与主机通信,上网方式就可以采用NAT,这样选取默认配置就行,内网IP设置为静态IP。
Hadoop集群各节点的网络IP配置如下:
master:192.168.1.7 slave1:192.168.1.8 slave2:192.168.1.9
下面给出固定master虚拟机IP地址的方法,slave1和slave2与此类似:
vi /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE="Ethernet" UUID="b8bbe721-56db-426c-b1c8-38d33c5fa61d" ONBOOT="yes" NM_CONTROLLED="yes" BOOTPROTO="static" IPADDR=192.168.1.7 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=192.168.1.1 DNS2=114.144.114.114
为了不直接使用IP,可以通过设置hosts文件达到3个节点之间相互登录的效果,3个节点的设置都相同。配置hosts文件,在文件尾部添加如下行,保存后退出:
vi /etc/hosts 192.168.1.7 master 192.168.1.8 slave1 192.168.1.9 slave2
为了节点间的正常通信,需要关闭防火墙,3个节点的设置相同,集群处于局域网中,因此关闭防火墙一般不会存在安全隐患。
查看防火墙状态的命令:
service iptables status
防火墙即时生效,重启后复原,命令如下:
开启:service iptables start。
关闭:service iptables stop。
如果需要永久性生效,重启后不会复原,命令如下:
开启:chkconfig iptables on。
关闭:chkconfig iptables off。
关闭SELinux的方法:
临时关闭SELinux:setenforce 0。
临时打开SELinux:setenforce 1。
查看SELinux的状态:getenforce。
开机关闭SELinux:
编辑/etc/selinux/config文件,将SELinux的值设置为disabled,下次开机SELinux就不会启动了。
设置master节点和两个slave节点之间的双向SSH免密通信。下面以master节点SSH免密登录slave节点设置为例,进行SSH设置介绍(以下操作均在master机器上操作)。
(1)首先生成master的rsa密钥:$ssh-keygen -t rsa。
(2)设置全部采用默认值,按回车键。
(3)将生成的rsa追加写入授权文件:$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys。
(4)给授权文件权限:$chmod 600 ~/.ssh/authorized_keys。
(5)进行本机SSH测试:$ssh maste r。正常免密登录后,所有的SSH第一次登录都需要密码,此后都不需要密码。
(6)将master上的authorized_keys传到slave1和slave2:
scp ~/.ssh/authorized_keys root@slave1:~/.ssh/authorized_keys scp ~/.ssh/authorized_keys root@slave2:~/.ssh/authorized_keys
(7)登录slave1的操作:$ssh slave1,输入密码登录。
(8)退出slave1:$exit。
(9)进行免密SSH登录测试:$ssh slave1。
(10)同理,登录slave2进行相同的操作。
本节以某上市电商企业的客户数据、订单数据、股价数据为基础进行数据可视化的讲解,当然实际工作中的数据分析需求应该更加繁杂,但是我们可以先结合业务背景将需求整理成相应的指标,然后抽取出数据,再应用本书中介绍的数据可视化方法,从而实现我们的可视化分析需求。
我们选取该上市电商企业的客户数据、订单数据、股价数据中的部分指标作为分析的字段,分别存储在customers、orders和stocks三张表中。下面逐一进行说明。
客户表customers包含客户属性的基本信息,例如客户ID、性别、年龄、学历、职业等12个字段,具体见表2-1。
表2-1 客户表字段说明
订单表orders包含客户订单的基本信息,例如订单ID、订单日期、门店名称、支付方式、发货日期等24个字段,具体见表2-2。
表2-2 订单表字段说明
股价表stocks包含A企业近3年来股价的走势信息,包含交易日期、开盘价、最高价、最低价、收盘价等7个字段,具体见表2-3。
表2-3 股价表字段说明
企业的客户表、订单表和股价表的指标及数据都整理好后,接下来的工作就是将数据导入Hadoop集群中,这个过程分成两步:新建表和导入数据。注意这个过程都是在Hive中进行的,所以需要启动Hadoop集群和Hive。
在新建表之前需要先新建数据库,SQL语句如下:
create database sales
然后通过use sales语句使用sales数据库,再使用下面的3条SQL语句创建customers、orders和stocks三张表:
create table customers(cust_id string,gender string,age int,education string,occupation string,income string,telephone string,marital string,email string,address string,retire string,custcat string) row format delimited fields terminated by ',' create table orders(order_id string,order_date string,store_name string,pay_method string,deliver_date string,planned_days int,cust_id string,cust_name string,cust_type string,city string,province string,region string,product_id string,product string,category string,subcategory string,sales float,amount int,discount float,profit float,manager string,return int) partitioned by (dt string) row format delimited fields terminated by ',' create table stocks(trade_date string,open float,high float,low float,close float,adj_close float,volume int) row format delimited fields terminated by ','
注意,由于企业的订单数据一般较多,因此我们将orders表定义成了分区表,分区字段是年份dt,而customers表和stocks表都是非分区表。如果想深入了解分区表与非分区表的区别与联系,可以参阅相关大数据的图书。
表创建完成后,需要将数据导入相应的表中,在Hive中可以通过load data命令实现,例如导入customers表中的数据的命令如下:
load data local inpath '/home/dong/sales/customers.txt' overwrite into table customers
当然,也可以使用Sqoop中的sqoop import命令实现,这里就不进行详细介绍了。
对于分区表数据的导入,这个过程相对比较复杂,可以通过insert语句将非分区表的数据插入分区表中的方式实现,两张表的表结构要一致。例如,orders_1存储的是2019年的订单数据,需要将其导入orders表中,SQL语句为:
insert into table orders partition(dt) select order_id,order_date,store_name,pay_method,deliver_date,planned_days,cust_id,cust_name,cust_type,city,province,region,product_id,product,category,subcategory,sales,amount,discount,profit,manager,return,dt from orders_1 where dt=2019
其他年份的数据也可以通过类似的方法导入orders表,注意在导入完成后需要验证一下数据是否正常导入,可以选择一种后面将要介绍的连接Hive的图形界面工具或者Hive的查询数据命令。
现在大数据比较火热,企业的数据基本都存放在Hadoop环境中。因此,为了更好地贴近实际工作,使读者学以致用,本书中使用的案例数据也存放在Hadoop集群中,一个主节点、两个从节点的虚拟环境。当然,这个环境和企业的真实环境可能有一定的差异,例如数据量的问题等,读者可以结合实际情况对代码进行适当的修改。
此外,对于Hadoop环境的搭建,具体的搭建过程比较复杂,由于篇幅所限,这里就不详细介绍,毕竟本书的重点是介绍大数据环境下的数据可视化技术,读者可以参考网络上的资料或相关图书,只要懂一些Linux的基础命令操作,并花费一定的时间,基本都可以成功搭建。
在日常工作中,为什么使用客户端界面工具而不用命令行使用Hive呢?原因是通过界面工具查看分析Hive中的数据要方便很多,业务人员没有权限通过命令行连接Hive,领导喜欢在界面工具上查看Hive中的数据。
本节讲解如何通过数据库客户端界面工具DBeaver、Oracle SQL Developer、DbVisualizer和SQuirrel SQL Client等工具连接Hadoop集群的Hive数据库。
DBeaver是一个通用的数据库管理工具和SQL客户端,支持MySQL、Oracle、DB2、MSSQL、Hive等数据库,它提供一个图形界面用来查看表结构、执行查询、导出数据等。
连接Hadoop集群Hive的工具还有很多,推荐使用DBeaver的原因是DBeaver简单易用,支持各种关系型数据库,还有就是DBeaver的快捷键和Eclipse一样,比如注释、删除、复制等操作。
DBeaver分为社区版和企业版,其中社区版是免费的,可以在官网上下载最新的社区版DBeaver,下载地址:https://dbeaver.io/download/,这里下载的是Windows 64位免安装社区版,如图2-1所示,读者可以根据实际情况下载对应版本。
图2-1 下载DBeaver
由于笔者下载的是免安装版,因此解压后,直接单击dbeaver.exe就可以使用。
测试连接前先启动Hadoop和Hive的相关服务。
(1)启动Hadoop集群。
(2)启动Hive,如果想远程连接Hive,那么还需要启动hiveserver2。
(3)创建Hive测试表,如果已经有了,就可以省略。
DBeaver连接关系型数据库比较简单,但是连接Hive要下载和配置驱动程序,过程相对比较复杂。下面介绍连接Hive的具体步骤。
新建数据库连接。打开DBeaver,在界面中依次单击“文件”→“新建”→“数据库连接”,然后单击“下一步”按钮,如图2-2所示。
图2-2 选择向导
选择新连接类型。这里我们选择Apache Hive,单击“下一步”按钮,如图2-3所示。从这里看到,DBeaver支持的数据库类型是很丰富的。
图2-3 选择新连接类型
通用JDBC连接设置。在常规界面,填写JDBC URL、主机、端口、数据库/模式、用户名和密码等信息,如图2-4所示。
图2-4 通用JDBC连接设置
编辑驱动设置。单击“编辑驱动设置”按钮,在URL模板中根据Hadoop集群的权限配置添加相应的设置项,这里我们添加auth=noSasl,然后单击“添加工件”按钮,如图2-5所示。
图2-5 添加工件
配置maven依赖。默认Hive的驱动版本是最新的RELEASE,由于集群的Hive版本是1.2.2,因此需要手动增加驱动。
下面分别配置Hive和Hadoop的驱动。首先我们配置Hive的驱动,在Group Id中输入“org.apache.hive”,在Artifact Id中输入“hive-jdbc”,在版本中输入集群对应的版本“1.2.2”,如图2-6所示。
图2-6 配置Hive驱动
接下来配置Hadoop的驱动,在Group Id中输入“org.apache.hadoop”,在Artifact Id中输入“hadoop-core”,在版本中使用默认值“RELEASE”,如图2-7所示。
图2-7 配置Hadoop驱动
然后,单击“下载/更新”按钮,将会自动下载Hive和Hadoop的驱动程序,如图2-8所示。
图2-8 下载更新驱动
单击界面最下方的“找到类”按钮并选择“org.apache.hive.jdbc.HiveDriver”,上方的类名会自动补齐,如图2-9所示。
图2-9 配置驱动类
首先,需要右击连接的名称“192.168.1.7_Hadoop”,然后在下拉菜单中选择“编辑连接”选项,如图2-10所示。
图2-10 编辑连接
在连接配置界面,选择“连接设置”选项,输入JDBC URL、主机、数据库/模式、用户名和密码等信息,如图2-11所示。
单击“测试链接”按钮,如果弹出如图2-12所示的成功信息,就说明Hive正常连接,否则需要检查连接设置,并重新进行连接过程。
图2-11 连接配置
图2-12 连接成功
我们可以在SQL界面输入想要执行的语句,例如我们要统计客户中不同职业的平均年龄,SQL语句为“select occupation,round(avg(age),2) as avg_cust from customers group by occupation;”,SQL语句的执行结果如图2-13所示。
图2-13 执行SQL语句
从结果可以看出:A企业客户中,管理人员的平均年龄为42.98岁,普通工人的平均年龄为42.42岁,技术工人的平均年龄为40.75岁,专业人员的平均年龄为39.53岁,公司白领的平均年龄为37.8岁,不同职业客户的平均年龄差异比较明显。
此外,在Hadoop集群会显示SQL语句的具体执行过程以及运行时间,集群总计花费了3秒170毫秒,如图2-14所示。
图2-14 Hadoop集群执行过程
Oracle SQL Developer支持常见的数据库类型,包括MySQL、Oracle、DB2、MSSQL、Hive等数据库,前提是要导入相应数据库的JAR包,而且是免费的,主要难点是下载和配置Oracle SQL Developer和Hive的JAR包,具体步骤如下:
下载和安装Oracle SQL Developer。首先需要到Oracle官网下载Oracle SQL Developer,下载之前需要注册Oracle账户。
准备连接的JAR包。使用Oracle SQL Developer连接Hive之前,需要找到集群Hive对应版本JDBC连接的JAR包,由于集群的Hive版本是Apache Hive 1.2.2,因此需要的JAR包如图2-15所示。
准备工作完成后,将连接Hive需要的JAR包上传到Oracle SQL Developer→“工具”→“首选项”→“数据库”→“第三方JDBC驱动程序”下,如图2-16所示。
图2-15 需要的JAR包
图2-16 第三方JDBC驱动程序
配置Oracle SQL Developer。关闭并重启Oracle SQL Developer,重启后新建Hive连接,如图2-17所示,如果出现Hive选项,就证明配置成功,如图2-18所示。
图2-17 新建连接
图2-18 Hive连接界面
配置相关连接参数,包括连接名、用户名、密码、主机名、端口、数据库和驱动程序,如图2-19所示。
图2-19 配置连接参数
此外,还需要配置Hive的连接参数,单击“连接参数”后的“添加“按钮,弹出“添加参数”对话框,如图2-20所示。
图2-20 配置连接类型参数
目前HiveServer 2支持多种用户安全认证方式:NOSASL、KERBEROS、LDAP、PAM、CUSTOM等。由于我们的集群权限设置的是NOSASL,因此AuthMech的参数需要设置为0,如图2-21所示。
图2-21 配置连接集群权限
测试配置是否正常。单击“保存”按钮,软件将保存连接的配置,如图2-22所示。注意在测试之前需要开启Hadoop集群以及HiveServer 2。
图2-22 保存连接
我们还可以单击“测试”按钮,检查是否可以正常连接Hive,如果弹出如图2-23所示的对话框,就说明可以正常连接,否则需要重新配置连接过程。
图2-23 测试连接
不同教育背景客户平均年龄分布。在图2-24中左侧单击配置好的Hive连接,连接成功后,我们可以在连接下查看数据库和数据库中的表。
图2-24 查看数据库和表
我们可以在界面中输入想要执行的语句,例如要统计客户中不同教育背景的平均年龄分布,SQL语句为“select education,round(avg(age),2) as avg_cust from customers group by education;”,SQL语句执行结果如图2-25所示。
图2-25 执行SQL语句
从结果可以看出:初中及以下的平均年龄为45.87岁,高中的平均年龄为42.07岁,本科的平均年龄为39.93岁,硕士及以上的平均年龄为39.83岁,大专的平均年龄为39.53岁,不同教育背景客户的平均年龄差异比较明显。
DbVisualizer是基于JDBC的跨平台数据库操作工具,可以快速连接需要的数据库,包括MySQL、Oracle、DB2、MSSQL、Hive等数据库,连接Hive的具体步骤如下:
下载和安装DbVisualizer。我们可以到DbVisualizer的官网下载,地址是http://www.dbvis.com/,这里下载的是DbVisualizer 10.0版本,如图2-26所示。具体的安装步骤比较简单,选择默认安装即可,这里不进行详细介绍。
图2-26 下载DbVisualizer
准备连接的JAR包。在DbVisualizer的安装目录下有一个专门存放驱动的jdbc文件夹,在该文件夹下新建hive文件夹,如图2-27所示。
图2-27 新建hive文件夹
复制Hadoop集群的相关JAR包文件到新建的hive文件夹中,具体的包如图2-28所示。
图2-28 添加依赖的包
图2-28中的JAR包分别位于以下文件夹中:
●hadoop-2.5.2/share/hadoop/common/hadoop-common-2.7.5.jar
●hadoop-2.5.2/share/hadoop/common/lib/
●apache-hive-1.2.2-bin/lib
配置DbVisualizer。打开DbVisualizer,此时会自动加载刚才添加的JAR包,也可以在Tools/Driver Manager中配置,如图2-29所示。
图2-29 加载依赖的包
加载Hive的JAR包结果如图2-30所示,可以根据需要进行核查和修改等。
图2-30 核查依赖的包
测试配置是否正常。关闭DbVisualizer,然后重新打开DbVisualizer,弹出New Connection Wizard对话框,如图2-31所示。
图2-31 添加新的连接
输入连接的名称,再单击Next按钮,弹出选择数据库驱动界面,这里我们选择Hive,单击Next按钮,如图2-32所示。
图2-32 选择连接名
在Settings Format下拉框中选择Database URL,这个比较重要,否则无法正常连接Hive,如图2-33所示。
图2-33 选择连接方式
然后,在Database URL中输入“jdbc:hive2://192.168.1.7:10000/sales;auth=noSasl”,分别在Database Userid和Database Password中输入账户和密码,如图2-34所示。
图2-34 配置连接参数
不同性别客户平均年龄分布。单击图2-34中的Finish按钮,如果弹出如图2-35所示的界面,就说明正常连接Hive,该界面显示Hadoop集群中的数据库和表。
图2-35 查看数据库和表
我们可以在界面中输入想要执行的语句,例如要统计不同性别客户的平均年龄分布,SQL语句为“select gender,round(avg(age),2) as avg_cust from customers group by gender;”,SQL语句执行结果如图2-36所示。
图2-36 执行SQL语句
从结果可以看出:男性客户的平均年龄为41.76岁,女性客户的平均年龄为41.57岁,不同类型客户的平均年龄差异不是很明显。
SQuirrel SQL Client是一个用Java写的数据库客户端工具,它通过一个统一的用户界面来操作MySQL、MSSQL、Hive等支持JDBC访问的数据库,具体连接Hive的步骤如下:
下载和安装SQuirrel SQL Client。软件可以直接从官网下载:http://www.squirrelsql.org,截至2019年8月,最新版本为3.9.1,单击Download SQuirreL SQL Client链接进行下载,如图2-37所示。
图2-37 下载SQuirrel SQL Client
SQuirreL SQL Client有安装版本和免安装版本,我们这里选择的是免安装版本,单击Plain zips the latest release for Windows/Linux/MacOS X/others链接进行下载,如图2-38所示。
图2-38 选择免安装版本
然后,选择squirrelsql-3.9.1-optional.zip,该版本可以根据需要添加数据库的驱动扩展,如图2-39所示。
图2-39 选择驱动可扩展版本
下载完成后,解压该文件,在文件夹中双击squirrel-sql.bat,第一次打开SQuirreL SQL Client,界面是空白的,如图2-40所示。
图2-40 打开SQuirreL SQL Client
准备连接的JAR包。在SQuirrel的安装目录下新建hive文件夹,如图2-41所示。
图2-41 新建hive文件夹
复制Hadoop集群的相关JAR包到新建的hive文件夹中,具体的包如图2-42所示。
图2-42 配置连接JAR包
图2-42中的JAR包分别位于以下文件夹中:
●hadoop-2.5.2/share/hadoop/common/hadoop-common-2.7.5.jar
●hadoop-2.5.2/share/hadoop/common/lib/
●apache-hive-1.2.2-bin/lib
配置SQuirrel SQL Client。连接Hive数据库,首先配置数据库连接的驱动类型,选择界面左侧的Drivers,然后单击“+”按钮,如图2-43所示。
图2-43 配置数据库驱动类型
在配置界面,Name可以随意填写,这里输入“hive”,Example URL是连接集群的重要信息,根据实际情况填写,这里输入“jdbc:hive2://192.168.1.7:10000/sales;auth=noSasl”,即通过JDBC连接HiveServer 2,后面是服务器地址、端口、数据库及授权方式,Website URL可以不用填写。然后选择Hive连接所需要的JAR包,切换至Extra Class Path选项卡,再单击Add按钮,如图2-44所示。
图2-44 配置数据库参数
打开SQuirrel安装目录下新建的hive文件夹,选择Hive连接所需要的JAR包,然后单击“打开”按钮,如图2-45所示。
图2-45 选择连接的JAR包
在Class Name选项中输入“org.apache.hive.jdbc.HiveDriver”,然后单击OK按钮,如图2-46所示,Hive驱动程序的配置过程到此结束。
图2-46 配置类名
测试配置是否正常。配置完成后,需要测试配置是否正确,选择界面左侧的Aliases,单击“+”按钮,如图2-47所示。
图2-47 测试配置是否正确
在弹出的连接对话框中,Name即连接的名称,可以随意填写,这里输入服务器的地址“192.168.1.7”,在Driver下拉框中选择我们配置好的hive,输入连接所需要的URL、User Name和Password,最后单击Test按钮,弹出连接信息对话框,单击Connect按钮,如果弹出Connection successful,就说明成功连接Hive,如图2-48所示。
图2-48 配置连接参数
不同类型客户平均年龄分布。在图2-49左侧单击配置好的Hive连接,连接成功后,可以在Objects下查看数据库和数据库中的表。
图2-49 查看数据库和表
我们可以在界面中输入想要执行的语句,例如要统计不同价值类型客户的平均年龄分布,SQL语句为“select custcat,round(avg(age),2) as avg_cust from customers group by custcat;”,SQL语句执行结果如图2-50所示。
图2-50 执行SQL语句
从结果可以看出:一般价值客户的平均年龄为42.56岁,低价值客户的平均年龄为41.56岁,高价值客户的平均年龄为40.18岁,不同类型客户的平均年龄差异不是很明显。
此外,在Hadoop集群会显示SQL语句的具体执行过程以及运行时间,集群总计花费了3秒270毫秒,如图2-51所示。
图2-51 Hadoop执行过程