Hive学习笔记 (一)

一、Hive初识入门

 

1.  Hive的背景及概念


之前的程序员大多都使用sql,让他们写MapReduce需要培训,成本高。


ETL Extract-Transform-Load



2.  Hive的架构、优点及使用场景讲解







3.  Hive安装部署及简单测试(使用derby存储元数据) 

修改配置文件:

hive-env.sh(重命名hive-env.sh.template

设置hadoop目录和hive的配置目录:



创建文件夹且添加权限


一个公司,有多个部门,不同部门是不同的组,用的是不同的hive仓库,相当于每个部门装一个hive。但是,hive默认的数据仓库目录是一样的,所以需要手动改变。


hive-site.xml配置即可。

 

使用schematool 初始化metastoreschema

[[email protected]]# bin/schematool -dbType derby –initSchema

 

启动并测试:




select count(*)转换成了mapreduce



创建表并加载数据:



(注意:overwrite覆盖表中的原有数据)


 

4.  Hive安装部署(使用mysql存储元数据)

注意:hivemysql要安装到同一台机器上;接着上面的配置继续配置。


为什么不用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的驱动包放到hivelib目录下

 

修改配置文件:

hive-site.xml(复制hive-default.xml.template

因为default配置项太多,也可手动创建一个hive-site.xml


配置mysql四要素:

数据库地址、驱动名称、用户名、密码


<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost: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>root</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123456</value>
</property>


使用schematool 初始化metastoreschema

[[email protected]]# bin/schematool -dbType mysql -initSchema

(如果出现已存在的异常,把hive目录下的metastore_db重命名metastore_db.temp)


启动hive

第一次启动慢,因为要初始化元数据


查看mysql会发现多了hive数据库(存储元数据)


(“hive”hive-site.xml中配置的名字)


5.  Hive的常用操作 

查看表详细信息:

desc 表名



desc extended 表名



desc formatted 表名



 

查看所有函数:

hive> show functions;



查看函数如何使用:



如何在查看表的时候显示字段名称和数据库名称:

hive-site.xml中添加如下配置:


<property>
   <name>hive.cli.print.header</name>
   <value>true</value>
</property>
<property>
   <name>hive.cli.print.current.db</name>
   <value>true</value>
</property>

重启hive



查看HDFS文件信息:


 

hive 命令行中执行本地文件系统操作:


查看执行hive语句的历史记录:

保存在当前用户的家目录中的.history中:




不进hive命令行界面执行sql语句:


bin/hive -e "select * from student;"

测试:



不进hive命令行界面执行sql脚本文件:

bin/hive -f hivef.sql

(在实际的开发中经常用) 

写一个sql脚本


执行该脚本

sql查询的结果保存到txt文件中

 

查看数据所属的文件:



6.  Hive运行日志配置和查看

默认的日志配置:

加载的是lib包下hive-common包中的日志配置


 

修改:


hiveconf目录下的hive-log4j2.properties.template重命名为hive-log4j2.propertieshive启动时将自动加载它。



日志的存放位置:


可以将日志文件设置到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;




7.  Hive常见属性配置(重点)

 

以下皆在上文有介绍,本小节作为回顾


Hive数据仓库位置配置 

default

       /user/hive/warehouse

注意事项

       *在仓库目录下,没有对默认的数据库default创建文件夹

       *如果某张表属于default数据库,直接在数据仓库目录下创建一个文件夹

(需要配置到hive-site.xml)

在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

              <property>

                     <name>hive.cli.print.header</name>

                     <value>true</value>

              </property>

              <property>

                     <name>hive.cli.print.current.db</name>

                     <value>true</value>

              </property>

 

在启动hive时设置配置属性信息

           $ bin/hive --hiveconf <property=value>

 

查看当前所有的配置信息

       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生效)





猜你喜欢

转载自blog.csdn.net/qq_24326765/article/details/80995196