基础知识:Hive简介

Hive 是一个基于Hadoop的开源数据仓库工具,用于存储和处理海量结构化数据。 它把海量数据存储于 hadoop 文件系统,而不是数据库,但提供了一套类数据库的数据存储和处理机制,并采用 HQL (类 SQL )语言对这些数据进行自动化管理和处理。我们可以把 Hive 中海量结构化数据看成一个个的表,而实际上这些数据是分布式存储在 HDFS 中的。 Hive 经过对语句进行解析和转换,最终生成一系列基于 hadoop 的 map/reduce 任务,通过执行这些任务完成数据处理。

Hive 诞生于 facebook 的日志分析需求,面对海量的结构化数据, Hive 以较低的成本完成了以往需要大规模数据库才能完成的任务,并且学习门槛相对较低,应用开发灵活而高效。

Hive特点不想用程序语言开发MapReduce的朋友比如DB们,熟悉SQL的朋友可以使用Hive开离线的进行数据处理与分析工作。

Hive现在适合在离线下进行数据的操作,就是说不适合在挂在真实的生产环境中进行实时的在线查询或操作,因为一个字“慢”。

起源于FaceBook,Hive在Hadoop中扮演数据仓库的角色。建立在Hadoop集群的最顶层,对存储在Hadoop群上的数据提供类SQL的接口进行操作。你可以用 HiveQL进行select,join,等等操作。

如果你有数据仓库的需求并且你擅长写SQL并且不想写MapReduce jobs就可以用Hive代替。

相关下载:apache-hive-1.2.1-bin.tar.gz(下载地址)

1.1、Hive安装与配置

1、准备

在部署节点中选择一个数据节点,作为hive用的节点。(本实验使用slave1)

注意:jdk选择jdk-8u112-linux-x64.tar.gz

2、安装MySQL服务器

相关命令:sudo apt-get install mysql-server

3、安装MySQL客户端

相关命令:sudo apt-get install mysql-client

sudo apt-get install libmysqlclient-dev

4、数据库操作

1)安装hive,之前,先在mysql上创建一个hive,数据库,并在hive数据库中建立表user

相关命令:mysql -u root -p

create database hive;

use hive;

create table user(Host char(20),User char(10),Password char(20));

2)进入mysql,赋予权限,密码自己改

相关命令:insert into user(Host,User,Password) values("localhost","hive","hive");

FLUSH PRIVILEGES;

GRANT ALL PRIVILEGES ON *.* TO 'hive'@'localhost' IDENTIFIED BY 'hive';

FLUSH PRIVILEGES;

5、解压hive安装包之后,配置环境

相关命令与内容:sudo tar -xzvf apache-hive-1.2.1-bin.tar.gz -C /home/hadoop

sudo gedit /etc/profile

------------------------------内 容------------------------------

#hive

export HIVE_HOME=/home/hadoop/apache-hive-1.2.1-bin

export PATH=$PATH:$HIVE_HOME/bin

------------------------------内 容------------------------------

source /etc/profile

6、修改hive/conf下的几个template模板

相关命令:sudo cp hive-env.sh.template hive-env.sh

sudo cp hive-default.xml.template hive-site.xml

7、配置hive-env.sh文件,指定HADOOP_HOME

相关内容:HADOOP_HOME=/usr/local/hadoop

8、修改hive-site.xml文件,指定MySQL数据库驱动、数据库名、用户名及密码相关内容:

javax.jdo.option.ConnectionURL

jdbc:mysql://localhost:3306/hive_metadata?createDatabaseIfNotExist=true

JDBC connect string for a JDBC metastore

javax.jdo.option.ConnectionDriverName

com.mysql.jdbc.Driver

Driver class name for a JDBC metastore

javax.jdo.option.ConnectionUserName

hive

Username to use against metastore database

javax.jdo.option.ConnectionPassword

hive

password to use against metastore database

hive.exec.local.scratchdir

/home/hive/scratchdir

Local scratch space for Hive jobs

hive.downloaded.resources.dir

/home/hive/resourcesdir

Temporary local directory for added resources in the remote file system.

hive.querylog.location

/home/hive/querylog

Location of Hive run time structured log file

hive.server2.logging.operation.log.location

/home/hive/operation_logs

Top level directory where operation logs are stored if logging functionality is enabled

9、创建目录并更改用户

相关命令:sudo mkdir -p /home/hive/scratchdir

sudo mkdir -p /home/hive/resourcesdir

sudo mkdir -p /home/hive/querylog

sudo mkdir -p /home/hive/operation_logs

sudo chown -R hadoop.hadoop /home/hive

sudo chown -R hadoop.hadoop /home/hadoop/apache-hive-1.2.1-bin

10、修改hive/bin下的hive-config.sh文件,设置JAVA_HOME,HADOOP_HOME

相关内容:export JAVA_HOME=/usr/lib/jdk1.8.0_112/

export HADOOP_HOME=/usr/local/hadoop

export HIVE_HOME=/home/hadoop/apache-hive-1.2.1-bin

11、下载mysql-connector-java-5.1.27-bin.jar文件,并放到$HIVE_HOME/lib目录下

12、在HDFS中创建/tmp和/user/hive/warehouse并设置权限(master节点)

相关命令:hadoop fs -mkdir /tmp

hadoop fs -mkdir -p /user/hive/warehouse

hadoop fs -chmod g+w /tmp

hadoop fs -chmod g+w /user/hive/warehouse

13、启动hive(注意:可以在/etc/profile或/etc/bash.bashrc配置,重启计算机后直接hive)

相关命令:cd $HIVE_HOME/bin

./hive

报错:[ERROR] Terminal initialization failed; falling back to unsupported

java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected

hadoop的版本是2.6.0,hive的版本是1.2.1,$HIVE_HOME/lib目录下的jline-2.12.jar比$HADOOP_HOME/share/hadoop/yarn/lib下的jline-0.9.94.jar版本高,版本不一致导致。

解决方法:拷贝hive中的jline-2.12.jar到$HADOOP_HOME/share/hadoop/yarn/lib下,删除jline-0.9.94.jar,并重启hadoop即可。