Hadoop入门进阶课程8--Hive介绍和安装部署

2024-05-07 17:08

本文主要是介绍Hadoop入门进阶课程8--Hive介绍和安装部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、搭建环境

部署节点操作系统为CentOS,防火墙和SElinux禁用,创建了一个shiyanlou用户并在系统根目录下创建/app目录,用于存放Hadoop等组件运行包。因为该目录用于安装hadoop等组件程序,用户对shiyanlou必须赋予rwx权限(一般做法是root用户在根目录下创建/app目录,并修改该目录拥有者为shiyanlou(chown –R shiyanlou:shiyanlou /app)。

Hadoop搭建环境:

l  虚拟机操作系统: CentOS6.6  64位,单核,1G内存

l  JDK:1.7.0_55 64位

l  Hadoop:1.1.2

2、Hive介绍

Hive是Facebook开发的构建于Hadoop集群之上的数据仓库应用,它提供了类似于SQL语法的HQL语句作为数据访问接口,这使得普通分析人员的应用Hadoop的学习曲线变小,Hive有如下特性:

lHive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并使用sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析;

lHive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 Mapper 和 Reducer 来处理内建的Mapper 和Reducer 无法完成的复杂的分析工作。

2.1 Hive与关系数据库的区别

使用Hive的命令行接口很像操作关系数据库,但是Hive和关系数据库还是有很大的不同, Hive与关系数据库的区别具体如下:

1. Hive和关系数据库存储文件的系统不同,Hive使用的是Hadoop的HDFS(Hadoop的分布式文件系统),关系数据库则是服务器本地的文件系统;

2. Hive使用的计算模型是Mapreduce,而关系数据库则是自身的计算模型;

3.关系数据库都是为实时查询的业务进行设计的,而Hive则是为海量数据做数据挖掘设计的,实时性很差;实时性的区别导致Hive的应用场景和关系数据库有很大的不同;

4. Hive很容易扩展自己的存储能力和计算能力,这个是继承Hadoop的,而关系数据库在这个方面要比数据库差很多。

2.2  Hive架构

clip_image002

由上图可知,Hadoop的mapreduce是Hive架构的根基。Hive架构包括如下组件:CLI(command line interface)、JDBC/ODBC、Thrift Server、WEB GUI、metastore和Driver(Complier、Optimizer和Executor),这些组件分为两大类:服务端组件和客户端组件。

服务端组件:

lDriver组件:该组件包括Complier、Optimizer和Executor,它的作用是将HiveQL(类SQL)语句进行解析、编译优化,生成执行计划,然后调用底层的mapreduce计算框架;

lMetastore组件:元数据服务组件,这个组件存储Hive的元数据,Hive的元数据存储在关系数据库里,Hive支持的关系数据库有derby和mysql。元数据对于Hive十分重要,因此Hive支持把metastore服务独立出来,安装到远程的服务器集群里,从而解耦Hive服务和metastore服务,保证Hive运行的健壮性;

lThrift服务:thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,Hive集成了该服务,能让不同的编程语言调用hive的接口。

 

客户端组件:

lCLI:command line interface,命令行接口。

lThrift客户端:上面的架构图里没有写上Thrift客户端,但是Hive架构的许多客户端接口是建立在thrift客户端之上,包括JDBC和ODBC接口。

lWEBGUI:Hive客户端提供了一种通过网页的方式访问hive所提供的服务。这个接口对应Hive的hwi组件(hive web interface),使用前要启动hwi服务。

 

3、搭建Hive环境

3.1 安装MySql数据库

3.1.1 下载mysql安装文件

下载地址:http://dev.mysql.com/downloads/mysql/#downloads,使用系统为CentOS选择 Red Hat Enterprise Linux/Oracle系列,也可以在/home/shiyanlou/install-pack目录中找到这些安装包:

clip_image004

操作系统为64位,选择对应安装包进行下载:

clip_image006

clip_image008

clip_image010

下载在本地目录如下图:

clip_image012

3.1.2 安装mysql

使用命令查看是否已经安装过mysql

sudo rpm -qa | grep -i mysql

可以看到如下图的所示:

clip_image014

说明之前安装了mysql,可以参考4.1进行卸载旧的mysql。如果以前没有安装mysql则进入安装文件的目录,安装mysql服务端

cd /home/shiyanlou/install-pack

sudo rpm -ivh MySQL-server-5.6.21-1.el6.x86_64.rpm

clip_image016

出现异常,通过分析缺少libaio依赖包,使用如下命令进行安装:

sudo yum install libaio

clip_image018

再次安装mysql,并安装mysql客户端、mysql-devel

sudo rpm -ivh MySQL-server-5.6.21-1.el6.x86_64.rpm

sudo rpm -ivh MySQL-client-5.6.21-1.el6.x86_64.rpm

sudo rpm -ivh MySQL-devel-5.6.21-1.el6.x86_64.rpm

clip_image020

3.1.3 启动mysql服务

通过下面查看mysql服务状态:

sudo service mysql status

如果mysql没有启动,通过如下命令进行启动:

sudo service mysql start

clip_image022

3.1.4 设置root密码

在CentOS6.5操作系统使用如下命令给mysql设置root密码时,出现如下错误:

/usr/bin/mysqladmin -u root password 'root';

clip_image024

/usr/bin/mysqladmin: connect to server at 'localhost' failed

error: 'Access denied for user 'root'@'localhost' (using password: NO)'

可以进入安全模式进行设置root密码

(1) 停止mysql服务

使用如下命令停止mysql服务:

sudo service mysql stop

sudo service mysql status

(2) 跳过验证启动mysql

使用如下命令验证启动mysql,由于&结尾是后台运行进程,运行该命令可以再打开命令窗口或者Ctr+C继续进行下步操作:

sudo mysqld_safe --skip-grant-tables &

sudo service mysql status

clip_image026

(3) 跳过验证启动MySQL

验证mysql服务已经在后台运行后,执行如下语句,其中后面三条命令是在mysql语句:

mysql -u root

mysql>use mysql;

mysql>update user set password = password('root') where user = 'root';

mysql>flush privileges;

clip_image028

(4) 跳过验证启动MySQL

重启mysql服务并查看状态

sudo service mysql restart

sudo service mysql status

clip_image030

3.1.5 设置Hive用户

进入mysql命令行,创建hive用户并赋予所有权限:

mysql -uroot -proot

mysql>set password=password('root');

mysql>create user 'hive' identified by 'hive';

mysql>grant all on *.* TO 'hive'@'%' identified by 'hive' with grant option;

mysql>grant all on *.* TO 'hive'@'localhost' identified by 'hive' with grant option;

mysql>flush privileges;

clip_image032

(注意:如果是root第一次登录数据库,需要重新设置一下密码,所报异常信息如下:ERROR 1820 (HY000): You must SET PASSWORD before executing this statement

3.1.6 创建hive数据库

使用hive用户登录,创建hive数据库:

mysql -uhive -phive -h hadoop

mysql>create database hive;

mysql>show databases;

clip_image034

3.2 安装Hive

3.2.1 解压并移动Hive安装包

可以到Apache基金hive官网http://hive.apache.org/downloads.html,选择镜像下载地址:http://mirrors.cnnic.cn/apache/hive/下载一个稳定版本,如下图所示:

clip_image036

也可以在/home/shiyanlou/install-pack目录中找到该安装包,解压该安装包并把该安装包复制到/app目录中

cd /home/shiyanlou/install-pack

tar -xzf hive-0.12.0-bin.tar.gz

mv hive-0.12.0-bin /app/hive-0.12.0

clip_image038

3.2.2 解压并移动MySql驱动包

到mysql官网进入下载页面:http://dev.mysql.com/downloads/connector/j/ ,选择所需要的版本进行下载,这里下载的zip格式的文件

clip_image040

 

也可以在/home/shiyanlou/install-pack目录中找到该安装包,解压该安装包并把该安装包复制到/app/lib目录中

cd /home/shiyanlou/install-pack

cp mysql-connector-java-5.1.22-bin.jar /app/hive-0.12.0/lib

clip_image042

3.2.3 配置/etc/profile环境变量

使用如下命令打开/etc/profile文件:

sudo vi /etc/profile

设置如下参数:

export HIVE_HOME=/app/hive-0.12.0

export PATH=$PATH:$HIVE_HOME/bin

export CLASSPATH=$CLASSPATH:$HIVE_HOME/bin

clip_image044

使配置文件生效:

source /etc/profile

echo $PATH

3.2.4 设置hive-env.sh配置文件

进入hive-0.12.0/conf目录,复制hive-env.sh.templaete为hive-env.sh:

cd /app/hive-0.12.0/conf

cp hive-env.sh.template hive-env.sh

sudo vi hive-env.sh

clip_image046

分别设置HADOOP_HOME和HIVE_CONF_DIR两个值:

# Set HADOOP_HOME to point to a specific hadoop install directory

export HADOOP_HOME=/app/hadoop-1.1.2

# Hive Configuration Directory can be controlled by:

export HIVE_CONF_DIR=/app/hive-0.12.0/conf

clip_image048

3.2.5 设置hive-site.xml配置文件

复制hive-default.xml.templaete为hive-site.xml

cd /app/hive-0.12.0/conf

cp hive-default.xml.template hive-site.xml

sudo vi hive-site.xml

clip_image050

(1) 加入配置项

默认metastore在本地,添加配置改为非本地

<property>

  <name>hive.metastore.local</name>

  <value>false</value>

</property>

clip_image052

(2) 修改配置项

hive默认为derby数据库,需要把相关信息调整为mysql数据库

<property>

  <name>hive.metastore.uris</name>

  <value>thrift://hadoop:9083</value>

  <description>Thrift URI for the remote metastore. ...</description>

</property>

<property>

  <name>javax.jdo.option.ConnectionURL</name>

  <value>jdbc:mysql://hadoop:3306/hive?=createDatabaseIfNotExist=true</value>

  <description>JDBC connect string for a JDBC metastore</description>

</property>

<property>

  <name>javax.jdo.option.ConnectionDriverName</name>

  <value>com.mysql.jdbc.Driver</value>

  <description>Driver class name for a JDBC metastore</description>

</property>

<property>

  <name>javax.jdo.option.ConnectionUserName</name>

  <value>hive</value>

  <description>username to use against metastore database</description>

</property>

<property>

  <name>javax.jdo.option.ConnectionPassword</name>

  <value>hive</value>

  <description>password to use against metastore database</description>

</property>

clip_image054

clip_image056

(3) 订正错误项

在配置文件2000行左右配置项hive.server2.thrift.sasl.qop原来为<value>auth</auth>,按照如下进行修改:

<property>

  <name>hive.server2.thrift.sasl.qop</name>

  <value>auth</value>

  <des.....

</property>

clip_image058

并把hive.metastore.schema.verification配置项值修改为false

<property>

  <name>hive.metastore.schema.verification</name>

  <value>false</value>

   <desc....>

</property>

clip_image060

3.3 验证部署

3.3.1 启动metastore和hiveserver

在使用hive之前需要启动metastore和hiveserver服务,通过如下命令启用:

hive --service metastore &

hive --service hiveserver &

clip_image062

启动用通过jps命令可以看到两个进行运行在后台

clip_image064

3.3.2 在hive中操作

登录hive,在hive创建表并查看该表,命令如下:

hive

hive>create table test(a string, b int);

hive>show tables;

hive>desc test;

clip_image066

登录mysql,在TBLS表中查看新增test表:

mysql -uhive -phive

mysql>use hive;

mysql>select TBL_ID, CREATE_TIME, DB_ID, OWNER, TBL_NAME,TBL_TYPE from TBLS;

clip_image068

4、问题解决

4.1 卸载旧的mysql

(1)  查找以前是否安装有mysql

使用命令查看是否已经安装过mysql

sudo rpm -qa | grep -i mysql

可以看到如下图的所示:

clip_image014[1]

说明之前安装了:

MySQL-client-5.6.21-1.el6.x86_64

MySQL-server-5.6.21-1.el6.x86_64

MySQL-devel-5.6.21-1.el6.x86_64

如果没有结果,可以进行跳到3.1.3步骤的mysql数据库安装

(2)  停止mysql服务、删除之前安装的mysql

停止mysql服务、删除之前安装的mysql删除命令:rpm -ev –nodeps 包名

sudo rpm -ev MySQL-server-5.6.21-1.el6.x86_64

sudo rpm -ev MySQL-devel-5.6.21-1.el6.x86_64

sudo rpm -ev MySQL-client-5.6.21-1.el6.x86_64

clip_image070

如果存在CentOS自带mysql-libs-5.6.21-1.el6.x86_64使用下面的命令卸载即可

sudo rpm -ev --nodeps mysql-libs-5.6.21-1.el6.x86_64

(3)  查找之前老版本mysql的目录并且删除老版本mysql的文件和库

sudo find / -name mysql

clip_image072

删除对应的mysql目录

sudo rm -rf /usr/lib64/mysql

sudo rm -rf /var/lib/mysql

clip_image074

(4)  再次查找机器是否安装mysql

sudo rpm -qa | grep -i mysql

无结果,说明已经卸载彻底、接下来直接安装mysql即可

clip_image076

4.2 Hive启动,报CommandNeedRetryException异常

启动hive时,出现CommandNeedRetryException异常,具体信息如下:

clip_image078

Exception in thread "main" java.lang.NoClassDefFoundError:org/apache/hadoop/hive/ql/CommandNeedRetryException

        at java.lang.Class.forName0(Native Method)

        at java.lang.Class.forName(Class.java:270)

        at org.apache.hadoop.util.RunJar.main(RunJar.java:149)

Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.CommandNeedRetryException

        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)

        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

        at java.security.AccessController.doPrivileged(Native Method)

        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

由于以前使用hadoop时,修改hadoop-env.sh的HADOOP_CLASSPATH配置项,由以前的:

export HADOOP_CLASSPATH=/app/hadoop-1.1.2/myclass

修改为:

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/app/hadoop-1.1.2/myclass

clip_image080

 

clip_image082

4.3 在Hive中使用操作语言

启动hive后,使用Hql出现异常,需要启动metastore和hiveserver

clip_image084

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

在使用hive之前需要启动metastore和hiveserver服务,通过如下命令启用:

hive --service metastore &

hive --service hiveserver &

clip_image086

启动用通过jps命令可以看到两个进行运行在后台

clip_image064[1]

这篇关于Hadoop入门进阶课程8--Hive介绍和安装部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967891

相关文章

Source Insight的安装及使用

第一步:source insight的下载及安装 source insight的资源下载见如下链接: http://download.csdn.net/detail/u010661782/9454935 第二步:source insight的使用 1>新建工程 project  ----->  new project  ------>   填写工程名和工程存放

maven学习系列——(二)maven的安装和一些基本的配置

这一篇主要会总结maven在window上的安装,以及Eclipse安装maven插件。 会整理和贴出具体的安装步骤等! 配置大概会整理一下,方便自己查看和使用! Maven 的使用在Windows上使用比较多,一般的开发都是在Windows上;Linux上的使用相对比较少,不过会总结Windows和Linux系统两种安装方式。 首先会介绍在Windows和Eclipse安装Maven,L

Java File中renameTo的介绍和使用说明

看到项目中有个地方用的File的renameTo这个方法,本以为这个方法就是用来文件重命名的,但是项目中确用它来进行文件的移动。就是使用renameTo将一个文件从一个目录移动另一个目录下! 下面就简单介绍一下renameTo,并整理一个renameTo的使用! renameTo的介绍 官方文档说明 /*** 重新命名此抽象路径名表示的文件。此方法行为的许多方面都是与平台有关的:重命名操作

【一】并发编程故事背景介绍

背景 每一个故事都有一个开始,那么并发编程的故事的开始是什么呢? 由于人类的科学技术的发展,需要处理的任务越来越复杂也多样化,导致之前单核的处理器无法处理这些复杂的任务,于是处理器从之前的单核处理器逐渐发展到多核处理器【其实这里也有一个摩尔定律】。 多核处理器很好的解决了多任务和任务复杂度的问题,那么我们就应该学习一下多任务处理,这里指的是多线程,Java语言在创建时就支持多线程,很高明!在

OpenResty 最佳实践学习--安装和helloworld(1)

一:简介 OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。 OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强

图文教程,Nginx+Keepalived(双机热备)介绍已经搭建高可用负载均衡环境

上一次分享了Nginx相关的应用场景如下: ​Nginx介绍以及一些应用场景说明 在实际使用,单机版的Nginx就不能满足高可用的要求了,在这种情况下,我们使用Nginx+Keepalived(双机热备)搭建一套高可用的环境,这就是本文的核心内容。 首先我们先了解一下Keepalived是个什么东东? Keepalived介绍 Keepalived是一个类似于layer3, 4 & 5交

Kali:系统安装之后进行所需配置

apt设置源 由于官网的源需要墙或者想使用国内的源,可以修改source.list vi /etc/source.list 打开文件并修改为其他可用的源地址,以下可供参考 deb http://ftp.sjtu.edu.cn/debian wheezy main non-free contribdeb-src http://ftp.sjtu.edu.cn/debian wheezy ma

repo使用总结—从入门到入门

文章目录 1 what's repo2 官方文档Repo 命令参考资料help 帮助init 初始化sync 同步所有项目文件upload 提交更改diffdownloadforallprunestart 创建本地分支Example:创建三个分支test-1,test-2,test-3 statusbranchesabandonExample:删除本地分支test-3 后续在使用中遇到问题

STM32 TIM 多通道互补PWM波形输出配置快速入门

platform:stm32f10xxx lib:STM32F10x_StdPeriph_Lib_V3.5.0 前言 在做三相逆变的时候,需要软件生成SVPWM波形,具体的算法需要产生三对互补的PWM,这样可以驱动六个开关元件,stm32f103中的TIM1高级定时器支持产生三路互补PWM波形,下面进一步学习。 PWM产生的原理 TIM1的OC模块,可以产生PWM波形,具体步骤; 寄存器

STM32 TIM1高级定时器配置快速入门

layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true重点内容时基单元计数模式 重点内容 不管是基于标准库还是直接操作寄存器,因为TIM定时器的功能比较多,这里单纯只从定时器的角度进行学习,这里需要重点关注的地方应该有以下几点: 定时器时钟频率的计算