百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

11——20HIVE

bigegpt 2024-09-20 14:03 5 浏览

HDFS

MR

HIVE

HIVE

HIve自己本身没有数据,分析的时候通过MR,直接存取数据的时候直接从HDFS来

HIve元数据存储在关系型数据库中 元数据指的是文件行列和关系型数据库的映射

元数据是用来翻译sql语句的 HIVE可以看做HDFS的客户端

hive可以看做是hdfs的一个客户端

Hive:数据仓库。

Hive:解释器,编译器,优化器等。

Hive运行时,元数据存储在关系型数据库里面

Sql实际上是类sql语句也叫做hql HIve query language

帮助文档:

使用步骤:

启动hadoop集群:

首先启动ZK /usr/zookeeper-3.4.6/bin/zkServer.sh start

启用所有:start-all.sh

启用备份resourcemanager:

yarn-daemon.sh start resourcemanager

安装一个关系型数据库

(mysql):yum install mysql-server

查看是否安装: rpm –qa | grep mysql

卸载:rpm -e mysql-server-5.1.73-5.el6_6.x86_64

启动mysql服务:service mysqld start 默认是: service mysql start

创建用户:mysql> grant all on *.* to bob@'%' identified by '123456' %指允许远程

如果创建允许本地登录的用户,则是:

mysql> grant all on *.* to root@'localhost' identified by '123456'

远程用户登录:mysql -uroot -p123456

显示所有可用数据库:mysql> show databases

切换数据库:use mysql

线束所有表:show tables

解压安装包

tar -zxvf apache-hive-1.2.1-bin.tar.gz

配置环境变量:

export HIVE_HOME=/usr/apache-hive-1.2.1-bin

export PATH=$PATH:$HIVE_HOME/bin

更新hadoopjar包:

先删除

rm -rf /usr/hadoop-2.5.1/share/hadoop/yarn/lib/jline-0.9.94.jar 搜索: find ./ -name jline*.jar

再拷贝:

cp-a/home/apache-hive-1.2.1-bin/lib/jline-2.12.jar/home/hadoop-2.5.2/share/hadoop/yarn/lib/

拷贝mysql的驱动

cp -a mysql-connector-java-5.1.32-bin.jar /usr/apache-hive-1.2.1-bin/lib/

hive-site.xml配置:

5、重命名conf下hive-default.xml.template 为hive-site.xml

注意:如果自己提前创建了数据库,mysql数据库的字符集为latin1

修改system:java.io.tmpdir 的目录变成一个绝对路径

便捷操作:启用vi搜索快速定位需要修改的地方 /ConnectionURl

修改system:java.io.tmpdir 的目录变成一个绝对路径时候快速替换

:1,$s/${system:user.name}/hive

1,$s/${system:java.io.tmpdir}/\/tmp

运行CLI

需要先打开关系型数据库的服务 service mysqld start

hive

文件默认放在:/user/hive/warehouse 建表后可见

建表:

文件样式:

123,CJH,baseball-pingpang-run,{pro:HB}-{city:HS}

文件映射:

将本地文件映射成一张表:

将hdfs中的文件映射成一张表

partitoin 分目录

可以将不同数据存放在不同目录中,加快查询速度

建表语句:

文件导入:

查询:

开启hiveServer

开启服务以后,就可以通过JDBC链接hive,实现编程处理

注意:平时开启这个服务时候先开启数据库的服务

开启服务

bin下 ./hiveserver2 &>>/tmp/hive.log &

查看hiveServer 是否监听10000端口

netstat -ntpl | grep java | grep 10000

测试客户端

p

打开客户端 beeline

连接数据库

node2是hive所在的机器

!connect jdbc:hive2://localhost:10000/default;

输入用户名,不用输入密码

java代码:

HQL脚本有三种方式执行

1、 hive –e 'hql'

2、 hive -f 'hql.file'

3、 hive jdbc 代码执行脚本

hive有两种函数:UDF,UDAF

1、 UDF:输入数据为一条数据,输出数据也为一条数据,

2、 UDAF:输入数据为多好数据。Count聚合函数。Avg,min,

自定义udf:

写个类,打成jar

add jar /root/udf.jar

CREATE TEMPORARY FUNCTION my_date_format AS 'com.cjh. Upper';

CREATE FUNCTION my_date_format2 AS 'com.cjh.Upper' USING JAR 'hdfs://laoxiao/usr/udf.jar'

java代码:

分临时的和永久的udf 永久的udf需要上传到hdfs中

JAVA代码

示例

查询掉话率最高的前10个基站编号

相关字段

record_time:通话时间

imei:基站编号

call_num 拨号次数

drop_num 掉话次数

掉话率=掉话次数/拨号次数

建表:

导入文件

sql语句

基本Hql语句集合

#通过参数hive.cli.print.header可以控制在cli中是否显示表的列名

set hive.cli.print.header=true;

CREATE TABLE page_view(viewTime INT, userid BIGINT,

page_url STRING, referrer_url STRING,

ip STRING COMMENT 'IP Address of the User')

COMMENT 'This is the page view table'

PARTITIONED BY(dt STRING, country STRING)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\001'

STORED AS SEQUENCEFILE; TEXTFILE

//sequencefile

create table tab_ip_seq(id int,name string,ip string,country string)

row format delimited

fields terminated by ','

stored as sequencefile;

insert overwrite table tab_ip_seq select * from tab_ext;

//create & load

create table tab_ip(id int,name string,ip string,country string)

row format delimited

fields terminated by ','

stored as textfile;

load data local inpath '/home/hadoop/ip.txt' into table tab_ext;

//external

CREATE EXTERNAL TABLE tab_ip_ext(id int, name string,

ip STRING,

country STRING)

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

STORED AS TEXTFILE

LOCATION '/external/hive';

// CTAS 用于创建一些临时表存储中间结果

CREATE TABLE tab_ip_ctas

AS

SELECT id new_id, name new_name, ip new_ip,country new_country

FROM tab_ip_ext

SORT BY new_id;

//insert from select 用于向临时表中追加中间结果数据

create table tab_ip_like like tab_ip;

insert overwrite table tab_ip_like

select * from tab_ip;

//CLUSTER <--相对高级一点,你可以放在有精力的时候才去学习>

create table tab_ip_cluster(id int,name string,ip string,country string)

clustered by(id) into 3 buckets;

load data local inpath '/home/hadoop/ip.txt' overwrite into table tab_ip_cluster;

set hive.enforce.bucketing=true;

insert into table tab_ip_cluster select * from tab_ip;

select * from tab_ip_cluster tablesample(bucket 2 out of 3 on id);

//PARTITION

create table tab_ip_part(id int,name string,ip string,country string)

partitioned by (part_flag string)

row format delimited fields terminated by ',';

load data local inpath '/home/hadoop/ip.txt' overwrite into table tab_ip_part

partition(part_flag='part1');

load data local inpath '/home/hadoop/ip_part2.txt' overwrite into table tab_ip_part

partition(part_flag='part2');

select * from tab_ip_part;

select * from tab_ip_part where part_flag='part2';

select count(*) from tab_ip_part where part_flag='part2';

alter table tab_ip change id id_alter string;

ALTER TABLE tab_cts ADD PARTITION (partCol = 'dt') location '/external/hive/dt';

show partitions tab_ip_part;

//write to hdfs

insert overwrite local directory '/home/hadoop/hivetemp/test.txt' select * from tab_ip_part where part_flag='part1';

insert overwrite directory '/hiveout.txt' select * from tab_ip_part where part_flag='part1';

//array

create table tab_array(a array<int>,b array<string>)

row format delimited

fields terminated by '\t'

collection items terminated by ',';

示例数据

tobenbrone,laihama,woshishui 13866987898,13287654321

abc,iloveyou,itcast 13866987898,13287654321

select a[0] from tab_array;

select * from tab_array where array_contains(b,'word');

insert into table tab_array select array(0),array(name,ip) from tab_ext t;

//map

create table tab_map(name string,info map<string,string>)

row format delimited

fields terminated by '\t'

collection items terminated by ';'

map keys terminated by ':';

示例数据:

fengjieage:18;size:36A;addr:usa

furong age:28;size:39C;addr:beijing;weight:180KG

load data local inpath '/home/hadoop/hivetemp/tab_map.txt' overwrite into table tab_map;

insert into table tab_map select name,map('name',name,'ip',ip) from tab_ext;

//struct

create table tab_struct(name string,info struct<age:int,tel:string,addr:string>)

row format delimited

fields terminated by '\t'

collection items terminated by ','

load data local inpath '/home/hadoop/hivetemp/tab_st.txt' overwrite into table tab_struct;

insert into table tab_struct select name,named_struct('age',id,'tel',name,'addr',country) from tab_ext;

//cli shell

hive -S -e 'select country,count(*) from tab_ext' > /home/hadoop/hivetemp/e.txt

有了这种执行机制,就使得我们可以利用脚本语言(bash shell,python)进行hql语句的批量执行

select * from tab_ext sort by id desc limit 5;

select a.ip,b.book from tab_ext a join tab_ip_book b on(a.name=b.name);

//UDF

select if(id=1,first,no-first),name from tab_ext;

hive>add jar /home/hadoop/myudf.jar;

hive>CREATE TEMPORARY FUNCTION my_lower AS 'org.dht.Lower';

select my_upper(name) from tab_ext;

相关推荐

pyproject.toml到底是什么东西?(py trim)

最近,在Twitter上有一个Python项目的维护者,他的项目因为构建失败而出现了一些bug(这个特别的项目不提供wheel,只提供sdist)。最终,发现这个bug是由于这个项目使用了一个pypr...

BDP服务平台SDK for Python3发布(bdp数据平台)

下载地址https://github.com/imysm/opends-sdk-python3.git说明最近在开发和bdp平台有关的项目,用到了bdp的python的sdk,但是官方是基于p...

Python-for-Android (p4a):(python-for-android p4a windows)

一、Python-for-Android(p4a)简介Python-for-Android(p4a),一个强大的开发工具,能够将你的Python应用程序打包成可在Android设备上运行...

Qt for Python—Qt Designer 概览

前言本系列第三篇文章(QtforPython学习笔记—应用程序初探)、第四篇文章(QtforPython学习笔记—应用程序再探)中均是使用纯代码方式来开发PySide6GUI应用程序...

Python:判断质数(jmu-python-判断质数)

#Python:判断质数defisPrime(n):foriinrange(2,n):ifn%i==0:return0re...

为什么那么多人讨厌Python(为什么python这么难)

Python那么棒,为什么那么多人讨厌它呢?我整理了一下,主要有这些原因:用缩进替代大括号许多人抱怨Python完全依赖于缩进来创建代码块,代码多一点就很难看到函数在哪里结束,那么你就需要把一个函数拆...

一文了解 Python 中带有 else 的循环语句 for-else/while-else

在本文中,我们将向您介绍如何在python中使用带有else的for/while循环语句。可能许多人对循环和else一起使用感到困惑,因为在if-else选择结构中else正常...

python的numpy向量化语句为什么会比for快?

我们先来看看,python之类语言的for循环,和其它语言相比,额外付出了什么。我们知道,python是解释执行的。举例来说,执行x=1234+5678,对编译型语言,是从内存读入两个shor...

开眼界!Python遍历文件可以这样做

来源:【公众号】Python技术Python对于文件夹或者文件的遍历一般有两种操作方法,一种是至二级利用其封装好的walk方法操作:import osfor root,d...

告别简单format()!Python Formatter类让你的代码更专业

Python中Formatter类是string模块中的一个重要类,它实现了Python字符串格式化的底层机制,允许开发者创建自定义的格式化行为。通过深入理解Formatter类的工作原理和使用方法,...

python学习——038如何将for循环改写成列表推导式

在Python里,列表推导式是一种能够简洁生成列表的表达式,可用于替换普通的for循环。下面是列表推导式的基本语法和常见应用场景。基本语法result=[]foriteminite...

详谈for循环和while循环的区别(for循环语句与while循环语句有什么区别)

初九,潜龙勿用在刚开始使用python循环语句时,经常会遇到for循环和while循环的混用,不清楚该如何选择;今天就对这2个循环语句做深入的分析,让大家更好地了解这2个循环语句以方便后续学习的加深。...

Python编程基础:循环结构for和while

Python中的循环结构包括两个,一是遍历循环(for循环),一是条件循环(while循环)。遍历循环遍历循环(for循环)会挨个访问序列或可迭代对象的元素,并执行里面的代码块。foriinra...

学习编程第154天 python编程 for循环输出菱形图

今天学习的是刘金玉老师零基础Python教程第38期,主要内容是python编程for循环输出菱形※。(一)利用for循环输出菱形形状的*号图形1.思路:将菱形分解为上下两个部分三角形图案,分别利用...

python 10个堪称完美的for循环实践

在Python中,for循环的高效使用能显著提升代码性能和可读性。以下是10个堪称完美的for循环实践,涵盖数据处理、算法优化和Pythonic编程风格:1.遍历列表同时获取索引(enumerate...