Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id C438A200B32 for ; Thu, 9 Jun 2016 01:06:46 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id C2DF7160A35; Wed, 8 Jun 2016 23:06:46 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 7E8FE160A2E for ; Thu, 9 Jun 2016 01:06:44 +0200 (CEST) Received: (qmail 28284 invoked by uid 500); 8 Jun 2016 23:06:43 -0000 Mailing-List: contact user-help@hive.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@hive.apache.org Delivered-To: mailing list user@hive.apache.org Received: (qmail 28272 invoked by uid 99); 8 Jun 2016 23:06:43 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 08 Jun 2016 23:06:43 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id B67A3C28CC for ; Wed, 8 Jun 2016 23:06:42 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.179 X-Spam-Level: * X-Spam-Status: No, score=1.179 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=2, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001] autolearn=disabled Authentication-Results: spamd1-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com Received: from mx2-lw-us.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id b83Xa7XTSGte for ; Wed, 8 Jun 2016 23:06:40 +0000 (UTC) Received: from mail-qk0-f170.google.com (mail-qk0-f170.google.com [209.85.220.170]) by mx2-lw-us.apache.org (ASF Mail Server at mx2-lw-us.apache.org) with ESMTPS id 27E2B5F232 for ; Wed, 8 Jun 2016 23:06:40 +0000 (UTC) Received: by mail-qk0-f170.google.com with SMTP id i187so12400184qkd.3 for ; Wed, 08 Jun 2016 16:06:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=c4Qswi3yjs4ANpQyowoI6EjcSInHtfLYx109/rTHJOo=; b=NCZyFmoZw4Gkho2579sdf6sbbqG9Oj6XI3AGU6e6B5E+AGIiMTW49pNmkO4fHB8Hin eSlrbwpmA5Dts374BQfdYkKGSjxNyL8KBHGvEhzHsvyINijl4zYmIpvamIs1TB5bSYZe jlacOJpYKdon2gPivBC5R/Cq6GGuc5YytgWZ3CiLmYplVIDcZGhNwRaGXtwXuNqWe2Eb KuISJHxQmoSOye+Yvcg/f6dN13PpZaFV2j74RrT2FHr5bpTRTeDo80PhBzUpf4NlVR6a A0dlYRmd27iDL9HwThTj2K1JYgeIjmklhkB4sd5V5ZKi1WezyFQv3wrEV48v3BO23TmM kJNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=c4Qswi3yjs4ANpQyowoI6EjcSInHtfLYx109/rTHJOo=; b=i4DvDCkx+WMUsUFJOJuvnueDfj2JSROKRgzttRB5KAqXF7GaFtlU5LK2/WfCcDBL7q vc8wI3sluwzrj4NrTjrnZCt1NUGQY9fCPwjbtkz5QwLUc6SJ9RTC1hyAtEtVuYNsavT5 2ztvEDI79AYpkSCLJRSvBMH8uFlFGjkfyYJJsDfeb6fw4n6pCu0JHsT+aiRcotkwty1L QzG09ECjocmJuUgSTlxHqksxxmwM67iRqoMFRCKbEiv7+XUcKg8agFpupNBIgCUTtnLU e/YAO674XcZ67ojCWF0HJbnb2qIZHfwogmuhXkzE/VBHPPF+I6dAYVQSy4V9X9Iy0iQF rtcg== X-Gm-Message-State: ALyK8tKjyCKtpD6AI1Xnybx8E20PwHEqjZ9auvBmxS2UbjKjedrakMkx7QHG+sj+WI4lgTS7wY6PCl0y0wIGNQ== X-Received: by 10.55.39.146 with SMTP id n140mr7419478qkn.10.1465427192842; Wed, 08 Jun 2016 16:06:32 -0700 (PDT) MIME-Version: 1.0 Received: by 10.55.126.131 with HTTP; Wed, 8 Jun 2016 16:06:32 -0700 (PDT) In-Reply-To: References: From: Mich Talebzadeh Date: Thu, 9 Jun 2016 00:06:32 +0100 Message-ID: Subject: Re: Creating a Hive table through Spark and potential locking issue (a bug) To: user Content-Type: multipart/related; boundary=94eb2c09593e463e5e0534cc5b35 archived-at: Wed, 08 Jun 2016 23:06:47 -0000 --94eb2c09593e463e5e0534cc5b35 Content-Type: multipart/alternative; boundary=94eb2c09593e463e560534cc5b34 --94eb2c09593e463e560534cc5b34 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable BTW DbTxnManager is set as well hive.txn.manager *org.apache.hadoop.hive.ql.lockmgr.DbTxnManager* Set to org.apache.hadoop.hive.ql.lockmgr.DbTxnManager as part of turning on Hive transactions, which also requires appropriate settings for hive.compactor.initiator.on, hive.compactor.worker.threads, hive.support.concurrency (true), hive.enforce.bucketing (true), and hive.exec.dynamic.partition.mode (nonstrict). The default DummyTxnManager replicates pre-Hive-0.13 behavior and provides no transactions. Dr Mich Talebzadeh LinkedIn * https://www.linkedin.com/profile/view?id=3DAAEAAAAWh2gBxianrbJd6= zP6AcPCCdOABUrV8Pw * http://talebzadehmich.wordpress.com On 8 June 2016 at 23:52, Mich Talebzadeh wrote: > OK this seems to work. > > > 1. Create the target table first > 2. Populate afterwards > > I first created the target table with > > hive> create table test.dummy as select * from oraclehadoop.dummy where 1 > =3D 2; > > Then did INSERT/SELECT and tried to drop the target table when DML > (INSERT/SELECT) was going on > > Now the process 6856 (drop table ..) is waiting for the locks to be > released which is correct > > > Lock ID Database Table Partition State Type > Transaction ID Last Hearbeat Acquired At User Hostname > 6855 test dummy NULL ACQUIRED SHARED_READ NULL > 1465425703092 1465425703054 hduser rhes564 > 6855 oraclehadoop dummy NULL ACQUIRED SHARED_READ > NULL 1465425703092 1465425703056 hduser rhes564 > 6856 test dummy NULL WAITING EXCLUSIVE NULL > 1465425820073 NULL hduser rhes564 > > Sounds like with Hive there is the issue with DDL + DML locks applied in = a > single transaction i.e. --> create table A as select * from b > > HTH > > Dr Mich Talebzadeh > > > > LinkedIn * https://www.linkedin.com/profile/view?id=3DAAEAAAAWh2gBxianrbJ= d6zP6AcPCCdOABUrV8Pw > * > > > > http://talebzadehmich.wordpress.com > > > > On 8 June 2016 at 23:35, Eugene Koifman wrote: > >> if you split =E2=80=9Ccreate table test.dummy as select * from >> oraclehadoop.dummy;=E2=80=9D >> into create table statement, followed by insert into test.dummy as >> select=E2=80=A6 you should see the behavior you expect with Hive. >> Drop statement will block while insert is running. >> >> Eugene >> >> From: Mich Talebzadeh >> Reply-To: "user@hive.apache.org" >> Date: Wednesday, June 8, 2016 at 3:12 PM >> To: Michael Segel >> Cc: David Newberger , "user@hive.apache.or= g" >> , "user @spark" >> Subject: Re: Creating a Hive table through Spark and potential locking >> issue (a bug) >> >> Hive version is 2 >> >> We can discuss all sorts of scenarios. However, Hivek is pretty good at >> applying the locks at both the table and partition level. The idea of >> having a metadata is to enforce these rules. >> >> [image: Inline images 1] >> >> For example above inserting from source to target table partitioned >> (year, month) shows that locks are applied correctly >> >> This is Hive running on Spark engine. The crucial point is that Hive >> accesses its metadata and updates its hive_locks table. Again one can se= e >> from data held in that table in metadata >> >> [image: Inline images 2] >> >> So I think there is a genuine issue here >> >> HTH >> >> >> Dr Mich Talebzadeh >> >> >> >> LinkedIn * https://www.linkedin.com/profile/view?id=3DAAEAAAAWh2gBxianrb= Jd6zP6AcPCCdOABUrV8Pw >> * >> >> >> >> http://talebzadehmich.wordpress.com >> >> >> >> On 8 June 2016 at 22:36, Michael Segel wrote= : >> >>> Hi, >>> >>> Lets take a step back=E2=80=A6 >>> >>> Which version of Hive? >>> >>> Hive recently added transaction support so you have to know your >>> isolation level. >>> >>> Also are you running spark as your execution engine, or are you talking >>> about a spark app running w a hive context and then you drop the table = from >>> within a Hive shell while the spark app is still running? >>> >>> You also have two different things happening=E2=80=A6 you=E2=80=99re mi= xing a DDL with a >>> query. How does hive know you have another app reading from the table? >>> I mean what happens when you try a select * from foo; and in another >>> shell try dropping foo? and if you want to simulate a m/r job add >>> something like an order by 1 clause. >>> >>> HTH >>> >>> -Mike >>> >>> >>> >>> On Jun 8, 2016, at 1:44 PM, Mich Talebzadeh >>> wrote: >>> >>> Hi, >>> >>> The idea of accessing Hive metada is to be aware of concurrency. >>> >>> >>> In generall if I do the following In Hive >>> >>> >>> hive> create table test.dummy as select * from oraclehadoop.dummy; >>> >>> >>> We can see that hive applies the locks in Hive >>> >>> >>> >>> >>> >>> >>> >>> >>> However, there seems to be an issue. *I do not see any exclusive lock >>> on the target table* (i.e. test.dummy). The locking type SHARED_READ on >>> source table oraclehadoop.dummy looks OK >>> >>> >>> One can see the locks in Hive database >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> So there are few issues here: >>> >>> >>> 1. With Hive -> The source table is locked as SHARED_READ >>> 2. With Spark --> No locks at all >>> 3. With HIVE --> No locks on the target table >>> 4. With Spark --> No locks at all >>> >>> HTH >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> Dr Mich Talebzadeh >>> >>> >>> LinkedIn * https://www.linkedin.com/profile/view?id=3DAAEAAAAWh2gBxianr= bJd6zP6AcPCCdOABUrV8Pw >>> * >>> >>> >>> http://talebzadehmich.wordpress.com >>> >>> >>> >>> On 8 June 2016 at 20:22, David Newberger >>> wrote: >>> >>>> Could you be looking at 2 jobs trying to use the same file and one >>>> getting to it before the other and finally removing it? >>>> >>>> >>>> >>>> *David Newberger* >>>> >>>> >>>> >>>> *From:* Mich Talebzadeh [mailto:mich.talebzadeh@gmail.com] >>>> *Sent:* Wednesday, June 8, 2016 1:33 PM >>>> *To:* user; user @spark >>>> *Subject:* Creating a Hive table through Spark and potential locking >>>> issue (a bug) >>>> >>>> >>>> >>>> >>>> >>>> Hi, >>>> >>>> >>>> >>>> I noticed an issue with Spark creating and populating a Hive table. >>>> >>>> >>>> >>>> The process as I see is as follows: >>>> >>>> >>>> >>>> 1. Spark creates the Hive table. In this case an ORC table in a >>>> Hive Database >>>> 2. Spark uses JDBC connection to get data out from an Oracle >>>> 3. I create a temp table in Spark through (registerTempTable) >>>> 4. Spark populates that table. That table is actually created in >>>> >>>> hdfs dfs -ls /tmp/hive/hduser >>>> >>>> drwx------ - hduser supergroup >>>> >>>> /tmp/hive/hduser/b1ea6829-790f-4b37-a0ff-3ed218388059 >>>> >>>> >>>> >>>> >>>> >>>> 1. However, The original table itself does not have any locking on >>>> it! >>>> 2. I log in into Hive and drop that table >>>> >>>> 3.hive> drop table dummy; >>>> >>>> OK >>>> >>>> >>>> >>>> 1. That table is dropped OK >>>> 2. Spark crashes with message >>>> >>>> Started at >>>> [08/06/2016 18:37:53.53] >>>> 16/06/08 19:13:46 ERROR Executor: Exception in task 0.0 in stage 1.0 >>>> (TID 1) >>>> >>>> org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.na= menode.LeaseExpiredException): >>>> No lease on >>>> /user/hive/warehouse/oraclehadoop.db/dummy/.hive-staging_hive_2016-06-= 08_18-38-08_804_3299712811201460314-1/-ext-10000/_temporary/0/_temporary/at= tempt_201606081838_0001_m_000000_0/part-00000 >>>> (inode 831621): File does not exist. Holder >>>> DFSClient_NONMAPREDUCE_-1836386597_1 does not have any open files. >>>> at >>>> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNames= ystem.java:3516) >>>> at >>>> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.analyzeFileState(F= SNamesystem.java:3313) >>>> at >>>> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock= (FSNamesystem.java:3169) >>>> at >>>> org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(Name= NodeRpcServer.java:641) >>>> at >>>> org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTran= slatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:482) >>>> at >>>> org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$Cli= entNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) >>>> at >>>> org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call= (ProtobufRpcEngine.java:619) >>>> at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:962) >>>> at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2039= ) >>>> at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2035= ) >>>> at java.security.AccessController.doPrivileged(Native Method) >>>> at javax.security.auth.Subject.doAs(Subject.java:422) >>>> at >>>> org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformat= ion.java:1628) >>>> at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2033) >>>> >>>> at org.apache.hadoop.ipc.Client.call(Client.java:1468) >>>> at org.apache.hadoop.ipc.Client.call(Client.java:1399) >>>> at >>>> org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngi= ne.java:232) >>>> at com.sun.proxy.$Proxy22.addBlock(Unknown Source) >>>> at >>>> org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.a= ddBlock(ClientNamenodeProtocolTranslatorPB.java:399) >>>> at sun.reflect.GeneratedMethodAccessor16.invoke(Unknown Source= ) >>>> at >>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccess= orImpl.java:43) >>>> at java.lang.reflect.Method.invoke(Method.java:498) >>>> at >>>> org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryIn= vocationHandler.java:187) >>>> at >>>> org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocati= onHandler.java:102) >>>> at com.sun.proxy.$Proxy23.addBlock(Unknown Source) >>>> at >>>> org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.locateFollowingBlo= ck(DFSOutputStream.java:1532) >>>> at >>>> org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStr= eam(DFSOutputStream.java:1349) >>>> at >>>> org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStrea= m.java:588) >>>> 16/06/08 19:13:46 ERROR TaskSetManager: Task 0 in stage 1.0 failed 1 >>>> times; aborting job >>>> >>>> >>>> >>>> Suggested solution. >>>> >>>> In a concurrent env, Spark should apply locks in order to prevent such >>>> operations. Locks are kept in Hive meta data table HIVE_LOCKS >>>> >>>> >>>> >>>> HTH >>>> >>>> Dr Mich Talebzadeh >>>> >>>> LinkedIn *https://www.linkedin.com/profile/view?id=3DAAEAAAAWh2gBxian= rbJd6zP6AcPCCdOABUrV8Pw >>>> * >>>> >>>> http://talebzadehmich.wordpress.com >>>> >>>> >>> >>> >>> >> > --94eb2c09593e463e560534cc5b34 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
BTW

DbTxnManager is set as = well


=C2=A0 <property>
=C2=A0=C2=A0=C2=A0 <= name>hive.txn.manager</name>
=C2=A0=C2=A0=C2=A0 <val= ue>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
=C2=A0=C2=A0=C2=A0 <description>
=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 Set to org.apache.hadoop.hive.ql.lockmgr.DbTxnManager as part of turnin= g on Hive
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 transactions, which also requir= es appropriate settings for hive.compactor.initiator.on,
=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 hive.compactor.worker.threads, hive.support.concurrency (tr= ue), hive.enforce.bucketing
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (true), and h= ive.exec.dynamic.partition.mode (nonstrict).
=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 The default DummyTxnManager replicates pre-Hive-0.13 behavior and provi= des
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 no transactions.
=C2=A0=C2=A0=C2= =A0 </description>
=C2=A0 </property>

<= /div>


On 8 June 2016 at 23:52, Mich Talebzadeh <mich.talebzadeh@gmail.com> wrote:
OK this seems to work.
=C2=A0
  1. Create the target table first<= /li>
  2. =C2=A0Populate afterwards
=C2=A0I first=C2=A0created the target=C2=A0ta= ble with

hive> create table test.dummy as select * from oraclehadoop.= dummy where 1 =3D 2;

=C2=A0Then did=C2=A0=C2=A0INSERT/SELECT and= tried to drop the target table when DML (INSERT/SELECT) was going on
=

Now the process 6856 (drop table ..) =C2=A0is waiting f= or the locks to be released which is correct


<= /div>
Lock I= D Database=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Table=C2=A0=C2=A0 Part= ition=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 State=C2=A0=C2=A0 Type=C2=A0=C2= =A0=C2=A0 Transaction ID=C2=A0 Last Hearbeat=C2=A0=C2=A0 Acquired At=C2=A0= =C2=A0=C2=A0=C2=A0 User=C2=A0=C2=A0=C2=A0 Hostname
6855=C2=A0=C2=A0=C2= =A0 test=C2=A0=C2=A0=C2=A0 dummy=C2=A0=C2=A0 NULL=C2=A0=C2=A0=C2=A0 ACQUIRE= D=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SHARED_READ=C2=A0=C2=A0=C2=A0= =C2=A0 NULL=C2=A0=C2=A0=C2=A0 1465425703092=C2=A0=C2=A0 1465425703054=C2=A0= =C2=A0 hduser=C2=A0 rhes564
6855=C2=A0=C2=A0=C2=A0 oraclehadoop= =C2=A0=C2=A0=C2=A0 dummy=C2=A0=C2=A0 NULL=C2=A0=C2=A0=C2=A0 ACQUIRED=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SHARED_READ=C2=A0=C2=A0=C2=A0=C2=A0 NU= LL=C2=A0=C2=A0=C2=A0 1465425703092=C2=A0=C2=A0 1465425703056=C2=A0=C2=A0 hd= user=C2=A0 rhes564
6856=C2=A0=C2=A0=C2=A0 test=C2=A0=C2=A0=C2=A0 dummy=C2=A0=C2= =A0 NULL=C2=A0=C2=A0=C2=A0 WAITING EXCLUSIVE=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 NULL=C2=A0=C2=A0=C2=A0 1465425820073=C2=A0=C2=A0 NULL=C2=A0=C2=A0=C2= =A0 hduser=C2=A0 rhes564
=C2=A0
Sound= s like with Hive there is the issue with=C2=A0DDL + DML locks applied in=C2= =A0a single transaction i.e.=C2=A0--> create table A as select * from b

HTH


On 8 June 2016= at 23:35, Eugene Koifman <ekoifman@hortonworks.com> = wrote:
if you split =E2=80=9Ccreate table test.dummy as select * fro= m oraclehadoop.dummy;=E2=80=9D
into create table statement, followed by insert into test.dummy as sel= ect=E2=80=A6 you should see the behavior you expect with Hive.
Drop statement will block while insert is running.

Eugene

From: Mich Talebzadeh <mich.talebzadeh@gma= il.com>
Reply-To: "user@hive.apache.org" <<= a href=3D"mailto:user@hive.apache.org" target=3D"_blank">user@hive.apache.o= rg>
Date: Wednesday, June 8, 2016 at 3:= 12 PM
To: Michael Segel <michael_segel@hotmail.com= >
Cc: David Newberger <david.newberger@wand= corp.com>, "user@hive.apache.org" <user@hive.apache.org>, "user @spark" <user@spark.apache.org>
Subject: Re: Creating a Hive table = through Spark and potential locking issue (a bug)

Hive version is 2

We can discuss all sorts of scenarios.=C2=A0=C2=A0However, Hivek is pr= etty good at applying the locks at both the table and partition level. The = idea of having a metadata is to enforce these rules.

3D"Inline

For example above inserting from source to target table partitioned (y= ear, month) shows that locks are applied correctly

This is Hive running on Spark engine. The crucial point is that Hive a= ccesses its metadata and updates its hive_locks table. Again one can see fr= om data held in that table in metadata

3D"Inline

So I think there is a genuine issue here

HTH

On 8 June 2016 at 22:36, M= ichael Segel <michael_segel@hotmail.com> wrote:
Hi,=C2=A0

Lets take a step back=E2=80=A6=C2=A0

Which version of Hive?=C2=A0

Hive recently added transaction support so you have to know your isola= tion level.=C2=A0

Also are you running spark as your execution engine, or are you talkin= g about a spark app running w a hive context and then you drop the table fr= om within a Hive shell while the spark app is still running?=C2=A0

You also have two different things happening=E2=80=A6 you=E2=80=99re m= ixing a DDL with a query.=C2=A0 How does hive know you have another app rea= ding from the table?=C2=A0
I mean what happens when you try a select * from foo; and in another s= hell try dropping foo? =C2=A0and if you want to simulate a m/r job add some= thing like an order by 1 clause.=C2=A0

HTH

-Mike



On Jun 8, 2016, at 1:44 PM, Mich Talebzadeh <mich.talebzadeh@gmail.com> = wrote:

Hi,
=C2=A0
The idea of accessing Hive metada is to= be aware of concurrency.

=C2=A0

=C2=A0In generall if I = do the following In Hive

=C2=A0
hive> create table test.dummy as select * from oraclehadoop.dumm= y;

=C2=A0
We=C2=A0can see that hive applies the loc= ks in Hive

=C2=A0
<image.png>
=C2=A0



=C2=A0

However, there seems to be an issue. I do not see any exclusive lock on the target table (i.e.= =C2=A0test.dummy). The locking=C2=A0type SHARED_READ on source table oracle= hadoop.dummy looks OK

=C2=A0
=C2=A0One can see the locks <= font size=3D"3">=C2=A0in Hive database

=C2=A0


<image.png>
=C2=A0

<= font size=3D"3">

=C2=A0
So there are few issues here:
=C2=A0
  1. With Hi= ve -> The source table is locked as SHARED_READ
  2. With Spark=C2=A0--&g= t; No locks at all
  3. With HIVE --> No locks on the target table=
  4. With Spark --> No locks at all=C2=A0
  5. =
=C2=A0HTH

=C2=A0

=C2=A0

=C2=A0




On 8 June 2016 at 20:22, D= avid Newberger <david= .newberger@wandcorp.com> wrote:

Cou= ld you be looking at 2 jobs trying to use the same file and one getting to it before the other and finally removing it?

=C2=A0

David Newberger

=C2=A0

From: Mich Talebzadeh [mailto:mich.talebzadeh@gmail.com]
Sent: Wednesday, June 8, 2016 1:33 PM
To: user; user @spark
Subject: Creating a Hive table through Spark and potential locking i= ssue (a bug)

=C2=A0

=C2=A0

Hi,

=C2=A0

I noticed an issue with Spark creating and populatin= g a Hive table.

=C2=A0

The process as I see is as follows:

=C2=A0

  1. Spark creates the Hive table. In this case an ORC t= able in a Hive Database
  2. Spark use= s JDBC connection to get data out from an Oracle
  3. I create a temp table in Spark through (registerTempTable)<= u>
  4. Spark populates that table. That = table is actually created in

=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 hdfs dfs -ls /tmp/hive/hduser<= /u>

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0drwx------=C2=A0=C2=A0= - hduser supergroup=C2=A0=C2=A0=C2=A0

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /tmp/hive/hduser/b1ea6829-7= 90f-4b37-a0ff-3ed218388059

=C2=A0

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0

  1. However, The original table itself does not have an= y locking on it!
  2. I log in into Hi= ve and drop that table

3.hive> drop table dummy;

OK

=C2=A0

  1. =C2=A0That table is dropped OK
  2. Spark crashes with message

Started at
[08/06/2016 18:37:53.53]
16/06/08 19:13:46 ERROR Executor: Exception in task 0.0 in stage 1.0 (TID 1= )
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenod= e.LeaseExpiredException):
No lease on /user/hive/warehouse/oraclehadoop.db/dummy/= .hive-staging_hive_2016-06-08_18-38-08_804_3299712811201460314-1/-ext-10000= /_temporary/0/_temporary/attempt_201606081838_0001_m_000000_0/part-00000 (inode 831621): File does not exist. Holder DFSClient_NONMAPREDUCE_-183638= 6597_1 does not have any open files.
=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.hdfs.server.na= menode.FSNamesystem.checkLease(FSNamesystem.java:3516)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.hdfs.server= .namenode.FSNamesystem.analyzeFileState(FSNamesystem.java:3313)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.hdfs.server= .namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3169)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.hdfs.server= .namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:641)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.hdfs.protoc= olPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodePr= otocolServerSideTranslatorPB.java:482)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.hdfs.protoc= ol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlocking= Method(ClientNamenodeProtocolProtos.java)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.ipc.Protobu= fRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:619)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.ipc.RPC$Ser= ver.call(RPC.java:962)

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.ipc.Server$Handler$1.ru= n(Server.java:2039)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.ipc.Server$= Handler$1.run(Server.java:2035)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at java.security.AccessControlle= r.doPrivileged(Native Method)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at javax.security.auth.Subject.d= oAs(Subject.java:422)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.security.Us= erGroupInformation.doAs(UserGroupInformation.java:1628)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.ipc.Server$= Handler.run(Server.java:2033)

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.= ipc.Client.call(Client.java:1468)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.ipc.Client.= call(Client.java:1399)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.ipc.Protobu= fRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:232)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at com.sun.proxy.$Proxy22.addBlo= ck(Unknown Source)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.hdfs.protoc= olPB.ClientNamenodeProtocolTranslatorPB.addBlock(ClientNamenodeProtocolTran= slatorPB.java:399)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at sun.reflect.GeneratedMethodAc= cessor16.invoke(Unknown Source)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at sun.reflect.DelegatingMethodA= ccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at java.lang.reflect.Method.invo= ke(Method.java:498)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.io.retry.Re= tryInvocationHandler.invokeMethod(RetryInvocationHandler.java:187)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.io.retry.Re= tryInvocationHandler.invoke(RetryInvocationHandler.java:102)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at com.sun.proxy.$Proxy23.addBlo= ck(Unknown Source)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.hdfs.DFSOut= putStream$DataStreamer.locateFollowingBlock(DFSOutputStream.java:1532)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.hdfs.DFSOut= putStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1349)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.apache.hadoop.hdfs.DFSOut= putStream$DataStreamer.run(DFSOutputStream.java:588)
16/06/08 19:13:46 ERROR TaskSetManager: Task 0 in stage 1.0 failed 1 times;= aborting job

=C2=A0

Sugge= sted solution.

In a = concurrent env, Spark should apply locks in order to prevent such operation= s. Locks are kept in Hive meta data table HIVE_LOCKS

=C2=A0

HTH

Dr Mi= ch Talebzadeh

=C2=A0
=C2=A0
=C2=A0





--94eb2c09593e463e560534cc5b34-- --94eb2c09593e463e5e0534cc5b35 Content-Type: image/png; name="image.png" Content-Disposition: inline; filename="image.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: ff0c900c8301debe_0.1 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 YII= --94eb2c09593e463e5e0534cc5b35 Content-Type: image/png; name="image.png" Content-Disposition: inline; filename="image.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: ff0c900c8301debe_0.2 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 /eN90tPXJ309vcbdFenWjPqKyL+pD7qj4ssi/3rtg8Zw7ZRTT5Op73J/z8bGh7/tcifFxTL6gsky 8i0TjWG729bJ7j+vN15SbdOdDRd96BNy8mjzxSXpek4ck90v/Eq6Du2TUSNOlni8z3jck+5U0J0W +q/dSfGWd5vP7rLn50fHe2DTH+XNvdult/O49PZ0y0gVn360lL6jQj9mSgfdCXL25R+Qk8ecJa+t XS1DBw+RERdOlTMmXWrF5K7r+cdl2KXmnR1RUArL+/z/NMqdd95pfQMAAAAAAABQ7u666y659K8b rG+VbdqIIxIbNNi4WN5++s9Q9Vd/tl9joMVWvazfPJHphV89Kd9btFD+qr5BPnD9XGtofqx77hV5 7Bdb5STplg9fFpe311wpN9z6jDz339fLv/0htaNCv89i3Tf/W+7750lyftVbrRgyrX86+dbwdIt/ +nHzvRS6o+Ju9fG6h2TaBzNfsp1u159+I3vbnzM6D3QnxajxF8voC98qw0eNlWGnJl+cvetPa2X3 RrOzQndSnD7hrUaHhl/nQl9vj3QePiC9XSekz3iPhJkNr69tMV6crTspzqudaQwL00lh050ePSfe lL7uTunp6lRxd8trv/qJNTbVW6+fLzuee0Z0v9aIcy6UkedOMEcgb/74w3vpqAAAAAAAAAAqiO6o uOxTt1rfKtsVJx8O11Hx2Najrh0Vn5/+dvm7O++VS6+82hqSX2+8vksO7HxNTj11uFw4+W3ynw9t lJ88tVW/XVqNVYukl0o/tqgvLu+aPFiunjZY3jXdPHGfrS/eWydtm35lfD7zlPNl3rVLQse18/nf yK4X18voCybJ6AsvkeGjxslJpyU7KWw7X1gruzb8Xk6fOEVGjb9IThlzlgw95VRrbHY2/OhbMv4v zeXTj3vKh2N7tlufkrqPH5OeN4/K0NNGy6i30ElRCM8+sISOCgAAAAAAAKCC6I6Kd85daH2rbJcP 068cCNFRsXrbMdeOioHQ090lsdggGWwt4Kub/iw7X91qfE539vkT5PxJ3ndUBPnzs7+VIwf2G5/1 457e9u73Gp/D6Dp2WN7cv0eGjx4rJ5022hqaSf9G//bkMWfKsBGnWUNzc+i1zUaHRyEdft18U/zI 88LfsYHs/OG/vkFHBQAAAAAAAFBBdEfFFX/3j9a3ynbZkIPhOipaXjtetI4KoNz9/j+/TkcFAAAA AAAAUEF0R8W7PvNP1rfK9o5BB0J1VAzSb+UmEAiFCQAAAAAAAAAqj9u5wkoMYcUe3/Emd1QABfLb 5V+zPgEAAAAAAACoFO+e98/Wp8pW3bdfwj36adcJOioAAAAAAAAAAEBevaNnX7iOiv9Yu52OCgAA AAAAAAAAkFd1F8TDdVTs27cvch0VY8aMsT4havSLZHi5dDSRd+GRVoVHGhcX6V9ZyO9oIb9KD3mC dJSJ8kOeeiNt/JE+6A/KT/RUap5t3769vDsq9u/fb31DlHzrW98yNkjyL3rIu/BIq8IjjYuL9K8s 5He0kF+lhzxBOspE+SFPvZE2/kgf9AflJ3oqNc9OnDhR/h0VP3v6z/LEExukrzcu8b4+6evrlR71 98MzL5Vrrqm2fo1S4twgyb9oIe/CI60KjzQuLtK/spDf0UJ+lR7yBOkoE+WHPPVG2vgjfdAflJ/o qdQ8C9tRkfwUQU+u2SDfXTFPVqyol2XL62Xp0hvl29++UVau/L1s3rzZ+hVKFfkXXeRdeKRV4ZHG xUX6VxbyO1rIr9JDniAdZaL8kKfeSBt/pA/6g/ITPeRZpkh3VPTF+6S3Ny5f/vIiGX7SUPnK3Yul u6tXDeuVjo4O61coVeRfdJF34ZFWhUcaFxfpX1nI72ghv0oPeYJ0lInyQ556I238kT7oD8pP9JBn maLdUdHbJz3dvSpDvyQH9r8pd9/9ZekyMrTH+gVKGfkXXeRdeKRV4ZHGxUX6VxbyO1rIr9JDniAd ZaL8kKfeSBt/pA/6g/ITPeRZpkh3VPT29Ul3T5/x+fQxJxt/Ozt7pMcalo34lmUyY8Yy2RJPvrLD HrZ5c+Y4L27x2LYsmyFjx45NhBnLtlhjTPGnGlLGj214KiM++zcNT7kvi/F7ZxxGmCFLf7BA/W2Q p+x44k9Jg/q+YEb6b82Qvmy21Pgb5EmdNo7pdPBatnTkXyav9HXOy45zEXmXYplHelyz4DPqb2bZ 90tbY76JOMq0nHusj9+4UhWl8miXt3h8i/kbR3xeae+5TGm/1XX9si0Dn1fRKOPJOkALl/7J9PSs XxYtckzjvU9N/529LF77FXtZ3OqnMOtfSOy73RnTOOLR88mlHghX1uwQvM2TX5k801i3F5zxGHmq 2tA/13+dvzW3YXO8c7gO5ZcnbuVUS1//MGU+XeDyZ8SVTN/C1ONmSOx704YHzT/b9beVYpmweeW/ 5rY92nz3b37Ll5jGrf3tSH+P/MncXsO3Y8s9T/3i0cPS01SvY/owM7ilc3DdZ4ti2mh++6f0dNLj KqXspG63dijPurpQdV5GWVLjsj3XY4vq/sQt/Yx5OYaZIVn/5CPdUueRzTmi5DRBx3VBSnabd6yL DontzSOOoPXX209Y0e6o6FUZ2t1rfH7ttUPG367O0ux50pk2bdUsWb93r+zbt0/27n1Qptw+LZF5 evy4G0QetMbr8KC0qEJvjDboQlF3w0ZZvH6vNF4Vs4a6mLY4MR8zPC7z/6ZJHpz7gCy5f6vxk633 L1Ezu1eaHjd/s3f9YpnmmO7xmyYav0sXm3iTtCZ+e68Yi+GYTsez8YZxoRqE5F8m9/SdK1NWzc9o /H2yNZnm5J3ITR5leU3Tf7qWfb+0jU28sfzLud/6pI9bcn9WjZCBFqXymNg+t66RVTJX/Vsla8yi aXJNe2tcOsdvzfC43DTRvW4ppEiU8QdFbqhzlONQ6T9LVk271Wh8etYvd9yRUld47VPTf3dVLBa4 X/Gqn4qNfXcm3QF+67RVMkv9JjGfji051QOe03xyXE7bPPmVybe9MOV2+fbPzN/97Nu3iyxeKjdd oL44fpesT1KHm6G88sTgUk5zLvPZ8kvfPNXj6duWHp/Y92Y5/1zXv6TLhEc6e2+P8cBt2Utw+zuZ nwa3/EnfXnV+hmyzV0yeuojHf+a6TRtCpXNa3viIXB2o+JXpfNeHUUwf1zJSZnV1Ieo8Q57O9dii uj9JTb/1MqtjjXfeGvVPIc+R+RyDZSxPY7jjOh8lm2eOdU3Z3lwErb+9/YQV7Uc/9fVIp8pAzf57 orNHZaj5uVTonZd5rHOjTFSFWIvFrpJ7VWbLqjWyuW+zrFmlxq83T17YrmrUhd76svV+qTN2gK2B B0Bept+rC4va4J5aJvNVIfrcdGtEHtkbepgTm+RfWFXyuYVT5Hb7yLlAyjHvbN5lP7e0Lbe0Sl0f a6BtS4esn1KVKPulKGrlUduqK41Zn5OZU9arasTZandIpL31vURFIv2nz5S56zvEbiqGSv8JVTLF +phvQfsVczscmLo/W+y7vUyRqgnmJz2fxsarzC8+QpXDfiK/sjP9c9a+cMsyWfLAXFl4o5WpTmn1 Sbaits/yLqfZl/l8Klg9HnLfm8/tt5TLhNt66qtivbbH6fKzEPu3HOWQn9m02SslT731Y5vOIm+i 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 YoKUDj2MGAgAAAAASUVORK5CYII= --94eb2c09593e463e5e0534cc5b35--