Hive详解(02) - Hive 3.1.2安装

安装准备

Hive下载地址

Hive官网地址:http://hive.apache.org/

官方文档查看地址:https://cwiki.apache.org/confluence/display/Hive/GettingStarted

安装包下载地址:http://archive.apache.org/dist/hive/

github地址:https://github.com/apache/hive

环境准备

JDK:Hive和Hadoop使用java语言编写,需要JDK环境。本文使用jdk1.8版本,安装文档《linux安装jdk8》

Hadoop:Hive使用HDFS进行存储,使用MapReduce进行计算。本文使用Hadoop3.1.3版本,安装文档《Hadoop详解(02) - Hadoop3.1.3集群运行环境搭建》

Mysql:Hive默认使用的元数据库为derby,开启Hive之后就会占用元数据库,且不与其他客户端共享数据,只能单个窗口操作,操作比较局限。若支持多窗口操作就需要将Hive的元数据地址改为MySQL。本文使用mysql5.7.27版本,安装文档《CentOS 7安装mysql5.7-单节点&主从》

Hive安装部署

安装Hive

把apache-hive-3.1.2-bin.tar.gz上传到linux的/opt/software目录下

解压apache-hive-3.1.2-bin.tar.gz到/opt/module/目录下面

[hadoop@hadoop102 ~]$ tar -zxvf /opt/software/apache-hive-3.1.2-bin.tar.gz -C /opt/module/

修改apache-hive-3.1.2-bin.tar.gz的名称为hive

[hadoop@hadoop102 ~]$ mv /opt/module/apache-hive-3.1.2-bin/ /opt/module/hive

修改/opt/module/hive/conf目录下的hive-env.sh.template名称为hive-env.sh

[hadoop@hadoop102 conf]$ cp hive-env.sh.template hive-env.sh

配置hive-env.sh文件

[hadoop@hadoop102 conf]$ vi hive-env.sh

修改如下内容

配置HADOOP_HOME路径

HADOOP_HOME= /opt/module/hadoop-3.1.3

配置HIVE_CONF_DIR路径

export HIVE_CONF_DIR=/opt/module/hive/conf

添加环境变量

[hadoop@hadoop102 ~]$ sudo vi /etc/profile

添加内容

#HIVE_HOME

HIVE_HOME=/opt/module/hive

export PATH=$PATH:$HIVE_HOME/bin

重新加载环境变量

[hadoop@hadoop102 ~]$ source /etc/profile

解决日志Jar包冲突

[hadoop@hadoop102 ~]$ mv /opt/module/hive/lib/log4j-slf4j-impl-2.10.0.jar /opt/module/hive/lib/log4j-slf4j-impl-2.10.0.jar.bak

Hive元数据配置到MySql

拷贝Mysql驱动

将MySQL的JDBC驱动mysql-connector-java-5.1.48.jar拷贝到Hive的lib目录下

[hadoop@hadoop102 ~]$ cp /opt/software/mysql-connector-java-5.1.48.jar /opt/module/hive/lib/

配置Metastore到MySql

在/opt/module/hive/conf目录下新建hive-site.xml文件

[hadoop@hadoop102 ~]$ cd /opt/module/hive/conf/

[hadoop@hadoop102 conf]$ vi hive-site.xml

添加如下内容

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<!-- jdbc连接的URL -->

<property>

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

<value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value>

</property>

<!-- jdbc连接的Driver-->

<property>

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

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

</property>

<!-- jdbc连接的username-->

<property>

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

<value>admin</value>

</property>

<!-- jdbc连接的password -->

<property>

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

<value>Abc_123456</value>

</property>

<!-- Hive默认在HDFS的工作目录 -->

<property>

<name>hive.metastore.warehouse.dir</name>

<value>/user/hive/warehouse</value>

</property>

<!-- Hive元数据存储的验证 -->

<property>

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

<value>false</value>

</property>

<!-- 元数据存储授权 -->

<property>

<name>hive.metastore.event.db.notification.api.auth</name>

<value>false</value>

</property>

</configuration>

在mysql中初始hive的化元数据库

登陆MySQL

[hadoop@hadoop102 ~]$ mysql -uadmin -pAbc_123456

新建Hive元数据库

mysql> create database metastore;

mysql> quit

初始化Hive元数据库

[hadoop@hadoop102 ~]$ schematool -initSchema -dbType mysql –verbose

执行初始化Hive元数据库命令后,可以在mysql的metastore库中看到创建的表

启动Hive

先启动hadoop集群

启动Hive

[hadoop@hadoop102 ~]$ cd /opt/module/hive/

[hadoop@hadoop102 hive]$ bin/hive

使用Hive

hive> show databases;

hive> create table test (id int);

hive> show tables;

hive> insert into test values(1);

hive> select * from test;

Hive常见属性配置

在hive-site.xml文件中添加如下配置信息,就可以实现显示当前数据库,以及查询表的头信息配置。

<property>

<name>hive.cli.print.header</name>

<value>true</value>

</property>

<property>

<name>hive.cli.print.current.db</name>

<value>true</value>

</property>

重新启动hive,对比配置前后差异。

Hive的log默认存放在/tmp/当前用户名/hive.log目录下(当前用户名下)

修改hive的log存放日志到/opt/module/hive/logs

修改/opt/module/hive/conf/hive-log4j.properties.template文件名称为hive-log4j.properties

[hadoop@hadoop102 hadoop]$ cd /opt/module/hive/conf/

[hadoop@hadoop102 conf]$ mv hive-log4j2.properties.template hive-log4j2.properties

在hive-log4j.properties文件中修改log存放位置

property.hive.log.dir = /opt/module/hive/logs

查看当前所有的配置信息

hive>set;

参数的配置三种方式

(1)配置文件方式

默认配置文件:hive-default.xml

用户自定义配置文件:hive-site.xml

注意:用户自定义配置会覆盖默认配置。

另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hive的配置会覆盖Hadoop的配置。配置文件的设定对本机启动的所有Hive进程都有效。

(2)命令行参数方式

启动Hive时,可以在命令行添加-hiveconf param=value来设定参数。

例如:

[hadoop@hadoop102 hive]$ bin/hive -hiveconf mapred.reduce.tasks=10;

注意:仅对本次hive启动有效

查看参数设置:

hive (default)> set mapred.reduce.tasks;

(3)参数声明方式

可以在HQL中使用SET关键字设定参数

例如:

hive (default)> set mapred.reduce.tasks=100;

注意:仅对本次hive启动有效。

查看参数设置

hive (default)> set mapred.reduce.tasks;

上述三种设定方式的优先级依次递增。即配置文件<命令行参数<参数声明。注意某些系统级的参数,例如log4j相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立以前已经完成了。

使用元数据MetaStore服务的方式访问Hive

Hive获取Mysql元数据的两种方式:

启动方式:只需直接启动Hive客户端,即可连接

2 Hive先连接MetaStore服务,再通过MetaStore服务连接MySQL获取元数据

启动方式:

先启动Metastore服务

再启动Hive客户端

为什么有了第一种方式,还要用MetaStore服务

Hive既是客户端(是HDFS的客户端也是MetaStore的客户端,也是Hive的客户端)又是服务端(因为有MetaStore服务和Hiveserver2服务配置)

而在实际生产环境下,可能有多台Hive客户端(比如有:hadoop102、hadoop103、hadoop104三台机器),MySQL的 IP地址对外不暴露,只暴露给其中一台(假如暴露给node-1这台机器),那么其他客户端怎么连接呢?此时就需要在暴露的那台机器上启动MetaStore服务,其他Hive客户端连接这个MetaStore服务,进而达到连接Mysql获取元数据的目的。

在Hive的配置文件hive-site.xml 中是否配置了hive.metastore.uris参数,

如果有,那么Hive连接MySQL的方式则为第二种

如果想用第一种方式连接的话,需要把上面的配置注释掉
,还必需保证有如下mysql链接配置

<property>

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

<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>

</property>

<property>

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

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

</property>

<property>

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

<value>admin</value>

</property>

<property>

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

<value>Abc_123456</value>

</property>

在hive-site.xml文件中添加如下配置信息

<!-- 指定存储元数据要连接的地址 -->

<property>

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

<value>thrift://hadoop102:9083</value>

</property>

启动metastore

[hadoop@hadoop102 hive]$ hive --service metastore

2022-01-06 22:25:05: Starting Hive Metastore Server

hive --service metastore命令为前台启动,启动后窗口不能再操作,

后台启动Metastore服务的命令为:

nohup hive --service metastore 2>&1 &

启动hive客户端

[hadoop@hadoop102 ~]$ hive

若其它机器只作为客户端,hive-site.xml 文件只需如下配置即可通过Metastore服务链接hive

使用JDBC通过Hiveserver2服务的方式访问Hive

Hiveserver2实际是Hive与Hive之间的服务端与客户端连接的方式

上面提到了作为客户端的机器比如hadoop103,当它作为hadoop104的客户端时,那么可以用Hiveserver2服务连接:

1 在hadoop103上启动Hiveserver2服务(如果配置了Metastore服务依旧也要启动)

2 在hadoop104上启动beline客户端也可以连接

注:HIve既是客户端又是服务端时,可以在同一个机器上启动服务端和客户端。

在hive-site.xml文件中添加如下配置信息

<!-- 指定hiveserver2连接的host -->

<property>

<name>hive.server2.thrift.bind.host</name>

<value>hadoop102</value>

</property>

<!-- 指定hiveserver2连接的端口号 -->

<property>

<name>hive.server2.thrift.port</name>

<value>10000</value>

</property>

启动hiveserver2

[hadoop@hadoop102 conf]$ hive --service hiveserver2

后台启动hiveserver2服务:nohup hive --service hiveserver2 2>&1 &

启动完成后通过浏览器访问UI页面

http://hadoop102:10002/

启动beeline客户端(需要多等待一会)

[hadoop@hadoop102 ~]$ beeline -u jdbc:hive2://hadoop102:10000 -n hadoop

看到如下信息说明通过beeline客户端访问hive成功

[hadoop@hadoop102 ~]$ beeline -u jdbc:hive2://hadoop102:10000 -n hadoop

Connecting to jdbc:hive2://hadoop102:10000

Connected to: Apache Hive (version 3.1.2)

Driver: Hive JDBC (version 3.1.2)

Transaction isolation: TRANSACTION_REPEATABLE_READ

Beeline version 3.1.2 by Apache Hive

0: jdbc:hive2://hadoop102:10000> show tables;

  • 遇到的问题

问题一:Beeline链接hive需要密码的情况:

[hadoop@hadoop102 ~]$ beeline

Beeline version 3.1.2 by Apache Hive

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

Connecting to jdbc:hive2://hadoop102:10000

Enter username for jdbc:hive2://hadoop102:10000: hadoop #hive服务端操作系统用户名

Enter password for jdbc:hive2://hadoop102:10000: ****** #hive服务端操作系统密码

Connected to: Apache Hive (version 3.1.2)

Driver: Hive JDBC (version 3.1.2)

Transaction isolation: TRANSACTION_REPEATABLE_READ

0: jdbc:hive2://hadoop102:10000>

问题二:在使用beeline链接hive时如果连接失败报错:

Error: Could not open client transport with JDBC Uri: jdbc:hive2://192.168.194.48:10000: Failed to open new session: java.lang.RuntimeException: RemoteException(AuthorizationException): User: hadoop is not allowed to impersonate hadoop (state=08S01,code=0)

解决办法:通过httpfs协议访问rest接口,以hadoop用户包装自己的方式操作HDFS

首先需要开启rest接口,

在hdfs-site.xml文件中加入:

<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>  

然后在core-site.xml文件中加入:

<property>

<name>hadoop.proxyuser.hadoop.hosts</name>

<value>*</value>

</property>

<property>

<name>hadoop.proxyuser.hadoop.groups</name>

<value>*</value>

</property>

绿色的hadoop是beeline> ! connect jdbc:hive2://192.168.194.48:10000登录时的用户名

当用不同的用户通过rest接口访问hdfs时可以配置多个用户如下图中同时配置了hue和hadoop用户

编写启动metastore和hiveserver2脚本

前台启动的方式导致需要打开多个shell窗口,且终端断开链接后服务就停止运行,可以使用如下方式后台方式启动

nohup hive --service metastore 2>&1 &

nohup hive --service hiveserver2 2>&1 &

编写启动脚本可以更方便的管理

[hadoop@hadoop102 ~]$ cd /opt/module/hive/bin/

[hadoop@hadoop102 bin]$ vi hiveservices.sh

文件中加入如下内容

#!/bin/bash

HIVE_LOG_DIR=/opt/module/hive/logs

if
[
!
-d
$HIVE_LOG_DIR
]

then

mkdir -p $HIVE_LOG_DIR

fi

#检查进程是否运行正常,参数1为进程名,参数2为进程端口

function check_process()

{

pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')

ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1)

echo
$pid

[[
"$pid"
=~
"$ppid"
]]
&&
[
"$ppid"
]
&&
return
0
||
return
1

}

function hive_start()

{

metapid=$(check_process HiveMetastore 9083)

cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &"

cmd=$cmd" sleep 4; hdfs dfsadmin -safemode wait >/dev/null 2>&1"

[
-z
"$metapid"
]
&&
eval
$cmd
||
echo
"Metastroe服务已启动"

server2pid=$(check_process HiveServer2 10000)

cmd="nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"

[
-z
"$server2pid"
]
&&
eval
$cmd
||
echo
"HiveServer2服务已启动"

}

function hive_stop()

{

metapid=$(check_process HiveMetastore 9083)

[
"$metapid"
]
&&
kill
$metapid
||
echo
"Metastore服务未启动"

server2pid=$(check_process HiveServer2 10000)

[
"$server2pid"
]
&&
kill
$server2pid
||
echo
"HiveServer2服务未启动"

}

case
$1
in

"start")

hive_start

;;

"stop")

hive_stop

;;

"restart")

hive_stop

sleep
2

hive_start

;;

"status")

check_process HiveMetastore 9083
>/dev/null &&
echo
"Metastore服务运行正常"
||
echo
"Metastore服务运行异常"

check_process HiveServer2 10000
>/dev/null &&
echo
"HiveServer2服务运行正常"
||
echo
"HiveServer2服务运行异常"

;;

*)

echo Invalid Args!

echo
'Usage: '$(basename $0)' start|stop|restart|status'

;;

esac

添加执行权限

[hadoop@hadoop102 bin]$ chmod u+x hiveservices.sh

使用脚本

启动:hiveservices.sh start

停止:hiveservices.sh stop

重启:hiveservices.sh restart

查看状态: hiveservices.sh status

Hive常用交互命令

[hadoop@hadoop102 hive]$ bin/hive -help

usage: hive

-d,--define <key=value> Variable subsitution to apply to hive

commands. e.g. -d A=B or --define A=B

--database <databasename> Specify the database to use

-e <quoted-query-string> SQL from command line

-f <filename> SQL from files

-H,--help Print help information

--hiveconf <property=value> Use value for given property

--hivevar <key=value> Variable subsitution to apply to hive

commands. e.g. --hivevar A=B

-i <filename> Initialization SQL file

-S,--silent Silent mode in interactive shell

-v,--verbose Verbose mode (echo executed SQL to the console)

"-e"不进入hive的交互窗口执行sql语句

bin/hive -e "select id from student;"

"-f"执行脚本中sql语句

在/opt/module/hive/下创建datas目录并在datas目录下创建hivef.sql文件

touch hivef.sql

文件中写入正确的sql语句

select *from student;

执行文件中的sql语句

bin/hive -f /opt/module/hive/datas/hivef.sql

执行文件中的sql语句并将结果写入文件中

bin/hive -f /opt/module/hive/datas/hivef.sql > /opt/module/datas/hive_result.txt

Hive其他命令操作

退出hive窗口:

hive(default)>exit;

hive(default)>quit;

在hive cli命令窗口中如何查看hdfs文件系统

hive(default)>dfs -ls /;

查看在hive中输入的所有历史命令

进入到当前用户的根目录/root或/home/atguigu

查看. hivehistory文件

cat .hivehistory

在Hive中配置Tez引擎

Hive运行引擎Tez

Tez是一个Hive的运行引擎,性能优于MR。

用Hive直接编写MR程序,假设有四个有依赖关系的MR作业,上图中,绿色是Reduce Task,云状表示写屏蔽,需要将中间结果持久化写到HDFS。Tez可以将多个有依赖的作业转换为一个作业,这样只需写一次HDFS,且中间节点较少,从而大大提升作业的计算性能。

安装准备

hadoop配置支持LZO压缩,参考文档《Hadoop详解(07-1) - Hdfs支持LZO压缩配置》

tez官网:https://tez.apache.org/

tez安装包下载地址:https://downloads.apache.org/tez/0.10.1/apache-tez-0.10.1-bin.tar.gz

上传解压

[hadoop@hadoop102 software]$ tar -zxvf apache-tez-0.10.1-bin.tar.gz -C /opt/module/

修改名称

[hadoop@hadoop102 software]$ cd /opt/module/

[hadoop@hadoop102 module]$ mv apache-tez-0.10.1-bin/ tez-0.10.1

在Hive中配置Tez

  • 在hive-env.sh文件中添加tez环境变量配置和依赖包环境变量配置

    [hadoop@hadoop102 module]$ cd /opt/module/hive/conf/

    [hadoop@hadoop102 conf]$ vi hive-env.sh

在文件末尾添加如下配置

#tez的解压目录

export TEZ_HOME=/opt/module/tez-0.10.1

export TEZ_JARS=""

for jar in `ls $TEZ_HOME |grep jar`; do

export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/$jar

done

for jar in `ls $TEZ_HOME/lib`; do

export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/lib/$jar

done

#导入lzo压缩jar包的环境变量

export HIVE_AUX_JARS_PATH=/opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.21-SNAPSHOT.jar$TEZ_JARS

  • 在hive-site.xml文件中添加如下配置,更改hive计算引擎

    <property>

    <name>hive.execution.engine</name>

    <value>tez</value>

    </property>

  • 配置tez-site.xml

在/opt/module/hive/conf下面创建tez-site.xml文件

[hadoop@hadoop102 conf]$ vi tez-site.xml

在tez-site.xml添加如下内容

<?xml
version="1.0"
encoding="UTF-8"?>

<?xml-stylesheet
type="text/xsl"
href="configuration.xsl"?>

<configuration>

<property>


<name>tez.lib.uris</name>


<value>${fs.defaultFS}/tez/tez-0.10.1,${fs.defaultFS}/tez/tez-0.10.1/lib</value>

</property>

<property>


<name>tez.lib.uris.classpath</name>


<value>${fs.defaultFS}/tez/tez-0.10.1,${fs.defaultFS}/tez/tez-0.10.1/lib</value>

</property>

<property>


<name>tez.use.cluster.hadoop-libs</name>


<value>true</value>

</property>

<property>


<name>tez.history.logging.service.class</name>


<value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService</value>

</property>

</configuration>

  • 上传Tez目录到hdfs集群

1)将tez安装目录/opt/module/tez-0.9.1上传到HDFS的/tez路径

[hadoop@hadoop102 conf]$ hadoop fs -mkdir /tez

[hadoop@hadoop102 conf]$ hadoop fs -put /opt/module/tez-0.10.1/ /tez

[hadoop@hadoop102 conf]$ hadoop fs -ls /tez

Found 1 items

drwxr-xr-x - hadoop supergroup 0 2022-01-14 01:40 /tez/tez-0.10.1

  • 测试

启动Hive

启动hive过程不报错,如果报错说明tez引擎配置有问题

[hadoop@hadoop102 hive]$ bin/hive

普通表数据测试

创建LZO表

hive (default)> create table student(

id int,

name string);

向表中添加数据

hive (default)> insert into student values(1,"zhangjk");

查询数据,如果没有报错就表示hive配置tez引擎成功

hive (default)> select * from student;

OK

student.id student.name

1 zhangjk

Time taken: 0.187 seconds, Fetched: 1 row(s)

使用LZO压缩的表测试

创建输入数据是lzo输出是text,支持json解析的分区表

hive (default)> drop table if exists log;

CREATE EXTERNAL TABLE log (`line` string)

PARTITIONED BY (`dt` string)

STORED AS

INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'

OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'

LOCATION '/user/hive/warehouse/log';

在本地创建文本数据,添加测试数据并上传到hdfs中

[hadoop@hadoop102 module]$ vi 1.log

文件中添加如下测试数据

hello hadoop

hello hive

hello tez

上传到hdfs

hadoop fs -put /opt/module/1.log /user

加载数据

hive (gmall)> load data inpath '/user/1.log' into table log partition(dt='2022-01-01');

解决内存不足问题

如果在虚拟机上运行Tez时经常会出现内存不足道情况而被NodeManager杀死进程,如:

Caused by: org.apache.tez.dag.api.SessionNotRunning: TezSession has already shutdown. Application application_1546781144082_0005 failed 2 times due to AM Container for appattempt_1546781144082_0005_000002 exited with exitCode: -103 For more detailed output, check application tracking page:http://hadoop103:8088/cluster/app/application_1546781144082_0005Then, click on links to logs of each attempt. Diagnostics: Container [pid=11116,containerID=container_1546781144082_0005_02_000001] is running beyond virtual memory limits. Current usage: 216.3 MB of 1 GB physical memory used; 2.6 GB of 2.1 GB virtual memory used. Killing container.

这种问题是从机上运行的Container试图使用过多的内存,而被NodeManager kill掉了。

[摘录] The NodeManager is killing your container. It sounds like you are trying to use hadoop streaming which is running as a child process of the map-reduce task. The NodeManager monitors the entire process tree of the task and if it eats up more memory than the maximum set in mapreduce.map.memory.mb or mapreduce.reduce.memory.mb respectively, we would expect the Nodemanager to kill the task, otherwise your task is stealing memory belonging to other containers, which you don't want.

[摘录翻译]节点管理器正在杀死您的容器。听起来您正在尝试使用hadoop流,它作为map reduce任务的子进程运行。NodeManager监视任务的整个进程树,以及任务占用的内存是否超过mapreduce中设置的最大值。地图记忆力mb或mapreduce。减少记忆力我们希望节点管理器杀死该任务,否则您的任务将窃取属于其他容器的内存,这是您不想要的。

方案一:关掉虚拟内存检查。

修改yarn-site.xml

<property>

<name>yarn.nodemanager.vmem-check-enabled</name>

<value>false</value>

</property>

方案二:mapred-site.xml中设置Map和Reduce任务的内存配置

value中实际配置的内存需要根据自己机器内存大小及应用情况进行修改

<property>

  <name>mapreduce.map.memory.mb</name>

  <value>1536</value>

</property>

<property>

  <name>mapreduce.map.java.opts</name>

  <value>-Xmx1024M</value>

</property>

<property>

  <name>mapreduce.reduce.memory.mb</name>

  <value>3072</value>

</property>

<property>

  <name>mapreduce.reduce.java.opts</name>

  <value>-Xmx2560M</value>

</property>

修改完后重新启动hadoop集群和hive服务

常见错误及解决方案

将$HADOOP_HOME/etc/hadoop/capacity-scheduler.xml文件中的

<property>

<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>

<value>0.1</value>

<description>

Maximum percent of resources in the cluster which can be used to run

application masters i.e. controls number of concurrent running

applications.

</description>

</property>

改成

<property>

<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>

<value>1</value>

<description>

Maximum percent of resources in the cluster which can be used to run

application masters i.e. controls number of concurrent running

applications.

</description>

</property>

(1)导错驱动包,应该把mysql-connector-java-5.1.27-bin.jar导入/opt/module/hive/lib的不是这个包。错把mysql-connector-java-5.1.27.tar.gz导入hive/lib包下。

(2)修改user表中的主机名称没有都修改为%,而是修改为localhost

可以采用HiveInputFormat就会根据分区数输出相应的文件。

hive (default)> set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;

描述:java.lang.OutOfMemoryError: Java heap space

解决:在yarn-site.xml中加入如下代码

<property>

<name>yarn.scheduler.maximum-allocation-mb</name>

<value>2048</value>

</property>

<property>

<name>yarn.scheduler.minimum-allocation-mb</name>

<value>2048</value>

</property>

<property>

<name>yarn.nodemanager.vmem-pmem-ratio</name>

<value>2.1</value>

</property>

<property>

<name>mapred.child.java.opts</name>

<value>-Xmx1024m</value>

</property>

在yarn-site.xml中添加如下配置:

<property>

<name>yarn.nodemanager.vmem-check-enabled</name>

<value>false</value>

</property>

Hive详解(02) - Hive 3.1.2安装的更多相关文章

  1. 大数据入门第十一天——hive详解(一)入门与安装

    一.基本概念 1.什么是hive The Apache Hive ™ data warehouse software facilitates reading, writing, and managin ...

  2. Linux 下Redis集群安装部署及使用详解(在线和离线两种安装+相关错误解决方案)

    一.应用场景介绍 本文主要是介绍Redis集群在Linux环境下的安装讲解,其中主要包括在联网的Linux环境和脱机的Linux环境下是如何安装的.因为大多数时候,公司的生产环境是在内网环境下,无外网 ...

  3. RabbitMQ详解(一)------简介与安装(Docker)

    RABBITMQ详解(一)------简介与安装(DOCKER) 刚刚进入实习,在学习过程中没有接触过MQ,RabbitMQ 这个消息中间件,正好公司最近的项目中有用到,学习了解一下. 首先什么是MQ ...

  4. Hive详解

    1.   Hive基本概念 1.1  Hive简介 1.1.1 什么是Hive Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 1.1 ...

  5. Linux用户、用户组权限管理详解 --- 02

    2,用户.用户组管理操作详解: 2.1 adduser 添加用户: adduser [-u uid][-g group][-d home][-s shell] -u:直接给出userID        ...

  6. 图文详解压力测试工具JMeter的安装与使用

    压力测试是目前大型网站系统的设计和开发中不可或缺的环节,通常会和容量预估等工作结合在一起,穿插在系统开发的不同方案.压力测试可以帮助我们及时发现系统的性能短板和瓶颈问题,在这个基础在上再进行针对性的性 ...

  7. 大数据学习day11------hbase_day01----1. zk的监控机制,2动态感知服务上下线案例 3.HDFS-HA的高可用基本的工作原理 4. HDFS-HA的配置详解 5. HBASE(简介,安装,shell客户端,java客户端)

    1. ZK的监控机制 1.1 监听数据的变化  (1)监听一次 public class ChangeDataWacher { public static void main(String[] arg ...

  8. RabbitMQ详解(一)------简介与安装

    RabbitMQ 这个消息中间件,其实公司最近的项目中有用到,但是一直没有系统的整理,最近看完了<RabbitMQ实战  高效部署分布式消息队列>这本书,所以顺便写写. 那么关于 Rabb ...

  9. 一起学Hive——详解四种导入数据的方式

    在使用Hive的过程中,导入数据是必不可少的步骤,不同的数据导入方式效率也不一样,本文总结Hive四种不同的数据导入方式: 从本地文件系统导入数据 从HDFS中导入数据 从其他的Hive表中导入数据 ...

  10. 大数据入门第十一天——hive详解(三)hive函数

    一.hive函数 1.内置运算符与内置函数 函数分类: 查看函数信息: DESC FUNCTION concat; 常用的分析函数之rank() row_number(),参考:https://www ...

随机推荐

  1. Java代码审计之实战某博客

    对某博客的代码审计 在gitee上面找了一个个人博客项目,来进行实战代码审计,主要还是学习为主 技术菜菜,哪里错误希望师傅们指正 1.SQL注入 先了解Java Web中的数据传输流程 graph T ...

  2. ARC144 D - AND OR Equation

    ARC144 D - AND OR Equation Solution 首先可以猜测和答案仅和每一个二进制位以及\(f(0)\)有关系,不妨把按位\(\operatorname{AND}\)和按位\( ...

  3. 【算法训练营day4】LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表II

    [算法训练营day4]LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表 ...

  4. 我用canvas带你看一场流星雨

    前言 最近总是梦见一些小时候的故事,印象最深刻的就是夏天坐在屋顶上,看着满天的繁星,一颗,两颗,三颗...不由自主地开始了数星星的过程.不经意间,一颗流星划过夜间,虽然只是转瞬即逝,但它似乎比夜空中的 ...

  5. 齐博x2模型里边钩子的创建与使用

    在模型里边的钩子创建与使用方法跟在控制器里边的钩子创建及使用方法是有所区别的在模型里边创建的钩子,你可以理解为执行一个函数,是无法调用模型里边的类的方法及属性的.比如系统文件\application\ ...

  6. 齐博x1第四季《模块插件的制作》系列21-公共表单器的参数选项(7)

    password 密码类型 和text一样,只不过type类型是password,密码类型输入时,显示星号.即Html中的密码框类型 icon 字体图标类型 和列表页一样,把css的字体图标引入到了表 ...

  7. 13-ORM-更新&删除

    一.更改单个数据 修改单个实体的某些字段 1.查: - 通过get()得到要修改的实体对象 2.改: - 通过对象属性的=的方式修改数据 3.保存 - 通过对象.save()保存数据     二.批量 ...

  8. C++11绑定器bind及function机制

    前言 之前在学muduo网络库时,看到陈硕以基于对象编程的方式,大量使用boost库中的bind和function机制,如今,这些概念都已引入至C++11,包含在头文件<functional&g ...

  9. freeswitch的mod_curl模块

    概述 有时候,我们需要在呼叫的过程中,或过程后调用web api接口. freeswitch的mod_curl模块可以很方便的实现web api的接口调用. mod_curl模块默认不安装,需要进入模 ...

  10. 倍福Ads协议通信测试

    测试环境:vs2015 + TC31-Full-Setup.3.1.4022.30.exe 首先需要安装TC31-Full-Setup.3.1.4022.30.exe 本例子是用本机作测试,如果使用远 ...