从零开始使用Hive
Hive是基于Hadoop的一个数据仓库工具,可将结构化的数据文件映射成一张数据库表,并提供类SQL的功能对数据进行分析处理,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
背景信息
假定用户开发一个应用程序,用于管理企业中的使用A业务的用户信息,使用Hive客户端实现A业务操作流程如下:
普通表的操作:
- 创建用户信息表user_info。
- 在用户信息中新增用户的学历、职称信息。
- 根据用户编号查询用户姓名和地址。
- A业务结束后,删除用户信息表。
操作步骤
- 下载客户端配置文件。
- MRS 3.x之前版本,操作如下:
- 登录MRS Manager页面,具体请参见访问集群Manager,然后选择“服务管理”。
- 单击“下载客户端”。
“客户端类型”选择“仅配置文件”,“下载路径”选择“服务器端”,单击“确定”开始生成客户端配置文件,文件生成后默认保存在主管理节点“/tmp/MRS-client”。
- MRS 3.x及后续版本,操作如下:
- 登录FusionInsight Manager页面,具体请参见访问FusionInsight Manager(MRS 3.x及之后版本)。
- 选择“集群 > 待操作集群的名称 > 概览 > 更多 > 下载客户端”。
- 下载集群客户端。
“选择客户端类型”选择“仅配置文件”,选择平台类型,单击“确定”开始生成客户端配置文件,文件生成后默认保存在主管理节点“/tmp/FusionInsight-Client/”。
- MRS 3.x之前版本,操作如下:
- 登录Manager的主管理节点。
- MRS 3.x之前版本,操作如下:
- 在MRS控制台,选择“集群列表 > 现有集群”,单击集群名称,在“节点管理”页签中查看节点名称,名称中包含“master1”的节点为Master1节点,名称中包含“master2”的节点为Master2节点。
MRS Manager的主备管理节点默认安装在集群Master节点上。在主备模式下,由于Master1和Master2之间会切换,Master1节点不一定是MRS Manager的主管理节点,需要在Master1节点中执行命令,确认MRS Manager的主管理节点。命令请参考2.d。
- 以root用户使用密码方式登录Master1节点。
- 切换至omm用户。
sudo su - root
su - omm
- 执行以下命令确认MRS Manager的主管理节点。
sh ${BIGDATA_HOME}/om-0.0.1/sbin/status-oms.sh
回显信息中“HAActive”参数值为“active”的节点为主管理节点(如下例中“mgtomsdat-sh-3-01-1”为主管理节点),参数值为“standby”的节点为备管理节点(如下例中“mgtomsdat-sh-3-01-2”为备管理节点)。
Ha mode double NodeName HostName HAVersion StartTime HAActive HAAllResOK HARunPhase 192-168-0-30 mgtomsdat-sh-3-01-1 V100R001C01 2014-11-18 23:43:02 active normal Actived 192-168-0-24 mgtomsdat-sh-3-01-2 V100R001C01 2014-11-21 07:14:02 standby normal Deactived
- 使用root用户登录Manager的主管理节点,例如“192-168-0-30”节点。
- 在MRS控制台,选择“集群列表 > 现有集群”,单击集群名称,在“节点管理”页签中查看节点名称,名称中包含“master1”的节点为Master1节点,名称中包含“master2”的节点为Master2节点。
- MRS 3.x及后续版本,操作如下:
- 以root用户登录任意部署Manager的节点。
- 执行以下命令确认主备管理节点。
sh ${BIGDATA_HOME}/om-server/om/sbin/status-oms.sh
界面打印信息中“HAActive”参数值为“active”的节点为主管理节点(如下例中“node-master1”为主管理节点),参数值为“standby”的节点为备管理节点(如下例中“node-master2”为备管理节点)。
HAMode double NodeName HostName HAVersion StartTime HAActive HAAllResOK HARunPhase 192-168-0-30 node-master1 V100R001C01 2020-05-01 23:43:02 active normal Actived 192-168-0-24 node-master2 V100R001C01 2020-05-01 07:14:02 standby normal Deactived
- 以root用户登录主管理节点,并执行以下命令切换到omm用户。
sudo su - omm
- MRS 3.x之前版本,操作如下:
- 执行以下命令切换到客户端安装目录。
提前已安装集群客户端,以下客户端安装目录为举例,请根据实际情况修改。
cd /opt/client
- 执行以下命令,更新主管理节点的客户端配置。
sh refreshConfig.sh /opt/client 客户端配置文件压缩包完整路径
例如,执行命令:
sh refreshConfig.sh /opt/client /tmp/FusionInsight-Client/FusionInsight_Cluster_1_Services_Client.tar
界面显示以下信息表示配置刷新更新成功:
ReFresh components client config is complete. Succeed to refresh components client config.
- 在Master节点使用客户端。
- 运行Hive客户端命令,实现A业务。
内部表的操作:
- 根据表1创建用户信息表user_info并添加相关数据,例如:
create table user_info(id string,name string,gender string,age int,addr string);
MRS 1.x和MRS 3.x及后续版本,操作如下:
insert into table user_info(id,name,gender,age,addr) values("12005000201","A","男",19,"A城市");
MRS 2.x版本,操作如下:
insert into table user_info values("12005000201","A","男",19,"A城市");
- 在用户信息表user_info中新增用户的学历、职称信息。
以增加编号为12005000201的用户的学历、职称信息为例,其他用户类似。
alter table user_info add columns(education string,technical string);
- 根据用户编号查询用户姓名和地址。
以查询编号为12005000201的用户姓名和地址为例,其他用户类似。
select name,addr from user_info where id='12005000201';
- 删除用户信息表。
外部分区表的操作:
创建外部分区表并导入数据:
- 创建外部表数据存储路径:
hdfs dfs -mkdir /hive/user_info
- 建表:
create external table user_info(id string,name string,gender string,age int,addr string) partitioned by(year string) row format delimited fields terminated by ' ' lines terminated by '\n' stored as textfile location '/hive/user_info';
fields terminated指明分隔的字符,如按空格分隔,' '。
lines terminated 指明分行的字符,如按换行分隔,'\n'。
/hive/user_info为数据文件的路径。
- 导入数据。
- 使用insert语句插入数据。
insert into user_info partition(year="2018") values ("12005000201","A","男",19,"A城市");
- 使用load data命令导入文件数据。
- 根据表1数据创建文件。如,文件名为txt.log,以空格拆分字段,以换行符作为行分隔符。
- 上传文件至hdfs。
- 加载数据到表中。
load data inpath '/tmp/txt.log' into table user_info partition (year='2011');
- 使用insert语句插入数据。
- 查询导入数据。
- 删除用户信息表。
- 执行以下命令退出客户端。
- 根据表1创建用户信息表user_info并添加相关数据,例如: