Hive的安装过程

1.hadoop:

1. hdfs:

  1. 存储思想
    文件上传、文件下载、元数据合并
  2. 四大机制:
    1. 心跳、选择、心跳频率、死亡时间
    2. 机架、负载均衡、安全模式
    3. 磁盘元数据、内存元数据
    4. 安全模式退出的检查标准
  3. 操作:shell

2.mapreduce:

  1. 原理:

    1. maptask的并行度
    2. reducetask的并行度
    3. shuffle ****
  2. 操作:

     wc
     map的key的设计  场景
     join  mapjoin
     分区  ****
     排序   ***
     分组   ****
     combiner   *****
    

yarn:

产生背景:

hadoop1.0的模块:

  1. hdfs 分布式存储的

  2. mapreduce 分布式计算的 map/reduce v1
    启动job的时候,对应的进程jobtracker tasktracker
    主从结构

  3. jobtracker:(类似于yarn–resourcemanager)
    mr程序运行的老大
    1. 资源的分配
    2. 启动所有的应用程序 跟踪每一个应用程序的运行状态
    3. 不存在高可用的配置方案的 存在单点故障的

  4. tasktracker:
    负责为应用程序提供资源
    强行的将每一个节点的资源分为2部分:
    1.mapslot-----只能用于运行maptask任务
    2.reduceslot----只能用于运行reducetask的任务
    这种资源的分配方式严重的缺点:
    不能合理利用资源

  5. map/reduce V1:

     	1)扩展性差     
     	2)可靠性低   不支持高可用的配置   存在单点故障  
     	3)资源利用率低  
     	4)map/reduce V1只能支持mapreduce任务的执行  
     	不能调度其他的计算任务
     	yarn:spark on yarn 
    

hadoop2.0

	模块:HDFS   MAPREDUCE  YARN

YARN的架构:

	主从架构的  resourcemanager   nodemanager

1. 主节点:resourcemanager

		整个资源调度的老大
		1)负责为每一个job分配资源
		2)负责启动当前job的老大  MRappmaster
		3)负责管理所有的nodemanager
		监控从节点的资源状况   存活状况
		
		组成:
1.1 ASM:
  1. applicationsmanager:管理所有的应用程序
  2. 所有job的管理者
  3. 管理所有的job的MRappmaster
  4. 负责mrappmaster启动,及mrappmaster的运行状态的监控 失败重启
1.2 Scheduler:
  1. 调度器
  2. yarn上提交多个job的时候 调度器就负责哪一个任务先执行 哪一个任务后执行
  3. job的运行顺序问题
    分类:
FIFO:FIRST IN FIRST OUT 先进先出
  1. 内部维护一个队列 先提交的job在队列的最前面
  2. 优先调度队列前面的
  3. 按job提交的先后顺序进行调度的
  4. 缺陷:如果前面提交的任务都是大的任务,造成后面的任务需要等待很长时间
Fair:公平调度器
  1. 第一个提交的任务 全部的资源执行这个任务
  2. 第一个任务执行的过程中 又提交了一个任务 两个job平分资源 每个job占用一半资源
  3. 如果又提交一个 资源在进行平分 每一个job占用1/3
  4. 多个job平分资源的
  5. 缺点:每一个任务的计算量不一样 如果说有一个任务计算量很大 会造成这个任务的运行时间比较长的
Capacity:计算能力调度器 容量调度器
  1. 可以根据job的实际的运行的任务 进行一个手动的资源的划分

  2. 内部维护的是多个队列

  3. 每一个队列都是先进先出的 FIFO

  4. 用户可以配置每一个队列的资源配比

    队列1: 70% 队列2: 30% 默认的调度器:capacity

从节点:nodemanager

  1. 负责给计算任务真正的提供资源的

  2. nodemanager提供资源的时候以Container为单位进行提供的

  3. Container:逻辑资源容器 虚拟资源容器

  4. 逻辑/虚拟:这部分资源没有真正的从节点中划分出来的

  5. 资源容器:封装了一定的资源(CPU 内存 网络 IO)的容器

  6. 封装了一定的资源的容器,但是这部分资源没有真正的从节点中物理划分出来

  7. nodemanager在提供资源的时候 要么n(正整数)的个container 要么是0个

    作用:
    1)为计算程序真正的提供资源
    2)接受resourcemanager的命令,并处理
    3)向resourcemanager发送心跳 告诉resourcemanager自己的存活状况
    4)接受并处理MRappmaster的命令

概念:
运行一个计算程序,满足的条件
	1)程序
	2)资源
	3)数据
MRappmaster:
	每一个job启动的时候  会最先启动一个这个job对应的MRappmaster
	wc   job------wc  MRappmaster
	PI-----   PI   MRappmaster
	一旦启动,
	1)负责向resourcemanager申请maptask  reducetask的资源
	2)负责启动当前job的maptask任务和reducetask任务
	3)负责跟踪每一个maptask  reducetask的运行状态
	4)将失败的maptask  reducetask任务进行重启

yarn的资源调度过程:
1)客户端向resourcemanager发送一个提交job的请求
hadoop jar …jar … … …
任务先提交给ASM,向ASM进行注册
ASM将任务转交给Scheduler
2)一旦有资源,调度器开始提交job的运行
resourcemanager(ASM)到对应的资源上启动当前应用程序的MRappmaster
3)MRappmaster向resourcemanager申请运行maptask和reducetask的资源
4)resourcemanager向MRappmaster返回资源节点
5)MRappmaster到对应的节点上启动Container,并在这个container中
启动maptask任务和reducetask任务
6)maptask和reducetask运行过程中向MRappmaster汇报自己的运行状态
和进度
7)maptask或reducetask运行完成就会向MRappmaster汇报
MRappmaster 进行资源销毁释放资源
8)所有的maptask和reducetask运行完成,MRappmaster向resourcemanager注销自己
释放资源
job的提交过程 ****
共享资源:
/tmp/hadoop-yarn/staging/hadoop/.staging/job_1541742916235_0015/job.jar
/tmp/hadoop-yarn/staging/hadoop/.staging/job_1541742916235_0015/job.split
/tmp/hadoop-yarn/staging/hadoop/.staging/job_1541742916235_0015/job.splitmetainfo
/tmp/hadoop-yarn/staging/hadoop/.staging/job_1541742916235_0015/job.xml
job.jar job.split job.splitmetainfo job.xml
job.jar 原始jar包
job.split
job.splitmetainfo 当前job的切片信息 对应的maptask的并行度
job.xml job的配置文件 job中所有的相关设置
job.getConfiguration()

maptask或reducetask从共享资源下载的文件在本地的目录:
/home/hadoop/data/hadoopdata/nm-local-dir/usercache/hadoop/appcache

yarn为mapreduce任务资源调度服务的
注意:
1)第10步中rm向mrappmaster返回maptask的资源节点的时候
优先返回当前的mr任务的数据所在节点
数据本地化原则
如果说mr任务输入的数据的数据块存储的节点没有资源了
这个时候rm会就近原则进行返回节点
同机架
不同机架 同机房
2)安装集群的过程中,配置的从节点既是hdfs的从节点datanode
也是yarn的从节点 nodemanager
集群的运行过程中 nodemanager节点必然是datanode节点
nodemanager:提供资源 运行程序
datanode:提供数据存储
这么配置的原因:数据在哪 计算在哪
mr的设计原则:移动计算比移动数据更划算 计算向数据靠近

补充:
shuffle:
80M溢写完成之后会移动元数据和原始数据形成背对背的结构
形成一个新的分界线

hive

数据仓库
产生的背景:
hadoop中hdfs负责存储,mapreduce负责统计分析
单词统计
学生成绩统计 topN 平均分 结构化数据
流量统计 一个手机号的所有的上行流量 下行流量 总流量 结构化数据
join 结构化数据

上面的需求,如果数据量小的时候,这些针对结构化数据的分析sql是最方便  高效的开发方式
但是现在数据量大了  所以用MR框架
缺点:
	开发的成本高
		用人成本
			招聘  java   MR
			主流的语言  java  c   python
		时间成本:
			开发的周期比较长的
如果可以有一个组件,提供sql编程,分布式运行计算程序就好了
hive就是干这个
hive就是对外提供hql编程(方言版的sql),将hql转换为MR任务的工具
hive底层数据hdfs的,计算使用的MR
hive相当于对hadoop做了一层上层封装  
hive可以看做值hadoop的另外一种模式的客户端
hive可以极大的降低结构化数据分析的成本
对于半结构化或非结构化的数据hive是不可以分析的	

Hive是什么?

1.Hive 由 Facebook 实现并开源
	apache基金会的顶级项目
	http://hive.apache.org/
2.是基于 Hadoop 的一个数据仓库工具
	数据仓库和数据库区别
	1)概念
	数据仓库:数据仓库更倾向于数据管理  
			管理的数据可以不是存储在自己本地的数据
			通常用于大批量的数据管理
	数据库:
		存储的数据一般在自己的本地
		通常用于存储小批量的数据   一般用于存储结果数据
	2)使用
	数据仓库:hql  方言sql
	数据库:
		mysql   标准sql
		nosql 数据库  自己的一套shell
	3)应用场景上
		OLAP    On line Analysis Processing
			联机分析处理    查询    数据仓库
			hive中不支持事务的
			hive中甚至不支持update  delete操作  支持insert  但是性能比较低
		OLTP   On line Transaction Processing
			联机事务处理  增删改的操作   数据库
	4)模式上
		数据仓库:hive
			读模式
		数据库:	
			关系型数据库写模式
			分布式的数据库的模式不确定
	
3.可以将结构化的数据映射为一张数据库表
	在hive中指定一份结构化的数据,就可以用hive中的表进行关联
	数据文件的一行数据-----hive表中的一条数据
	数据文件中的一个字段---hive表中的一列
	computer,huangxiaoming,85
	computer,xuzheng,54
	computer,huangbo,86
4.并提供 HQL(Hive SQL)查询功能
	hive对外提供hql查询
5.底层数据是存储在 HDFS 上
	hive的原始数据存储的hdfs的,在hdfs上有一个hive的默认目录
	称为hive的家目录,hive中存储的所有的表数据默认存储在hive的
	家目录下
6.Hive的本质是将 SQL 语句转换为 MapReduce 任务运行
	在hive的底层会保存很多map和reduce模板
	hive最后将hql语句翻译成map  reduce任务
7.使不熟悉 MapReduce 的用户很方便地利用 HQL 
	处理和计算 HDFS 上的结构化的数据
8.适用于离线的批量数据计算
	依赖于hadoop

hive的优缺点:

优点:延展性 自定义函数
缺点:
1)不支持事务
2)不支持行级别的update delete操作
目前支持insert的操作 性能低
3)查询的延时性高 不适合实时

hive的架构:
1)用户接口层:CLI shell访问
ODBC/JDBC 代码
WEB UI 网页访问 不用 1)配置复杂 2)丑

2)Thrift Server:跨语言服务层 c java python
将各个语言 翻译成hive识别的操作符
3)元数据库层:
元数据库存储的是用于描述hive中的库或表或表字段的信息的数据
hive的元数据是结构化数据存储的,hive的元数据存储在关系型数据库的
默认存储在derby的数据库的 一般情况下我们会改为mysql

hive中表:stu(id int,name String,age int)
元数据:表名  表的字段   字段的顺序  字段的类型
原始数据:存储的是表中的数据
	例如:表中一条数据:1,zs,34  存储在hdfs的

4)驱动层
(1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)
(2) 编译器:编译器是将语法树编译为逻辑执行计划 初步构思
(3) 优化器:优化器是对逻辑执行计划进行优化 相同的任务进行合并
(4) 执行器:执行器是调用底层的运行框架执行逻辑执行计划

hive的安装:
安装准备:
jdk
hadoop
mysql
安装好的
安装节点:
一个节点
安装的版本:
下载安装包的镜像站:

		http://mirror.bit.edu.cn/apache/hive/ 

		http://mirrors.hust.edu.cn/apache/hive/ 

		http://mirrors.shu.edu.cn/apache/hive/ 

		http://mirrors.tuna.tsinghua.edu.cn/apache/
	hive2.3.2版本
	1.2.1 版本

安装:

1)元数据库使用自带的derby数据库

步骤:

1)上传安装包

2)解压

		tar -xvzf apache-hive-2.3.2-bin.tar.gz

3)配置环境变量

		为了方便集群的版本升级,可以先创建软连接
		ln -s apache-hive-2.3.2-bin hive
		配置换变量:
sudo vi /etc/profile
export HIVE_HOME=/home/hadoop/apps/hive
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin
		source /etc/profile

4)元数据库初始化

schematool -dbType derby -initSchema

schemaTool completed 证明初始化成功
注意:元数据初始化不成功的时候不要启动hive
初始化完成后会发现在初始化的目录下,会多两个文件
derby.log derby的日志文件
metastore_db 存放元数据库的

5)启动

hive
hive> hive的客户端操作界面 可以执行hive的shell
对于hive来说sql的绝大多数是可以使用的
直接启动发现报错
元数据库报错 元数据的实例化报错
FAILED: SemanticException
org.apache.hadoop.hive.ql.metadata.HiveException:
java.lang.RuntimeException: Unable to
instantiate
org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

这种方式在哪一个目录初始化 在哪一个目录启动 没有问题的
切换目录,报错:
FAILED: SemanticException org.apache.hadoop.hive.ql.metadata
.HiveException: java.lang.RuntimeException:
Unable to instantiate
org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

derby这种方式启动的时候只会读取启动目录下的元数据库,
切换目录后启动目录下没有元数据信息了,所以报错

缺陷:
元数据信息无法共享的
本目录只能访问本目录下的元数据信息
只适合单用户使用 不适合多用户

2)元数据库为mysql的安装方式

1)安装mysql并配置好mysql的用户名密码

yum安装mysql

1)配置yum源

在/mnt创建目录cdrom
mkdir cdrom
挂载
sudo mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom/
配置本地的yum源
cd /etc/yum.repos.d/
sudo rename .repo .repo.bak *
sudo cp CentOS-Media.repo.bak CentOS-Media.repo

sudo yum clean all
yum repolist

2)安装mysql
sudo yum install -y mysql-server
sudo service mysqld start
3)修改mysql的用户名 密码
use mysql;
delete from user where user=’’;
update user set host=’%’ where host=‘localhost’;
update user set password=PASSWORD(‘123456’) where user=‘root’;
flush privileges;

退出mysql
重启mysql服务

2)上传hive的安装包
3)解压hive的安装包
4)修改环境变量
5)修改hive的配置文件
/home/hadoop/apps/hive/conf
touch hive-site.xml

<configuration>

<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/myhive?createDatabaseIfNotExist=true</value>
<description>元数据库的连接url,myhive指的是hive的元数据在mysql中的库名</description>
<!-- 如果 mysql 和 hive 在同一个服务器节点,那么请更改 hadoop02 为 localhost -->
</property>

<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>指定元数据库mysql的驱动类</description>
</property>

<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>元数据库mysql的用户名</description>
</property>

<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>元数据库mysql的密码</description>
</property>
</configuration>
6)将mysql的驱动包放在hive的依赖库lib下
7)初始化hive的元数据库
		schematool -dbType mysql -initSchema
		schemaTool completed
8)启动hive
		hive >
		
		hive初体验:
		create database test;
		use test;
		建表关联score数据
		math,huangxiaoming,85
		create table stu(course string,name string,score int) row 
		format delimited fields terminated by ','; 

		row format行格式化
		delimited  分界
		fields terminated  列分界符
		lines terminated by '\n'  行分割符
		
		本地数据加载到表中
		load data local inpath '/home/hadoop/tmpdata/score' into table stu;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值