大数据学习(8)Hive基础

什么是Hive

Hive是一个基于HDFS的查询引擎。我们日常中的需求如果都自己去写MapReduce来实现的话会很费劲的,Hive把日常用到的MapReduce功能,比如排序、分组等功能进行了抽象,对外提供类似于普通数据库的查询服务。

它只是封装MapReduce计算,但它本质并不是数据库服务,不适合作为联机服务。通常用于数据仓库的离线计算中。
在Hive中已经明确说明,不建议使用MapReduce了,而推荐使用Spark。

安装

tar -zxvf apache-hive-1.2.2-bin.tar.gz -C /usr/local/

hive-site.xml:

<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/hive_metastore?createDatabaseIfNotExist=true</value>
<description>metadata is stored in a MySQL server</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>MySQL JDBC driver class</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>user name for connecting to mysql server</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password for connecting to mysql server</description>
</property>
</configuration>

拷贝MySQL驱动jar到hive的lib目录中。

先启动HDFS:

start-dfs.sh

再启动hive

如果报错:

Logging initialized using configuration in jar:file:/usr/local/apache-hive-1.2.2-bin/lib/hive-common-1.2.2.jar!/hive-log4j.properties
[ERROR] Terminal initialization failed; falling back to unsupported
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
at jline.TerminalFactory.create(TerminalFactory.java:101)
at jline.TerminalFactory.get(TerminalFactory.java:158)
at jline.console.ConsoleReader.<init>(ConsoleReader.java:229)
at jline.console.ConsoleReader.<init>(ConsoleReader.java:221)
at jline.console.ConsoleReader.<init>(ConsoleReader.java:209)
at org.apache.hadoop.hive.cli.CliDriver.setupConsoleReader(CliDriver.java:787)
at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:721)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:681)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
at jline.console.ConsoleReader.<init>(ConsoleReader.java:230)
at jline.console.ConsoleReader.<init>(ConsoleReader.java:221)
at jline.console.ConsoleReader.<init>(ConsoleReader.java:209)
at org.apache.hadoop.hive.cli.CliDriver.setupConsoleReader(CliDriver.java:787)
at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:721)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:681)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

需要把hive下lib目录中的jline jar文件替换到hadoop中yarn目录中:

rm /usr/local/hadoop-2.6.5/share/hadoop/yarn/lib/jline-0.9.94.jar
cp /usr/local/apache-hive-1.2.2-bin/lib/jline-2.12.jar /usr/local/hadoop-2.6.5/share/hadoop/yarn/lib/

启动之后会自动创建数据库,登录数据库中可以查看到一些元信息:

mysql> use hive_metastore;
mysql> use hive_metastore ;
mysql> select * from dbs;
+-------+-----------------------+------------------------------------------+---------+------------+------------+
| DB_ID | DESC | DB_LOCATION_URI | NAME | OWNER_NAME | OWNER_TYPE |
+-------+-----------------------+------------------------------------------+---------+------------+------------+
| 1 | Default Hive database | hdfs://centos01:9000/user/hive/warehouse | default | public | ROLE |
+-------+-----------------------+------------------------------------------+---------+------------+------------+
1 row in set (0.00 sec)

Hive基本操作

DDL
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
参考:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

Thrift

启动hiveserver2服务

./hiveserver2

使用beeline连接到这个服务上:

[[email protected] bin]# ./beeline
Beeline version 1.2.2 by Apache Hive
beeline> !connect jdbc:hive2://localhost:10000
Connecting to jdbc:hive2://localhost:10000
Enter username for jdbc:hive2://localhost:10000: root
Enter password for jdbc:hive2://localhost:10000: ****
Connected to: Apache Hive (version 1.2.2)
Driver: Hive JDBC (version 1.2.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10000> show databases;
+----------------+--+
| database_name |
+----------------+--+
| default |
+----------------+--+
1 row selected (3.666 seconds)
0: jdbc:hive2://localhost:10000>
时间: 2024-08-14 17:31:33

大数据学习(8)Hive基础的相关文章

好程序员大数据学习路线hive内部函数

好程序员大数据学习路线hive内部函数,持续为大家更新了大数据学习路线,希望对正在学习大数据的小伙伴有所帮助.1.取随机数函数:rand()语法: rand(),rand(int seed) 返回值: double 说明: 返回一个0到1范围内的随机数.如果指定seed,则会得到一个稳定的随机数序列select rand();select rand(10);2.分割字符串函数:split(str,splitor) 语法: split(string str, string pat) 返回值: ar

大数据学习:hive篇,入门学习大数据开发

大数据开发之路漫漫其修远兮,吾将上下而求索.对于很多入门学习大数据开发的小伙伴,可能第一个接触到的,是我们的大数据领域的数据仓库工具hive.在大数据生态中,hive一般作为数据仓库来使用. Hive本身是不做数据存储的,它是构建在分布式存储系统HDFS之上,我们平常看到的表数据其实本质上来说还是HDFS的文件. Hive把这些HDFS数据文件,通过元数据规则映射为数据库的表,并且可以提供SQL操作的功能.Hive总体结构比较简单,总体有三个组件:用户接口.元数据系统.驱动器.用户通过用户接口来

大数据学习之MapReduce基础与Yarn集群安装09

1大数据解决的问题? 海量数据的存储:hadoop->分布式文件系统HDFS 海量数据的计算:hadoop->分布式计算框架MapReduce 2什么是MapReduce? 分布式程序的编程框架,java->ssh ssm ,目的:简化开发! 是基于hadoop的数据分析应用的核心框架. mapreduce的功能:将用户编写的业务逻辑代码和自带默认组件整合成一个完整的 分布式运算程序,并发的运行在hadoop集群上. 3 MapReduce的优缺点 优点: (1)易于编程 (2)良好的拓

大数据学习——关于hive中的各种join

准备数据 2,b 3,c 4,d 7,y 8,u 2,bb 3,cc 7,yy 9,pp 建表: create table a(id int,name string) row format delimited fields terminated by ','; create table b(id int,name string) row format delimited fields terminated by ','; 导入数据: load data local inpath '/root/h

大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单机的搭建,是因为作为个人学习的话,单机已足以,好吧,说实话是自己的电脑不行,使用虚拟机实在太卡了... 整个的集群搭建是在公司的测试服务搭建的,在搭建的时候遇到各种各样的坑,当然也收获颇多.在成功搭建大数据集群之后,零零散散的做了写笔记,然后重新将这些笔记整理了下来.于是就有了本篇博文. 其实我在搭

大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集

引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单机的搭建,是因为作为个人学习的话,单机已足以,好吧,说实话是自己的电脑不行,使用虚拟机实在太卡了... 整个的集群搭建是在公司的测试服务搭建的,在搭建的时候遇到各种各样的坑,当然也收获颇多.在成功搭建大数据集群之后,零零散散的做了写笔记,然后重新将这些笔记整理了下来.于是就有了本篇博文. 其实我在搭

没有基础可以学习大数据吗?0基础怎么学习大数据?给初学者支几招

小白如何学习大数据技术?大数据怎么入门?怎么做大数据分析?数据科学需要学习那些技术?大数据的应用前景等等问题,已成为热门大数据领域热门问题,以下是对新手如何学习大数据技术问题的解答~ 大数据开发学习可以按照以下内容进行学习 第一阶段:JavaSE+MySql+Linux 学习内容:Java 语言入门 → OOP 编程 → Java 常用Api.集合 → IO/NIO → Java 实 用技术 → Mysql 数据库 → 阶段项目实战 → Linux 基础 → shell 编程 学习目标:学习ja

0基础怎么学习大数据?给零基础学习者支几招

小白如何学习大数据技术?大数据怎么入门?怎么做大数据分析?数据科学需要学习那些技术?大数据的应用前景等等问题,已成为热门大数据领域热门问题,以下是对新手如何学习大数据技术问题的解答~ 大数据开发学习可以按照以下内容进行学习 第一阶段:JavaSE+MySql+Linux 学习内容:Java 语言入门 → OOP 编程 → Java 常用Api.集合 → IO/NIO → Java 实 用技术 → Mysql 数据库 → 阶段项目实战 → Linux 基础 → shell 编程 学习目标:学习ja

大数据学习路线是什么?学大数据需要什么基础?

因为大数据前景好,薪资高,很多人想通过参加学习大数据,然后进入大数据行业发展.但是因为大数据的门槛较高,对于学习人员有一定的要求,那么学习大数据需要什么基础知识呢? 一起来了解下对于大数据学习者本身的学历水平的要求. 目前大多数的机构,对于大数据学习者要求必须是大专学历以上,而且大专学历还要求是理工科相关专业的,如果是本科及本科以上的,则对专业要求适当的放宽.同时大数据分为两大方向:大数据开发和数据分析. 这两大方向的对于基础知识的要求不同,数据分析偏向应用层面,对于编程要求不高,相较而言对于基

零基础学习大数据需要掌握的基础

大数据已经成为时代发展的趋势,很多人纷纷选择学习大数据,想要进入大数据行业.大数据技术体系庞大,包括的知识较多,系统的学习大数据可以让你全面掌握大数据技能.学习大数据需要掌握哪些知识? 我还是要推荐下我自己创建的大数据资料分享群142973723,这是大数据学习交流的地方,不管你是小白还是大牛,小编都欢迎,不定期分享干货,包括我整理的一份适合零基础学习大数据资料和入门教程. 1.学习大数据首先要学习Java基础 怎样进行大数据学习的快速入门?学大数据课程之前要先学习一种计算机编程语言.Java是