大数据生态之hive学习

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

写上虚拟机的IP,加用户名和密码就好
连接成功后

启动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&amp;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
metastore
在后台启动hiveserver2
hiveserver2
启动beeline连接hiveserver2,并创建表

beeline -u jdbc:hive2://s1:10000 -n root -p root

bee'li'ne
连接navicat,student表出现,hive远程模式安装成功
链接navicat
遇到的错误:Error: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000: java.net.ConnectException: 拒绝连接 (Connection refused) (state=08S01,code=0)
遇到的错误-1

原因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的用户、用户组和主机

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值