概述
Hive 操作学习
实际开发中,80%的操作都不会由MapReduce程序直接完成,而是由Hive来完成。Hive是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类sql查询功能,本质是把sql转换为map-reduce。
Hive基本组成
- 用户接口:CLI(命令地),JDBC/ODBC,WEBGUI(网页访问Hive)
- 元数据存储,通常是存储在关系数据库如mysql,derby中
- 解释器、编译器、优化器、执行器
- Hadoop:用HDFS进行存储,利用MapReduce进行计算
与Hadoop的HDFS和MapReduce计算框架不同,Hive并不是分布式的,它独立于集群之外,可以看做是一个Hadoop的客户端:
可以通过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不支持
- 行级别的更新
- 插入或删除操作
- 不支持事务
- 延迟比较严重
项目结构
安装方式
默认使用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.uris</name>
<value>thrift://hadoop:9083</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop: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>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.server2.thrift.sas1.qop</name>
<value>auth</value>
<description>...</description>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<description>...</description>
</property>
启动
hive --service metastore &
hive --service hiveserver &
基本操作
hive
hive>create table test(a string, b int);
hive>show tables;
hive>desc test;
最后
以上就是瘦瘦面包为你收集整理的Hive 基础知识Hive 操作学习shiyanlou 实验的全部内容,希望文章能够帮你解决Hive 基础知识Hive 操作学习shiyanlou 实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复