Federated HDFS+beeline+hiveserver2 遇到的坑

遇到的坑:

1、  Hive的任务会从临时目录移动数据到数据仓库目录,默认hive使用/tmp作为临时目录,用户通常使用/user/hive/warehouse/作为数据仓库目录。在Federated HDFS情况下,/tmp 和 /user视为两个不同的ViewFS mount table,所以hive任务在这两个目录之间移动数据。Federated HDFS不支持这样做,所以任务会失败。

报错信息:

ERROR : Failed with exception Unable to move sourceviewfs://cluster9/tmp/.hive-staging_hive_2015-07-29_12-34-11_306_6082682065011532871-5/-ext-10002to destinationviewfs://cluster9/user/hive/warehouse/tandem.db/cust_loss_alarm_unit

org.apache.hadoop.hive.ql.metadata.HiveException: Unable to movesourceviewfs://cluster9/tmp/warehouse/.hive-staging_hive_2015-07-29_12-34-11_306_6082682065011532871-5/-ext-10002to destinationviewfs://cluster9/user/hive/warehouse/tandem.db/cust_loss_alarm_unit

atorg.apache.hadoop.hive.ql.metadata.Hive.moveFile(Hive.java:2521)

atorg.apache.hadoop.hive.ql.exec.MoveTask.moveFile(MoveTask.java:105)

atorg.apache.hadoop.hive.ql.exec.MoveTask.execute(MoveTask.java:222)

at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:160)

atorg.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:88)

atorg.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1640)

atorg.apache.hadoop.hive.ql.Driver.execute(Driver.java:1399)

atorg.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1183)

atorg.apache.hadoop.hive.ql.Driver.run(Driver.java:1049)

atorg.apache.hadoop.hive.ql.Driver.run(Driver.java:1044)

at org.apache.hive.service.cli.operation.SQLOperation.runQuery(SQLOperation.java:144)

atorg.apache.hive.service.cli.operation.SQLOperation.access$100(SQLOperation.java:69)

atorg.apache.hive.service.cli.operation.SQLOperation$1$1.run(SQLOperation.java:196)

atjava.security.AccessController.doPrivileged(Native Method)

atjavax.security.auth.Subject.doAs(Subject.java:415)

atorg.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)

at org.apache.hive.service.cli.operation.SQLOperation$1.run(SQLOperation.java:208)

atjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)

atjava.util.concurrent.FutureTask.run(FutureTask.java:262)

atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

atjava.lang.Thread.run(Thread.java:745)

Caused by: java.io.IOException: Renames across Mount points notsupported

atorg.apache.hadoop.fs.viewfs.ViewFileSystem.rename(ViewFileSystem.java:444)

atorg.apache.hadoop.hive.ql.metadata.Hive.moveFile(Hive.java:2509)

... 21 more

相关代码:

org.apache.hadoop.fs.viewfs.ViewFileSystem

/**

// Alternate 1: renames within same file system -valid but we disallow

// Alternate 2: (as described in next para - valid butwe have disallowed it

//

// Note we compare the URIs. the URIs include the linktargets.

// hence we allow renames across mount links as longas the mount links

// point to the same target.

if (!resSrc.targetFileSystem.getUri().equals(

resDst.targetFileSystem.getUri())) {

throw new IOException("Renames acrossMount points not supported");

}

*/

//

// Alternate 3 : renames ONLY within the the samemount links.

//

if (resSrc.targetFileSystem!=resDst.targetFileSystem) {

throw new IOException("Renames acrossMount points not supported");

}

Workaround:

在hdfs中 创建 /user/hive/warehouse/staging 目录,赋予777权限

然后添加配置:

<property>

<name>hive.exec.stagingdir</name>

<value>/user/hive/warehouse/staging/.hive-staging</value>

</property>

2、 当查询返回结果集很大的时候,beeline客户端会卡住或out-of-memory

报错信息:

org.apache.thrift.TException: Error in calling method FetchResults

atorg.apache.hive.jdbc.HiveConnection$SynchronizedHandler.invoke(HiveConnection.java:1271)

atcom.sun.proxy.$Proxy0.FetchResults(Unknown Source)

atorg.apache.hive.jdbc.HiveQueryResultSet.next(HiveQueryResultSet.java:363)

at org.apache.hive.beeline.BufferedRows.<init>(BufferedRows.java:42)

atorg.apache.hive.beeline.BeeLine.print(BeeLine.java:1756)

atorg.apache.hive.beeline.Commands.execute(Commands.java:806)

atorg.apache.hive.beeline.Commands.sql(Commands.java:665)

atorg.apache.hive.beeline.BeeLine.dispatch(BeeLine.java:974)

atorg.apache.hive.beeline.BeeLine.execute(BeeLine.java:810)

atorg.apache.hive.beeline.BeeLine.begin(BeeLine.java:767)

at org.apache.hive.beeline.BeeLine.mainWithInputRedirection(BeeLine.java:480)

atorg.apache.hive.beeline.BeeLine.main(BeeLine.java:463)

atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

atjava.lang.reflect.Method.invoke(Method.java:606)

atorg.apache.hadoop.util.RunJar.run(RunJar.java:221)

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

Caused by: java.lang.OutOfMemoryError: Java heap space

atjava.lang.Double.valueOf(Double.java:521)

Workaround

查看源码发现:beeline获取结果集有两种模式一种增量模式,一种buffer模式

org.apache.hive.beeline.BeeLine

int print(ResultSet rs) throws SQLException {

String format = getOpts().getOutputFormat();

OutputFormat f = (OutputFormat)formats.get(format);

if (f == null) {

error(loc("unknown-format", new Object[] {

format,formats.keySet()}));

f = new TableOutputFormat(this);

}

Rows rows;

if (getOpts().getIncremental()) {

rows = new IncrementalRows(this,rs); // 增量模式

} else {

rows = new BufferedRows(this, rs);buffer模式

}

return f.print(rows);

}

org.apache.hive.beeline.BeeLineOpts

private boolean incremental = false; //默认为buffer模式

但是通过beeline –help没有发现相关设置

beeline --help

Usage: java org.apache.hive.cli.beeline.BeeLine

-u <databaseurl>              the JDBC URL to connect to

-n <username>                  the username to connect as

-p<password>                  the password to connect as

-d <driverclass>              the driver class to use

-i <initfile>                 script file for initialization

-e<query>                     query that should be executed

-f <execfile>                 script file that should be executed

-w (or) --password-file <password file> the password file to read password from

--hiveconfproperty=value       Use value for given property

--hivevarname=value           hive variable name and value

This is Hive specific settings in which variables

can be set at session level and referenced in Hive

commands or queries.

--color=[true/false]           control whether color is used for display

--showHeader=[true/false]       show column namesin query results

--headerInterval=ROWS;         the interval between which heades are displayed

--fastConnect=[true/false]      skip buildingtable/column list for tab-completion

--autoCommit=[true/false]       enable/disableautomatic transaction commit

--verbose=[true/false]         show verbose error messages and debug info

--showWarnings=[true/false]    display connection warnings

--showNestedErrs=[true/false]   displaynested errors

--numberFormat=[pattern]        formatnumbers using DecimalFormat pattern

--force=[true/false]           continue running script even after errors

--maxWidth=MAXWIDTH            the maximum width of the terminal

--maxColumnWidth=MAXCOLWIDTH    themaximum width to use when displaying columns

--silent=[true/false]          be more silent

--autosave=[true/false]        automatically save preferences

--outputformat=[table/vertical/csv2/tsv2/dsv/csv/tsv]  format mode forresult display

Note that csv, and tsv are deprecated - use csv2, tsv2 instead

--truncateTable=[true/false]    truncatetable column when it exceeds length

--delimiterForDSV=DELIMITER    specify the delimiter for delimiter-separated values output format (default: |)

--isolation=LEVEL              set the transaction isolation level

--nullemptystring=[true/false]  set to true toget historic behavior of printing null as empty string

--help                         display this message

Beeline version 1.1.0-cdh5.4.3 by Apache Hive

但是没关系通过

beeline -u jdbc:hive2://10.17.28.173:10000 –n xxxx -pxxxx --incremental=true 还是能进入增量模式

时间: 2024-10-13 06:59:42

Federated HDFS+beeline+hiveserver2 遇到的坑的相关文章

beeline hiveserver2 start

1. install hive 2. start hiveserver2 查看hiverserver2 是否正常运行: ps -ef | grep hive 2. start beeline 3. 链接hive !connect jdbc:hive2://localhost:10000 hadoop hadoop org.apache.hive.jdbc.HiveDriver 这个步骤容易发生错误 Error: Failed to open new session: java.lang.Runt

HDFS的Block数据balancer重分布实战

Hadoop的HDFS集群在使用一段时间后,各个DataNode节点的磁盘使用率肯定会出现不平衡的情况,也就是数据量层面的数据倾斜,如图: 引起这种情况的方式很多: 1.       添加新的Datanode节点 2.       人为干预将数据的副本数降低或者增加 我们都知道当HDFS出现数据不平衡的时候,就会造成MapReduce或Spark等应用程序无法很好的利用本地计算的优势,而且Datanode节点之间也没有更好的网络带宽利用率,某些Datanode节点的磁盘无法使用等等问题. 在Ha

Hadoop HDFS (2) HDFS概念

1. Blocks(块) 硬盘上有块,代表能够读取和写入的最小的data单位,通常是512字节. 基于单硬盘的文件系统也有块的概念,通常是把硬盘上的一组块集合在一起成为一个块,一般有几KB大小. 这些对于文件系统的使用者都是透明的,使用者只知道往硬盘上写了一定大小的文件,或从硬盘上读了一定大小的文件.当然有些维护命令,比如df和fsck,就是在块级上的操作. HDFS也有块(blocks),但比之前提到的大得多,默认是64MB.与单硬盘文件系统的块相同的是,HDFS上的文件会被切分成多个块大小的

Hive的三种安装方式(内嵌模式,本地模式远程模式)

一.安装模式介绍:     Hive官网上介绍了Hive的3种安装方式,分别对应不同的应用场景.     1.内嵌模式(元数据保村在内嵌的derby种,允许一个会话链接,尝试多个会话链接时会报错)     2.本地模式(本地安装mysql 替代derby存储元数据)     3.远程模式(远程安装mysql 替代derby存储元数据) 二.安装环境以及前提说明:     首先,Hive是依赖于hadoop系统的,因此在运行Hive之前需要保证已经搭建好hadoop集群环境.     本文中使用的

HUE配置HIVE

HIVE配置 修改hue.ini配置文件 [beeswax] hive_server_host=node1 hive_server_port=10000 hive_conf_dir=/usr/hive-1.2.1/conf 重启HUE build/env/bin/supervisor 启动hdfs和hiveserver2 $HIVE_HOME/bin/hiveserver2 登录Web 点击:Query Editors->Hive 然后就可以通过图形化操作Hive了!

由“Beeline连接HiveServer2后如何使用指定的队列(Yarn)运行Hive SQL语句”引发的一系列思考

背景 我们使用的HiveServer2的版本为0.13.1-cdh5.3.2,目前的任务使用Hive SQL构建,分为两种类型:手动任务(临时分析需求).调度任务(常规分析需求),两者均通过我们的Web系统进行提交.以前两种类型的任务都被提交至Yarn中一个名称为“hive”的队列,为了避免两种类型的任务之间相互受影响以及并行任务数过多导致“hive”队列资源紧张,我们在调度系统中构建了一个任务缓冲区队列,所有被提交的任务(手动任务.调度任务)并不会直接被提交至集群,而是提交至这个缓冲区队列中,

hive三种方式区别和搭建、HiveServer2环境搭建、HWI环境搭建和beeline环境搭建

说在前面的话 以下三种情况,最好是在3台集群里做,比如,master.slave1.slave2的master和slave1都安装了hive,将master作为服务端,将slave1作为服务端. hive三种方式区别和搭建 Hive中metastore(元数据存储)的三种方式: a)内嵌Derby方式 b)Local方式 c)Remote方式 1.本地derby这种方式是最简单的存储方式,只需要在hive-site.xml做如下配置便可<?xml version="1.0"?&g

hiveserver2启动成功但无法通过beeline连接

可能是配置的问题. 我将hive.metastore.uris从配置文件中注释掉之后解决了hiveserver2启动成功但无法通过beeline连接的问题. [[email protected] conf]# vi hive-site.xml <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive_remote/warehouse</value> </pr

hadoop系列 第一坑: hdfs JournalNode Sync Status

今天早上来公司发现cloudera manager出现了hdfs的警告,如下图: 解决的思路是: 1.首先解决简单的问题,查看警告提示的设置的阀值时多少,这样就可以快速定位到问题在哪了,果然JournalNode Sync Status提示最先消去: 2.然后解决Sync Status问题,首先找到提示语的解释,在官网上可见.然后查看配置参数有无问题,没问题就看log,果然在log中看到了报错信息: 3.最后可定位到该提示是由于JournalNode节点间同步文件没有保持一致,那么使用修复(优雅