基础知识: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即可。