hive
MySQL
-------------------------------------------
SQL:structure query language
select 查询
insert 添加
update 修改
delete 删除
ddl:create 、drop 、alter
RDBMS
-------------------------------------------
Relation Database Management System 、关系型数据管理系统
OLTP:online transaction process 在线事务处理
数据库事务的特点:
a.原子性
c.一致性
i.隔离性
d.永久性
低延迟,支持事务管理
事务并发现象:
1.脏读 //读未提交
2.幻读 //读不回去
3.不可重复读 //读多了
事务的隔离级别:
1.读未提交
2.读已提交
4.可以重复读
8.串行化
hive介绍
-------------------------------------------
数据仓库软件
存储,重在分析,延迟高不支持在线事务处理
使用SQL来读,写,管理驻留在分布式存储系统上的大型数据集,可以使用命令行和Driver连接到hive
运行在Hadoop之上 用来汇集查询数据。
OLAP:online analyze process 在线分析处理
不是关系型数据库 、非OLTP 、不适合实时查询和低层更新操作
特点:
在数据库中存放schema,在hdfs上处理数据
提供了类SQL语言,hiveql即 HQL
可扩展、可伸缩、速度快
hive组件
-------------------------------------------
UI //用户输入
MetaStore //schema 、table 、clume信息在RDBMS
HQL Prcess Engein //编写一个SQL代替了以前MR语句
Excution Engein //处理查询生成结果
HDFS //分布式存储6
hive安装
hive下载
1.安装JDK
2.安装Hadoop
3.安装hive
解压
tar -zxvf apache-hive-1.1.0-bin.tar.gz -C /usr/local/src/
创建软连接
ln -s apache-hive-1.1.0-bin/ hive
4.配置环境变量
vim /etc/profile.d/hive.sh
export HIVE_HOME=/usr/local/src/hive
export PATH=$PATH:$HIVE_HOME/bin
5.即刻生效
source /etc/profile.d/hive.sh
hive --version
6.配置hive
cd conf/ //进入hive的配置文件目录
cp hive-env.sh.template hive-env.sh #把配置文件改名
vim hive-env.sh
# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/usr/local/src/hadoop
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/usr/local/src/hive/conf
下载MySQL
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server
#这步可能会花些时间,安装完成后就会覆盖掉之前的mariadb
#启动MySQL服务
systemctl start mysqld.service
#查看密码
grep "password" /var/log/mysqld.log
mysql -uroot -p
# 回车后会提示输入密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'z?guwrBhH7p>';
#先设置一个复杂的密码,不然没法进行下一步操作
set global validate_password_policy=0;
set global validate_password_length=1;
#然后再次修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
#因为安装了Yum Repository,以后每次yum操作都会自动更新,需要把这个卸载掉
yum -y remove mysql57-community-release-el7-10.noarch
#远程授权
grant all on *.* to root@'%' identified by 'root';
MySQL就完成了
配置hive
cp hive-default.xml.template hive-site.xml
vim hive-site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</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>root</value>
<description>password to use against metastore database</description>
</property>
</configuration>
将mysql-connector-java-5.1.32.jar上传到hive/lib下
删除Hadoop中的jline包,把hive的jline包考进去
cp $HIVE_HOME/lib/jline-2.12.jar $HADOOP_HOME/share/hadoop/yarn/lib/
/bin/schematool -initSchema -dbType mysql
#格式话hive
[root@s1 conf]# ../bin/schematool -initSchema -dbType mysql
Metastore connection URL: jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useSSL=true
Metastore Connection Driver : com.mysql.jdbc.Driver
Metastore connection User: root
Starting metastore schema initialization to 1.1.0
Initialization script hive-schema-1.1.0.mysql.sql
Initialization script completed
schemaTool completed
#以上为成功
hive
#启动
#启动时需要关闭防火墙,启动Hadoop,启动MySQL
#Hadoop-HA时要注意namenode的状态是否为active
[root@s1 conf]# hive
Logging initialized using configuration in jar:file:/usr/local/src/apache-hive-1.1.0-bin/lib/hive-common-1.1.0.jar!/hive-log4j.properties
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/src/hadoop-2.6.0/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/src/apache-hive-1.1.0-bin/lib/hive-jdbc-1.1.0-standalone.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
hive> show databases;
OK
Failed with exception java.io.IOException:java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:user.name%7D
Time taken: 0.999 seconds
hive> show tables;
OK
Time taken: 0.286 seconds
hive> exit;
#启动成功
Navicat连接hive
启动hive错误:Exception in thread “main” java.lang.IllegalArgumentException
错误解决方法
hive的远程模式安装
这种模式需要使用hive安装目录下提供的beeline+hiveserver2配合使用才可以。
其原理就是将metadata作为一个单独的服务进行启动。
各种客户端通过beeline来连接,连接之前无需知道数据库的密码。
A、修改javax.jdo.option.ConnectionURL属性。
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.159.221:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
B、修改javax.jdo.option.ConnectionDriverName属性。
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
C、修改javax.jdo.option.ConnectionUserName属性。即数据库用户名。
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>Username to use against metastore database</description>
</property>
D、修改javax.jdo.option.ConnectionPassword属性。即数据库密码。
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to use against metastore database</description>
</property>
E、添加如下属性hive.metastore.local:
<property>
<name>hive.metastore.local</name>
<value>true</value>
<description>controls whether to connect to remove metastore server or open a new metastore server in Hive Client JVM</description>
</property>
F、指定hive元数据访问路径
<property>
<name>hive.metastore.uris</name>
<value>thrift://127.0.0.1:9083</value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
在后台启动metastore
在后台启动hiveserver2
启动beeline连接hiveserver2,并创建表
beeline -u jdbc:hive2://s1:10000 -n root -p root
连接navicat,student表出现,hive远程模式安装成功
遇到的错误:Error: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000: java.net.ConnectException: 拒绝连接 (Connection refused) (state=08S01,code=0)
原因1:10000端口被占用导致hiveserver2未成功启动,或者hiveserver2还未等待启动成功就链接测试。
解决办法:等待一段时间在连接,或者查看端口确认hiveserver2成功启动再连接
原因2:hiveserver2增加了权限控制,需要在hadoop的配置文件中配置 。
解决方法:在hadoop的core-site.xml中添加如下内容,然后重启hadoop,再使用beeline连接即可,其中“xxx”是连接beeline的用户,将“xxx”替换成自己的用户名即可。最关键的是一定要重启hadoop,先stop-all.sh,再start-all.sh,否则不会生效的!!那样就还是报错!
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
“*”表示可通过超级代理“xxx”操作hadoop的用户、用户组和主机