之前的程序员大多都使用sql,让他们写MapReduce需要培训,成本高。
ETL( Extract-Transform-Load)
① 修改配置文件:
hive-env.sh(重命名hive-env.sh.template)
设置hadoop目录和hive的配置目录:
② 创建文件夹且添加权限
一个公司,有多个部门,不同部门是不同的组,用的是不同的hive仓库,相当于每个部门装一个hive。但是,hive默认的数据仓库目录是一样的,所以需要手动改变。
在hive-site.xml配置即可。
③ 使用schematool 初始化metastore的schema:
[[email protected]]# bin/schematool -dbType derby –initSchema
④ 启动并测试:
select count(*)转换成了mapreduce:
创建表并加载数据:
(注意:overwrite覆盖表中的原有数据)
注意:hive和mysql要安装到同一台机器上;接着上面的配置继续配置。
① 为什么不用derby(内存数据库)改用mysql?
内存数据库derby只能供一个人使用,在另外一个节点上同时开启就会报如下错误:
而现在我们整个集群都要使用hive元数据,所以改用mysql。
② 安装配置mysql(通过rpm方式):
下载地址:
http://mirrors.sohu.com/mysql/
查看所有用户:
修改mysql数据库的登陆权限:
GRANT ALL PRIVILEGES ON *.* TO'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
刷新权限:
FLUSH PRIVILEGES;
③ 把mysql的驱动包放到hive的lib目录下
④ 修改配置文件:
hive-site.xml(复制hive-default.xml.template)
因为default配置项太多,也可手动创建一个hive-site.xml
配置mysql四要素:
数据库地址、驱动名称、用户名、密码
javax.jdo.option.ConnectionURL
jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
root
javax.jdo.option.ConnectionPassword
123456
⑤ 使用schematool 初始化metastore的schema:
[[email protected]]# bin/schematool -dbType mysql -initSchema
(如果出现已存在的异常,把hive目录下的metastore_db重命名metastore_db.temp)
⑥ 启动hive
第一次启动慢,因为要初始化元数据
查看mysql会发现多了hive数据库(存储元数据)
(“hive”是hive-site.xml中配置的名字)
查看表详细信息:
desc 表名
desc extended 表名
desc formatted 表名
查看所有函数:
hive> show functions;
查看函数如何使用:
如何在查看表的时候显示字段名称和数据库名称:
在hive-site.xml中添加如下配置:
hive.cli.print.header
true
hive.cli.print.current.db
true
重启hive
查看HDFS文件信息:
在hive 命令行中执行本地文件系统操作:
查看执行hive语句的历史记录:
保存在当前用户的家目录中的.history中:
不进hive命令行界面执行sql语句:
bin/hive -e "select * from student;"
测试:
不进hive命令行界面执行sql脚本文件:
bin/hive -f hivef.sql
(在实际的开发中经常用)
①写一个sql脚本
② 执行该脚本
把sql查询的结果保存到txt文件中
查看数据所属的文件:
默认的日志配置:
加载的是lib包下hive-common包中的日志配置
修改:
将hive的conf目录下的hive-log4j2.properties.template重命名为hive-log4j2.properties,hive启动时将自动加载它。
日志的存放位置:
可以将日志文件设置到hive目录下:
property.hive.log.dir =/usr/opt/modules/apache-hive-2.1.1-bin/logs
测试(日志存放目录已修改):
设置日志信息显示在控制台:
[[email protected]]# bin/hive --hiveconf hive.root.logger=INFO,console;
以下皆在上文有介绍,本小节作为回顾
Hive数据仓库位置配置
default
/user/hive/warehouse
注意事项
*在仓库目录下,没有对默认的数据库default创建文件夹
*如果某张表属于default数据库,直接在数据仓库目录下创建一个文件夹
在hdfs上创建目录并赋予权限:
$ $HADOOP_HOME/bin/hadoop fs -mkdir /tmp
$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse
Hive运行日志信息位置
$HIVE_HOME/conf/hive-log4j.properties
hive.log.dir=/opt/modules/hive-0.13.1/logs
hive.log.file=hive.log
指定hive运行时显示的log日志的级别
$HIVE_HOME/conf/hive-log4j.properties
hive.root.logger=INFO,DRFA
在cli命令行上显示当前数据库,以及查询表的行头信息
$HIVE_HOME/conf/hive-site.xml
在启动hive时设置配置属性信息
$ bin/hive --hiveconf
查看当前所有的配置信息
hive > set ; // 查看所有配置
hive (db_hive)> set system:user.name ; // 查看system:user.name的值
system:user.name=beifeng
hive (db_hive)> set system:user.name=beifeng ;// 设置system:user.name的值为beifeng
(此种方式,设置属性的值,仅仅在当前会话session生效)