Hive学习笔记——基本配置及测试
1.什么是Hive
Hive 是建立在 Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive 定义了简单的类SQL查询语言,称为QL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce开发者的开发自定义的 mapper 和 reducer 来处理内建的mapper 和 reducer 无法完成的复杂的分析工作。
Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后在Hadoop执行。
Hive的表其实就是HDFS的目录/文件,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/R Job里使用这些数据。
hive运行时,一定要有元数据(存储真实数据到逻辑表的映射),它存储在关系型数据库里,hive自带的derby数据库不稳定,我们用mysql。
说白了,Hive就是人们为了偷懒,不去写MapReduce程序,而去写SQL语句,让Hive帮你转化成MapReduce程序。
2.Hive的安装配置
Hive只在一个节点上安装即可
2.1 上传tar包
2.2 解压
tar -zxvf hive-0.9.0.tar.gz -C /cloud/
2.3 配置mysql metastore(切换到root用户)
配置HIVE_HOME环境变量
查询以前安装的mysql相关包
rpm -qa | grep mysql
暴力删除这个包
rpm -e mysql-libs-5.1.66-2.el6_3.i686 --nodeps
rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm
rpm -ivh MySQL-client-5.1.73-1.glibc23.i386.rpm
执行命令设置mysql
/usr/bin/mysql_secure_installation
(注意:删除匿名用户,允许用户远程连接)
登陆mysql
mysql -u root -p
注:如果联网,可以直接sudo yum install mysql-server
关于安装mysql,可以参考:http://www.cnblogs.com/DarrenChan/p/6518304.html
2.4 配置hive
cp hive-default.xml.template hive-site.xml
修改hive-site.xml
修改以下4个内容:
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://weekend01: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>123456</value>
<description>password to use against metastore database</description>
</property>
</configuration>
2.5 安装hive和mysql完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下
如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
mysql -uroot -p
#(执行下面的语句 *.*:所有库下的所有表 %:任何IP地址或主机都可以连接)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Jline包版本不一致的问题,需要拷贝hive的lib目录中jline.2.12.jar的jar包替换掉hadoop中的
/home/hadoop/app/hadoop-2.4.1/share/hadoop/yarn/lib/jline-0.9.94.jar
2.6 建表(默认是内部表)
去bin/下通过./hive进行启动。
create table trade_detail(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t';
建分区表
create table td_part(id bigint, account string, income double, expenses double, time string) partitioned by (logdate string) row format delimited fields terminated by '\t';
建外部表
create external table td_ext(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t' location '/td_ext';
2.7 创建分区表
普通表和分区表区别:有大量数据增加的需要建分区表
create table book (id bigint, name string) partitioned by (pubdate string) row format delimited fields terminated by '\t';
分区表加载数据(加载HDFS上的数据就不用写local了,如果你建的内部表,加载HDFS上的数据,数据会被剪切到Hive的相关目录下)
load data local inpath './book.txt' overwrite into table book partition (pubdate='2010-08-22');
load data local inpath '/root/data.am' into table beauty partition (nation="USA");
select nation, avg(size) from beauties group by nation order by avg(size);
3.安装过程出现问题总结
直接用Hive自带的数据库没多大问题,但是用Hive连接MySQL数据库,莫名其妙地出很多错误。网上查了很多解决办法,总算搞定。现总结如下:
问题一:
FAILED: Error in metadata: Java.lang.RuntimeException: Unable to instantiate org.apache.Hadoop.Hive.metastore.HiveMetaStoreClient
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
首先,解决过程中需要考虑的问题:
1.hadoop 是否完全启动
使用jps 命令查看一下hadoop相应的进程是否都启动了
2.hadoop安全模式是否关闭
hadoop dfsadmin -safemode enter |leave| get | wait
3.MySQL 是否安装正确
进入mysql,执行一下命令 show databases;测试一下
4.hive是否安装正确
hive在没有修改元数据存储数据库(derby)时,测试一下是否安装正确
show tables
5.需要的Jar包是否配置好
是否将相应版本的mysql-connector-java-*-bin.jar包放置hive/lib目录下,重启hive
6.是否正确修改了hive-site.xml文件
其次,如果以上方式无法解决问题,可以使用以下命令查看出现错误的日志信息(方法很好用,不信试一试)
./hive -hiveconf hive.root.logger=DEBUG,console
hive> show tables;
有一种常见的错误是(当然不同的问题所产生的日志是不同的):
Caused by: javax.jdo.JDOFatalDataStoreException: Access denied for user'root'@'weekend01' (using
password: YES)
NestedThrowables:
java.sql.SQLException: Access denied for user 'root'@'weekend01' (using
password: YES)。。。
这是因为在mysql中创建hive角色时权限分配出现问题,'root'@'weekend01' 的权限分配不正确
解决方法:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'weekend01' Identified by '123456'; //最后是密码
flush privileges;
执行以上两步之后,重启hive,在执行操作 show tables测试
问题二:
测试发现,又开始报如下错误:
version information not found
Caused by: MetaException(message:Version information not found in metastore. )
解决办法:
1. 查看mysql-connector-Java-5.1.26-bin.jar 是否放到hive/lib 目录下 建议修改权限为777 (chmod 777 mysql-connector-java-5.1.26-bin.jar)
2. 修改conf/hive-site.xml 中的 “hive.metastore.schema.verification” 值为 false 即可解决 “Caused by: MetaException(message:Version information not found in metastore. )”
4. Hive thrift服务
启动方式,(假如是在weekend110上):
启动为前台:bin/hiveserver2
启动为后台:nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err &
启动成功后,可以在别的节点上用beeline去连接
方式(1)
hive/bin/beeline 回车,进入beeline的命令界面
输入命令连接hiveserver2
beeline> !connect jdbc:hive2://weekend110:10000
(weekend110是hiveserver2所启动的那台主机名,端口默认是10000)
方式(2)
或者启动就连接:
bin/beeline -u jdbc:hive2://weekend110:10000 -n hadoop
接下来就可以做正常sql查询了。
5.简单测试
我们先执行建表语句:
create table t_cost(id int, name string, capacity string, price double)
row format delimited
fields terminated by '\t';
然后按照格式导入数据(数据在本地,需要加local):(除了into,还可以写overwrite into)
load data local inpath '/home/hadoop/hivedata/cost.data' into table t_cost;
cost.data数据如下:
10001 iPhone7 64G 5888
10002 SamsungNote7 64G 5888
10001 HuaweiMate9 64G 4999
10002 MiMix 64G 3999
10001 Nexus6 64G 5888
10002 MeizuMx5 64G 2888
10001 LGG6 64G 4888
10002 SonyZ6 64G 5888
进行查询:
hive> select * from t_cost;
OK
10001 iPhone7 64G 5888.0
10002 SamsungNote7 64G 5888.0
10001 HuaweiMate9 64G 4999.0
10002 MiMix 64G 3999.0
10001 Nexus6 64G 5888.0
10002 MeizuMx5 64G 2888.0
10001 LGG6 64G 4888.0
10002 SonyZ6 64G 5888.0
Time taken: 2.22 seconds, Fetched: 8 row(s)
查询总数量(竟然开始跑mapreduce程序了,事实上,除了select *,其他很多都会跑mapreduce程序):
hive> select count(*) from t_cost;
Time taken: 127.847 seconds, Fetched: 1 row(s)
接着,我们重新建个库:
我们在这个库中再建一个表:
既然建了这么多东西了,我很好奇,它在HDFS中是怎么存储的呢?
通过查看以上截图,我们可以看到,它默认的库是在/user/hive/warehouse下的,因为我们建的表t_cost在这里。而且,我们建的chenchi库竟然也在这里面,原来我们重新建的库,就是在该目录下面建了一个文件夹而已。里面存储你新建的表。其实表说白了也是个目录,我们导入表数据,就是把东西上传到该目录下。哪怕你用最原始的办法上传相应格式的数据到该目录,查询的时候也是可以查询出来的。
然后我们再想,究竟Hive怎么和MySQL整合的呢?在MySQL中表,库又是怎么存储的呢?我在MySQL客户端中打开hive这个库,我们可以看到里面有很多表,而这些表的相互关系会解答我们的疑惑。
Hive学习笔记——基本配置及测试的更多相关文章
- hive学习笔记之三:内部表和外部表
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- hive学习笔记之五:分桶
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- hive学习笔记之一:基本数据类型
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- hive学习笔记之四:分区表
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- hive学习笔记之六:HiveQL基础
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- hive学习笔记之七:内置函数
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- hive学习笔记之九:基础UDF
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- hive学习笔记之十:用户自定义聚合函数(UDAF)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<hive学习笔记>的第十 ...
- hive学习笔记之十一:UDTF
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
随机推荐
- ckeditor 前段js配置toolbar以及取值(实用)
<%@ page contentType="text/html;charset=UTF-8"%><%@ include file="/WEB-INF/v ...
- CardLayout使用
相对于BoxLayout,GridBugLayut等常用的Swing layout,CardLayout是特殊的,前者是一个容器内布置组件,而后者是在一个容器内放置很多页面(但一个时间只用显示一个). ...
- SQL PL/SQL语法手册
SQL PL/SQL语法手册 目 录 第一部分 SQL语法部分 3 一. CREATE TABLE 语句 3 二. CREATE SEQUENCE语句 5 三. CREATE VIEW语句 6 ...
- UITableViewCell 添加 checkbox 多选
TableViewCell多选: CheckBox; - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndex ...
- HipHop PHP简介(转)
HipHop PHP是FaceBook的一个开源项目,它优化了FaceBook网站Web服务器的运行速度. HipHop 是一个源代码转换器.它将 PHP 代码转换为高度优化的 C++ 代码,然后再使 ...
- 关于Eric 6的后端调试器无法启动错误 [The Debugger backend could not be started]
声明: 1)本文由我bitpeach原创撰写.本篇如有转载,请注明来源. 2)本篇主要谈Eric6的一个怪异错误.因为篇幅不长,只是一个短记,以备档查阅. 1.1 软件环境 (1)Eirc6 ,版本号 ...
- Android Exception 11(baidumapsdk(15405): Authentication Error errorcode: 102 uid)
08-12 16:06:12.622: E/baidumapsdk(15405): Authentication Error errorcode: 102 uid: null appid -1 msg ...
- Sphinx-PHP使用Sphinx搜索技术
Sphinx继承到PHP程序中, 有两种方式: Sphinx PHP模块: 编译生成PHP扩展模块 Sphinx API类: 直接使用Sphinx提供的类即可 首先我们应该使用Sphinx做以下几件事 ...
- PHP-四种解析XML文件的方法
XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. ...
- JBoss jar包冲突及jar加载顺序
http://blog.163.com/javaee_chen/blog/static/17919507720116149511489/将一个完整的.war包部署到Jboss容器中,启动后报如下错误: ...