384 karma · joined January 10, 2012
Have worked on several distributed SQL engines, Apache Drill PMC member, ex-Dremio, experience with Apache Spark.
Hobby interest in video games: Running Scratch games on Arduino - https://www.youtube.com/watch?v=VNvBJx95JAQ
N64 Homebrew - https://n64squid.com/homebrew/roms/tiny-nightmare/
Arduboy game - https://community.arduboy.com/t/old-miner-clone-of-the-flash-game-gold-miner/12014
Wiring your own DIY game console, based on Arduboy schematics - https://www.youtube.com/watch?v=_mCLWn3djL4
https://github.com/learningequality/ka-lite
https://github.com/learningequality/kolibri
I'm not associated with either, I just heard about them recently and was similarly excited by the potential.
I have seen a number of tools that are similar, one way I wanted to set this project apart was with a simple interface that even non-technical teachers could use. I decided early on I wanted the application to be latex-free. Creating the equation renderer from scratch was a bit of overkill (the engineer mindset "oh it'll be easier to write myself"). This is something I hope fix and instead plug in a more complete and better tested alternative like JLatexMath, with actual editing capabilities. Pulling the editor out of this application looks promising http://mirai.sourceforge.net/.
If you look at Khan-Exercises they have actually moved away from automatic generation (see their Perseus project), because it was too hard to write the kinds of problems they wanted. Also internationalization when the content of the questions was dynamic caused them more hassle than it was worth. I am considering de-emphasizing content creation and focusing on the student solution interface, as I believe it is the more novel feature of the system. But for now I wanted to get some teachers using it and find out what they found useful.
https://github.com/redox-os/redox/blob/master/kernel/fs/url....
On your question of how typical a lack of system-internal documentation is in systems projects, the answer from my experience is unfortunately more common than it should be. There are a bunch of usage and design patterns that cannot be expressed regardless of the language you are using. I know very little about Rust, but I work mostly in Java, which is safer than many other languages (less flexible than interpreted or dynamic languages, less dangerous than C/C++). Even java, which has interfaces and strict typing can save you some of the more mundane unit tests and input validation code, has a bunch of design patterns on top of the core language. Projects could serve themselves well to document their code well to allow new contributors to look at any of the code and reasonably modify it to fix a bug or add a feature.
I don't know as much about the internals of Avro, but I know it is a bit different from Parquet, in that it can be used to serialize and deserialize smaller amounts of data. It is used to store large datasets in files, although it will in most cases be less space efficient than Parquet. It has also been used as a way of embedding complex structures into other systems (similarly to how JSON can be embedded in a database), or for serializing individual structures between systems. The binary representation of Avro needs to be read into a system-specific format like a C/C++ struct/object, Java object, etc. for consumption.
In contrast, Arrow is designed to represent a list of objects/records efficiently. It is designed to allow for a chunk of memory to handed to a lightweight language-specific container that can immediately reference into the memory to grab a specific value, without reading each of the records into it's own individual object or structure.
Here is a page with the clone URLs: https://git.apache.org/
The Github mirror is now live, you can see it here: https://github.com/apache/arrow
This isn't actually true. The java implementation has been complete and used in Apache Drill, a distributed SQL engine, for the past few years. While we anticipate a few small changes to make sure the standard works well across new systems, this is by no means an announcement without tested code.
https://git-wip-us.apache.org/repos/asf?p=arrow.git;a=commit...
To work with all of the non-relational stores Drill supports complex types like maps and lists. The syntax for working with this complex data is the same javascript, i.e. a.b.c[3], so this is a compliant extension of SQL, but is non-standard.
If you are looking for an open source technology to meet this need, Apache Drill is a distributed SQL engine that can talk to multiple datasources and make them available in a single namespace. Joins across sources are supported and can actually perform well when you use enough nodes for your data volume.
Because Drill exposes ODBC and JDBC interfaces, it can very easily be used with BI tools to expose all kinds of data to analysts.
The architecture is fully pluggable so anyone can write a connector to a new datastore and just include it on the classpath when starting the cluster. In the current 1.2 release Drill can connect to any database that exposes JDBC, like MySQL, Postgres, Oracle, as well as a number of non-relational datastores like HDFS, MongoDB and HBase.
Traditionally Hive has been focused on batch processing, it started as a SQL query engine built on top of map-reduce. Unfortunately many operations in the SQL model are not well suited for map-reduce. This is a problem that is being addressed by the Hive team with their vectorization/tez work, which is a completely different execution engine from map reduce. Around the time that this work began a number of new projects were trying to solve similar problems, making queries more interactive, providing more flexibility and greater coverage of the SQL language (Hive has supported a healthy subset of the SQL language, but not full support). It is true that this new Hive engine is solving some similar problems as Drill, as is the case for Impala, Facebook's Presto engine and a few other projects.
Drill is focused on providing standard SQL support, instead of the SQL-like HiveQL language. This allows it to be used to hook up to the analytical tools and ecosystem that has been developing around the SQL language for the past few decades.
Drill also has no requirement to define schema ahead of time when querying. This is best illustrated by the JSON read support, you can write a query against a bare file, and Drill will discover the schema as it reads. This is the case for simple files stored on a local or distributed file system or even for document stores like MongoDB.
While there will certainly be cases where schema will need to be known ahead of time, many users of Hadoop and semi-structured datastores are having a hard time with the overhead of trying to fit a wide variety of datasets into a traditional DB modnel, which is what the Hive metastore provides. In cases where the number of schemas in your data is manageable, this can give consumers of the data useful meta-data and structutre. For this reason, Drill has support for reading from Hive tables for these types of use cases.
However while this model has its place, our discussions with current Hadoop users has validated the design of Drill. Analysts want to be able to gain insights from data in Hadoop, and there are cases where the overhead of managing this data like a traditional DB is too resource intensive. Drill enables these types of users to explore raw semi-structured data as it enters the Hadoop cluster, instead of waiting for IT driven ETL.
https://github.com/Raynos/mercury/blob/master/dist/mercury.j...