• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

大数据Hive组件部署

武飞扬头像
philosopher11
帮助2

        1. 步骤二:解压安装文件 

使用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部署

      1. 实验任务二:MySQL安装与启动
        1. 步骤一:卸载MariaDB

先查看一下系统上的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 包名     安装软件包

        1. 步骤二:使用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数据库下生成表

        1. 步骤三: 启动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

      1. 实验任务四:beeline CLI远程访问Hive
        1. 步骤一: 修改Hadoop的core-site.xml文件

使用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服务

        1. 步骤二: 添加远程访问节点

假设在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

        1. 步骤三: 远程访问

通过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页面查看访问节点

  1. 实验二 Hive 库操作与表操作
    1. 实验内容与目标

完成本实验,您应该能够:

  1. 掌握Hive数据库操作
  2. 掌握Hive表操作
    1. 相关知识

这里记录了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

    1. 实验环境

服务器集群

3个以上节点,节点间网络互通,各节点最低配置:双核CPU、8GB内存、100G硬盘

运行环境

CentOS 7.2

用户名/密码

root/password hadoop/password

服务和组件

HDFS、Yarn、MapReduce

    1. 实验过程
      1. 实验任务Hive库操作
        1. 步骤一: 创建数据库

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, ...)]; 

        1. 步骤二: 修改数据库并显示数据库详细信息

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;

        1. 步骤三: 删除数据库并显示全部数据库

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()。其他操作可参考官方说明文档。

      1. 实验任务Hive表操作
        1. 步骤一:创建表

在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 ",";

        1. 步骤二:查看所有表与详细信息

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>;

        1. 步骤三:修改表

修改表名。

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操作

        1. 步骤四:删除表退出

删除表。

hive> drop table teacher2;

语法:drop table <table_name>

清空表。

hive> truncate table new_teacher;

语法:truncate table <table_name>

hive> exit;

图1-24 清空数据并删除表

  1. 实验三 Hive查询
    1. 实验内容与目标

完成本实验,您应该能够:

  1. 学习Hive Shell基本操作。
  2. 学习多表查询
    1. 实验视图

图1-25 select简单操作

    1. 实验环境

服务器集群

3个以上节点,节点间网络互通,各节点最低配置:双核CPU、8GB内存、100G硬盘

运行环境

CentOS 7.2

用户名/密码

root/password hadoop/password

服务和组件

HDFS、Yarn、MapReduce

    1. 实验过程
      1. 实验任务一:数据导入
        1. 步骤一:插入单条数据并查询

新建学生表,具有学号,姓名,班级,身高体重信息,成绩,插入单条数据进行测试。插入复杂类型需要使用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 插入单条信息

        1. 步骤批量导入

在插入数据过程中调用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 数据导入

      1. 实验任务select查询
        1. 步骤一:简单查询

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. 步骤二:条件查询

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 分组查询

        1. 步骤三: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  限制查询

        1. 步骤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  排序

        1. 步骤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
系列文章
更多 icon
同类精品
更多 icon
继续加载