Hive配置与操作实践
Hive配置与操作实践
@(Hadoop)
安装hive
hive的安装十分简单,只需要在一台服务器上部署即可。
上传hive安装包,解压缩,将其配入环境变量。
mysql的设置
在要作为元数据库的mysql服务器上建立hive数据库:
#建立数据库
create database if not exists hive;
#设置远程登录的权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
#刷新配置
FLUSH PRIVILEGES;
或者创建专门访问hive的用户:
CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hive';
create database hive;
grant all on hive.* to hive@'%' identified by 'hive';
grant all on hive.* to hive@'localhost' identified by 'hive';
flush privileges;
并将mysql jdbc驱动放入hive/lib目录下。
配置文件修改
进入conf目录,修改配置文件:
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-default.xml
cp hive-log4j.properties.template hive-log4j.properties
cp hive-exec-log4j.properties.template hive-exec-log4j.properties
在hive-env.sh文件中配置hadoop的home目录。
新建hive-site.xml文件
hive-site.xml:
<configuration>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/usr/local/hive/iotmp</value>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/tmp/hive</value>
</property>
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/usr/local/hive/iotmp</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/usr/local/hive/iotmp</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/usr/local/hive/iotmp</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<!--mysql元数据库配置-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?characterEncoding=UTF-8</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
<!--远程mysql元数据库-->
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://localhost:9083</value>
</property>
</configuration>
根据续期就进行修改。
注意:低版本的hive**文件BUG:搜索auth,改为auth**
之后需要创建/usr/local/hive/iotmp文件夹
hive-log4j.properties:
#修改默认的日志存在路径
hive.log.dir=
hive-exec-log4j.properties:
#修改默认的日志存在路径
hive.log.dir=
错误与异常记录
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
一般是没执行hive –service metastore,重新执行即可。
常用命令
建表(默认是内部表)
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';
通过external关键字来建立外部表,location来指定要关联的hdfs文件系统的位置。
分区表加载数据
load data local inpath './book.txt' overwrite into table book partition
(pubdate='2010-08-22');
使用sqoop将mysql的数据导入到hive表中
sqoop先将数据导入到hdfs中,在调用hive的命令load到hive表中,所以要配置hive的环境变量。
在hive当中创建两张表
create table trade_detail (id bigint, account string, income double,
expenses double, time string) row format delimited fields terminated by '\t';
create table user_info (id bigint, account string, name string, age int) row format delimited fields terminated by '\t';
将mysq当中的数据直接导入到hive当中
sqoop import --connect jdbc:mysql://192.168.61.130:3306/cloud --username
root --password JChubby123 --table trade_detail --hive-import --hive-overwrite --hive-table trade_detail --fields-terminated-by '\t'
sqoop import --connect jdbc:mysql://192.168.61.130:3306/cloud --username
root --password JChubby123 --table user_info --hive-import --hive-overwrite --hive-table user_info -- fields-terminated-by '\t'
创建一个result表保存前一个sql执行的结果
create table result row format delimited fields terminated by '\t' as select t2.account, t2.name, t1.income, t1.expenses, t1.surplus from user_info t2 join (select account, sum(income) as income, sum(expenses) as expenses, sum(income-expenses) as surplus from trade_detail group by account) t1 on (t1.account = t2.account);
使用自定义的UDF函数
像传统数据库中的存储过程一样,自定义的UDF函数有输入和输出。当hive的函数不能满足业务需求的时候就需要自定义UDF函数来进行任务执行。
- 引入hive和hadoop common的jar包
- 自定义类,并继承自UDF类
- 定义UDF函数,统一命名为evaluate,如:public Text evaluate(Text in)输入和输出要使用hadoop io的基本类型,因为其也要走mr任务和网络传输
- 将其打包成jar并上传到装有hive的机器中
- 在hive shell中执行命令将jar包中的函数添加进去
自定义函数调用过程:
- 添加jar包(在hive命令行里面执行)
hive> add jar /root/NUDF.jar; - 创建临时函数
hive> create temporary function getNation as ‘NationUDF’;
函数要写成包括包名的全名称 - 调用
hive> select id, name, getNation(nation) from beauty; - 将查询结果保存到HDFS中
create table result row format delimited fields terminated by ‘\t’ as select id, getNation
(nation) from beauties;
基本数据类型
基本的数据类型参考:
http://blog.csdn.net/chenxingzhen001/article/details/20901045
1.27更新
配置hive1.2.1版本的时候出现一个问题,如下:
Exception in thread "main"java.lang.RuntimeException: java.lang.IllegalArgumentException:java.net.URISyntaxException: Relative path in absolute URI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
atorg.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:444)
atorg.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:672)
atorg.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616)
atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
atjava.lang.reflect.Method.invoke(Method.java:606)
atorg.apache.hadoop.util.RunJar.main(RunJar.java:160)
Caused by: java.lang.IllegalArgumentException:java.net.URISyntaxException: Relative path in absolute URI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
atorg.apache.hadoop.fs.Path.initialize(Path.java:148)
atorg.apache.hadoop.fs.Path.<init>(Path.java:126)
atorg.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:487)
atorg.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:430)
... 7more
Caused by: java.net.URISyntaxException:Relative path in absolute URI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
atjava.net.URI.checkPath(URI.java:1804)
atjava.net.URI.<init>(URI.java:752)
atorg.apache.hadoop.fs.Path.initialize(Path.java:145)
... 10more
解决方式:
在HIVE_HOME目录下新建一个iotmp文件夹,
在hive-site.xml文件中,搜索所有包含system:java.io.tmpdir的配置项,将其value属性改为iotmp的路径保存即可。
hive无法读取配置文件的问题
hive部署之后,hive-site.xml中配置的是连接到远程的mysql数据库。
HIVE_HOME已配置到.bash_profile文件中,但是直接执行hive命令的时候发现,同一个人在不同路径下执行竟然看到的表数据是不一样的!
于是开始排查异常,切换各个不同的目录执行hive命令,但是看到的数据都不一样,而且发现每个目录下都会生成derby元数据库的文件信息,于是猜想hive连接的是本地的derby数据库,但是配置文件里面明明设置的是连接远程mysql数据库。
进入conf目录再次执行hive命令,一切正常,将hive-site.xml文件复制到任意目录,再次执行hive,一切正常。
说明当不在conf目录下执行hive命令的时候,hive脚本找不到hive-site.xml文件。
再次仔细检查各种环境变量,一切正常,HADOOP_HOME、HIVE_HOME、HIVE_CONF_DIR等已经都在hive-env.sh中配置好了。
查看hive脚本的代码,发现里面会先跑一个hive-config.sh,于是又打开该文件查看,没发现什么异常,直接export HIVE_CONF_DIR写死在里面,保存退出,执行hive,仍然不行。
作者:@小黑
Hive配置与操作实践的更多相关文章
- HIVE的Shell操作
1.Hive支持的一些命令 退出使用quit或exit离开交互式外壳. set key = value使用它来设置特定配置变量的值. 这里要注意的一件事是,如果您对变量名拼写错误,cli将不会显示错误 ...
- Squid 操作实践
Squid简介 Squid可以做什么 性能要素 Squid安装 Squid快速体验 Squid配置 Squid简介 Squid is a caching proxy for the Web suppo ...
- 如何监听对 HIVE 元数据的操作
目录 简介 HIVE 基本操作 获取 HIVE 源码 编译 HIVE 源码 启动 HIVE 停止 HIVE 监听对 HIVE 元数据的操作 参考文档 简介 公司有个元数据管理平台,会定期同步 HIVE ...
- 集群搭建之Hive配置要点
注意点: 在启动Hive 的时候要先启动Hadoop和MySQL服务. Mysql 和 Hive 搭建在 yan00机器上. part1:MySQL配置相关 安装和配置相关命令: Yum instal ...
- Sqoop操作实践
Sqoop操作实践 @(Hadoop) Sqoop常用参命令 序号 命令/command 类 说明 1 impor ImportTool 从关系型数据库中导入数据(来自表或者查询语句)到HDFS中 2 ...
- HIVE配置mysql metastore
HIVE配置mysql metastore hive中除了保存真正的数据以外还要额外保存用来描述库.表.数据的数据,称为hive的元数据.这些元数据又存放在何处呢? 如果不修改配置hive ...
- 入门大数据---Hive常用DML操作
Hive 常用DML操作 一.加载文件数据到表 1.1 语法 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename ...
- 阿里巴巴微服务与配置中心技术实践之道 配置推送 ConfigurationManagement ConfigDrivenAnyting
阿里巴巴微服务与配置中心技术实践之道 原创: 坤宇 InfoQ 2018-02-08 在面向分布式的微服务系统中,如何通过更高效的配置管理方式,帮助微服务系统架构持续"无痛"的演进 ...
- Spring Boot自动配置原理与实践(二)
前言 在之前的博文(Spring Boot自动配置原理与实践(一))中,已经介绍了Spring boot的自动配置的相关原理与概念,本篇主要是对自动配置的实践,即自定义Starter,对原理与概念加深 ...
随机推荐
- 《Android虚拟机》--内存分配策略
No1: Java在内存分配时会涉及到以下区域: 寄存器:我们在程序中无法控制 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 堆:存放用new产生的数据 静态域:存放在对 ...
- Unity 2D游戏开发教程之游戏中精灵的跳跃状态
Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...
- luogu P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
模板 嗯 做多项式乘法,进位 没了 #include<cmath> #include<cstdio> #include<cstring> #include<a ...
- Tsinsen 最长双回文串
求最长双回文串,正反建回文树求最大. 题目链接:http://www.tsinsen.com/ViewGProblem.page?gpid=A1280 By:大奕哥 #include<bits/ ...
- [BZOJ4408&&BZOJ4299][FJOI2016 && Codechef]神秘数&&FRBSUM(主席树)
4299: Codechef FRBSUM Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 550 Solved: 351[Submit][Statu ...
- UOJ #35. 后缀排序 后缀数组 模板
http://uoj.ac/problem/35 模板题,重新理了一遍关系.看注释吧.充分理解了倍增的意义,翻倍之后对上一次排序的利用是通过一种类似于队列的方式完成的. #include<ios ...
- ssm整合总结(一)--第一步之使用maven搭建一个web项目
本文内容来自:山硅谷,本文内容整合了任务2,任务3,任务4内容.http://www.gulixueyuan.com/my/course/50 1说明 1.1该项目使用的知识点有 1.1.1校验方式是 ...
- hdu 3081
二分答案,网络流是否满流判断合法性. #include <cstdio> #include <cstring> #include <queue> #include ...
- hdu 1533 KM或费用流
以前用KM写过,现在再用费用流写. #include <iostream> #include <cstdio> #include <cstring> #includ ...
- nodejs中间件拦截,express不登录无法进入后台页面
22.设置拦截 只有登录才能进入到后台页面,不登录无法进入 如果登陆成功, 写入session, 参数 uid uid=123dsfjksldfjsl 检测登陆, 请求中 session 是否包含 u ...