17.Hive简介及搭建指南(详解)
Hive中文译为蜂巢。
在前面我们了解了mapreduce的核心思想:分而治之(分治)
SQL是一个相对来说易于学习的编程语言。
大数据未来发展发现:可视化和平台化
Hive简介
Hive数据存储在Hadoop上。Hive是数据仓库。可以读写大规模已经存储(离线)的数据。
因为为了满足非java编程者对hdfs的数据做MapReduce操作,hive产生了。
hive:数据仓库 底层使用MR框架。 数据库一般用于交互式查询,及时反馈,但是hadoop里mr耗时很长,满足不了。 数据仓库里的数据不允许修改,不允许删除。
hive:解释器,编译器,优化器等。
hive运行时,元数据存储在关系型数据库里面。
hive架构
[注]matestore元数据
Hive架构
(1)用户接口有三个,CLI,Client和WUI。Cli启动时,会同时启动一个hive副本。client是hive的客户端,用户连接至Hive Server。在启动Client模式的时候,需要指出Hive Server所在的节点,并且在该节点启动Hive Server。WUI是通过浏览器访问Hive。
(2)hive将元数据存储在数据库中,如mysql,derby(内存数据库,hive自带)。hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
(3)解释器,编译器,优化器完成HQL查询语句从词法分析,语法分析,编译,优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
(4)hive的数据存储在HDFS中,大部分的查询和计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapReduce任务)
-编译器将一个hive SQL转换为操作符
-操作符是hive的最小的处理单元
-每个操作符代表HDFS的一个操作或者一道MapReduce作业
hive搭建(3种)
模式一(很少用)
模式二(常用)
模式三(至少需要三台,达到解耦效果)
安装hive
hive官网查看安装教程
http://hive.apache.org/
4种安装Linux软件方式:1.编译安装 2.rpm 3.yum 4.解压安装
1安装mysq.png
注意这里要安装mysql-server,而不是mysql,mysql只代表安装客户端
2启动mysql.png
3进入mysql.png
4赋予权限.png
分析授予权限语句
grant(授权) all privileges(所有权限) on .(表示所有库(第一个)所有表(第二个)) to 'root'@'%'(@%所有地址允许访问,远程可以访问) indentified by '123'(给密码) with grant option
因为%包含了以上,所以就可以删除了
5,刷新权限.png
6启动zookeeper.png
7.启动.png
8启动resourcemanager(后两台).png
以上就是启动集群
[注意]这里有个小技巧,比如我在node08和node09安装了resourcemanager,我在node09或08输入start-all.sh可以不用专门启动resourcemanage。但是还是要在备机node08或09执行yarn-daemon.sh start resourcemanager
安装需要的包(选中的部分).png
9.传输hive包(版本1.2.1).png
10解压(注意和安装mysql的不是同一台).png
11移动到hive文件.png
12配置环境变量.png
13修改配置.png
14运行.png
在这里,要配置5个参数
15.修改hive-site.xml.png
16删除原来configuration粘贴新的配置.png
关于这些代码现在在给出(官网上找的)
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property> //hdfs存储路径
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property> //是不是本地的metastore。[注意]removed as of hive0.10 就是后面删除了,如果你配了为空,就是本地模式。如果没配,就是远程模式。所以我在本文中并未配置相关参数。配上了没问题,只会报一些警告,说找不到相关参数
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/hive_remote?createDatabaseIfNotExist=true</value>
</property> //localhost改为node01
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property> //username 这里hive改为root
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>password</value>
</property>
</configuration>
17执行cd命令后hive.png
18错误.png
这里报错了,查看错误代码,没有驱动包,把原来下载的复制到该地点
19cp原来的mysql包.png
20第二个错误.png
这里发现第二个错误,查看错误代码,发现jline,查看jline版本
21查看有什么jar包.png
22查看hadoop下的lib.png
23查看jline版本.png
24删除后拷贝一份.png
25记住这个目录.png
26hive安装成功.png
27登录浏览器查看.png
具体的文字版本无图方式请看我写的另一篇文章
hive的三种搭建方式概览
通过以上搭建行为,可能就有一个疑问,他是怎么搭建起来的,并未给与明确的指定?
答案是环境变量。
默认配置.png
3.多用户模式
1.Remote一体
这种存储方式需要在远端服务器运行一个mysql服务器,并且需要在Hive服务器启动meta服务。
这里用mysql的测试服务器,ip位192.168.1.214,新建hive_remote数据库,字符集位latine1
这里来理一下思绪,我们所有的有4台服务器,node1,2,3,4.经过上面的配置,node1做mysql元数据,node2搭建了单节点。还有两台,一台做服务端(node3),一台做客户端(node4)。
注意服务端不是指的hive服务端,是元数据的服务端
1由于在单节点搭建过程中已经有jar包了,所以直接拷贝就是了.png
2.拷给node4.png
3配置环境变量.png
4修改变量.png
5.运行配置文件.png
6对node4执行相同的操作.png
7node4运行.png
8在node3上修改hive配置.png
9只需修改两个属性值.png
修改的两个属性是(只修改了属性值):
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1/hive?createDatabaseIfNotExist=true</value>
</property>
客户端node4修改
10修改客户端.png
11把原来的property除第一个都删掉并修改第一个的值,然后增加一个属性.png
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.57.5:9083</value>
</property>
12服务端启动.png
这是一个阻塞式窗口,就会卡着不动
13ss-nal查看存在9083.png
14node4发现错误jline,处理方法如上面单点方式.png
15处理错误.png
16进入hive.png
17进入node1安装的mysql中发现多了一个.png
18新建表.png
19通过浏览器查看多了hive.png
20插入一个值(可以看到启动了mr任务).png
21执行成功.png