一、Hive的概述; 二、Hive的体系架构; 三、探讨Hadoop全家(生态圈); 四、Hive与传统数据库相比; 五、Hive的数据模型(自主学习); 六、搭建Haoop 2.7.6结合hive2.3.3实现数据仓库管理; 一、Hive的概述; 背景:Hive起源于Facebook(一个美国的社交服务网络)。Facebook有着大量的数据,而Hadoop是一个开源的MapReduce实现,可以轻松处理大量的数据。但是MapReduce程序对于Java程序员来说比较容易写,但是对于其他语言使用者来说不太方便。此时Facebook最早地开始研发Hive,它让对Hadoop使用SQL查询(实际上SQL后台转化为了MapReduce)成为可能,那些非Java程序员也可以更方便地使用。hive最早的目的也就是为了分析处理海量的日志; 概述:hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能, Hadoop 通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。因此Hive并不能够在大规模数据集上实现低延迟快速的查询,例如,Hive 在几百MB 的数据集上执行查询一般有分钟级的时间延迟; Hive可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析; 二、Hive的体系架构; 体系架构: 1.用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。WUI是通过浏览器访问Hive; Hive执行请求的流程: 三、探讨Hadoop全家(生态圈); https://www.sohu.com/a/218420440_505794 ##Hadoop全家 https://www.cnblogs.com/zhangwuji/p/7594725.html ##Hadoop发展史 四、Hive与传统数据库相比; 由于Hive采用了SQL的查询语言HQL,因此很容易将Hive理解为数据库。其实从结构上来看,Hive和数据库除了拥有类似的查询语言,再无类似之处。数据库可以用在Online的应用中,但是Hive是为数据仓库而设计的,清楚这一点,有助于从应用角度理解Hive的特性; 五、Hive的数据模型(自主学习); 概述:对于数据存储,Hive没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织Hive中的表,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。Hive中所有的数据都存储在HDFS中,存储结构主要包括数据库、文件、表和视图。Hive中包含以下数据模型:Table内部表、External Table外部表、Partition分区、Bucket桶。自行百度Hive的数据模型; 六、搭建Haoop 2.7.6结合hive2.3.3实现数据仓库管理; 案例环境:
案例步骤: Ø安装hive软件程序; Ø准备hive的元数据存储位置Mysql数据库; Ø准备hive服务需要存储文件的目录; Ø配置hive的配置文件; Ø配置hive服务连接mysql数据库的驱动; Ø初始化hive连接mysql数据库; Ø启动并连接hive服务; Ø学习hive中的管理操作; Ø将文件内容导入到hive的表中; Ø通过web页面查看HDFS文件系统中的数据; Ø通过mysql管理控制台验证mysql中存储的hive的元数据; Ø安装hive软件程序; [root@master ~]# ls /root/apache-hive-2.3.3-bin.tar.gz /root/apache-hive-2.3.3-bin.tar.gz [root@master ~]# tar zxvf /root/apache-hive-2.3.3-bin.tar.gz [root@master ~]# mv apache-hive-2.3.3-bin/ /usr/local/hive [root@master ~]# chown hadoop:hadoop /usr/local/hive/ -R [root@master ~]# vi /etc/profile export HIVE_HOME=/usr/local/hive export PATH=$PATH:$HIVE_HOME/bin export CLASSPATH=$CLASSPATH:/usr/local/hive/lib/*:. [root@master ~]# source /etc/profile Ø准备hive的元数据存储位置Mysql数据库; [root@master ~]# yum -y install mariadb-server mariadb [root@master ~]# sed -i 's/\[mysqld\]/\[mysqld\]\nskip_name_resolve/g' /etc/my.cnf ##注:需要关闭mysql服务器的反向解析,不然会在初始化myssql数据库时出现反向解析情况,无法初始化 [root@master ~]# systemctl start mariadb [root@master ~]# systemctl enable mariadb Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service. [root@master ~]# mysqladmin -uroot password [root@master ~]# mysql -uroot -p123123 MariaDB [(none)]> grant all on *.* to root@'192.168.100.101' identified by '123123'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> exit Ø准备hive服务需要存储文件的目录; [root@master ~]# su - hadoop [hadoop@master ~]$ hadoop fs -mkdir -p /user/hive/warehouse [hadoop@master ~]$ hadoop fs -chmod 777 /user/hive/warehouse [hadoop@master ~]$ hadoop fs -mkdir -p /tmp/hive/ [hadoop@master ~]$ hadoop fs -chmod 777 /tmp/hive [hadoop@master ~]$ hadoop fs -ls / Found 2 items drwxr-xr-x - hadoop supergroup 0 2018-08-27 20:51 /tmp drwxr-xr-x - hadoop supergroup 0 2018-08-27 20:51 /user [hadoop@master ~]$ mkdir /usr/local/hive/tmp [hadoop@master ~]$ mkdir /usr/local/hive/tmp/root Ø配置hive的配置文件; [hadoop@master ~]$ cp /usr/local/hive/conf/hive-default.xml.template /usr/local/hive/conf/hive-site.xml [hadoop@master ~]$ mv /usr/local/hive/conf/hive-env.sh.template /usr/local/hive/conf/hive-env.sh [hadoop@master ~]$ vi /usr/local/hive/conf/hive-site.xml 364 365 366 367 368 37 38 39 40 41 73 74 75 76 77 78 79 80 81 82 1683 1684 1685 1686 1687 3974 3975 3976 3977 3978 543 544 545 546 550 551 1018 1019 1020 1021 1022 1043 1044 1045 1046 1047 528 529 530 531 532 744 745 746 747 753 754 :wq [hadoop@master ~]$ vi /usr/local/hive/conf/hive-env.sh ##设置hive的环境变量 export HADOOP_HOME=/usr/local/hadoop export HIVE_CONF_DIR=/usr/local/hive/conf export HIVE_AUX_JARS_PATH=/usr/local/hive/lib :wq Ø配置hive服务连接mysql数据库的驱动; [hadoop@master ~]$ wget https://cdn.//Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz [hadoop@master ~]$ ls mysql-connector-java-5.1.46.tar.gz mysql-connector-java-5.1.46.tar.gz [hadoop@master ~]$ tar zxvf mysql-connector-java-5.1.46.tar.gz [hadoop@master ~]$ cp /home/hadoop/mysql-connector-java-5.1.46/mysql-connector-java-5.1.46.jar /usr/local/hive/lib/ [hadoop@master ~]$ ls /usr/local/hive/lib/mysql-connector-java-5.1.46.jar /usr/local/hive/lib/mysql-connector-java-5.1.46.jar Ø初始化hive连接mysql数据库; [hadoop@master ~]$ /usr/local/hive/bin/schematool -dbType mysql -initSchema Ø启动并连接hive服务; [hadoop@master ~]$ hive hive> show databases; OK default Time taken: 4.695 seconds, Fetched: 1 row(s) Ø学习hive中的管理操作; hive> show functions; ##查看可用函数 OK ! != $sum0 % & * + - / < <= ... hive> desc function sum; ##查看函数详细信息 OK sum(x) - Returns the sum of a set of numbers Time taken: 0.006 seconds, Fetched: 1 row(s) hive> create database linuxfan; ##创建数据库linuxfan OK Time taken: 0.282 seconds hive> show databases; OK default linuxfan Time taken: 0.023 seconds, Fetched: 2 row(s) hive> use linuxfan; OK Time taken: 0.025 seconds hive> create table t1(id int,name string) row format delimited fields terminated by '\t'; ##创建表并且指定字段id和字段name之间的分隔使用\t制表符; OK Time taken: 0.581 seconds hive> show tables; OK t1 Time taken: 0.042 seconds, Fetched: 1 row(s) hive> exit; Ø将文件内容导入到hive的表中; [hadoop@master ~]$vi ./1.txt ##001和zs之间必须手动敲tab键,不得复制粘贴 001 zs 002 ls 003 ww 004 xm [hadoop@master ~]$ hive hive> load data local inpath '/home/hadoop/1.txt' into table linuxfan.t1; Loading data to table linuxfan.t1; OK Time taken: 6.277 seconds hive> select * from linuxfan.t1; OK 1 zs 2 ls 3 ww 4 xm Time taken: 1.861 seconds, Fetched: 4 row(s) hive> exit; Ø通过web页面查看HDFS文件系统中的数据; Ø通过mysql管理控制台验证mysql中存储的hive的元数据; |
|