Hadoop 2.0 大家族(三)

news2024/12/25 10:08:17

目录

    • 五、Hive
      • (一)Hive简介
      • (二)Hive入门
    • 六、Oozie
      • (一)Oozie简介
      • (二)Oozie入门


五、Hive

  Hive是一个构建在Hadoop上的数据仓库框架,它起源于Facebook内部信息处理平台。Hive是一个构建在Hadoop上的数据仓库框架,它起源于Facebook内部信息处理平台。

(一)Hive简介

1、Hive基本框架

  Hive包含Shell环境、元数据库、解析器和数据仓库等组件,其体系结构如图所示:

在这里插入图片描述
(1)用户接口:包括Hive Shell、Thrift客户端、Web接口。
(2)Thrift服务器:当Hive以服务器模式运行时,作为Thrift服务器,供客户端连接。
(3)元数据库:Hive元数据(如表信息)的集中存放地。
(4)解析器:将Hive语句翻译成MapReduce操作。
(5)Hadoop:底层分布式存储和计算引擎。

2、Hive语法

  Hive的SQL称为HiveQL,它与大部分的SQL语法兼容,但是并不完全类似SQL。

(1)数据类型

  基本类型:数值型、布尔型和字符串;
  复杂类型:ARRAY、MAP和STRUCT。

(2)操作和函数

  HiveQL操作符类似于SQL操作符,Hive提供了数理统计、字符串操作、条件操作等大量的内置函数,用户还可以自己编写函数。

(二)Hive入门

1、Hive部署

在这里插入图片描述
(1)内嵌模式

  此模式是安装时的默认部署模式,此时元数据存储在一个内存数据库Derby中,并且所有组件(如数据库、元数据服务)都运行在同一个进程内。这种模式下,一段时间内只支持一个活动用户。但这种模式配置简单,所需机器较少,限于集群规模,本节Hive部署即采用这种模式。

在这里插入图片描述
(2)本地模式

  此模式是Hive元数据服务依旧运行在Hive服务主进程中,但元数据存储在独立数据库中(可以是远程机器),当涉及元数据操作时,Hive服务中的元数据服务模块会通过JDBC和存储于DB里的元数据数据库交互。

在这里插入图片描述
(3)完全远程模式

  元数据服务以独立进程运行,并且元数据存储在一个独立的数据库里。

在这里插入图片描述
  下面讲解内嵌模式部署。

① 下载并安装Hive。

[root@iClient ~]# sudo yum install hive

② HDFS里新建Hive存储目录。

[root@iClient ~]# sudo –u hdfs hdfs dfs –mkdir /user/hive              #HDFS里新建Hive存储目录
[root@iClient ~]# sudo –u hdfs hdfs dfs –chmod –R 1777 /user/hive      #为目录设置适当权限

  只需上述两步就可以直接使用Hive了,当然,也可以使用jps命令查看Hive进程。

2、Hive接口

  Hive提供了强大的访问接口,从下图中即可看出Hive提供的诸多接口,此外也可以通过Hcatalog、Pig、BeeLine等访问Hive。

在这里插入图片描述
【例4】 按要求完成问题:
① 进入Hive命令行接口,获取Hive函数列表并单独查询count函数用法。
② 在Hive里新建member表,并将表6-6中的数据载入Hive里的member表中。
③ 查询member表中所有记录,查询member表中gender值为1的记录,查询member表中gender值为1且age为22的记录,统计member中男性和女性出现次数。
④ 试比较Pig中“单词计数”和“统计男女出现次数”的异同点。

解:

  问题①较为简单,参考下面两条命令即可,注意本题所有操作都在iClient上执行,为方便载入数据,本次使用root用户。

[root@iClient ~]# Hive                                                   #进入Hive命令行
hive>show functions;                                                     #获取Hhive所有函数列表
hive>describe function count;                                            #查看count函数用法

  对于问题②,我们首先为表准备数据,即在iClient目录“/root”下新建文件memberData并写入如下内容,注意记录间为换行符,字段间以Tab键分割。

201401 aa 0 21 e0 p3 m
201402 bb 1 22 e1 p2 l
201403 cc 1 22 e2 p1 m

  下面建表时将赋予各个字段合适的含义与类型,由于较为简单,请直接参考下面语句。

hive>show tables;                  #查看当前Hive仓库中所有表(以确定当前无member表)
hive>create table member(id int,name string,gender tinyint,age tinyint,edu string,prof string,income string)row format delimited fields terminated by '\t';            #使用合适字段与类型,新建member表
hive>show tables;                                  #再次查看,将显示member表
hive>load data local inpath '/root/memberData' into table member;      #将本地文件memberData载入HDFS
hive>select * from member;                                      #查看表中所有记录
hive>select * from member where gender=1;                       #查看表中gender值为1的记录
hive>select * from member where gender=1 AND age=23;            #查看表中gender值为1且age为23的记录
hive>select gender,count(*) from member group by gender;        #统计男女出现总次数
hive>drop table member;                                    #删除member表
hive>quit;                                                 #退出Hive命令行接口

  统计表中“男女出现次数”是一个常见的SQL操作,统计“单词个数”更像是处理互联网的单词热度之类的操作,两个其实没有可比性,这里只是强调,Hive将Hadoop抽象成为SQL类型的数据仓库。

六、Oozie

  Oozie起源于雅虎,主要用于管理与组织Hadoop工作流。Oozie的工作流必须是一个有向无环图,实际上Oozie就相当于Hadoop的一个客户端,当用户需要执行多个关联的MapReduce(MR)任务时,只需要将MR执行顺序写入workflow.xml,然后使用Oozie提交本次任务,Oozie会托管此任务流。

(一)Oozie简介

在这里插入图片描述
  由于需要存储工作流信息,为提供高可靠性,确保任务配置不丢失,Oozie内部使用数据库来存储工作流相关信息,用户可以使用Oozie内嵌的Derby数据库,也可以使用MySQL、PostgreSQL、Oracle等数据库。

(二)Oozie入门

1、Oozie部署

  Oozie相当于Hadoop的一个客户端,因此集群中只有一台机器部署Oozie server端即可,由于可以有任意多个客户端连接Oozie,故每个客户端上都须部署Oozie client,本节选择在cMaster上部署Oozie server,在iClient上部署Oozie client。

(1)部署Oozie服务端

[root@cMaster ~]# sudo yum install oozie        #cMaster上以root权限执行,部署Oozie服务端

(2)部署Oozie客户端

[root@iClient ~]# sudo yum install oozie-client

(3)配置Oozie

  修改/etc/oozie/conf/oozie-env.sh中的CATALINA_BASE属性值,注释原值并指定新值,当此值指向oozie-server-0.20表明Oozie支持MRv1,指向oozie-server表示支持Yarn。注意cMaster、iClient都要配置,并保持一致。

#export CATALINA_BASE=/usr/lib/oozie/oozie-server-0.20
export CATALINA_BASE=/usr/lib/oozie/oozie-server

  在/etc/hadoop/conf/core-site.xml文档里configuration标签间加入如下内容。注意,6台机器都要更新这个配置,并且配置此属性后,一定要重启集群中所有Hadoop服务,此属性值才能生效。

<property><name>hadoop.proxyuser.oozie.groups</name><value>*</value></property>
<property><name>hadoop.proxyuser.oozie.hosts</name><value>*</value></property>

  下面是重启Hadoop集群的命令:

$ for x in `cd /etc/init.d ; ls hadoop-*` ; do service $x restart; done;        #除了iCleint外,其他机器都要执行

(4)创建Oozie数据库模式

[root@cMaster ~]#sudo -u oozie /usr/lib/oozie/bin/ooziedb.sh create –run            #仅cMaster执行

(5)配置Oozie Web页面

  Oozie的Web界面用到第三方包,但由于版权原因ext-2.2并未打包进Oozie,事实上开启Oozie server不需要开启Oozie Web界面,但如果想在开启Oozie server同时也开启Oozie Web界面,则必须下载ext-2.2.zip并将其解压到目录/var/lib/oozie下。

[root@cMaster ~]# cd /var/lib/oozie/
[root@cMaster oozie]# sudo -u oozie wget http://archive.cloudera.com/gplextras/misc/ext-2.2.zip
[root@cMaster oozie]# sudo -u oozie unzip ext-2.2.zip

(6)将Oozie常用Jar包导入HDFS

  这一步也是可选的,如果工作流里包含Pig或Hive脚本,必须将这些jar包导入HDFS。

[root@cMaster ~]# sudo -u hdfs hdfs dfs -mkdir /user/oozie
[root@cMaster ~]# sudo -u hdfs hdfs dfs -chown oozie:oozie /user/oozie
[root@cMaster ~]# mkdir /tmp/ooziesharelib
[root@cMaster ~]# cd /tmp/ooziesharelib
[root@cMaster ~]# tar xzf /usr/lib/oozie/oozie-sharelib-yarn.tar.gz
[root@cMaster ~]# sudo -u oozie hdfs dfs -put share /user/oozie/share

(7)开启Oozie服务

[root@cMaster ~]# sudo service oozie start

(8)查看Oozie服务

  当成功部署并在cMaster上开启Oozie服务后,如果配置了ext-2.2,在iClient上的浏览器中打开“cmaster:11000”将显示Oozie Web界面,也可以使用下述命令查看Oozie工作状态。

[root@iClient ~]# oozie admin -oozie http://cMaster:11000/oozie -status

2、Oozie访问接口

  Oozie最常用的是命令行接口,它的Web接口只可以看到Oozie托管的任务,不可以配置作业。

【例5】 按要求完成问题:
① 进入Oozie客户端,查看常用命令。
② 运行Oozie MR示例程序。
③ 运行Oozie Pig、Hive等示例。
④ 编写workflow.xml,完成一次WordCount。
⑤ 编写workflow.xml,完成两次WordCount,且第一个WC的输出为第二个WC的输入。

解:

  对于问题①,在iClient上执行下述命令即可,用户可以是root或joe。

[root@iClient ~]# sudo -u joe oozie help         #查看所有Oozie命令

  对于问题②,首先解压Oozie示例jar包,接着修改示例配置中的地址信息,最后上传至集群执行即可,读者按下述流程执行即可。

[root@iClient ~]#cd /usr/share/doc/oozie-4.0.0+cdh5.0.0+54
[root@iClient oozie-4.0.0+cdh5.0.0+54 ~]# tar -zxvf oozie-examples.tar.gz

  编辑examples/apps/map-reduce/job.properties,将如下两行:

nameNode=hdfs://ocalhost:8020 
jobTracker=localhost:8021

  替换成集群现在配置的地址与端口:

nameNode=hdfs://cMaster:8020
jobTracker=cMaster:8032

  接着将examples上传至HDFS,使用Oozie命令执行即可:

[root@iClient oozie-4.0.0+cdh5.0.0+54]# sudo-u joe hdfs dfs -put examples examples
[root@iClient oozie-4.0.0+cdh5.0.0+54]# cd
[root@iClient ~]# sudo -u joe oozie job-oozie http://cMaster:11000/oozie -config /usr/share/doc/oozie-4.0.0+cdh5.0.0+54/examples/apps/map-reduce/job.properties -run

  问题③其实和是一样的,读者可按上述过程使用oozie执行Pig或Hive等的示例脚本。切记修改相应配置(如examples/apps/pig/job.properties)后,再上传至集群,执行时也要定位到相应路径(如sudo -u joe oozie ……/apps/pig/joe.properties -run)。

  对于问题④,可参考“examples/apps/map-reduce/workflow.xml”,其对应jar包在“examples/apps/map-reduce/lib”下,其下的DemoMapper.classDemoReducer.class就是WordCount的代码,对应的源代码在“examples/src”下,可按如下步骤完成此问题。

(1)编辑文件“examples/apps/map-reduce/workflow.xml”,找到下述内容:

<property>
<name>mapred.mapper.class</name><value>org.apache.oozie.example.SampleMapper</value>
</property>
<property>
<name>mapred.reducer.class</name><value>org.apache.oozie.example.SampleReducer</value>
</property>

(2)将其替换成:

<property> 
    <name>mapred.mapper.classs</name><value>org.apache.oozie.example.DemoMapper</value>
</property>
<property>
<name>mapred.reducer.class</name><value>org.apache.oozie.example.DemoReducer</value>
</property> 
<property><name>mapred.output.key.class</name><value>org.apache.hadoop.io.Text<value></property>
<property> 
    <name>mapred.output.value.class</name><value>org.apache.hadoop.io.IntWritable</value>
</property>

(3)接着将原来HDFS里examples文件删除,按问题②的解答,上传执行即可,这里只给出删除原examples的命令,上传和执行命令和问题②解答一样。

[root@iClient ~]# sudo -u joe hdfs dfs -rm -r-fexamples                  #删除HDFS原examples文件

  问题⑤是业务逻辑中最常遇到的情形,比如你的数据处理流是:“M1”→“R1”→ “Java1”→“Pig1”→“Hive1”→“M2”→“R2”→“Java2”,单独写出各类或脚本后,写出此逻辑对应的workflow.xml即可。限于篇幅,下面只给出workflow.xml框架, 请读者自行解决问题。

<workflow-app xmlns="uri:oozie:workflow:0.2" name="map-reduce-wf"> 
    <start to="mr-node"/>
    <action name="mr-node">
        <map-reduce>第一个wordcount配置</map-reduce>
        <ok to="mr-wc2"/><error to="fail"/>
    </action>
    <action name="mr-wc2">
        <map-reduce>第二个wordcount配置</map-reduce>
        <ok to="end"/><error to="fail"/>
    </action>
    <kill name="fail">
        <message>Map/Reduce failed error message[${wf:errorMessage(wf:lastErrorNode())}] </message>
    </kill>
    <end name="end"/>
</workflow-app>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1850301.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java基于ssm+jsp快递管理系统源码(适合新手)

在管理信息系统的生命周期中&#xff0c;仅过了需求分析、系统设计等阶段之后&#xff0c;便开始了系统实施阶段。在系统分析和设计阶段&#xff0c;系统开发工作主要是集中在逻辑、功能和技术设计上&#xff0c;系统实施阶段要继承此前面各个阶段的工作成果&#xff0c;将技术…

钡铼BL110在智慧气象站实现Modbus转MQTT无线接入主流云

随着物联网&#xff08;IoT&#xff09;技术的发展&#xff0c;各行各业都在积极探索将智能设备与云平台相结合&#xff0c;以提升系统的智能化和自动化水平。智慧气象站作为其中重要的一环&#xff0c;通过实时监测环境数据&#xff0c;为农业、交通、航空等行业提供精准的气象…

FPGA 690T 高速存储设计

高速存储设计会有各种需求的考虑&#xff0c;那么对应的方案也不完全相同&#xff0c;这篇文章出一期纯FPGA实现的高速存储方案。用纯fpga实现高速存储板卡有易国产化&#xff0c;功耗低和体积小等特点&#xff0c;缺点就是灵活性不是很强&#xff0c;实现标准ext4和nfs文件系统…

AI大模型日报#0622:Claude 3.5 Sonnet超越GPT-4o、盘古大模型跳级发布、松鼠AI多模态教育大模型

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE-4.0-8K-latest&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅读&#xff01;《AI大模型日报》今日要点&#xf…

不同版本的 Rocky Linux 快速更换阿里镜像源

环境&#xff1a;兼容 Rocky Linux 任意版本。 搞服务器系统从 CentOS 折腾到 Rocky Linux&#xff0c;然后又折腾到 Alma Linux&#xff1b;最近因为 RKE2 没有做 Alma Linux 的兼容性&#xff0c;又折腾到了 Rocky Linux &#xff0c;真的是一把鼻涕一把泪呀。但是实在是不理…

关于jupyter notebook的使用经验

jupyter notebook 第一点&#xff0c;调整每次打开jupyter notebook的时候的位置第二点&#xff0c;如何设置jupyter notebook可以使用本地anaconda创建的虚拟环境呢&#xff1f;第三点&#xff0c;使用jupyter notebook的技巧 以下三点都是独立的&#xff0c;可以根据自己的需…

Web项目部署后浏览器刷新返回Nginx的404错误对应解决方案

data: 2024/6/22 16:05:34 周六 limou3434 叠甲&#xff1a;以下文章主要是依靠我的实际编码学习中总结出来的经验之谈&#xff0c;求逻辑自洽&#xff0c;不能百分百保证正确&#xff0c;有错误、未定义、不合适的内容请尽情指出&#xff01; 文章目录 1.源头2.排错3.原因4.解…

政务大厅引导系统:AR、VR技术革新引领政务服务体验升级

一、传统政务大厅面临的普遍痛点 随着城市的发展和政务服务需求的增长&#xff0c;传统的政务大厅面临着诸多挑战和痛点&#xff1a; 信息不对称&#xff1a;政务大厅内各部门信息分散&#xff0c;群众难以快速获取全面准确的服务信息&#xff0c;导致办事效率低下。 办事流…

如何恢复电脑硬盘删除数据?提供一套实用恢复方案

在数字化时代&#xff0c;电脑硬盘中存储的数据对于个人和企业来说都至关重要。然而&#xff0c;有时我们可能会不小心删除了一些重要文件&#xff0c;或者因为某种原因导致数据丢失。这时候&#xff0c;恢复硬盘上被删除的数据就显得尤为重要。本文将为您提供一套实用的电脑硬…

JAVA大型医院绩效考核系统源码:​医院绩效考核实施的难点痛点

JAVA大型医院绩效考核系统源码&#xff1a;​医院绩效考核实施的难点痛点 绩效考核数字化综合管理系统是一个基于数字化技术的管理平台&#xff0c;用于帮助企业、机构等组织进行绩效考评的各个环节的管理和处理。它将绩效考评的各个环节集成到一个系统中&#xff0c;包括目标…

Vue79-路由组件独有的2个新的生命周期钩子

一、需求 news.vue路由组件被缓存了&#xff08;因为想要保留里面的输入框的数据&#xff01;&#xff09;&#xff0c;导致&#xff0c;路由页面切走&#xff0c;组件也不会被销毁&#xff0c;所以&#xff0c;beforeDestroy()函数就不会被执行&#xff0c;所以&#xff0c;定…

java—Mybatis缓存

缓存的作用 缓存(cache&#xff09;的作用是为了减轻数据库的压力&#xff0c;提高查询性能。 为什么使用缓存 mysql数据库保存的数据均在硬盘中&#xff0c;CPU是不会直接和硬盘进行交互的&#xff0c;因为硬盘的数据传输率很低&#xff0c;而CPU的数据传输率很高, CPU和内存直…

Android获取控件宽高的几种方式

第一种方式&#xff1a;在需要时获取&#xff0c;如控件点击时再获取 button.setOnClickListener(new View.OnClickListener() { Override public void onClick(View v) { getTextWidthAndHeight(); } }); 第二种方式&#xff1a;重写onWindowFocusChanged()方法 Overr…

创建npm私包

参考文章&#xff1a; 使用双重身份验证访问 npm | npm 中文网 私有npm包的实例详解-js教程-PHP中文网 1.注册npm账号 npm官网&#xff1a; npm | Home 2.安装node 百度挺多的&#xff0c;安装完后&#xff0c;检查是否安装成功就行 3.写一个简单的模块 创建个文件夹&am…

51学习记录(一)——51介绍及震动感应灯

文章目录 前言一、STC89C522.内部结构及引脚 二、继电器原理及震动传感器原理三、项目搭建及实现 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、STC89C52 1.简介 所属系列&#xff1a;51单…

KIVY BLOG Kivy tutorial 007: Introducing kv language

Kivy tutorial 007: Introducing kv language – Kivy Blog DECEMBER 18, 2019 BY ALEXANDER TAYLOR Kivy tutorial 007: Introducing kv language Kivy 导师课007&#xff1a; 介绍kv语言 Central themes: kv language, building a gui, integration with Python 中心主题:…

qt 简单实验 一个可以向左侧拖拽缩放的矩形

1.概要 向左拖拽矩形&#xff0c;和向右拖拽不同&#xff0c;向右拖拽是增加宽度&#xff0c;向左拖拽是增加宽度的同时还要向左移动x的坐标。 2.代码 2.1 resizablerectangleleft.h #ifndef RESIZABLERECTANGLELEFT_H #define RESIZABLERECTANGLELEFT_H #include <QWid…

win10系统还原怎么操作?超实用的四个系统一键重装方法来了

在我们使用电脑的日常生活中&#xff0c;Win10系统可能会出现各种问题&#xff0c;比如系统运行缓慢、程序崩溃或者遭受了恶意软件的攻击。为了解决这些问题&#xff0c;系统还原是一种非常有效的方法&#xff0c;能够让您快速地将系统恢复到之前的正常状态。而如今&#xff0c…

[保姆级教程]uniapp自定义标签页切换组件

文章目录 导文样式改成动态列表切换点击效果加上点击自动滑动scroll-view加上切换组件效果 导文 unaipp自带的标签页和ui设计相差太大&#xff0c;直接修改组件比手写一个还麻烦&#xff0c;下面手写一个。 样式 先用scroll-view做一个滑动&#xff0c;不然多的话滑动不了。 &l…

共93本!全网最全Frontiers旗下期刊2022、2023版影响因子和分区对比完整版目录!

本周投稿推荐 SSCI • 1区&#xff0c;4.0-5.0&#xff08;无需返修&#xff0c;提交可录&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; CNKI • 7天录用-检索&#xff08;急录友好&#xff09; SCI&EI • 4区生物医学类&#xff0c;0.1-0.5&…