一、初识Hive
1、什么是Hive
Hive是基于Haddop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表并提供SQL查询功能,可以将SQL语句转换
MapReduce任务运行。
Hive提供了一系列的工具,可以给用来数据提取转换加载(ETL)是一种存储、查询和分析存储在Hadoop中的大规模数据的机制
2、Hive发展历史及版本
2007年8月 – 始于Facebook
2013年5月 – 0.11 Stinger Phase 1 ORC HiveServer2
2013年10月 – 0.12.0 Stinger Phase 2 - ORC improvement
2014年4月 – Hive 0.13.0 as Stinger Phase 3
2014年11月 – Hive 0.14.0
2015年2月 – Hive 1.0.0
2015年5月 – Hive 1.2.0 (1.2.1 本系列课实验重点版本 )
2016年2月 – Hive 2.0.0 (添加 HPLSQL, LLAP)
2016年6月 – Hive 2.1.0 (2.1.0 本系列课实验补充版本 )
3、为什么要使用Hive
提供了一个简单的优化模型
HQL类SQL语法,简化MR开发
支持在不同的计算框架上运行
支持在HDFS和HBase上临时查询数据
支持用户自定义函数、格式
成熟的JDBC和ODBC驱动程序,用于ETL和BI
稳定可靠(真实生产环境)的批处理
有庞大活跃的社区
4、Hive体系架构
Hive的体系结构分以下几个部分
1)用户接口主要是3个:CLI,Client,HWI(Hive Web Interface)
2)Hive将元数据存储在数据库中,如MySQL、Derby。
3)解释器、编译器、优化器完成HQL查询语句从词法分析、语句分析、编译、优化到查询计划的生成。生成的查询计划存储在HDFS中,随后由MapReduce调用执行。
4)Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(注意 含*的查询,例如:select * from tbl 不会生成 MapReduce任务)
5、Hive与传统数据库
6、交互模式
7、Hive数据类型
1)原始数据类型(类似于SQL数据类型)
2)复杂数据类型
* ARRAY:存储的数据为相同类型
* MAP:具有相同类型的键值对
* STRUCT:封装了一组字段
8、Hive元数据结构
9、Hive数据表
分为内部表和外部表
1) 内部表(管理表)
HDFS中为所属数据库目录下的子文件夹
数据完全由Hive管理,删除表(元数据)会删除数据
2)外部表(External Tables)
数据保存在指定位置的HDFS路径中
Hive不完全管理数据,删除表(元数据)不会删除数据
10、Hive建表语句
create table student if not exists (
id int,
name string)
row format delimited fields terminated by ‘,’
location ‘/file’;
11、建表语句分析
二、配置Hive
1、安装准备
jdk-8u221-linux-x64.tar.gz
hadoop-2.6.0-cdh5.14.2.tar.gz
hive-1.1.0-cdh5.14.2.tar.gz
zookeeper-3.4.6.tar.gz
MySQL-client-5.6.46-1.el7.x86_64.rpm
MySQL-server-5.6.46-1.el7.x86_64.rpm
mysql-connector-java-5.1.48-bin.jar
更改主机名:hostnamectl set-hostname hadoop01
更改主机列表:vi /etc/hosts 新增:192.168.48.104 hadoop01保存退出
在opt目录下创建soft文件夹:mkdir /opt/soft
切换至soft文件夹 cd /opt/soft
将文件拖入此目录中
解压hadoop: tar -zxfhadoop-2.6.0-cdh5.14.2.tar.gz
解压hive:tar -zxfhive-1.1.0-cdh5.14.2.tar.gz
解压zookeeper:tar -zxfzookeeper-3.4.6.tar.gz
解压jdk: tar -zxf jdk-8u221-linux-x64.tar.gz
给文件夹改名:
mvhadoop-2.6.0-cdh5.14.2 hadoop
mvhive-1.1.0-cdh5.14.2 hive hive
mvzookeeper-3.4.6 zookpr
mvjdk-8u221-linux-x64 java8
配置免密登录:
ssh-keygen -t rsa -P ‘’
ssh-copy-id hadoop01
ps:需要稍等片刻
2、配置jdk及环境变量
vi /etc/profile
shift + g 最后一行添加
export JAVA_HOME=/opt/soft/java8
export JRE_HOME=/opt/soft/java8/jre
export CLASSPATH=.: J A V A _ H O M E / l i b / d t . j a r : JAVA\_HOME/lib/dt.jar: JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
export HADOOP_HOME=/opt/soft/hadoop
export HIVE_HOME=/opt/soft/hive
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS=“-Djava.library.path=$HADOOP_HOME/lib”
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin: J R E _ H O M E / b i n : JRE\_HOME/bin: JRE_HOME/bin:HADOOP_HOME/sbin: H A D O O P _ H O M E / b i n : HADOOP\_HOME/bin: HADOOP_HOME/bin:HIVE_HOME/bin
保存退出
使配置即时生效:source /etc/profile
3、配置hadoop
切换至:cd /opt/soft/hadoop/etc/hadoop 目录
vi core-site.xml
新增
fs.defaultFS
hdfs://192.168.48.104:9000
hadoop.tmp.dir
/opt/soft/hadoop/tmp
hadoop.proxyuser.root.hosts
*
hadoop.proxyuser.root.groups
*
vi hdfs-site.xml
dfs.replication
1
dfs.permissions.enable
false
vi mapred-site.xml
mapreduce.framework.name
yarn
vi yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.localhost
localhost
修改jdk环境变量
vi hadoop-env.sh
export JAVA_HOME=/opt/soft/java8
4、配置zookeeper
切换目录至:cd /opt/soft/zookpr
将zoo_sample.cfg改名:mv zoo_sample.cfg/ zoo.cfg
修改zoo.cfg :vi zoo.cfg
修改:将路径改到zookpr目录下
dataDir=/opt/soft/zookpr/zookprdata
新增
server.1=hadoop01:2888:3888
mkdir /opt/soft/zookprzookprdata 使core-site.xml配置中的文件夹存在
格式化:hadoop namenode -format
运行zookper:start-all.sh
ps:首次需要输入四次yes
jps:查看进程如下图 配置无误
5、配置mysql
查看冲突软件:rpm -qa | grep mariadb
卸载冲突文件:rpm -emariadb-libs-5.5.64-1.el7.x86_64 --nodeps
切换至:cd /opt/soft 目录下
下载MySQL组件:
yum install -y nettools
yum install -y perl
yum install -y autoconf
解压客户端:rpm -ivh MySQL-client-5.6.46-1.el7.x86_64.rpm
解压服务端:rpm -ivh MySQL-server-5.6.46-1.el7.x86_64.rpm
启动数据库:service mysql start
修改配置文件: vi /usr/my.conf‘
[client]
default-character-set = utf8
[mysql]
skip-grant-tables
character-set-server = utf8
collation_server = utf8_general_ci
lower_case_table_names
保存退出
重启MySQL:service mysql restart
进入MySQL:mysql
使用数据库:use mysql
设置登陆密码:update user set password = password(‘ok’);
/q 退出数据库
6、配置Hive
切换至:cd /opt/soft/zookpr/conf 目录
新建hive-site.xml文件:vi hive-site.xml
hive.metastore.warehouse.dir
/usr/hive/warehouse
管理表存储的位置,可以是linux中的目录,也可以是相对于fs.default.name有关的目录
hive.metastore.local
true
javax.jdo.option.ConnectionURL
jdbc:mysql://127.0.0.1:3306/hivecreateDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
root
javax.jdo.option.ConnectionPassword
ok
hive.server2.authentication
NONE
hive.server2.thrift.client.user
root
hive.server2.thrift.client.password
ok
更改hive-env.sh.template文件名:mv hive-env.sh.template hive-env.sh
修改hive-env.sh文件:vi hive-env.sh
export HADOOP_HOME=/opt/soft/hadoop
export HIVE_CONF_DIR=/opt/soft/hive/conf
export HIVE_AUX_JARS_PATH=/opt/soft/hive/lib
export JAVA_HOME=/opt/soft/java8
将mysql-connector-java-5.1.48-bin.jar移动到移动到/opt/soft/hive/lib目录下:
mv /opt/soft/mysql-connector-java-5.1.48-bin.jar /opt/soft/hive/lib
hadoop fs -ls / 查看hdfs目录文件
hadoop fs -mkdir -p /usr/hive/warehouse 创建管理表存储位置
hadoop fs-chmod -R 777 /usr/hive 给文件夹赋权
初始化 MySQL:schematool -dbType mysql -initSchema
关闭黑界面后台运行提示功能,节省一个后台窗口:
hive后台执行:nohup hive --service hiveserver2 &
beeline -u jdbc:hive2://localhost:10000 命令行模式
ps:最好在hive/bin目录下运行
要退出beeline :!q
hive 进入hive 交互模式
退出 quit; 或者 exit;
此时 jps
7、常见错误
1)未能成功连接数据库(命令行模式启动失败)
可能的原因:1、未启动Hive后台运行 2、数据库hive已经存在 3、配置文件更改后未重新启动
2)无法创建数据库
解决方案:查看hive-site.xml配置文件中的管理表存储的位置 文件夹是否存在 以及 有无赋权
3)无法删除数据库中的表
连接数据库的jar包版本较低,需要升级
4)未在hive/bin目录下运行beeline模式,导致的冲突问题
5)其他,欢迎补充
更多推荐
菜鸟先飞之初识Hive、安装教程及常见问题
发布评论