PS:视频一直就是在演示   高可用(比较偏运维一点)

PS:
Active是对外提供服务的,standBy是从属备用的;但是他们是怎样保证同步的数据的呢?一个运行中zookeeper上的第三方那个工具 qJournal
PS:什么时候感知到服务挂了呢,进行切换呢?就是使用zkfc技术

PS:namenode的安全模式

PS:Ferdaration是就是由多个HDFS构成。一般用的比较少

---------------------------Hive

1.1.1 什么是Hive

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。

PS:数据仓库,  如下图左边是一个网站,中间是相应的数据库,但是随着数据的增多,网站运行变得缓慢。这时,就会把一些不常用的表保存起来,比如订单表,他在数据库中保存的形式
是宽表,以不同的粒度和维度去保存,结构形式是星系或者雪花型

1.1.1 为什么使用Hive

  • 直接使用hadoop所面临的问题

人员学习成本太高

项目周期要求太短

MapReduce实现复杂查询逻辑开发难度太大

  • 为什么要使用Hive

操作接口采用类SQL语法,提供快速开发的能力。

避免了去写MapReduce,减少开发人员的学习成本。

扩展功能很方便。

PS:它可以使用sql去生成MapReduce程序,首先在HDFS文件中,不同的sql会得到不同的结构表。
在生成MapReduce程序上,Hive内部有一个编译器,会把SQL语言执行生成为MapReduce程序,而且内部会有一个表,记录着数据表的信息。

----------------------------------------------Hive的安装与体验-------

PS:Hive是一个工具不是集群。可以放在任何一台机器上

1.启动hdfs

2.上传jar包

解压文件、移除包、重命名文件夹

tar -zxvf apache-hive-1.2.1-bin.tar.gz -C apps/

------------------------

其实,我们什么也不用配置就能启动hive,但是hive使用的是dubin数据库,所以我们使用mysql,测试mysql使用第一句

在hive/conf中创建hive-site.xml文件

根据上面配置文件需要classpath 的驱动包,hive的classpath在lib中

下图为上传以后,查找文件

PS:启动的时候一定要这样写,出现这个问题的原因就是hive 中jline比hadoop的版本要高,所以要替换hadoop中的jline(功能是提供命令行敲字符)

解决问题,删除,复制

----------------------------------Hive初体验

QQ: Linux中hive无法使用Delete和Backspace删除键

1.创建数据库,然后在hdfs中有个shizhan03.db的文件

2.在这个库里面创建 表格

1.编辑数据,上传到hdfs

2.创建库,查找上传后的数据

PS: 后天执行的mapReduce

-----------------------------------------概念

1.1 HiveHadoop关系 

Hive利用HDFS存储数据,利用MapReduce查询数据

1.2 Hive与传统数据库对比

总结hive具有sql数据库的外表但应用场景完全不同hive只适合用来做批量数据统计分析

1.6.2 启动hive的方种形式

Hive交互shell

bin/hive

Hive thrift服务

启动方式,(假如是在hadoop01上):

启动为前台:bin/hiveserver2

启动为后台:nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err &

启动成功后,可以在别的节点上用beeline去连接

v 方式(1)

hive/bin/beeline  回车,进入beeline的命令界面

输入命令连接hiveserver2

beeline> !connect jdbc:hive2//mini1:10000

(hadoop01是hiveserver2所启动的那台主机名,端口默认是10000)

方式(2)

或者启动就连接:

bin/beeline -u jdbc:hive2://mini1:10000 -n hadoop

接下来就可以做正常sql查询了

------------------------------------------

PS:加载数据还可以使用hadoop -fs put ,提交到某个位置

PS:
1.Hive在解析数据的时候, 符合格式的就自动解析出来,不符合的直接解析为NULL
2.外和内表在删除时结构会自动删除,但是外表的数据还在
3.分区 这个概念他是一个 伪字段,但是由于这些他会在数据查询的时候自动帮你查找,但是不是真正的字段数据
作用:就是让你在统计的时候少统计一些数据,体现在数据上就是文件夹



-----------------------分桶概念------------

PS:分桶的数据不适合 load进来,适合 select 的数据

---------------------------Join操作,不明白的话看文档--------------------------

关于hive中的各种join

准备数据
1,a
2,b
3,c
4,d
7,y
8,u

2,bb
3,cc
7,yy
9,pp

建表:
create table a(id int,name string)
row format delimited fields terminated by ',';

create table b(id int,name string)
row format delimited fields terminated by ',';

导入数据:
load data local inpath '/home/hadoop/a.txt' into table a;
load data local inpath '/home/hadoop/b.txt' into table b;

实验:
** inner join
select * from a inner join b on a.id=b.id;
+-------+---------+-------+---------+--+
| a.id | a.name | b.id | b.name |
+-------+---------+-------+---------+--+
| 2 | b | 2 | bb |
| 3 | c | 3 | cc |
| 7 | y | 7 | yy |
+-------+---------+-------+---------+--+

**left join
select * from a left join b on a.id=b.id;
+-------+---------+-------+---------+--+
| a.id | a.name | b.id | b.name |
+-------+---------+-------+---------+--+
| 1 | a | NULL | NULL |
| 2 | b | 2 | bb |
| 3 | c | 3 | cc |
| 4 | d | NULL | NULL |
| 7 | y | 7 | yy |
| 8 | u | NULL | NULL |
+-------+---------+-------+---------+--+

**right join
select * from a right join b on a.id=b.id;

**
select * from a full outer join b on a.id=b.id;
+-------+---------+-------+---------+--+
| a.id | a.name | b.id | b.name |
+-------+---------+-------+---------+--+
| 1 | a | NULL | NULL |
| 2 | b | 2 | bb |
| 3 | c | 3 | cc |
| 4 | d | NULL | NULL |
| 7 | y | 7 | yy |
| 8 | u | NULL | NULL |
| NULL | NULL | 9 | pp |
+-------+---------+-------+---------+--+

**
select * from a left semi join b on a.id = b.id;
+-------+---------+--+
| a.id | a.name |
+-------+---------+--+
| 2 | b |
| 3 | c |
| 7 | y |
+-------+---------+--+

------------------------------一个大数据广告项目的介绍

PS:
目的:广告商为了精准的对目标客户投放广告
分为三个:用户 、广告中介商 、 广告商
---------------------------------
婷婷是一个女孩,她可以在各种广告提供商浏览数据,不同的提供商提供不同的广告。
当婷婷点击某个按钮以后,含有js代码。到中间商这一层之后,通过广告引擎来推送广告,可以是图片或者是视频
怎样确定婷婷这个女孩的需要呢?
首先,在她浏览的大量数据中,会有各种数据,这个数据经过 图运算以后就会变得有联系,进而形成用户画像仓库。
最后广告推送引擎就是通过对婷婷这个人来进行判断的。

------------------------------Hive有内置函数

PS:自定义函数也都是套路,有模板

4.3 Hive自定义函数和Transform

PS :这些自定义函数就是和mysql类似的   select concat('','') from t_xx ;

当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。

4.3.1 自定义函数类别

UDF  作用于单个数据行,产生一个数据行作为输出。(数学函数,字符串函数)

UDAF(用户定义聚集函数):接收多个输入数据行,并产生一个输出数据行。(count,max)

4.3.2 UDF开发实例

1、先开发一个java类,继承UDF,并重载evaluate方法

package cn.itcast.bigdata.udf

import org.apache.hadoop.hive.ql.exec.UDF;

import org.apache.hadoop.io.Text;

public final class Lower extends UDF{

public Text evaluate(final Text s){

if(s==null){return null;}

return new Text(s.toString().toLowerCase());

}

}

2、打成jar包上传到服务器

3、将jar包添加到hive的classpath

hive>add JAR /home/hadoop/udf.jar;

4、创建临时函数与开发好的java class关联

Hive>create temporary function toprovince as 'cn.itcast.bigdata.udf.ToProvince';

5、即可在hql中使用自定义的函数strip

Select strip(name),age from t_test;

----------------------------------------我的实践--parseJson-------------------------------------

package cn.itcast.bigdata.udf;

import org.apache.hadoop.hive.ql.exec.UDF;

import parquet.org.codehaus.jackson.map.ObjectMapper;

public class JsonParser extends UDF {

    public String evaluate(String jsonLine) {

        ObjectMapper objectMapper = new ObjectMapper();

        try {
MovieRateBean bean = objectMapper.readValue(jsonLine, MovieRateBean.class);
return bean.toString();
} catch (Exception e) { }
return "";
} }
package cn.itcast.bigdata.udf;

//{"movie":"1721","rate":"3","timeStamp":"965440048","uid":"5114"}
public class MovieRateBean { private String movie;
private String rate;
private String timeStamp;
private String uid;
public String getMovie() {
return movie;
}
public void setMovie(String movie) {
this.movie = movie;
}
public String getRate() {
return rate;
}
public void setRate(String rate) {
this.rate = rate;
}
public String getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(String timeStamp) {
this.timeStamp = timeStamp;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
@Override
public String toString() {
return movie + "\t" + rate + "\t" + timeStamp + "\t" + uid;
} }

1.编写代码,上传jar

2.创建表格,导入数据

PS: UDF就是为了写适合的   特殊函数
------内置json转换函数
 

4.3.3 Transform实现

Hive的 TRANSFORM 关键字提供了在SQL中调用自写脚本的功能

适合实现Hive中没有的功能又不想写UDF的情况

使用示例1:下面这句sql就是借用了weekday_mapper.py对数据进行了处理.

CREATE TABLE u_data_new (

movieid INT,

rating INT,

weekday INT,

userid INT)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t';

add FILE weekday_mapper.py;

INSERT OVERWRITE TABLE u_data_new

SELECT

TRANSFORM (movieid, rating, unixtime,userid)

USING 'python weekday_mapper.py'

AS (movieid, rating, weekday,userid)

FROM u_data;

其中weekday_mapper.py内容如下

#!/bin/python

import sys

import datetime

for line in sys.stdin:

line = line.strip()

movieid, rating, unixtime,userid = line.split('\t')

weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()

print '\t'.join([movieid, rating, str(weekday),userid])

使用示例2:下面的例子则是使用了shell的cat命令来处理数据

FROM invites a INSERT OVERWRITE TABLE events SELECT TRANSFORM(a.foo, a.bar) AS (oof, rab) USING '/bin/cat' WHERE a.ds > '2008-08-09';

------------------------------------transform案例:

1、先加载rating.json文件到hive的一个原始表 rat_json
create table rat_json(line string) row format delimited;
load data local inpath '/home/hadoop/rating.json' into table rat_json; 2、需要解析json数据成四个字段,插入一张新的表 t_rating
insert overwrite table t_rating
select get_json_object(line,'$.movie') as moive,get_json_object(line,'$.rate') as rate from rat_json; 3、使用transform+python的方式去转换unixtime为weekday
先编辑一个python脚本文件
########python######代码
vi weekday_mapper.py
#!/bin/python
import sys
import datetime for line in sys.stdin:
line = line.strip()
movieid, rating, unixtime,userid = line.split('\t')
weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
print '\t'.join([movieid, rating, str(weekday),userid]) 保存文件
然后,将文件加入hive的classpath:
hive>add FILE /home/hadoop/weekday_mapper.py;
hive>create TABLE u_data_new as
SELECT
TRANSFORM (movieid, rate, timestring,uid)
USING 'python weekday_mapper.py'
AS (movieid, rate, weekday,uid)
FROM t_rating; select distinct(weekday) from u_data_new limit 10;

day11hadoop高可用和Hive的更多相关文章

  1. 高可用Hadoop平台-集成Hive HAProxy

    1.概述 这篇博客是接着<高可用Hadoop平台>系列讲,本篇博客是为后面用 Hive 来做数据统计做准备的,介绍如何在 Hadoop HA 平台下集成高可用的 Hive 工具,下面我打算 ...

  2. Hive扩展功能(五)--HiveServer2服务高可用

    软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这五部机, 每部主机的用户名都为centos ...

  3. hadoop-2.7.1基于QMJ高可用安装配置

    1.修改主机名及hosts文件 10.205.22.185 nn1 (主)作用namenode,resourcemanager,datanode,JournalNode,zk,zkfc(hive,sq ...

  4. Hadoop高可用平台搭建

    文章概览: 1.机器规划和预配置 2.软件安装 3.集群文件配置 4.启动集群 5.HA验证 6.注意事项 7.小结   机器规划和预配置 主机/进程 NN DN RM NM ZK(QP) ZKFC ...

  5. 日志采集框架Flume以及Flume的安装部署(一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统)

    Flume支持众多的source和sink类型,详细手册可参考官方文档,更多source和sink组件 http://flume.apache.org/FlumeUserGuide.html Flum ...

  6. 高可用的MongoDB集群

    1.序言 MongoDB 是一个可扩展的高性能,开源,模式自由,面向文档的数据库. 它使用 C++编写.MongoDB 包含一下特点: l  面向集合的存储:适合存储对象及JSON形式的数据. l ...

  7. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

  8. MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解

    MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Mycat介绍 1>.什么是Mycat Mycat背后是 ...

  9. Hadoop记录-Hadoop NameNode 高可用 (High Availability) 实现解析

    Hadoop NameNode 高可用 (High Availability) 实现解析   NameNode 高可用整体架构概述 在 Hadoop 1.0 时代,Hadoop 的两大核心组件 HDF ...

随机推荐

  1. python 学习 面向对象编程

    面向对象编程---oop,是一种编程思想,oop把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行为了简化程序设计 ...

  2. TTL特殊门电路

    集电极开路(OC)门:主要作用实现线与功能:用做驱动器:实现电平转换 三态输出(TS)门:应用于计算机总线结构,通过分时控制三态门始轮端使得cpu与不同的外设通信:应用于双向传输,实现门电路与总线实现 ...

  3. mysql数据库存储引擎及区别

    MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(BerkeleyDB).EXAMPLE.FEDERAT ...

  4. 初识数据库、初识MySQL

    一.为什么要用数据库 # 1.将文件和程序存在一台机器上是很不合理的. # 2.操作文件是一件很麻烦的事. 所以就出现了一个新的概念 —— 数据库 你可以理解为 数据库 是一个可以在一台机器上独立工作 ...

  5. 【重大更新】DevExpress WinForms v18.2新版亮点(七)

    买 DevExpress Universal Subscription  免费赠 万元汉化资源包1套! 限量15套!先到先得,送完即止!立即抢购>> 行业领先的.NET界面控件2018年第 ...

  6. OpenStack平台虚拟机实例在线迁移失败问题

    一.在线迁移时提示如下的报错 二.原因分析 通过kolla-ansible部署queens版本时,因为OEM的机器设备的UUID记录的一致,导致迁移时识别的是自身机器的UUID,导致迁移失败 三.问题 ...

  7. Tap 模拟手势点击坐标

    前言:有时候元素怎么都定位不到,没办法就只能坐标定位了,不过这个坐标定位不准确,换个手机就可能定位不到了,这是一个下下策的定位方式. tap用法 1.tap是模拟手指点击页面上元素语法有两个参数,第一 ...

  8. python如何进行内存管理的

    python引用了一个内存池(memory pool)机制,即pymalloc机制(malloc:n,分配内存),用于管理对小块的申请和释放.

  9. 2--Jmeter 4.0--Excel 数据驱动 接口测试

    Excel 模板 通过jmeter的csv data set config 读取 Jmeter注意事项 (1)数据驱动 1..JDBC :SQL 存储在excel中,无法将where条件对应的jmet ...

  10. CSS3一个酷炫的加载效果

    上效果图,用截屏工具制作的,看起来有点卡,在网页上面显示还是不错的. CSS代码: <style type="text/css"> .loader{ position: ...