Linux第11课:Hive数据库安装
时间 2019-03-15 下午3:30
主讲 张春志
地点 四楼电教室
在Hadoop生态圈中,Hbase和Hive是两个使用频率最高、最重要的组件。首先来看看他们的特点:
Hive
不想用程序语言开发MapReduce的朋友比如DB们,熟悉SQL的朋友可以使用Hive开离线的进行数据处理与分析工作。
注意Hive现在适合在离线下进行数据的操作,就是说不适合在挂在真实的生产环境中进行实时的在线查询或操作,因为一个字“慢”。相反
起源于FaceBook,Hive在Hadoop中扮演数据仓库的角色。建立在Hadoop集群的最顶层,对存储在Hadoop群上的数据提供类SQL的接口进行操作。你可以用 HiveQL进行select,join,等等操作。
如果你有数据仓库的需求并且你擅长写SQL并且不想写MapReduce jobs就可以用Hive代替。
HBase
HBase作为面向列的数据库运行在HDFS之上,HDFS缺乏随即读写操作,HBase正是为此而出现。HBase以Google BigTable为蓝本,以键值对的形式存储。项目的目标就是快速在主机内数十亿行数据中定位所需的数据并访问它。
HBase是一个数据库,一个NoSql的数据库,像其他数据库一样提供随即读写功能,Hadoop不能满足实时需要,HBase正可以满足。如果你需要实时访问一些数据,就把它存入HBase。
你可以用Hadoop作为静态数据仓库,HBase作为数据存储,放那些进行一些操作会改变的数据。
可见,hive与hbase各有优劣,hive在使用上更贴近用户,但hbase在实时查询上更优越。为此,常常用hive整合hbase,通过整合,不仅可完成HBase的数据实时查询,而且可以使用Hive查询HBase中的数据完成复杂的数据分析。
下面,进行安装和调试:
一、主节点上,分布式安装hbase
详见第6课
二、主节点上,安装mysql
Hive的元数据要存储在mysql中,所以在安装hive之前,要先安装mysql。
详见第4课附6,及python第7课
进入mysql命令行(root,jxsr201903),创建一个用户hive,密码abc123456。
用root用户进入mysql
mysql -u root -p
set global validate_password_policy=LOW;
GRANT ALL ON *.* to 'hive'@'%' IDENTIFIED BY 'abc123456' WITH GRANT OPTION;
flush privileges;
quit
重启mysql:
service mysqld restart
远程连接,测试成功。
补充:
如果在操作时,误删performance_schema,恢复方法是:
mysql_upgrade -u root -p
三、主节点上,下载hive2.34安装包:
下载地址:
https://mirrors.tuna.tsinghua.edu.cn/apache/hive/
apache-hive-2.3.4-bin.tar.gz 226M
下载后,通过ftp转移动/usr/local
关于ftp的创建,请看:Linux搭建FTP文件服务器
tar -xvf apache-hive-2.3.4-bin.tar.gz
mv apache-hive-2.3.4-bin hive-2.3.4
四、主节点上,下载mysql驱动:
下载地址:http://www.onlinedown.net/soft/988736.htm
windows系统下载,解压,上传mysql-connector-java-5.1.7-bin.jar文件到FTP
把mysql驱动文件mysql-connector-java-5.1.7-bin.jar复制到hive下的lib目录:
cp /mnt/home2/xhfd/mysql-connector-java-5.1.7-bin.jar /usr/local/hive-2.3.4/lib/
五、主节点上,配置环境变量:
vim /etc/profile
export PATH=/usr/local/hive-2.3.4/bin:$PATH
source /etc/profile
六、主节点上,配置hive
(一)四个默认模板不变:
hive-default.xml.template
hive-env.sh.template
hive-exec-log4j.properties.template
hive-log4j.properties.template
以上四个默认模板,不需要修改,直接复制。分别为:
cp /usr/local/hive-2.3.4/conf/hive-default.xml.template /usr/local/hive-2.3.4/conf/hive-site.xml
cp /usr/local/hive-2.3.4/conf/hive-env.sh.template /usr/local/hive-2.3.4/conf/hive-env.sh
cp /usr/local/hive-2.3.4/conf/hive-exec-log4j2.properties.template /usr/local/hive-2.3.4/conf/hive-exec-log4j2.properties
cp /usr/local/hive-2.3.4/conf/hive-log4j2.properties.template /usr/local/hive-2.3.4/conf/hive-log4j2.properties
注意:在后面的初始化元数据时报错,提示有冲突,则修改掉一个文件:
cd /usr/local/hive-2.3.4/lib
mv log4j-slf4j-impl-2.6.2.jar log4j-slf4j-impl-2.6.2.jar.bak
(二)配置hive-env.sh
vim /usr/local/hive-2.3.4/conf/hive-env.sh
加入以下内容:
export HADOOP_CONF_DIR=/usr/local/hadoop-2.7.7 #hadoop路径
export HIVE_CONF_DIR=/usr/local/hive-2.3.4/conf #hive路径
source /usr/local/hive-1.2.2/conf/hive-env.sh
(三)修改 hive-log4j.properties
创建日志目录:
cd /usr/local/hive-2.3.4
mkdir logs
vim /usr/local/hive-2.3.4/conf/hive-log4j2.properties
加入以下内容:
hive.log.dir=/usr/local/hive-2.3.4/logs
(四)修改hive-site.xml
vim /usr/local/hive-2.3.4/conf/hive-site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<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>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>abc123456</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
<description>creates necessary schema on a startup if one doesn't exist. set this to false, after creating it once</description>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.authentication</name>
<value>CUSTOM</value>
</property>
</configuration>
注:后面的参数,用于启动server2服务,用于python连接hive的身份认证。
七、主节点上,元数据存储初始化
schematool -initSchema -dbType mysql
注意:提示是completed!,不是failed!
执行后,会自动创建hive等库,如果第二次执行,需要删除自动创建的hive库,然后再执行,否则失败。
八、主节点上,启动测试
输入命令:hive,进入命令行:hive>,则表示安装成功。quit退出。
现在,hive已单机安装成功。下面,还有两件事要做:一是实现hive的分布式,二是与hbase联动。
九、配置分布式hive
1,主节点上启动metastore服务
hive --service metastore &
注意后面的&符合,就因为少打这个符号,我排查错误,折腾了四五个小时。输入命令后,稍等,回车。
启动hiveserver2服务:
hive --service hiveserver2 &
端口10000和10002打开,该服务为python连接而开通。
2,为每个从节点安装hive
注意:从节点不需要安装mysql,远程使用主节点的mysql
(1)复制安装包
(2)配置环境变量:
vim /etc/profile
export PATH=/usr/local/hive-2.3.4/bin:$PATH
source /etc/profile
(3)修改hive-site.xml
vim /usr/local/hive-2.3.4/conf/hive-site.xml
增加:
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
</property>
(4)测试:
在任意节点上输入hive
create database abc;
create table user_info (user_id int, cid string, ckid string, username string) ;
在其他节点都可以看到,即表示成功。
十、Hive与Hbase整合
Hive与HBase整合的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive-hbase-handler-0.9.0.jar工具类
整合的目的,是利用 HQL 语法实现对 hbase 数据库的增删改查操作,基本原理就是利用两者本身对外的API接口互相进行通信。
本小节日后再讲。
问题:
1,以上操作,并未设置hive表的存储位置,经查询,以abc库为例,存储在/user/hive/warehouse/abc.db/user_info,这是一个本地文件系统,并不是HDFS,是否可以,或不适合存储到HDFS?
2,hive是如何使用分布式计算的?体现在哪里?