欢迎投稿

今日深度:

Hadoop学习笔记—17.Hive框架学习,hadoop17.hive

Hadoop学习笔记—17.Hive框架学习,hadoop17.hive


一、Hive:一个牛逼的数据仓库

1.1 神马是Hive?

建立在 Hadoop 基础上数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL  查询语言,称为 QL ,它允许熟悉 SQL  的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper  和 reducer 来处理内建的 mapper 和 reducer  无法完成的复杂的分析工作。

HDFS和Mapreduce是Hive架构的根基。Hive架构包括如下组件:CLI(command line interface)、JDBC/ODBC、Thrift Server、WEB GUI、metastore和Driver(Complier、Optimizer和Executor),这些组件可以分为两大类:服务端组件客户端组件

  (1)客户端组件:

  ①CLI:command line interface,命令行接口。

  ②Thrift客户端:上面的架构图里没有写上Thrift客户端,但是Hive架构的许多客户端接口是建立在Thrift客户端之上,包括JDBC和ODBC接口。

  ③WEBGUI:Hive客户端提供了一种通过网页的方式访问Hive所提供的服务。这个接口对应Hive的hwi组件(hive web interface),使用前要启动hwi服务。

  (2)服务端组件:

  Driver组件:该组件包括Complier、Optimizer和Executor,它的作用是将我们写的HiveQL(类SQL)语句进行解析、编译优化,生成执行计划,然后调用底层的mapreduce计算框架。

  ②Metastore组件:元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,hive支持的关系数据库有derby、mysql。元数据对于hive十分重要,因此hive支持把metastore服务独立出来,安装到远程的服务器集群里,从而解耦hive服务和metastore服务,保证hive运行的健壮性

  ③Thrift服务:Thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口。

  (3)底层根基:

—>Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from table 不会生成 MapRedcue 任务)

二、Hive的基本安装

2.1 准备工作

  (1)下载hive安装包,这里使用的是0.9.0版本,已经上传到了网盘(http://pan.baidu.com/s/1sj0qnpV);

  (2)通过FTP工具上传到虚拟机hadoop-master中,可以是XShell、CuteFTP等工具;

2.2 开始安装

  (1)解压: tar -zvxf hive-0.9.0.tar.gz ,重命名:mv hive-0.9.0 hive

  (2)加入环境变量配置文件中:vim /etc/profile

export HIVE_HOME=/usr/local/hive

export PATH=.:$HADOOP_HOME/bin:$HIVE_HOME/bin:$PIG_HOME/bin:$HBASE_HOME/bin:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH  

  最后当然别忘了使环境变量生效:source /etc/profile

  (3)简单配置Hive:进入$HIVE_HOME/conf目录下,修改默认模板

Step 2.3.1:

在目录$HIVE_HOME/conf/下,执行命令mv hive-default.xml.template hive-site.xml进行重命名
在目录$HIVE_HOME/conf/下,执行命令mv hive-env.sh.template hive-env.sh进行重命名

Step 2.3.2:

修改hadoop的配置文件hadoop-env.sh,修改内容如下:
  export HADOOP_CLASSPATH=.:$CLASSPATH:$HADOOP_CLASSPATH:$HADOOP_HOME/bin

在目录$HIVE_HOME/bin下面,修改文件hive-config.sh,增加以下内容:
  export JAVA_HOME=/usr/local/jdk
  export HIVE_HOME=/usr/local/hive
  export HADOOP_HOME=/usr/local/hadoop

  (4)简单安装MySQL:这里使用的版本是5.5.31,已经上传至了网盘(http://pan.baidu.com/s/1gdJ78aB)

Step 2.4.1: 

删除Linux上已经安装的mysql相关库信息: rpm  -e  xxxxxxx   --nodeps

执行命令 rpm -qa |grep mysql 检查是否删除干净

Step 2.4.2: 

执行命令 rpm -i  MySQL-server-5.5.31-2.el6.i686.rpm  安装mysql服务端

启动 mysql 服务端,执行命令  mysqld_safe &

Step 2.4.3:

执行命令 rpm -i   MySQL-client-5.5.31-2.el6.i686.rpm  安装mysql客户端

执行命令 mysql_secure_installation 设置root用户密码

  (5)使用 MySQL 作为 Hive 的 metastore:

Step 2.5.1:

把mysql的jdbc驱动放置到hive的lib目录下:cp mysql-connector-java-5.1.10.jar /usr/local/hive/lib

Step 2.5.2:

修改hive-site.xml文件,修改内容如下: 

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://hadoop-master: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>admin</value>
</property>

三、Hive的基本使用

3.1 启动Hadoop

  由1.2的图可知,HDFS和Mapreduce是Hive架构的根基。因此,我们得先启动Hadoop,才能正确使用Hive。

join acinfo b on (a.ac=b.acip) limit 10;

左外连接

select b.name,a.* from dim_ac a left outer join acinfo b on a.ac=b.acip limit 10;

3.3 Hive的Java API接口

  (1)准备工作

  ①在服务器端启动Hive外部访问服务(不是在hive命令行模式下,而是普通模式下):hive --service hiveserver >/dev/null  2>/dev/null &

package hive; import java.sql.Statement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; public class HiveApp { /** * 第一个hive java api程序 * @throws Exception */ public static void main(String[] args) throws Exception { Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver"); Connection con = DriverManager.getConnection( "jdbc:hive://hadoop-master/default", "", ""); Statement stmt = con.createStatement(); String querySQL = "SELECT * FROM default.t1"; ResultSet res = stmt.executeQuery(querySQL); while (res.next()) { System.out.println(res.getString(1)); } } } View Code

  调试结果:

作者:周旭龙

出处:http://www.cnblogs.com/edisonchou/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

www.htsjk.Com true http://www.htsjk.com/hive/10718.html NewsArticle Hadoop学习笔记—17.Hive框架学习,hadoop17.hive 一、Hive:一个牛逼的数据仓库 1.1 神马是Hive? 建立在 Hadoop 基础上 的 数据仓库基础构架 。它提供了一系列的工具,可以用来进行数据提取转...
相关文章
    暂无相关文章
评论暂时关闭