Return-Path: Delivered-To: apmail-avro-user-archive@www.apache.org Received: (qmail 29003 invoked from network); 12 Aug 2010 22:40:41 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 12 Aug 2010 22:40:41 -0000 Received: (qmail 63220 invoked by uid 500); 12 Aug 2010 22:40:41 -0000 Delivered-To: apmail-avro-user-archive@avro.apache.org Received: (qmail 63140 invoked by uid 500); 12 Aug 2010 22:40:40 -0000 Mailing-List: contact user-help@avro.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@avro.apache.org Delivered-To: mailing list user@avro.apache.org Received: (qmail 63132 invoked by uid 99); 12 Aug 2010 22:40:40 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 12 Aug 2010 22:40:40 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=RCVD_IN_DNSWL_NONE,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: local policy) Received: from [208.97.132.47] (HELO homiemail-a62.g.dreamhost.com) (208.97.132.47) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 12 Aug 2010 22:40:32 +0000 Received: from homiemail-a62.g.dreamhost.com (localhost [127.0.0.1]) by homiemail-a62.g.dreamhost.com (Postfix) with ESMTP id CA08963406F; Thu, 12 Aug 2010 15:40:10 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=darose.net; h=message-id:date :from:mime-version:to:subject:content-type: content-transfer-encoding; q=dns; s=darose.net; b=lF5MPwWASWnykU 9bP85ZGgc6uOVEqlcAjtcNDo1ML4VlVF74+9y6rUJzwe4ChxBZPMUbFReIicyv78 LnWVphskRcokk4wr7N9rIEsI5+nXfgxN8QhKRZpxtbv6mWZFFmuc5673wxD7MCv9 oMQgEVffr+NMXaqU0Crf0NqZeaqf4= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=darose.net; h=message-id :date:from:mime-version:to:subject:content-type: content-transfer-encoding; s=darose.net; bh=TS8zEDYxys2MgTRnzm4/ gZ3ATdQ=; b=a7/MAC8M7bPTc32Vu0eMh+4s0u1UhHjqcgCWH5BkeI/09/NPn+9T vkjgsHYtrwEWuR7O029ArWoKkd1nzBaxMdDaELoHR5D8i0R/kMsBzUOPb7ccbm/h 3Lyty8ftMW90oJkcFh6/OEoRgSMh0bp7iobVP1jd2ozMLilIUmNVDfw= Received: from darsys12 (cpe-66-108-142-190.nyc.res.rr.com [66.108.142.190]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: darose@darose.net) by homiemail-a62.g.dreamhost.com (Postfix) with ESMTPSA id ADF9D634064; Thu, 12 Aug 2010 15:40:10 -0700 (PDT) Received: from [10.1.0.2] by darsys12 with esmtp (Exim 4.72) (envelope-from ) id 1OjgRV-00047R-9n; Thu, 12 Aug 2010 18:40:09 -0400 Message-ID: <4C647857.10001@darose.net> Date: Thu, 12 Aug 2010 18:40:23 -0400 From: David Rosenstrauch User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8) Gecko/20100806 Lanikai/3.1.2 MIME-Version: 1.0 To: mapreduce-user@hadoop.apache.org, user@avro.apache.org Subject: How to work around MAPREDUCE-1700 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org Anyone have any ideas how I might be able to work around https://issues.apache.org/jira/browse/MAPREDUCE-1700 ? It's quite a thorny issue! I have a M/R job that's using Avro (v1.3.3). Avro, in turn, has a dependency on Jackson (of which I'm using v1.5.4). I'm able to add the jars to the distributed cache fine, and my Mapper starts to run and load Avro ... and then blammo: "Error: org.codehaus.jackson.JsonFactory.enable(Lorg/codehaus/jackson/JsonParser$Feature;)Lorg/codehaus/jackson/JsonFactory;" The problem is that there's already an older (and obviously incompatible) version of Jackson (v1.0.1) that's already included in the Hadoop distribution. And since that appears earlier on the classpath than my Jackson jars, I get the error. There doesn't seem to be any elegant solution to this. I can't downgrade to an earlier version of Avro, as my code relies on features in the newer version. And there doesn't seem to be any way configuration-wise to solve this either (i.e., tell Hadoop to use the newer Jackson jars for my M/R job, or to add those jars earlier on the classpath). Near as I can tell, the only solutions involve doing a hack on each of my slave nodes. I.e., either: a) removing the existing jackson jars on each slave. (Since I have no need for the Hadoop feature that requires that Jackson.) b) putting my newer jackson jars onto each slave in a place where it will be loaded before the older one (e.g., /usr/lib/hadoop-0.20/lib/aaaaa_jackson-core-asl-1.5.4.jar) Either of these options is a bit of a hack - and error prone as well, since my job tasks will fail on any node that doesn't have this hack applied. Is there any cleaner way to resolve this issue that I'm not seeing? Thanks, DR