【阿尼亚喜欢BigData】“红亚杯”数据分析进阶—使用Python操作Hive专题赛——满分解析①

大家好,喜欢Bigdata的阿尼亚来了!希望大家会喜欢阿尼亚的文章!!哇酷哇酷!!!

本次为师傅们带来的是“红亚杯”数据分析进阶—使用Python操作Hive专题赛——满分解析系列的第①期,让我们先来看看完整赛题叭!

目录

“红亚杯”数据分析进阶—使用Python操作Hive专题赛

实操:使用Python操作Hive(100 / 100分)

配置Hadoop代理(8.00 / 8分)

配置Hiveserver2服务信息(8.00 / 8分)

开启相关服务(24.00 / 24分)

使用python操作hive(60.00 / 60分)


“红亚杯”数据分析进阶—使用Python操作Hive专题赛

本专题赛主要内容包括:使用Python操作Hive、使用Python库列出Hive中所有的Database、使用Python库执行DDL语句、使用Python定时执行查询

实操:使用Python操作Hive(100 / 100分)

Hive拥有HiveServer(Thrift)或者Hiveserver2组件,提供了JDBC驱动服务,使得我们可以用Java代码或者Python来连接Hive并进行一些关系型数据库的sql语句查询等操作。 HiveServer或者HiveServer2都是基于Thrift的,但HiveSever有时被称为Thrift server,而HiveServer2却不会。既然已经存在HiveServer为什么还需要HiveServer2呢? 这是因为HiveServer不能处理多于一个客户端的并发请求,这是由于HiveServer使用的Thrift接口所导致的限制,不能通过修改HiveServer的代码修正。因此在Hive-0.11.0版本中重写了HiveServer代码得到了HiveServer2,进而解决了该问题。HiveServer2支持多客户端的并发和认证,为开放API客户端如JDBC、ODBC提供了更好的支持。

配置Hadoop代理(8.00 / 8分)

Hadoop2.0版本开始支持ProxyUser的机制。含义是使用User A的用户认证信息,以User B的名义去访问hadoop集群。对于服务端来说就认为此时是User B在访问集群,相应对访问请求的鉴权(包括HDFS文件系统的权限,YARN提交任务队列的权限)都以用户User B来进行。User A被认为是superuser(这里super user并不等同于hdfs中的超级用户,只是拥有代理某些用户的权限,对于hdfs来说本身也是普通用户),User B被认为是proxyuser。

服务端需要在NameNode和ResourceManager的core-site.xml中进行代理权限相关配置。 对于每一个superUser用户,配置参数:

配置说明
hadoop.proxyuser.$superuser.hosts配置该superUser允许通过代理访问的主机节点
hadoop.proxyuser.$superuser.groups配置该superUser允许代理的用户所属组
hadoop.proxyuser.$superuser.users配置该superUser允许代理的用户
  • 对于每个superUser用户,hosts必须进行配置,而groups和users至少需要配置一个。

  • 以上配置项的值都可以使用*(星号)来表示允许所有的主机/用户组/用户。

对应文件路径:/root/software/hadoop-2.7.7/etc/hadoop/core-site.xml

<!-- 用于hiveserver2连接10000端口 -->
<property>
<name>hadoop.proxyuser.????.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.???.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive.groups</name>
<value>*</value>
</property>

考核条件如下:

1. 修改core-site.xml,配置root用户可以在任何主机中执行代理(4.00 / 4分)

操作环境: python-hive

2. 修改core-site.xml,配置root用户可以在代理任意任务组的用户(4.00 / 4分)

操作环境: python-hive

配置Hiveserver2服务信息(8.00 / 8分)

Hive拥有HiveServer(Thrift)或者Hiveserver2组件,提供了JDBC驱动服务,使得我们可以用Java代码或者Python来连接Hive并进行一些关系型数据库的sql语句查询等操作。 HiveServer或者HiveServer2都是基于Thrift的,但HiveSever有时被称为Thrift server,而HiveServer2却不会。既然已经存在HiveServer为什么还需要HiveServer2呢? 这是因为HiveServer不能处理多于一个客户端的并发请求,这是由于HiveServer使用的Thrift接口所导致的限制,不能通过修改HiveServer的代码修正。因此在Hive-0.11.0版本中重写了HiveServer代码得到了HiveServer2,进而解决了该问题。HiveServer2支持多客户端的并发和认证,为开放API客户端如JDBC、ODBC提供了更好的支持。

  • TCP 的监听端口,默认为10000

  • TCP绑定的主机,默认为localhost

文件路径为:/root/software/apache-hive-2.3.4-bin/conf/hive-site.xml

<property>
  <name>hive.metastore.schema.verification</name>
  <value>false</value>
</property>
<property>
  <name>hive.cli.print.current.db</name>
  <value>true</value>
</property>
<property>
  <name>hive.cli.print.header</name>
  <value>true</value>
</property>
<!-- hiveserver2 -->
<property>
  <name>hive.server2.thrift.port</name>
  <value>????</value>
</property>
<property>
  <name>hive.server2.thrift.bind.host</name>
  <value>????</value>
</property>

考核条件如下:

1. 设置TCP的监听端口为10000(4.00 / 4分)

操作环境: python-hive

2. 设置TCP绑定的主机为localhost(4.00 / 4分)

操作环境: python-hive

开启相关服务(24.00 / 24分)

本次使用环境为单节点集群,对应主机名为Hadoop,使用工具连接对应主机并进行相关操作。

  • 环境中已经安装java、Hadoop、Hive、Mysql并配置对应环境变量,安装路径为/root/software/,对应版本如下;

内置安装/依赖包已安装服务系统版本
jdk-8u211-linux-x64.tar.gz 、hadoop-2.7.7.tar.gz 、apache-hive-2.3.4-bin.tar.gzmysql-community-serverCentOS Linux release 7.3.1611 (Core)

1.环境中已经安装/root/software/hadoop-2.7.7,格式化HDFS,开启集群,查看集群状态。(HDFS端口为9000,其他端口默认) 2.环境中已经安装/root/software/apache-hive-2.3.4-bin,需要开启mysql服务,即可开启hiveserver2服务。

从Hive 2.0版本开始,为HiveServer2提供了一个简单的WEBUI界面,界面中可以直观的看到当前链接的会话、历史日志、配置参数以及度量信息。

 考核条件如下:

1. 修改云主机host文件,添加内网IP,对应映射名为hadoop000,实现云主机自身使用root用户ssh访问hadoop000免密登陆(4.00 / 4分)

操作环境: python-hive

2. 格式化HDFS文件系统(4.00 / 4分)

操作环境: python-hive

3. 启动Hadoop集群(4.00 / 4分)

操作环境: python-hive

4. 开启mysql服务,并初始化数据库(4.00 / 4分)

操作环境: python-hive

5. 开启hiveserver2服务,查看端口是否正常开启(4.00 / 4分)

操作环境: python-hive

6. 查看hiveserver2对应的UI界面是否正常打开(4.00 / 4分)

操作环境: python-hive

使用python操作hive(60.00 / 60分)

python中用于连接HiveServer2的客户端有3个:pyhs2,pyhive,impyla。

本次赛题要求使用pyhive,环境中已经安装python3.x。

1.python3使用pyhive所需库及软件,命令如下:(需要手动下载,无需修改本地源)

# 所需软件
yum -y install cyrus-sasl cyrus-sasl-devel cyrus-sasl-lib
yum -y install cyrus-sasl-plain  cyrus-sasl-devel  cyrus-sasl-gssapi 
# 所需依赖库
pip install sasl
pip install thrift
pip install thrift-sasl
pip install pyhive

2.连接使用CUSTOM模式时,设置密码;

  • 数据库用户名:root

  • 数据库密码:123456

3.常用的函数

commit() :提交;
rollback() :回滚;
cursor用来执行命令的方法:
callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数;
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数;
executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数;
nextset(self):移动到下一个结果集;
cursor用来接收返回值的方法:
fetchall(self):接收全部的返回结果行;
fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据;
fetchone(self):返回一条结果行;
scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条。

4.题目补充

1.创建文件/root/hs2/task1.py,编写程序连接hive,查看所有数据库,运行程序并打印结果。

2.创建文件/root/hs2/task2.py,编写程序连接hive,创建数据库qingjiao(如不存在则创建)。

3.创建文件/root/hs2/task3.py,编写程序连接hive,创建数据表student并添加数据(插入数据时间较长)。

1)数据库qingjiao下创建数据表student,字段为id ,name,数据类型自行定义;

2)添加数据为:

001 python
002 hive

4.创建文件/root/hs2/task4.py,编写程序连接hive,查询数据表student下所有数据。

5.创建文件/root/hs2/task5.py,编写程序连接hive,定时查询student数据,具体见步骤说明。 1)创建函数Get_Data_From_Hive()用于读取数据库qingjiao下student表中所有数据; 2)使用while循环进行定时查询,截止到2021-12-31 23:59:59之前,每十秒钟查询一次;

考核条件如下:

1. 创建文件/root/hs2/task1.py,编写程序连接hive,查看所有数据库,运行程序并打印结果。(10.00 / 10分)

操作环境: python-hive

2. 创建文件/root/hs2/task2.py,编写程序连接hive,创建数据库qingjiao(如不存在则创建)。(10.00 / 10分)

操作环境: python-hive

3. 验证数据库青椒上是否创建成功(10.00 / 10分)

操作环境: python-hive

4. 创建文件/root/hs2/task3.py,编写程序连接hive,创建数据表student并添加数据(具体见步骤说明)(10.00 / 10分)

操作环境: python-hive

5. 创建文件/root/hs2/task4.py,编写程序连接hive,查询数据表student下所有数据,执行程序,查看打印结果(10.00 / 10分)

操作环境: python-hive

6. 创建文件/root/hs2/task5.py,编写程序连接hive,定时查询student数据,具体见步骤说明。(10.00 / 10分)

操作环境: python-hive

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱波吉的阿尼亚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值