在Hadoop生态圈中属于数据仓库的角色。Hive能够管理Hadoop中的数据,同时可以查询Hadoop中的数据。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制;
Hive定义了简单的类SQL查询语言,称为HQL ,它允许熟悉SQL的用户查询数据。同时,这个语言也允许熟悉MapReduce开发者的开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作;
本质上讲,Hive是一个SQL解析引擎。Hive可以把SQL查询转换为MapReduce中的job然后在Hadoop执行。Hive有一套映射工具,可以把SQL转换为MapReduce中的job,可以把SQL中的表、字段转换为HDFS中的文件(夹)以及文件中的列。这套映射工具称之为metastore,一般存放在derby、mysql中;
Hive的表其实就是HDFS的目录,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/R的Job里使用这些数据。
Hive的系统架构用户接口主要有三个:CLI,JDBC/ODBC和WebUI
CLI,即Shell命令行
JDBC/ODBC是Hive的Java,与使用传统数据库JDBC的方式类似
WebUI是通过浏览器访问Hive
Hive将元数据存储在数据库中(metastore),支持mysql、derby。Hive中的元数据包括表的名字、表的列和分区及其属性、表的属性(是否为外部表等)、表的数据所在目录等
解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成。生成的查询计划存储在 HDFS 中,并在随后有MapReduce调用执行
Hive的数据存储在HDFS中,大部分的查询由MapReduce完成(包含 * 的查询,比如select * from table不会生成MapRedcue任务,where后的条件是partition也不会生成M/R任务)
安装是在master节点的hadoop用户下进行
安装前准备:
完成JDK安装配置
完成hadoop安装配置
下载文件
Hive下载路径:http://archive.apache.org/dist/hive/apache-hive-1.2.1-bin.tar.gz
mysql-connector-java-5.1.39.zip
2、集群的规划设计
集群中部署3个节点,本地模式只安装master节点,远程模式需要安装slave1和slaver2节点。
IP hostname 充当的角色
192.168.80.3 Master nn/RM/Hive/metastore/mysql
192.168.80.4 Slave1 dn/NM/Hive
192.168.80.5 Slave2 dn/NM/hive
角色描述:
nn:NameNode节点
dn:DataNode节点
RM:ResourceManager
NM:NodeManager
每台机器都安装Hive,这样多个客户端可以同时执行Hive命令。
1)可以选用tar.gz安装,详细情况见https://blog.csdn.net/cs_mycsdn/article/details/82019124
2)安装服务器
sudo apt-get install mysql-server
安装客户端
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
修改配置文件/etc/mysql/mysql.conf.d/mysqld.cnf
注释 bind-address = 127.0.0.1行
正常情况下,mysql占用的3306端口只是在IP 127.0.0.1上监听,拒绝了其他IP的访问,需要将bind-address = 127.0.0.1注释掉。
创建用户并设置远程登录权限
grant ALL PRIVILEGES on *.* to ‘hive'@'%' identified by'123456';
给hive用户任何机器('%')任何库.任何表(*.*)的访问权限,访问密码(identified by)为'123456'
grant ALL PRIVILEGES ON *.* TO ‘hive'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
1)在hadoop用户下,将下载的hive安装包上传到/home/hadoop上
解压 tar -zvxf apache-hive-2.3.3-bin.tar.gz
重命名包 mv apache-hive-2.3.3-bin/ hive-2.3.3
将mysql-connector-java-5.1.39.zip文件解压出来的jar放入hive 的lib目录下(sftp>导入到Linux目录下,mv剪切)
创建目录
mkdir /home/hadoop/hive-2.3.3/datas/logs
mkdir /home/hadoop/hive-2.3.3/datas/temp
2)配置hive环境变量
[hadoop@sure hive-2.3.3]$ sudo vi /etc/profile
JAVA_HOME=/usr/java/jdk1.8.0_144
JRE_HOME=/usr/java/jdk1.8.0_144/jre
HADOOP_HOME=/home/hadoop/hadoop-2.9.0
MYSQL_HOME=/usr/local/mysql
HIVE_HOME=/home/hadoop/hive-2.3.3
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/etc/hadoop:$MYSQL_HOME/bin:$HIVE_HOME/bin:$PATH
export JAVA_HOME JRE_HOME CLASSPATH HADOOP_HOME PATH
3)使配置生效
[hadoop@sure hive-2.3.3]$ source /etc/profile
4)配置hive-env.sh
cd /home/hadoop/hive-2.3.3/conf
cp hive-env.sh.template hive-env.sh
编辑hive-env.sh文件
HADOOP_HOME=/home/hadoop/hadoop-2.9.0
export HIVE_CONF_DIR=/home/hadoop/hive-2.3.3/conf
5)创建目录
6)配置hive-site.xml
cd /home/hadoop/hive-2.3.3/conf
cp hive-default.xml.template hive-site.xml
编辑hive-site.xml文件
把
把
改为
//替换为jdbc:mysql://sure(mysql所在的主机名):3306/hive(随意创建的用户名)?createDatabaseIfNotExist=true
/system: 搜索 找到
把
改为
把
改为
functionality is enabled
把
改为
把
改为
e system.
7)配置log4j
创建配置文件:
cp hive-exec-log4j.properties.template hive-exec-log4j.properties
cp hive-log4j.properties.template hive-log4j.properties
修改上面两个文件中的配置:
[hadoop@sure conf]$ vi hive-exec-log4j2.properties
hive.log.dir=/home/hadoop/hive-2.3.3/datas/logs
[hadoop@sure conf]$ vi hive-log4j2.properties
把 property.hive.log.dir = ${sys:java.io.tmpdir}/${sys:user.name}
改为 property.hive.log.dir =/home/hadoop/hive-2.3.3/datas/logs
// log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter
8)初始化mysql数据库
mysql> select user,password,host from user;先查看用户信息
为了支持mysql远程访问首先设置当前mysql用于允许master远程机访问,并修改root用户的密码为123456:
mysql> grant all privileges on *.* to root@'master' identified by '123456' with grant option;
mysql> flush privileges;
*.*代表全部数据库的全部表授权,也可以指定数据库授权,如test_db.*;
all privileges代表全部权限,也可以insert,update,delete,create,drop等;
允许root用户在spark(Linux系统的主机名,IP映射)进行远程登陆,并设置root用户的密码为root。
flush privileges告诉服务器重新加载授权表。
hive执行初始化命令时
MySQL的驱动包放置到$HIVE_HOME/lib目录下
执行schematool -dbType mysql -initSchema进行初始化;
Error: Duplicate key name 'PCS_STATS_IDX' (state=42000,code=1061)
以下异常说明mysql已经启动。 应先关掉先前启动的mysql.再执行初始化schema操作。
schematool --dbType mysql –initSchema
如果出现如下报错
org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version. Underlying cause: java.sql.SQLException : Access denied for user 'root'@'sure' (using password: YES)
接下来就是用sql来修改root的密码
mysql> use mysql;
mysql> update user set password=password("你的新密码") where user="root";
mysql> flush privileges;
mysql> quit
如果出现如下警告:
WARN: Establishing SSL connection without server‘s identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn’t set. 。。。
修改hive-site.xml配置文件:
9)启动hive
Hive
Found 3 items
drwxr-xr-x - hadoop supergroup 0 2018-09-06 16:58 /hive/logs
drwxr-xr-x - hadoop supergroup 0 2018-09-06 16:58 /hive/temp
drwxr-xr-x - hadoop supergroup 0 2018-09-06 16:57 /hive/warehouse
Found 3 items
drwx-wx-wx - hadoop supergroup 0 2018-09-06 16:58 /hive/logs
drwx-wx-wx - hadoop supergroup 0 2018-09-06 16:58 /hive/temp
drwx-wx-wx - hadoop supergroup 0 2018-09-06 16:57 /hive/warehouse
hive> create TABLE test( id INT, name string);
hive> SHOW TABLES;
hive> exit;
远程模式在slave1和slave2上安装配置。
1、将master上的hive-1.2.1目录复制到其他节点上
2、按照master上.profile文件的配置修改其他节点上的.profile文件,添加hive的配置
3、修改hive-size.xml文件,删除如下的配置:
javax.jdo.option.ConnectionURL
javax.jdo.option.ConnectionDriverName
javax.jdo.option.ConnectionUserName
javax.jdo.option.ConnectionPassword
4、修改hive-size.xml文件,添加如下的配置:
5、在master节点启动hive服务端程序:$ hive --service metastore &
6、在slave1或slaver2上运行hive命令
hive
7、测试hive
hive> SHOW TABLES;