Hive 学习

Hive 的官方文档: https://cwiki.apache.org/confluence/display/Hive/Home#Home-HiveVersionsandBranchesHiveVersionsHiveVersionsandBranches

个人感觉官方文档比较乱,一般学习都是从 Getting Start 开始学,可是首次接触 Hive 的人去看 Getting Start 的话,感觉会很晕。可以通过以下步骤, 先把 Hive 跑起来,然后再结合对 Hive 的简介,就能对它有基本的了解了。

首先在 hive-site.xml 中配置元数据存储。这里使用了 http://blog.csdn.net/reesun/article/details/8556078 中提到的一种方式: metadata 存在远程 Mysql 数据库,一台机器做Hive 服务端,一台机器做 Hive 客户端。

Hive 服务端(假设在机器 192.168.137.11上) hive-site.xml 配置:

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://192.168.2.231: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>
    <description>Driver class name for a JDBC metastore</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    <description>Username to use against metastore database</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123456</value>
    <description>password to use against metastore database</description>
  </property>
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
  </property>

 

Hive 客户端(假设在机器 192.168.137.12) hive-site.xml 配置:

<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
  </property>
  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://192.168.137.11:9083</value>
    <description>Thrift URI for remote metastore</description>
  </property>

 

 

启动 Hive 前,需要启动 Hadoop

进入 Hive 的 bin 目录, 启动 metastore 服务(上面配置的Mysql,需要把 mysql jdbc 的jar 包放到 hive 的 lib 目录下):

         hive --service metastore >metastore.log 2>& 1&     后台运行,日志写入到当前目录下的 metastore.log 中

服务端启动后,可以在客户端 Hive 的 bin 目录运行: ./hive  等一会后,会进入 hive 的命令终端。然后就可以运行 hql 了。

 

使用下面的步骤创建表:

1. 创建Database:      create database testhive;

2. 使用刚创建的 db:     use testhive;

3. 创建一张表:   

create table emp(
name string,
age int,
salary int,
deptCd string,
like array<string>,
tedian map<string, string>
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
collection items terminated by "_"
map keys terminated by ":"
lines terminated by '\n';

 

    上面 TERMINATED BY ',' 表示各个字段之间使用逗号分隔。每行的内容示例:    John,18,2000,dept1,sport_book_movie,sex:man_tall:180

     Hive 的元数据信息存在数据库中(本例中是 mysql 数据库),真正的数据是存在 HDFS 上的。上面的 emp 表在HDFS 上就是一个文件,上面创建的表中的一条记录其实就是文件中的一行,各字段的值用 TERMINATED BY 指定的字符分开。

4. 往表中加载一些数据:

load data local inpath '/home/shj/emp.txt' into table emp;

注意:上面只对存储格式为 TextFile 的表有效。 否则会报下面的错误:

Error: The file that you are trying to load does not match the file format of the destination table. (state=42000,code=40000)

下面的两个配置会影响默认的存储格式:

<property>
    <name>hive.default.fileformat</name>
    <value>TextFile</value>
    <description>
      可能值: [textfile, sequencefile, rcfile, orc].
     用户在创建表时可以指定一个值覆盖此默认值。如: CREATE TABLE ... STORED AS [FORMAT]
    </description>
</property>
<property>
    <name>hive.default.fileformat.managed</name>
    <value>none</value>
    <description>
      可能值: [none, textfile, sequencefile, rcfile, orc]. 指定了创建 managed table 时默认的文件格式。
此值不会影响创建的外部表的默认文件格式。如果此值是 none 或没有设置,将会使用 hive.default.fileformat 指定的值    
</description> </property>

 

进一步的一些对 Hive 数据库的操作详见: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML

进行一些表的操作的时候,遇到了问题。 select * from emp; 能正确运行,显示出了表中的记录。但是运行  select count(1) from emp; 时,程序一直卡在那不动。后来查了一下,才发现还需要启动 Hadoop 的 YARN。 Hive 把 hql 转化成了 Hadoop 的 Map-Reduce 的任务,需要运行在 YARN 上。

 

以上是 Hive 启动 metastore 服务时的配置及使用方法。另外 Hive 还可以启动 hiveserver2 服务,开启此服务可以让客户端以 JDBC 的方式连接上 hive。启动此服务的步骤:

1.在 hive-site.xml 中增加如下配置(还是在上面所说的 192.168.137.11 这个服务器上):

  

<property>
    <name>hive.server2.thrift.bind.host</name>
    <value>192.168.137.11</value>
    <description>Bind host on which to run the HiveServer2 Thrift service.</description>
  </property>

 

2. 启动 hiveserver2 服务。有方式有两种: (1).  hive --service hiveserver2    (2). 直接运行 bin 目录下的 hiveserver2 脚本

3. 查看服务是否启动成功。

    在任意一台装有 hive 的机器上运行 bin 目录下的 beeline(这是官方提供可以连接 hive server 的客户端)。运行此脚本后,会出现 “beeline>” 的提示符。然后输入 

    !connect jdbc:hive2://192.168.137.11:10000

    会提示输入用户名和密码,默认没有开启认证,所以直接按回车就行。成功连接后,就可运行上面说过的 hql 了。

当然,启动 hiveserver2 服务的,我们也可以在代码里按照连 JDBC 的方式连接 hive 。

 

hiveserver2 的详细介绍: https://cwiki.apache.org/confluence/display/Hive/Setting+Up+HiveServer2

beeline 的详细介绍: https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients

 

转载于:https://www.cnblogs.com/langfanyun/p/8395170.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值