Hive 基础知识

Hive 操作学习

实际开发中,80%的操作都不会由MapReduce程序直接完成,而是由Hive来完成。Hive是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类sql查询功能,本质是把sql转换为map-reduce。

Hive基本组成

  1. 用户接口:CLI(命令地),JDBC/ODBC,WEBGUI(网页访问Hive)
  2. 元数据存储,通常是存储在关系数据库如mysql,derby中
  3. 解释器、编译器、优化器、执行器
  4. Hadoop:用HDFS进行存储,利用MapReduce进行计算
    与Hadoop的HDFS和MapReduce计算框架不同,Hive并不是分布式的,它独立于集群之外,可以看做是一个Hadoop的客户端:
    Hive 基础知识_第1张图片

可以通过CLI、HWI(Hive网络界面)以及Thrift Server提供的JDBC和ODBC的方式访问Hive,最常见的是Hive命令行接口。用户通过以上方式向Hive提交查询命令,而命令将会进入Driver模块,通过该模块对命令进行解释和编译,对需求的计算进行优化,然后按照生成的执行计划执行。执行计划会将查询分解为若干个MapReduce作业。
Hive通过与JobTracker通信来初始化MapReduce作业,所以Hive并不需要部署 JobTracker节点,通常在大型的生产环境集群,Hive被独立部署在集群之外的节点。
Metastore是Hive的元数据集中存放地,保存了Hive的元数据信息,如表名、列名、字段名等,它对于Hive是一个非常重要的组成。它包含:元数据服务和元数据存储。有了元数据存储方案,Hive不再只是一个数据查询工具,而是一个可以管理海量数据的系统。Hive将HDFS上的结构化的数据通过元数据映射为一张张表。
元数据通常放在关系型数据库里,如Mysql、PostgreSQL、Oracle等。

Metastore有3种安装方式,对应Hive也有3种安装模式
- 内嵌模式:元数据服务和Hive服务运行在同一个JVM,使用内嵌Derby数据库
- 本地模式:元数据服务和Hive服务运行在同一个JVM,使用外置MySQL
- 完全远程模式:元数据服务和Hive服务运行在不同进程内。

Hive不支持
- 行级别的更新
- 插入或删除操作
- 不支持事务
- 延迟比较严重

项目结构

Hive 基础知识_第2张图片

安装方式

默认使用Derby数据库安装方式,即元数据存储在Derby数据库中。
也可以使用mysql数据库安装方式。

Hive数据存储

  • Hive数据存储建立在Hadoop HDFS之上
  • Hive没有专门的数据存储格式
  • 存储结构包括:数据库、文件、表、视图
  • Hive 数据库示例:类似关系型数据库的database
    • create database test_database;
  • 表 (Table, Partition, External Table,Bucket Table)
  • 内部表

Hive CLI命令行

  • hive命令行选项:
    -d k=v (定义变量)
    -e ” 有时候不用一直打开命令行界面,就是执行完立刻退出
    -f filename
    -h host
    -p port -v(控制台显示执行的hql)
  • hive交互模式:
    set; 显示hive中的所有变量
    set k=v; 如果k不存在,不会报错
  • shell
    ! shell command hive交互模式执行shell,例如:!echo aa
    dfs command hive交互模式执行hadoop fs的命令,和hadoop fs命令相同
  • set: 输出hive设置的变量
  • dfs
    hive> dfs -ls / ;
  • select:
hive -e "select * from mytable limit 1;"

网上找到的一些答疑

  • 安装时使用mysql作为元数据库更适用。
    derby不能多个客户端登陆,登陆必须在相同目录下。
  • 安装hive是否需要安装hadoop?
    是的
  • hive是否分客户端与服务端?
    是的。服务端可以安装在任何节点,namenode或datanode。

主要属性解释:

  • hive.metastore.uris:指定hive元数据访问路径
  • hive.metastore.warehouse.dir:(HDFS上的)数据目录
  • hive.exec.scratchdir:(HDFS上的)临时文件目录
  • hive.metastore.warehouse.dir默认值是/user/hive/warehouse

参考:
http://www.aboutyun.com/thread-10937-1-1.html

shiyanlou 实验

sudo vi /etc/hosts
192.168.40.8  c22d...  hadoop
sudo service mysql status
sudo service mysql start
## mysql账号及密码 root/root

mysql -uroot -proot
mysql>set password=password('root');
mysql>create user 'hive' identified by 'hive';  ## 用户已经创建
mysql>grant all on *.* TO 'hive'@'%' identified by 'hive' with grant option;
mysql>grant all on *.* TO 'hive'@'localhost' identified by 'hive' with grant option;
mysql>flush privileges;
mysql>quit;

mysql -uhive -phive -h hadoop
mysql>create database hive;
mysql>show databases;   //数据库及表已经创建
mysql>quit;

cd /home/shiyanlou/install-pack
tar -xzf hive-0.12.0-bin.tar.gz
mv hive-0.12.0-bin /app/hive-0.12.0
cd /home/shiyanlou/install-pack
cp mysql-connector-java-5.1.22-bin.jar /app/hive-0.12.0/lib

sudo vi /etc/profile

添加内容

export HIVE_HOME=/app/hive-0.12.0
export PATH=$PATH:$HIVE_HOME/bin
export CLASSPATH=$CLASSPATH:$HIVE_HOME/bin
source /etc/profile
echo $PATH

cd /app/hive-0.12.0/conf
cp hive-env.sh.template hive-env.sh
sudo vi hive-env.sh

设置内容

export HADOOP_HOME=/app/hadoop-1.1.2
export HIVE_CONF_DIR=/app/hive-0.12.0/conf
cd /app/hive-0.12.0/conf
cp hive-default.xml.template hive-site.xml
sudo vi hive-site.xml
<property>
  <name>hive.metastore.urisname>
  <value>thrift://hadoop:9083value>
property>
<property>
  <name>javax.jdo.option.ConnectionURLname>
  <value>jdbc:mysql://hadoop:3306/hive?=createDatabaseIfNotExist=truevalue>
  <description>JDBC connect string for a JDBC metastoredescription>
property>
<property>
  <name>javax.jdo.option.ConnectionDriverNamename>
  <value>com.mysql.jdbc.Drivervalue>
property>
<property>
  <name>javax.jdo.option.ConnectionUserNamename>
  <value>hivevalue>
  <description>username to use against metastore databasedescription>
property>
<property>
  <name>javax.jdo.option.ConnectionPasswordname>
  <value>hivevalue>
  <description>password to use against metastore databasedescription>
property>

  hive.server2.thrift.sas1.qop
  auth
  ...

  hive.metastore.schema.verification
  false
  ...

启动

hive --service metastore &
hive --service hiveserver &

基本操作

hive
hive>create table test(a string, b int);
hive>show tables;
hive>desc test;

你可能感兴趣的:(DB-大数据-Hive)