We are starting to test it internally in our cluster. This is a broader hadoop issue. Note, Oracle's last public (free) release of a Java 6 JRE will be towards the end of this year. After that, even security updates will ONLY be available in a Java 7 JRE.
On 4/16/12 10:28 AM, "Dmitriy Ryaboy" <dvrya...@gmail.com> wrote: >Last time I tried to run a Java 7 jar on a java 6 jvm, things blew up. >This suggests to me that before Pig can use Java 7, Hadoop has to be >able to (since hadoop spins out the jvm process that runs the pig >map/reduce jobs). Do you know if Hadoop can run on Java 7? > >D > >On Mon, Apr 16, 2012 at 10:18 AM, Scott Carey <sc...@richrelevance.com> >wrote: >> >> >> On 4/13/12 1:30 AM, "Gianmarco De Francisci Morales" <g...@apache.org> >> wrote: >> >>>Sure, >>>probably Java7 is more mature than Pig. >>>However as far as I know it is a pain to install on Mac. >> >> Yes, you have to install using the developer preview, but it is >>available >> from the same place all other JRE's from Oracle are. [1] >> >> 7u4 should be out in a few weeks [2], which will include a Mac OSX >>version >> (Unfortunately only for Lion, and not Snow Leopard). >> >> Oracle's official stance is that JRE 6 can go EOL 6 months after Java 7 >> is widely supported on the mac. They will likely wait a couple months >> more than that. However, that still puts JRE 6's end this year. >> >> [1] http://www.oracle.com/technetwork/java/javase/downloads/index.html >> [2] http://jdk7.java.net/download.html (build b20, as of April 12, 2012) >> >>>This is just one small example of not mature enough. >> >> Availability on Mac is probably the biggest example in my opinion. What >> else is there? >> >> Most of the risky features in Java 7's JVM are already back-ported to >>Java >> 6. This leaves the new APIs and features as the biggest risks, but most >> of these should reduce risk (try-with-resources, much better file system >> API, better exception handling). This leaves mostly MethodHandle and >> invokevirtual as the new features that are risky -- these are being >> heavily tested and used by others however (e.g. JRuby). >> >>>I am under the impression that Java7 not yet mainstream, correct me if I >>>am >>>wrong. >> >> What is the definition of mainstream in this situation? Why does it >> matter? I am struggling to imagine a concrete definition of mainstream >> that would be useful in this context. >> >> Other than fear of new things and a lack of a corporate backed JVM on >>Mac, >> we have the real issue that there are significant resources required to >> test such a change in Pig and its related execution and development >> environments. However, this issue does not go away -- Java 6 can't be >>the >> only supported flavor forever. Some day in the not too distant future, a >> Java 7 JRE/JDK will be the default and preferred JVM in Pig's ecosystem. >> >> It would be nice if high value features that could take advantage of >>Java >> 7 features started development early enough to be available at about the >> time Java 7 was common in the ecosystem. Waiting until Java 7 is >> mainstream to start such features means adding a 12 month delay into the >> process. >> >>> >>>I am fine with having optional performance improvements enabled by >>>Java7. >>>+1 >>>I am not fine with having a dependency on Java7 for users. -1 >>>I am not comfortable with having a dependency on Java7 for pig >>>developers. >>>I am afraid it will put off new contributors. -0 >> >> How many potential contributors are interested in being able to try new >> technologies, versus those only wanting to use what they currently know? >> >>> >>>Cheers, >>>-- >>>Gianmarco >>> >>> >>> >>>On Fri, Apr 13, 2012 at 01:10, Scott Carey <sc...@richrelevance.com> >>>wrote: >>> >>>> >>>> On 4/12/12 12:02 PM, "Gianmarco De Francisci Morales" >>>><g...@apache.org> >>>> wrote: >>>> >>>> >My personal opinion is Yes, if there is a compelling reason, but not >>>>now. >>>> >Still not mature enough. >>>> >>>> What is the definition of "mature enough"? >>>> >>>> I'd argue that out of Java 7, Hadoop, Avro, and Pig... Java 7 is the >>>>most >>>> mature. >>>> >>>> Granted, I also think the whole concept of maturity is subjective and >>>>not >>>> conducive to good discussion. >>>> >>>> >>>> What objective characteristics are required of Java 7 to support it? >>>>When >>>> approximately would that likely occur? Subtract 6 months from that (a >>>> typical Pig dev cycle), how soon is that? >>>> >>>> There is a big difference between _requiring_ Java 7 and having an >>>> optional feature built with Java 7 into its own jar that requires a >>>>Java 7 >>>> cluster to use. Some performance features might fall into that >>>>category. >>>> >>>> > >>>> >Cheers, >>>> >-- >>>> >Gianmarco >>>> > >>>> > >>>> > >>>> >On Thu, Apr 12, 2012 at 20:55, Jonathan Coveney <jcove...@gmail.com> >>>> >wrote: >>>> > >>>> >> Scott Carey brought Java 7 up in PIG-2643, and I think it's >>>>something we >>>> >> need to think about. When do we want to start taking advantage of >>>>new >>>> >> features that may not exist on Java 6? Do we ever? >>>> >> >>>> >> 2012/4/12 Scott Carey (Commented) (JIRA) <j...@apache.org> >>>> >> >>>> >> > >>>> >> > [ >>>> >> > >>>> >> >>>> >> >>>> >>>>https://issues.apache.org/jira/browse/PIG-2643?page=com.atlassian.jira. >>>>pl >>>> >>>>>>ugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13252706 >>>>>>#c >>>>>>om >>>> >>ment-13252706 >>>> >> ] >>>> >> > >>>> >> > Scott Carey commented on PIG-2643: >>>> >> > ---------------------------------- >>>> >> > >>>> >> > Another thought for this sort of thing: >>>> >> > >>>> >> > This might be achievable without bytecode generation and good >>>> >>performance >>>> >> > with Java 7 MethodHandles [1][2]. Of course, that would require >>>>Java >>>> >>7, >>>> >> > but Java 6 support ends later year [3], about the time Pig 0.11 >>>>would >>>> >>be >>>> >> > out anyway. >>>> >> > >>>> >> > >>>> >> > [1] >>>> >> > >>>> >> >>>> >> >>>> >>>>http://docs.oracle.com/javase/7/docs/api/java/lang/invoke/MethodHandle. >>>>ht >>>> >>ml >>>> >> > [2] >>>> >> > >>>> >> >>>> >> >>>> >>>>http://stackoverflow.com/questions/8823793/methodhandle-what-is-it-all- >>>>ab >>>> >>out >>>> >> > [3] https://blogs.oracle.com/henrik/entry/updated_java_6_eol_date >>>> >> > >>>> >> > > Use bytecode generation to make a performance replacement for >>>> >> > InvokeForLong, InvokeForString, etc >>>> >> > > >>>> >> > >>>> >> >>>> >>>>>>--------------------------------------------------------------------- >>>>>>-- >>>>>>-- >>>> >>------------------------ >>>> >> > > >>>> >> > > Key: PIG-2643 >>>> >> > > URL: >>>>https://issues.apache.org/jira/browse/PIG-2643 >>>> >> > > Project: Pig >>>> >> > > Issue Type: Improvement >>>> >> > > Reporter: Jonathan Coveney >>>> >> > > Assignee: Jonathan Coveney >>>> >> > > Priority: Minor >>>> >> > > Labels: codegen >>>> >> > > Fix For: 0.11, 0.10.1 >>>> >> > > >>>> >> > > Attachments: PIG-2643-0.patch >>>> >> > > >>>> >> > > >>>> >> > > This is basically to cut my teeth for much more ambitious code >>>> >> > generation down the line, but I think it could be performance and >>>> >>useful. >>>> >> > > the new syntax is: >>>> >> > > {code}a = load 'thing' as (x:chararray); >>>> >> > > define concat >>>> >>InvokerGenerator('java.lang.String','concat','String'); >>>> >> > > define valueOf >>>> >> InvokerGenerator('java.lang.Integer','valueOf','String'); >>>> >> > > define valueOfRadix >>>> >> > InvokerGenerator('java.lang.Integer','valueOf','String,int'); >>>> >> > > b = foreach a generate x, valueOf(x) as vOf; >>>> >> > > c = foreach b generate x, vOf, valueOfRadix(x, 16) as vOfR; >>>> >> > > d = foreach c generate x, vOf, vOfR, concat(concat(x, >>>> >>(chararray)vOf), >>>> >> > (chararray)vOfR); >>>> >> > > dump d; >>>> >> > > {code} >>>> >> > > There are some differences between this version and Dmitriy's >>>> >> > implementation: >>>> >> > > - it is no longer necessary to declare whether the method is >>>>static >>>> >>or >>>> >> > not. This is gleaned via reflection. >>>> >> > > - as per the above, it is no longer necessary to make the first >>>> >> argument >>>> >> > be the type of the object to invoke the method on. If it is not a >>>> >>static >>>> >> > method, then the type will implicitly be the type you need. So in >>>>the >>>> >> case >>>> >> > of concat, it would need to be passed a tuple of two inputs: one >>>>for >>>> >>the >>>> >> > method to be called against (as it is not static), and then the >>>> >>'string' >>>> >> > that was specified. In the case of valueOf, because it IS static, >>>>then >>>> >> the >>>> >> > 'String' is the only value. >>>> >> > > - The arguments are type sensitive. Integer means the Object >>>> >>Integer, >>>> >> > whereas int (or long, or float, or boolean, etc) refer to the >>>> >>primitive. >>>> >> > This is necessary to properly reflect the arguments. Values >>>>passed >>>>in >>>> >> WILL, >>>> >> > however, be properly unboxed as necessary. >>>> >> > > - The return type will be reflected. >>>> >> > > This uses the ASM API to generate the bytecode, and then a >>>>custom >>>> >> > classloader to load it in. I will add caching of the generated >>>>code >>>> >>based >>>> >> > on the input strings, etc, but I wanted to get eyes and opinions >>>>on >>>> >> this. I >>>> >> > also need to benchmark, but it should be native speed (excluding >>>>a >>>> >>little >>>> >> > startup time to make the bytecode, but ASM is really fast). >>>> >> > > Another nice benefit is that this bypasses the need for the >>>>JDK, >>>> >>though >>>> >> > it adds a dependency on ASM (which is a super tiny dependency). >>>> >> > > Patch incoming. >>>> >> > >>>> >> > -- >>>> >> > This message is automatically generated by JIRA. >>>> >> > If you think it was sent incorrectly, please contact your JIRA >>>> >> > administrators: >>>> >> > >>>> >>>>>>https://issues.apache.org/jira/secure/ContactAdministrators!default.j >>>>>>sp >>>>>>a >>>> >> > For more information on JIRA, see: >>>> >> http://www.atlassian.com/software/jira >>>> >> > >>>> >> > >>>> >> > >>>> >> >>>> >>