Hello! For a simple, silent log4j, I use: $ cat /tmp/log4j.properties log4j.rootLogger=off
I didn't find anything currently in the avro-tools that uses both reader and writer schemas while deserializing data... It should be a pretty easy feature to add as an option to the DataFileReadTool (a.k.a. tojson)! You are correct about running ./build.sh dist in the java directory -- it fails with JDK 11 (likely fixable: https://issues.apache.org/jira/browse/MJAVADOC-562). You should probably do a simple mvn clean install instead and find the jar in lang/java/tools/target/avro-tools-1.10.0-SNAPSHOT.jar. That should work with JDK11 without any problem (well-tested in the build). Best regards, Ryan On Thu, Jan 16, 2020 at 5:49 PM roger peppe <rogpe...@gmail.com> wrote: > > Update: I tried running `build.sh dist` in `lang/java` and it failed (at > least, it looks like a failure message) after downloading a load of Maven > deps with the following errors: > https://gist.github.com/rogpeppe/df05d993254dc5082253a5ef5027e965 > > Any hints on what I should do to build the avro-tools jar? > > cheers, > rog. > > On Thu, 16 Jan 2020 at 16:45, roger peppe <rogpe...@gmail.com> wrote: >> >> >> On Thu, 16 Jan 2020 at 13:57, Ryan Skraba <r...@skraba.com> wrote: >>> >>> Hello! Is it because you are using brew to install avro-tools? I'm >>> not entirely familiar with how it packages the command, but using a >>> direct bash-like solution instead might solve this problem of mixing >>> stdout and stderr. This could be the simplest (and right) solution >>> for piping. >> >> >> No, I downloaded the jar and am directly running it with "java -jar >> ~/other/avro-tools-1.9.1.jar". >> I'm using Ubuntu Linux 18.04 FWIW - the binary comes from Debian package >> openjdk-11-jre-headless. >> >> I'm going to try compiling avro-tools myself to investigate but I'm a total >> Java ignoramus - wish me luck! >> >>> >>> alias avrotoolx='java -jar >>> ~/.m2/repository/org/apache/avro/avro-tools/1.9.1/avro-tools-1.9.1.jar' >>> avrotoolx tojson x.out 2> /dev/null >>> >>> (As Fokko mentioned, the 2> /dev/null isn't even necessary -- the >>> warnings and logs should not be piped along with the normal content.) >>> >>> Otherwise, IIRC, there is no way to disable the first illegal >>> reflective access warning when running in Java 9+, but you can "fix" >>> these module errors, and deactivate the NativeCodeLoader logs with an >>> explicit log4j.properties: >>> >>> java -Dlog4j.configuration=file:///tmp/log4j.properties --add-opens >>> java.security.jgss/sun.security.krb5=ALL-UNNAMED -jar >>> ~/.m2/repository/org/apache/avro/avro-tools/1.9.1/avro-tools-1.9.1.jar >>> tojson x.out >> >> >> Thanks for that suggestion! I'm afraid I'm not familiar with log4j >> properties files though. What do I need to put in /tmp/log4j.properties to >> make this work? >> >>> None of that is particularly satisfactory, but it could be a >>> workaround for your immediate use. >> >> >> Yeah, not ideal, because if something goes wrong, stdout will be corrupted, >> but at least some noise should go away :) >> >>> I'd also like to see a more unified experience with the CLI tool for >>> documentation and usage. The current state requires a bit of Avro >>> expertise to use, but it has some functions that would be pretty >>> useful for a user working with Avro data. I raised >>> https://issues.apache.org/jira/browse/AVRO-2688 as an improvement. >>> >>> In my opinion, a schema compatibility tool would be a useful and >>> welcome feature! >> >> >> That would indeed be nice, but in the meantime, is there really nothing in >> the avro-tools commands that uses a chosen schema to read a data file >> written with some other schema? That would give me what I'm after currently. >> >> Thanks again for the helpful response. >> >> cheers, >> rog. >> >>> >>> Best regards, Ryan >>> >>> >>> >>> On Thu, Jan 16, 2020 at 12:25 PM roger peppe <rogpe...@gmail.com> wrote: >>> > >>> > Hi Fokko, >>> > >>> > Thanks for your swift response! >>> > >>> > Stdout and stderr definitely seem to be merged on this platform at least. >>> > Here's a sample: >>> > >>> > % avrotool random --count 1 --schema '"int"' x.out >>> > % avrotool tojson x.out > x.json >>> > % cat x.json >>> > 125140891 >>> > WARNING: An illegal reflective access operation has occurred >>> > WARNING: Illegal reflective access by >>> > org.apache.hadoop.security.authentication.util.KerberosUtil >>> > (file:/home/rog/other/avro-tools-1.9.1.jar) to method >>> > sun.security.krb5.Config.getInstance() >>> > WARNING: Please consider reporting this to the maintainers of >>> > org.apache.hadoop.security.authentication.util.KerberosUtil >>> > WARNING: Use --illegal-access=warn to enable warnings of further illegal >>> > reflective access operations >>> > WARNING: All illegal access operations will be denied in a future release >>> > 20/01/16 11:00:37 WARN util.NativeCodeLoader: Unable to load >>> > native-hadoop library for your platform... using builtin-java classes >>> > where applicable >>> > % >>> > >>> > I've just verified that it's not a problem with the java executable >>> > itself (I ran a program that printed to System.err and the text correctly >>> > goes to the standard error). >>> > >>> > > Regarding the documentation, the CLI itself contains info on all the >>> > > available commands. Also, there are excellent online resources: >>> > > https://www.michael-noll.com/blog/2013/03/17/reading-and-writing-avro-files-from-the-command-line/ >>> > > Is there anything specific that you're missing? >>> > >>> > There's the single line summary produced for each command by running >>> > "avro-tools" with no arguments, but that's not as much info as I'd >>> > ideally like. For example, it often doesn't say what file format is being >>> > written or read. For some commands, the purpose is not very clear. >>> > >>> > For example the description of the recodec command is "Alters the codec >>> > of a data file". It doesn't describe how it alters it or how one might >>> > configure the alteration parameters. I managed to get some usage help by >>> > passing it more than two parameters (specifying "--help" gives an >>> > exception), but that doesn't provide much more info: >>> > >>> > % avro-tools recodec a b c >>> > Expected at most an input file and output file. >>> > Option Description >>> > ------ ----------- >>> > --codec <String> Compression codec (default: null) >>> > --level <Integer> Compression level (only applies to deflate and xz) >>> > (default: >>> > -1) >>> > >>> > For the record, I'm wondering it might be possible to get avrotool to >>> > tell me if one schema is compatible with another so that I can check >>> > hypotheses about schema-checking in practice without having to write Java >>> > code. >>> > >>> > cheers, >>> > rog. >>> > >>> > >>> > On Thu, 16 Jan 2020 at 10:30, Driesprong, Fokko <fo...@driesprong.frl> >>> > wrote: >>> >> >>> >> Hi Rog, >>> >> >>> >> This is actually a warning produced by the Hadoop library, that we're >>> >> using. Please note that htis isn't part of the stdout: >>> >> >>> >> $ find /tmp/tmp >>> >> /tmp/tmp >>> >> /tmp/tmp/._SUCCESS.crc >>> >> /tmp/tmp/part-00000-9300fba6-ccdd-4ecc-97cb-0c3ae3631be5-c000.avro >>> >> /tmp/tmp/.part-00000-9300fba6-ccdd-4ecc-97cb-0c3ae3631be5-c000.avro.crc >>> >> /tmp/tmp/_SUCCESS >>> >> >>> >> $ avro-tools tojson >>> >> /tmp/tmp/part-00000-9300fba6-ccdd-4ecc-97cb-0c3ae3631be5-c000.avro >>> >> 20/01/16 11:26:10 WARN util.NativeCodeLoader: Unable to load >>> >> native-hadoop library for your platform... using builtin-java classes >>> >> where applicable >>> >> {"line_of_text":{"string":"Hello"}} >>> >> {"line_of_text":{"string":"World"}} >>> >> >>> >> $ avro-tools tojson >>> >> /tmp/tmp/part-00000-9300fba6-ccdd-4ecc-97cb-0c3ae3631be5-c000.avro > >>> >> /tmp/tmp/data.json >>> >> 20/01/16 11:26:20 WARN util.NativeCodeLoader: Unable to load >>> >> native-hadoop library for your platform... using builtin-java classes >>> >> where applicable >>> >> >>> >> $ cat /tmp/tmp/data.json >>> >> {"line_of_text":{"string":"Hello"}} >>> >> {"line_of_text":{"string":"World"}} >>> >> >>> >> So when you pipe the data, it doesn't include the warnings. >>> >> >>> >> Regarding the documentation, the CLI itself contains info on all the >>> >> available commands. Also, there are excellent online resources: >>> >> https://www.michael-noll.com/blog/2013/03/17/reading-and-writing-avro-files-from-the-command-line/ >>> >> Is there anything specific that you're missing? >>> >> >>> >> Hope this helps. >>> >> >>> >> Cheers, Fokko >>> >> >>> >> Op do 16 jan. 2020 om 09:30 schreef roger peppe <rogpe...@gmail.com>: >>> >>> >>> >>> Hi, >>> >>> >>> >>> I've been trying to use avro-tools to verify Avro implementations, and >>> >>> I've come across an issue. Perhaps someone here might be able to help? >>> >>> >>> >>> When I run avro-tools with some subcommands, it prints a bunch of >>> >>> warnings (see below) to the standard output. Does anyone know a way to >>> >>> disable this? I'm using openjdk 11.0.5 under Ubuntu 18.04 and >>> >>> avro-tools 1.9.1. >>> >>> >>> >>> The warnings are somewhat annoying because they can corrupt output of >>> >>> tools that print to the standard output, such as recodec. >>> >>> >>> >>> Aside: is there any documentation for the commands in avro-tools? Some >>> >>> seem to have some command-line help (though unfortunately there doesn't >>> >>> seem to be a standard way of showing it), but often that help often >>> >>> doesn't describe what the command actually does. >>> >>> >>> >>> Here's the output that I see: >>> >>> >>> >>> WARNING: An illegal reflective access operation has occurred >>> >>> WARNING: Illegal reflective access by >>> >>> org.apache.hadoop.security.authentication.util.KerberosUtil >>> >>> (file:/home/rog/other/avro-tools-1.9.1.jar) to method >>> >>> sun.security.krb5.Config.getInstance() >>> >>> WARNING: Please consider reporting this to the maintainers of >>> >>> org.apache.hadoop.security.authentication.util.KerberosUtil >>> >>> WARNING: Use --illegal-access=warn to enable warnings of further >>> >>> illegal reflective access operations >>> >>> WARNING: All illegal access operations will be denied in a future >>> >>> release >>> >>> 20/01/16 08:12:39 WARN util.NativeCodeLoader: Unable to load >>> >>> native-hadoop library for your platform... using builtin-java classes >>> >>> where applicable >>> >>> >>> >>> cheers, >>> >>> rog. >>> >>>