Hive简介:
基于Hadoop的一个数据仓库工具,构建于hadoop的hdfs和mapred之上,用于管理和查询结构化/非结构化数据的数据仓库。可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
Hive将HQL语句转译成M/RJob,然后按照MR的计算框架在Hadoop执行,也可以把HQL中的表、字段转换为HDFS中的文件(夹)以及文件中的列。这套映射工具称之为metastore
Hive的表其实就是HDFS的目录,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/RJob里使用这些数据。
Hive作用
Hvie降低了数据人员使用MR的门槛,使得分布式计算通过类SQL的操作即可实现,对大数据应用发展起到了很多的推动作用。
Hive本质:
本质是将HQL转换为MapReduce程序的工具。
不属于google核心论文内容。(dfs、mr、bigtable)
由facebook开发并开源。
特点
使用HQL作为查询接口
使用HDFS作为底层存储
使用MapRed作为执行层
可扩展到100PB+
统一的元数据管理
查询语言 | HiveQL | Pig |
语法 | SQL-like | PigLatin脚本 |
表 | 有 | 非严格意义上的表 |
分区 | 有 | 无 |
外部服务 | 有thirft | 无 |
UDF | 有 | 有 |
JDBC/ODBC | 有 | 无 |
SHELL | 有 | 有 |
WEB UI | 有 | 无 |
即时性 | 差一些 | 较快 |
查询语言 | HiveQL | Pig |
语法 | SQL-like | PigLatin脚本 |
表 | 有 | 非严格意义上的表 |
分区 | 有 | 无 |
外部服务 | 有thirft | 无 |
UDF | 有 | 有 |
JDBC/ODBC | 有 | 无 |
SHELL | 有 | 有 |
WEB UI | 有 | 无 |
即时性 | 差一些 | 较快 |
Hive与HBase对比
共同点
1.HBase与Hive都架构在Hadoop之上,都是用hdfs作为底层存储。
2.职能上都能对外提供表形式的数据查询等服务。
区别
1.Hive是建立在Hadoop之上为了减少MapReducejobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目 。
2.Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,Hive中的表是纯逻辑表,是对hdfs文件的一种记录方式。
3.Hbase是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作。
环境:
Centos 6.7
mysql.5.5
Hive 2.0.0
hadoop 2.7.2
第一步:安装mysql :mysql -uroot -p123 可以登录就证明安装成功了
[root@localhost local]# mysql -uroot -p123
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 57
Server version: 5.5.16 MySQL Community Server (GPL)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
第二步:检查之前安装的hadoop
[root@localhost hadoop-2.7.2]# jps
9893 SecondaryNameNode
9702 DataNode
9603 NameNode
10149 NodeManager
10048 ResourceManager
13687 Jps
第三步:修改配置文件
export JAVA_HOME=/home/work/jdk1.7.0
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
export CLASSPATH=.:$HIVE_HOME/lib:$CLASSPATH
PATH=$PATH:$HOME/bin:$HIVE_HOME/bin
export PATH
5.下面这个jar包是链接mysql的java驱动包,要单独去网络上下载:
6.修改hive-env.sh文件(cp hive-env.sh.tem.... file)
# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/usr/local/hadoop-2.7.2
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/usr/local/apache-hive-2.0.0-bin/conf
7.启动hive
[root@localhost apache-hive-2.0.0-bin]# hive
which: no hbase in (/home/work/jdk1.7.0/bin:/usr/local/hadoop-2.7.2/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/apache-maven-3.2.1/bin:/usr/local/apache-hive-2.0.0-bin/bin)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/apache-hive-2.0.0-bin/lib/hive-jdbc-2.0.0-standalone.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/apache-hive-2.0.0-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop-2.7.2/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Logging initialized using configuration in jar:file:/usr/local/apache-hive-2.0.0-bin/lib/hive-common-2.0.0.jar!/hive-log4j2.properties
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. tez, spark) or using Hive 1.X releases.
hive>
异常错误:
Exception in thread "main"java.lang.RuntimeException: java.lang.IllegalArgumentException:java.net.URISyntaxException: Relative path in absolute URI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
atorg.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:444)
atorg.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:672)
atorg.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616)
atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce
是因为hive目录问题:
${system:java.io.tmpdir}/${system:user.name}
将hive-site.xml文件中的上面路径全部替换成一个存在的目录:这里我创建/home/word/hive目录 并建立local 和resources目录
在替换的时候观察那个是指那个目录
提示:最好将hadoop重新格式化一下 hadoop namenode -formet