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

11——20HIVE(11-9=20)

wxin55 2024-10-28 20:34 12 浏览 0 评论

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;

相关推荐

ES6中 Promise的使用场景?(es6promise用法例子)

一、介绍Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码doSomething(f...

JavaScript 对 Promise 并发的处理方法

Promise对象代表一个未来的值,它有三种状态:pending待定,这是Promise的初始状态,它可能成功,也可能失败,前途未卜fulfilled已完成,这是一种成功的状态,此时可以获取...

Promise的九大方法(promise的实例方法)

1、promise.resolv静态方法Promise.resolve(value)可以认为是newPromise方法的语法糖,比如Promise.resolve(42)可以认为是以下代码的语...

360前端一面~面试题解析(360前端开发面试题)

1.组件库按需加载怎么做的,具体打包配了什么-按需加载实现:借助打包工具(如Webpack的require.context或ES模块动态导入),在使用组件时才引入对应的代码。例如在V...

前端面试-Promise 的 finally 怎么实现的?如何在工作中使用?

Promise的finally方法是一个非常有用的工具,它无论Promise是成功(fulfilled)还是失败(rejected)都会执行,且不改变Promise的最终结果。它的实现原...

最简单手写Promise,30行代码理解Promise核心原理和发布订阅模式

看了全网手写Promise的,大部分对于新手还是比较难理解的,其中几个比较难的点:状态还未改变时通过发布订阅模式去收集事件实例化的时候通过调用构造函数里传出来的方法去修改类里面的状态,这个叫Re...

前端分享-Promise可以中途取消啦(promise可以取消吗)

传统Promise就像一台需要手动组装的设备,每次使用都要重新接线。而Promise.withResolvers的出现,相当于给开发者发了一个智能遥控器,可以随时随地控制异步操作。它解决了三大...

手写 Promise(手写输入法 中文)

前言都2020年了,Promise大家肯定都在用了,但是估计很多人对其原理还是一知半解,今天就让我们一起实现一个符合PromiseA+规范的Promise。附PromiseA+规范地址...

什么是 Promise.allSettled()!新手老手都要会?

Promise.allSettled()方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的pr...

前端面试-关于Promise解析与高频面试题示范

Promise是啥,直接上图:Promise就是处理异步函数的API,它可以包裹一个异步函数,在异步函数完成时抛出完成状态,让代码结束远古时无限回掉的窘境。配合async/await语法糖,可...

宇宙厂:为什么前端离不开 Promise.withResolvers() ?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.为什么需要Promise.with...

Promise 新增了一个超实用的 API!

在JavaScript的世界里,Promise一直是处理异步操作的神器。而现在,随着ES2025的发布,Promise又迎来了一个超实用的新成员——Promise.try()!这个新方法简...

一次搞懂 Promise 异步处理(promise 异步顺序执行)

PromisePromise就像这个词的表面意识一样,表示一种承诺、许诺,会在后面给出一个结果,成功或者失败。现在已经成为了主流的异步编程的操作方式,写进了标准里面。状态Promise有且仅有...

Promise 核心机制详解(promise机制的实现原理)

一、Promise的核心状态机Promise本质上是一个状态机,其行为由内部状态严格管控。每个Promise实例在创建时处于Pending(等待)状态,此时异步操作尚未完成。当异步操作成功...

javascript——Promise(js实现promise)

1.PromiseES6开始支持,Promise对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示。简单说就是处理异步请求的。之所以叫Promise,就是我承诺,如果成功则怎么处理,失败怎...

取消回复欢迎 发表评论: