大数据Hive组件部署
-
-
-
- 步骤二:解压安装文件
-
-
使用tar命令解压安装包到指定目录,并重命名。
[root@master ~]# cd /opt/software/
[root@master software]# tar -zxvf apache-hive-2.0.0-bin.tar.gz -C /usr/local/src/ # 解压到统一安装目录
[root@master software]# cd /usr/local/src
[root@master src]# mv /usr/local/src/apache-hive-2.0.0-bin /usr/local/src/hive
[root@master src]# chown -R hadoop:hadoop hive
编辑/etc/profile文件。
[root@master src]# cd
[root@master ~]# vi /etc/profile
将以下配置信息添加到/etc/profile文件的末尾。
# set Hive environment
export HIVE_HOME=/usr/local/src/hive # Hive安装目录
export PATH=$HIVE_HOME/bin:$PATH # 添加将Hive的bin目录
export HIVE_CONF_DIR=$HIVE_HOME/conf #Hive的环境变量
执行source /etc/profile命令,使配置的环境变量在系统全局范围生效。
[root@master ~]# source /etc/profile
以上命令只需要在hive安装的节点操作,本文在master主节点进行Hive部署
-
-
- 实验任务二:MySQL安装与启动
- 步骤一:卸载MariaDB
- 实验任务二:MySQL安装与启动
-
先查看一下系统上的mariadb
[root@master ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.52-2.el7.x86_64
然后卸载
[root@master ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
ps:
rpm -qa 列出所有已安装软件包
rpm -e packagename 删除软件包
rpm -e --nodeps packagename 强制删除软件和依赖包
rpm -q 包名 查询包是否安装
rpm -ivh 包名 安装软件包
-
-
-
- 步骤二:使用rpm安装mysql
-
-
安装的顺序为:
[root@master ~]# cd /opt/software/mysql-5.7.18
[root@master mysql-5.7.18]# rpm -ivh mysql-community-common-5.7.18-1.el7.x86_64.rpm
[root@master mysql-5.7.18]# rpm -ivh mysql-community-libs-5.7.18-1.el7.x86_64.rpm
[root@master mysql-5.7.18]# rpm -ivh mysql-community-client-5.7.18-1.el7.x86_64.rpm
[root@master mysql-5.7.18]# rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rpm
再通过#rpm -qa | grep mysql检查mysql安装情况
[root@master mysql-5.7.18]# vi /etc/my.cnf
#已有配置进行修改,没有的需要新增
default-storage-engine=innodb
innodb_file_per_table
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server=utf8
启动mysql服务和查看其状态
[root@master mysql-5.7.18]# systemctl start mysqld
[root@master mysql-5.7.18]# systemctl status mysqld
[root@master mysql-5.7.18]# cat /var/log/mysqld.log | grep password
得到MySQL初始密码:
[root@master mysql-5.7.18]# mysql_secure_installation #重新设定密码和配置
设定密码要符合安全规则Password123$
yynyy
[root@master mysql-5.7.18]# mysql -uroot -pPassword123$
步骤三:新建Hive用户与元数、
在MySQL中新建名称为:hive_db的数据库存储Hive元数据。并新建hive用户,密码为Password123$,同时赋予所有权限。
mysql>create database hive_db;
mysql>create user hive identified by 'Password123$';
mysql>grant all privileges on *.* to hive@'%' identified by 'Password123$' with grant option ;
mysql>grant all privileges on *.* to 'root'@'%'identified by 'Password123$' with grant option;
mysql>flush privileges;
实验任务三:配置Hive参数
[root@master ~]# su - hadoop
[hadoop@master ~]$ cp /usr/local/src/hive/conf/hive-default.xml.template /usr/local/src/hive/conf/hive-site.xml
[hadoop@master ~]$ vi /usr/local/src/hive/conf/hive-site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive_db?createDatabaseIfNotExist=true</value>
</property>
<!--mysql用户名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<!--mysql中hive用户密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>Password123$</value>
</property>
<!--mysql驱动-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/usr/local/src/hive/tmp</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/usr/local/src/hive/tmp/${hive.session.id}_resources</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/usr/local/src/hive/tmp</value>
</property>
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/usr/local/src/hive/tmp/operation_logs</value>
</property>
<property>
<name>hive.server2.webui.host</name>
<value>master</value>
</property>
<property>
<name>hive.server2.webui.port</name>
<value>10002</value>
</property>
</configuration>
启动Hadoop和zkServer
先启动master,slave1,slave2
启动Hadoop
[hadoop@master ~]$ hadoop fs -mkdir -p /user/hive/warehouse
[hadoop@master ~]$ hadoop fs -chmod g w /user/hive/warehouse
[hadoop@master ~]$ mkdir /usr/local/src/hive/tmp
[hadoop@master ~]$ cp /usr/local/src/hive/conf/hive-env.sh.template /usr/local/src/hive/conf/hive-env.sh
[hadoop@master ~]$ vi /usr/local/src/hive/conf/hive-env.sh
# Set JAVA
export JAVA_HOME=/usr/local/src/java
# Set HADOOP_HOME to point to a specific hadoop install directory
export HADOOP_HOME=/usr/local/src/hadoop
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/usr/local/src/hive/conf
# Folder containing extra ibraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=/usr/local/src/hive/lib
[hadoop@master ~]$ cp /opt/software/mysql-connector-java-5.1.46.jar /usr/local/src/hive/lib/
[hadoop@master ~]$ schematool -initSchema -dbType mysql
图1-8 Hive驱动器连接MySQL
当显示schemaTool completed时,初始化成功,Hive与MySQL建立连接。启动完毕后查看MySQL下hive_db数据库,发现多出许多个新表(55个)。
图1-9 Hive_db数据库下生成表
-
-
-
- 步骤三: 启动Hive
-
-
启动Hadoop集群,MySQL后,命令框输入hive。
[hadoop@master ~]$ hive
图1-10 Hive shell页面
创建新表并验证MySQL。
hive> show databases;
hive> create database hive_test_db;
hive> use hive_test_db;
hive> create table t_user(id int, name string);
hive> show tables;
图1-11 Hive创建表
打开MySQL数据库,使用实验二配置过的hive_db数据库,此时注意,hive创建的表统一都在hive_db数据库的TBLS表中。当创建表存在,既基于MySQL存储元数据的Hive组件搭建完毕。
mysql> use hive_db;
mysql> select * from TBLS;
图1-12 验证MySQL
-
-
- 实验任务四:beeline CLI远程访问Hive
- 步骤一: 修改Hadoop的core-site.xml文件
- 实验任务四:beeline CLI远程访问Hive
-
使用beeline CLI访问Hive,需要在Hadoop集群中为Hive赋予代理用户权限。
[hadoop@master ~]$ cd /usr/local/src/hadoop/etc/hadoop
[hadoop@master hadoop]$ vi core-site.xml
[hadoop@slave1 ~]$ vi /usr/local/src/hadoop/etc/hadoop/core-site.xml
[hadoop@slave2 ~]$ vi /usr/local/src/hadoop/etc/hadoop/core-site.xml
#添加如下配置
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
注意:其中hadoop.proxyuser.hadoop.hosts与hadoop.proxyuser.hadoop.groups标注灰色的主机名为访问的hadoop代理用户名。既给与相关权限可以通过hiveserver2服务进行访问操作。“*”为固定写法,前者表示Hadopp集群下所有节点可以使用hadoop代理用户访问Hive,后者表示所有组。
启动hiveserver2服务,等待时间较长,此页面不要关闭。
[hadoop@master hadoop]$ cd
[hadoop@master ~]$ stop-all.sh
[hadoop@master ~]$ start-all.sh
[hadoop@master ~]$ hiveserver2
图1-13 启动hiveserver2服务
-
-
-
- 步骤二: 添加远程访问节点
-
-
假设在slaves1节点进行远程访问,首先需要在slaves1节点上添加Hive组件,从master节点复制即可。
[root@master ~]# scp -r /usr/local/src/hive root@slave1:/usr/local/src/
[root@slave1 ~]# chown -R hadoop:hadoop /usr/local/src/hive
slaves1配置hadoop用户环境变量,可以使用Hive命令。
[root@slave1 ~]# vi /etc/profile
#hive
export HIVE_HOME=/usr/local/src/hive
export HIVE_CONF_DIR=$HIVE_HOME/conf
export PATH=$HIVE_HOME/bin:$PATH
[root@slave1 ~]# su - hadoop
[hadoop@ slave1 ~]$ source /etc/profile
-
-
-
- 步骤三: 远程访问
-
-
通过jdbc 连接到beeline 就可以对 hive 进行操作了。在slaves1节点hadoop用户下执行以下命令。
[hadoop@slave1 ~]$ beeline -u jdbc:hive2://master:10000
图1-14 其他节点远程连接
同时可以在Hive WebUI页面上查看访问的客户端。如下图所示,192.168.90.110(master)节点与192.168.90.181(slave1)节点并发访问Hive。
图1-15 Hive Web页面查看访问节点
- 实验二 Hive 库操作与表操作
- 实验内容与目标
完成本实验,您应该能够:
- 掌握Hive数据库操作
- 掌握Hive表操作
- 相关知识
这里记录了Hive DDL语句,包括:
CREATE DATABASE/SCHEMA, TABLE, VIEW, FUNCTION, INDEX
DROP DATABASE/SCHEMA, TABLE, VIEW, INDEX
TRUNCATE TABLE
ALTER DATABASE/SCHEMA, TABLE, VIEW
MSCK REPAIR TABLE (or ALTER TABLE RECOVER PARTITIONS)
SHOW DATABASES/SCHEMAS, TABLES, TBLPROPERTIES, VIEWS, PARTITIONS, FUNCTIONS, INDEX[ES], COLUMNS, CREATE TABLE
DESCRIBE DATABASE/SCHEMA, table_name, view_name, materialized_view_name
-
- 实验环境
服务器集群 |
3个以上节点,节点间网络互通,各节点最低配置:双核CPU、8GB内存、100G硬盘 |
运行环境 |
CentOS 7.2 |
用户名/密码 |
root/password hadoop/password |
服务和组件 |
HDFS、Yarn、MapReduce |
-
- 实验过程
- 实验任务一:Hive库操作
- 步骤一: 创建数据库
- 实验任务一:Hive库操作
- 实验过程
Hive中创建学校数据库。
[hadoop@master ~]$ hive
hive > create database school;
图1-16 Hive创建数据库
语法:CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment] //关于数据块的描述
[LOCATION hdfs_path] //指定数据库在HDFS上的存储位置
[WITH DBPROPERTIES (property_name=property_value, ...)];
-
-
-
- 步骤二: 修改数据库并显示数据库详细信息
-
-
hive> alter database school set dbproperties('creater'='H3C');
hive> desc database extended school;
添加自定义属性,创建者为H3C。
图1-17 Hive修改数据库属性
hive> alter database school set owner user root;
hive> desc database extended school;
修改数据库的所有者为root。
图1-18 Hive修改数据库所有者
语法:desc database [extended] database_name;
-
-
-
- 步骤三: 删除数据库并显示全部数据库
-
-
hive> drop database school;
hive> show databases;
语法:show <database_name>
drop database <database_name>
图1-19 Hive删除数据库并显示
其他操作,如切换数据库,语法:use database_name。删除包含表的数据库,语法:drop database if exists database_name cascade。查看正在使用哪个库,语法:select current_database()。其他操作可参考官方说明文档。
-
-
- 实验任务二:Hive表操作
- 步骤一:创建表
- 实验任务二:Hive表操作
-
在school数据库中建立teacher表,具有工号、姓名、学科,授课年级四项属性。创建之前需要使用use语言切换操作数据库。
hive> create database school;
hive> use school;
hive> create table teacher(
> num int,
> name string,
> email map<string,int>,
> class array<string>);
图1-20 Hive创建表
语法:create [external] table [if not exists] table_name
[(col_name data_type [comment col_comment], ...)] ----指定表的名称和表的具体列信息。
[comment table_comment] ---表的描述信息。
[partitioned by (col_name data_type [comment col_comment], ...)] ---表的分区信息。
[clustered by (col_name, col_name, ...)
[sorted by (col_name [asc|desc], ...)] into num_buckets buckets] ---表的桶信息。
[row format row_format] ---表的数据分割信息,格式化信息。
[stored as file_format] ---表数据的存储序列化信息。
[location hdfs_path] ---数据存储的文件夹地址信息
Hive默认创建的普通表被称为管理表或内部表。表的数据由Hive进行统一管理,默认存储于数据仓库目录中。可通过Hive的配置文件hive-site.xml对进行修改。可以通过Hadoop web UI进行查看创建结果。
图1-21 HDFS查看创建结果
除了默认的内部表之外,Hive也可以使用关键词“EXTERNAL”创建外部表。外部表的数据可以存储于数据仓库以外的位置,既可以手动修改存储于HDFS上的地址。
分区表:目的是为了避免暴力扫描,一个分区就是HDFS上的一个独立文件夹;Hive的分区就是HDFS的目录分割;注意的是,创建表时指定的表的列中不应该包含分区列,分区列需要使用关键词partitioned by在后面单独指定。
hive> create table teacher(
> num int,
> name string,
> email map<string,int>,
> class array<string>)
> partitioned by (age int)
> row format delimited fields terminated by ",";
分桶表:可以将表或者分区进一步细化成桶,是对数据进行更细粒度的划分,以便获得更高的查询效率。桶在数据存储上与分居不同的是,一个分区会存储于一个目录数据文件存储于该目录中,而一个桶将存储为一个文件,数据内容存储于文件中。注意的是,创建桶表时指定桶列需要提前创建,使用关键词clustered by在后面单独指定,并指定分为多少个桶(buckets)。
hive> create table teacher(
> num int,
> name string,
> email map<string,int>,
> class array<string>)
> clustered by (num) into 4 buckets
> row format delimited fields terminated by ",";
-
-
-
- 步骤二:查看所有表与详细信息
-
-
hive> show tables;
hive> desc teacher;
hive> desc formatted teacher;
语法:desc <table_name>
图1-22 Hive查看表详情
也可以复制一个已经存在的表。
hive> create table teacher2 like teacher;
语法:create <table_name> like <table_copy_name>;
-
-
-
- 步骤三:修改表
-
-
修改表名。
hive> alter table teacher rename to new_teacher;
语法:alter table <table_name> rename to <new_table_name>
修改表的列名,数据类型,列注释和列所在的位置,FIRST将列放在第一列,AFTER col_name将列放在col_name后面一列。下面的语句将列名num修改为number,数据类型为更改为string并添加注释,最后将这一列放在name后面。
hive> alter table new_teacher change num number string comment 'the num of teacher, change datatype to string ' after name;
语法:alter table <table_name> change [cloumn] <col_old_name> <col_new_name> column_type [conmment col_conmment] [first|after column_name];
增加/更新列,add columns允许用户在当前列的末尾,分区列之前添加新的列,replace columns允许用户更新列,更新的过程是先删除当前的列,然后在加入新的列。
hive> alter table new_teacher add columns(age int);
语法:alter table <table_name> add|replace columns (<col_name> data_type [conmment col_comment], ...);
图1-23 alter操作
-
-
-
- 步骤四:删除表退出
-
-
删除表。
hive> drop table teacher2;
语法:drop table <table_name>
清空表。
hive> truncate table new_teacher;
语法:truncate table <table_name>
hive> exit;
图1-24 清空数据并删除表
- 实验三 Hive查询
- 实验内容与目标
完成本实验,您应该能够:
- 学习Hive Shell基本操作。
- 学习多表查询
- 实验视图
图1-25 select简单操作
-
- 实验环境
服务器集群 |
3个以上节点,节点间网络互通,各节点最低配置:双核CPU、8GB内存、100G硬盘 |
运行环境 |
CentOS 7.2 |
用户名/密码 |
root/password hadoop/password |
服务和组件 |
HDFS、Yarn、MapReduce |
-
- 实验过程
- 实验任务一:数据导入
- 步骤一:插入单条数据并查询
- 实验任务一:数据导入
- 实验过程
新建学生表,具有学号,姓名,班级,身高体重信息,成绩,插入单条数据进行测试。插入复杂类型需要使用select命令转储。查询语句则跟MySQL语语句一致。
语法:insert into <table_name> select <data,map(), array()>
语法:select * from <table_name>;
hive> create table student(
> num int,
> name string,
> class string,
> body map<string,int>,
> exam array<string>)
> row format delimited
> fields terminated by '|'
> collection items terminated by ','
> map keys terminated by ':'
> lines terminated by '\n';
hive> create table lib(
> num int,
> book string)
> row format delimited
> fields terminated by '|'
> collection items terminated by ','
> map keys terminated by ':'
> lines terminated by '\n';
hive> create table price(
> book string,
> price int)
> row format delimited
> fields terminated by '|'
> collection items terminated by ','
> map keys terminated by ':'
> lines terminated by '\n';
hive> insert into student (num,name,class,body,exam) select 20200101,'Wlen','grade 2',map('height',175,'weight',60),array('80','70');
图1-26 插入单条信息
-
-
-
- 步骤二:批量导入
-
-
在插入数据过程中调用MR操作,效率低下,既Hive的数据通常为Load批量导入。准备数据,数据可以为本地存储,也可以是HDFS上。
数据存储在txt文本中,属性之间以” |”隔开,需要注意的是在创建表时,应设置fields terminated by '|',否则,默认为“,”。由于表中含有复杂数据格式,简单的分隔符通常失去效果。数据如下:
图1-27 导入信息详情
使用Load函数批量导入数据。
hive> load data local inpath '/opt/software/student.txt' into table student;
hive> load data local inpath '/opt/software/lib.txt' into table lib;
hive> load data local inpath '/opt/software/price.txt' into table price;
语法:load data local inpath <address> [overwrite] into table < table_name>;
当数据存储地址为HDFS时,相当于对数据在HDFS上进行迁移。
语法:load data inpath <address> [overwrite] into table <table_name>;
图1-28 数据导入
-
-
- 实验任务二:select查询
- 步骤一:简单查询
- 实验任务二:select查询
-
Hive中的SELECT基础语法和标准SQL语法基本一致,支持WHERE、DISTINCT、GROUP BY、ORDER BY、HAVING、LIMIT、子查询等;在所有的数据库系统中,SELECT语句是使用最多,也最复杂的一块。
语法:SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[CLUSTER BY col_list
| [DISTRIBUTE BY col_list] [SORT BY col_list]
]
[LIMIT number]
普通查询跟MySQL查询的一模一样。
hive> select * from student;
图1-29 select查询
-
-
-
- 步骤二:条件查询
-
-
1.where语句
Where语句是属于布尔表达式,其后可以与“且”,“或”进行联动进行复杂查询。注意特殊字段的查找方式。
hive> select * from student where class = 'grade 4';
hive> select * from student where exam[0] = 96 or exam[1]=77;
hive> select * from student where body['height'] = 170;
图1-30 条件查询
2. distinct和 all语句
distinct用途为去除重复的项,不加参数则默认为all。distinct参数执行时调用MR进行排序,对大规模数据效率较高。
hive> select class from student;
hive> select distinct class from student;
图1-31 去除重复项
3. group by与having语句
group by是对列进行分组查询,having可以对group by结果进行进一步的过滤。Having与where的区别是,where后面不能写分组函数,而having后面可以使用分组函数。
以下语句首先筛选统计年级总数,然后过滤出2年级以上的同学有多少个。
hive> select class ,count(*) from student group by class;
hive> select class ,count(*) num from student group by class having num >=2;
其中num为存储count(*)的结果。
图1-32 分组查询
-
-
-
- 步骤三:limit限制语句与union联合
-
-
语法:
Select * from <table_name> limit <up,down>
select UNION [ALL | DISTINCT] select UNION [ALL | DISTINCT] select …
Limit限制查询的说明范围,当大数据查询时,行出过多需要限制查询。union把多个select的结果并集展示出来,可以多表联动。
hive> select * from student limit 2,4;
hive> select class from student union select num from student;
图1-33 限制查询
-
-
-
- 步骤四:order by排序与sort by排序
-
-
order by为全局排序,后面可以有多列进行排序,默认按字典排序。对于大规模的数据集order by的效率非常低。在很多情况下,并不需要全局排序,此时可以使用sort by。以下对成绩进行排序,结果虽然一样。当遇到大规模数据时,sort by可以通过修改reducer个数,为每个reducer产生一个排序文件。每个Reducer内部进行排序,对全局结果集来说不是排序。而order by只调用一个Reducer进行计算。
hive> set mapreduce.job.reduces=3;
hive> select * from student sort by exam[0];
hive> select * from student order by exam[0];
图1-34 排序
-
-
-
- 步骤五:JOIN多表查询
-
-
语法:select <clo> from <table_name> join <table_name> on <table.clo>=< table.clo > join <table_name> on <table.clo>=< table.clo >…
join可以连接多表联合查询,要求查询的条件在连个表中,而且连接 n个表,至少需要n-1个连接条件。例如:连接三个表,至少需要两个连接条件。本例有两个表,以为学生表具有学号num,一个图书馆表,具有学号以及借书名称。
hive> select * from student join lib on student.num =lib.num;
查询每个人的借书的名称。
图1-35 两表查询
hive> select * from student left outer join lib on student.num =lib.num;
左连接,查询每个人的借书的名称。区别是左表的信息都显示,例如:下图中学号20200103与20200106没有借书记录,显示为NULL。
图1-36 左连接查询
hive> select * from student right outer join lib on student.num =lib.num;
与左连接对应的是右连接,右表全部显示。
图1-37 右连接查询
hive> select * from student full outer join lib on student.num =lib.num; 全连接是左右连接的综合使用,显示两张表的所有信息。若没有关联项目则放到最后显示为NULL。
图1-38 全连接查询
hive> select * from student left semi join lib on student.num =lib.num;
半连接只显示左表内容,即显示跟连接的右表有关系的左表内容。
图1-39 半连接查询
hive> select * from student join lib on student.num =lib.num join price on lib.book=price.book;
多表(两个以上)查询,例如:查询学生租借的书以及书的价格。大多数情况下,Hive会对每对jion连接对象启动一个MapReduce任务。
图1-40 多表查询
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhiagack
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22