Hadoop架构及Hive环境准备

目录

分布式和集群

Hadoop框架

概述

版本更新

Hadoop架构详解

Hadoop集群的启动

启动

页面

官方示例

圆周率练习

词频统计[重点]

需求:

步骤:

Hadoop-HDFS

特点

架构

 副本

​编辑

shell命令

Hive环境准备(重点)

shell脚本执行方式

配置Hive环境变量

启动hive服务

连接hive服务

一代客户端连接

 二代客户端连接


分布式和集群

分布式:多台服务器协同配合完成同一个大任务(每个服务器只完成大任务拆分出来的单独一个子任务)

集群:多台服务器联合起来独立做相同的任务(多个服务器分担客户端发来的请求)

注意:集群如果客户端请求量(任务量)多,多个服务器同时处理不同请求(不同任务),如果请求量少,一台服务器干活,其它服务器做备份使用

 

Hadoop框架

概述

hadoop简介:是Apache旗下的一个用java语言实现开源软件框架,是一个存储和计算大规模数据的软件平台

hadoop起源:Doug Cutting 创建的,最早起源一个Nutch项目

三驾马车:谷歌的三篇本论文加速了Hadoop的研发

Hadoop框架的意义:作为大数据解决方案,越来越多的企业将Hadoop技术作为进入大数据领域的必备技术

狭义上来说:Hadoop指Apache这款开源框架,它的核心组件有:HDFS MR YARN

广义上来说:Hadoop通常是指一个更广泛的概念-Hadoop生态圈

Hadoop发行版本:分为开源社区版和商业版.

开源社区版:指由Apache软件基金会维护的版本,是官方维护的版本体系,版本丰富,兼容性稍差

商业版:指由第三方商业公司在社区版Hadoop基础上进行了一些修改,整合以及各个服务组件兼容性测试而发行的版本,如:cloudera的CDH等

版本更新

1.x版本系列: hadoop的第二代开源版本,该版本基本已被淘汰        hadoop组成:  HDFS(存储)和MapReduce(计算和资源调度)

2.x版本系列: 架构产生重大变化,引入了Yarn平台等许多新特性       hadoop组成:  HDFS(存储)和MapReduce(计算)和YARN(资源调度)

3.x版本系列: 因为2版本的jdk1.7不更新,基于jdk1.8升级产生3版本   hadoop组成:  HDFS(存储)和MapReduce(计算)和YARN(资源调度)

Hadoop架构详解

当前版本hadoop组成:  HDFS   MapReruce   YARN

HDFS:(分布式文件系统),解决海量数据存储

        元数据:描述核心数据的数据

        NameNote:集群当中的主节点,主要用于管理集群当中的各种数据

        SencondaryNameNote:主要用于辅助NameNote进行文件块元数据存储

        DataNote:集群当中的从节点,主要用于存储真实的海量的业务数据

YARN:(作业调度和集群资源管理的框架),解决资源任务调度

        ResourceManager:接收用户的计算请求任务,并负责集群的资源管理和分配

        NoteManager:负责执行主节点分配的任务(给MR的计算程序提供资源)

MapReduce:(分布式运算编程框架),解决海量数据计算

        如何计算:核心思想就是分而治之 ;Map负责分解,Reduce负责合并

        MR程序:使用java/python然后去编写MR程序,成本高

        解决办法:在hive平台上编写sql,执行sql底层自动转为MR程序

MapReduce计算需要的数据和产生的结果需要HDFS来进行存储

MapReduce的运行需要YARN集群来提供资源调度

Hadoop集群的启动

启动

# 一键启动hdfs和yarn集群
[root@node1 ~]# start-all.sh

# 单独启动mr计算任务历史服务
[root@node1 ~]# mapred --daemon start historyserver

页面

使用ip地址访问:

 HDFS: http://192.168.88.161:9870/

YARN: http://192.168.88.161:8088/

jobhistory:http://192.168.88.161:19888/

 配置环境变量

可以进入 C:\Windows\System32\drivers\etc 目录打开hosts文件,添加以下内容:

192.168.88.161 node1.sisi.cn node1
192.168.88.162 node2.sisi.cn node2
192.168.88.163 node3.sisi.cn node3

配置完成后,可以直接通过node1和node1.sisi.cn访问  

HDFS: http://node1:9870/

YARN: http://node1:8088/

jobhistory: http://node1:19888/

HDFS: http://node1.sisi.cn:9870/

YARN: http://node1.sisi.cn:8088/

jobhistory: http://node1.sisi.cn:19888/

官方示例

在Hadoop的安装包中,官方提供了MapReduce程序的示例examples,以便快速上手体验MapReduce。该示例是使用java语言编写的,被打包成为了一个jar文件。

官方示例jar路径: /export/server/hadoop-3.3.0/share/hadoop/mapreduce

圆周率练习

hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi x y

第一个参数pi:表示MapReduce程序执行圆周率计算;

第二个参数x:用于指定map阶段运行的任务次数,并发度,举例:x=10

第三个参数y:用于指定每个map任务取样的个数,举例: y=50

[root@node1 ~]# cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce
[root@node1 mapreduce]# hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 10 50
...
Job Finished in 29.04 seconds
Estimated value of Pi is 3.16000000000000000000

词频统计[重点]

需求:

WordCount算是大数据统计分析领域的经典需求了,相当于编程语言的HelloWorld。统计文本数据中, 相同单词出现的总次数。用SQL的角度来理解的话,相当于根据单词进行group by分组,相同的单词 分为一组,然后每个组内进行count聚合统计。 ​ 已知hdfs中word.txt文件内容如下,计算每个单词出现的次数

步骤:

1.HDFS根目录中创建input目录,存储word.txt文件

可以在window本地提前创建word.txt文件存储,内容如下:

zhangsan lisi wangwu zhangsan
zhaoliu lisi wangwu zhaoliu
xiaohong xiaoming hanmeimei lilei
zhaoliu lilei hanmeimei lilei

2.在shell命令行中执行如下命令

[root@node1 ~]# cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce
[root@node1 mapreduce]# hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount /input /output

3.去HDFS中查看是否生成output目录

注意: output输出目录,在执行第2步命令后会自动生成,如果提前手动创建或者已经存在,就会报以下错误:

org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://node1.itcast.cn:8020/output already exists

4.进入output目录查看part-r-00000文件,结果如下:

hanmeimei    2
lilei    3
lisi    2
wangwu    2
xiaohong    1
xiaoming    1
zhangsan    2
zhaoliu    3

Hadoop-HDFS

特点

HDFS存储大文件,把大文件默认切割成128M大小的block块,进行存储

HDFS存储块的时候,会给每个块进行备份(一共三份)

HDFS文件存储系统可存储超大文件,时效性稍差

HDFS具有硬件故障检测和自动快速恢复功能

HDFS为数据存储提供很强的扩展能力

HDFS存储一般为一次写入,多次读取,只支持追加写入,不支持随机修改

HDFS可在普通廉价的机器上运行

架构

1.client

        发送请求就是客户端

        文件切分-文件上传HDFS的时候,Client将文件切分成一个一个的block,然后进行存储

        与NameNote交互,获取文件的位置信息

        与DataNote交互,读取或者写入数据

        client提供一些命令来管理和访问HDFS,比如启动或者关闭HDFS

2.NameNote

        就是,master,它是一个主管,管理者

        处理客户端读写请求

        管理HDFS元数据(文件路径,文件大小,文件的名字,文件的权限,文件切割后的块(block)信息...)

        配置3副本备份策略

3.DataNote

        就是slave,NameNote下达命令,DataNote执行实际的操作

        存储实际的数据块(block)

        执行数据块的读/写操作

        定时向NameNote汇报block信息

4.SecondaryNameNote

        并非NameNote的备份节点,当NmaneNote挂掉的时候,它并不能马上替换NameNote并提供服务

        只能辅助NameNote,对HDFS元数据进行合并,合并后再交给NameNote

        在紧急情况下,可辅助恢复NameNote部分数据

 副本

block块:HDFS被设计成能够在一个大集群中跨机器可靠地存储超大文件,它将每个文件拆分成一系列的数据块进行存储,这个数据块被称为block,除了最后一个,所有的数据块都是同样大小的

block块大小默认:128M(134217728字节)

注意:为了容错,文件的所有block都会有副本,每个文件的数据块大小和副本系数都是可配置的

副本系数默认:3个

HDFS默认文件:https://hadoop.apache.org/docs/r3.3.4/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

shell命令

HDFS的shell命令概念:安装好hapdoop环境之后,可以执行类似于Linux的shell命令对文件的操作,如ls,mkdir,rm等,对hdfs文件系统进行操作查看,创建删除等

hdfs的shell命令格式1:hadoop fs -命令 参数

hdfs的shell命令格式2:hadfs dfs -命令 参数

hdfs的家目录默认:/user/root 如果在使用命令操作的时候没有加根目录/,默认访问的是此家目录/user/root

查看目录下内容: hdfs dfs -ls 目录绝对路径

创建目录:hdfs dfs -mkdir 目录绝对路径

创建文件:hdfs dfs -touch 文件绝对路径

移动目录/文件:hdfs dfs -mv 要移动的目录或者文件的绝对路径 目标位置绝对路径

复制目录/文件:hdfs dfs -cp 要复制的目录或者文件的绝对路径  目标位置绝对路径

删除目录/文件:hdfs dfs -rm [-r]要删除的目录或者文件的绝对路径

查看文件内容:hdfs dfs -cat 要查看文件的绝对路径  注意:除了cat还有head,tail也能查看

hdfs其他shell命令帮助:hdfs dfs --help

注意:hdfs 有相对路径,如果操作目录或者文件的时候没有以根目录/开头,就是相对路径,默认操作的是/user/root

把本地文件内容追加到hdfs指定文件中:hdfs hdfs -appendToFile 本地文件路径 hdfs文件绝对路径

linux本地上传文件到hdfs中:hdfs dfs -put linux本地要上传的目录或者文件路径 hdfs中目标位置绝对路径

linux中下载文件到linux本地:hdfs dfs -get hdfs中要下载的目录或者文件的绝对路径 linux本地目标位置路径

Hive环境准备(重点)

shell脚本执行方式

方式1:sh 脚本              注意:需要进入脚本所在目录,但脚本有没有执行权限不想影响

方式2: ./脚本                注意:需要进入脚本所在目录,且脚本必须有执行权限

方式3: /绝对路径/脚本  注意:不需要进入脚本所在目录,但必须有执行权限

方式4:脚本                    注意:需要配置环境变量(把脚本所在路径共享,任意位置都能直接访问)

配置Hive环境变量

方式1:

[root@node1 /]# vim /etc/profile

方式2:

在profile文件末尾添加(小技巧G+o快速定位到最后) export HIVE_HOME=/export/server/apache-hive-3.1.2-bin export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/sbin

[root@node1 /]# source /etc/profile

最后建议关机拍摄下快照

启动hive服务

后台启动metastore服务: nohup hive --service metastore &
后台启动hiveserver2服务: nohup hive --service hiveserver2 &
查看metastore和hiveserver2进程是否启动: jps                   注意: 服务名都叫RunJar,可以通过进程编号区分
服务启动需要一定时间可以使用lsof查看: lsof -i:10000              注意: 如果无内容继续等待,如果有内容代表启动成功

[root@node1 bin]# nohup hive --service metastore &
[1] 13490
nohup: 忽略输入并把输出追加到"nohup.out" 
回车

[root@node1 bin]# nohup hive --service hiveserver2 &
[2] 13632
nohup: 忽略输入并把输出追加到"nohup.out" 
回车


[root@node1 bin]# jps
...
13490 RunJar
13632 RunJar


[root@node1 bin]# 
# 注意:10000端口号一般需要等待3分钟左右才会查询到
[root@node1 bin]# lsof -i:10000
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    18804 root  520u  IPv6 266172      0t0  TCP *:ndmp (LISTEN)
# 此处代表hive启动成功,今日内容完成

连接hive服务

一代客户端连接

一代客户端连接命令: hive           注意: hive直接连接成功,直接可以编写sql语句

xxxxxxxxxx [root@node1 /]# hive...hive> show databases;OKdefaultTime taken: 0.5 seconds, Fetched: 1 row(s)hive> exit;

 二代客户端连接

 二代客户端连接命令: beeline        注意: 以后建议用二代客户端
二代客户端远程连接命令: !connect jdbc:hive2://node1:10000
注意: hive用户名是root  密码为空

[root@node1 /]# beeline

# 先输入!connect jdbc:hive2://node1:10000连接
beeline> !connect jdbc:hive2://node1:10000

# 再输入用户名root,密码不用输入直接回车即可
Enter username for jdbc:hive2://node1:10000: root
Enter password for jdbc:hive2://node1:10000:

# 输入show databases;查看表
0: jdbc:hive2://node1:10000> show databases;
INFO  : Concurrency mode is disabled, not creating a lock manager
+----------------+
| database_name  |
+----------------+
| default        |
+----------------+
1 row selected (1.2 seconds)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值