Apache Hudi
Copyright 2019-2020 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

--------------------------------------------------------------------------------

This product includes code from Apache Hive, which includes the following in
its NOTICE file:

  Apache Hive
  Copyright 2008-2018 The Apache Software Foundation

  This product includes software developed by The Apache Software
  Foundation (http://www.apache.org/).

  This project includes software licensed under the JSON license.

--------------------------------------------------------------------------------

This product includes code from Apache SystemML, which includes the following in
its NOTICE file:

  Apache SystemML
  Copyright [2015-2018] The Apache Software Foundation

  This product includes software developed at
  The Apache Software Foundation (http://www.apache.org/).

--------------------------------------------------------------------------------

This product includes code from Apache Spark, which includes the following in
its NOTICE file:

  Apache Spark
  Copyright 2014 and onwards The Apache Software Foundation.

  This product includes software developed at
  The Apache Software Foundation (http://www.apache.org/).


  Export Control Notice
  ---------------------

  This distribution includes cryptographic software. The country in which you currently reside may have
  restrictions on the import, possession, use, and/or re-export to another country, of encryption software.
  BEFORE using any encryption software, please check your country's laws, regulations and policies concerning
  the import, possession, or use, and re-export of encryption software, to see if this is permitted. See
  <http://www.wassenaar.org/> for more information.

  The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this
  software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software
  using or performing cryptographic functions with asymmetric algorithms. The form and manner of this Apache
  Software Foundation distribution makes it eligible for export under the License Exception ENC Technology
  Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for
  both object code and source code.

  The following provides more details on the included cryptographic software:

  This software uses Apache Commons Crypto (https://commons.apache.org/proper/commons-crypto/) to
  support authentication, and encryption and decryption of data sent across the network between
  services.


  Metrics
  Copyright 2010-2013 Coda Hale and Yammer, Inc.

  This product includes software developed by Coda Hale and Yammer, Inc.

  This product includes code derived from the JSR-166 project (ThreadLocalRandom, Striped64,
  LongAdder), which was released with the following comments:

      Written by Doug Lea with assistance from members of JCP JSR-166
      Expert Group and released to the public domain, as explained at
      http://creativecommons.org/publicdomain/zero/1.0/

--------------------------------------------------------------------------------

Portions of this software were developed at
Twitter, Inc (https://twitter.com/).

--------------------------------------------------------------------------------

This product includes software from the docker-hadoop project
 * Copyright https://github.com/big-data-europe/docker-hadoop/
 * Licensed under the MIT License;

--------------------------------------------------------------------------------

This product includes code from Apache Hadoop, which includes the following in
its NOTICE file:

  Apache Hadoop
  Copyright 2006 and onwards The Apache Software Foundation.

  This product includes software developed at
  The Apache Software Foundation (http://www.apache.org/).

  Export Control Notice
  ---------------------

  This distribution includes cryptographic software.  The country in
  which you currently reside may have restrictions on the import,
  possession, use, and/or re-export to another country, of
  encryption software.  BEFORE using any encryption software, please
  check your country's laws, regulations and policies concerning the
  import, possession, or use, and re-export of encryption software, to
  see if this is permitted.  See <http://www.wassenaar.org/> for more
  information.

  The U.S. Government Department of Commerce, Bureau of Industry and
  Security (BIS), has classified this software as Export Commodity
  Control Number (ECCN) 5D002.C.1, which includes information security
  software using or performing cryptographic functions with asymmetric
  algorithms.  The form and manner of this Apache Software Foundation
  distribution makes it eligible for export under the License Exception
  ENC Technology Software Unrestricted (TSU) exception (see the BIS
  Export Administration Regulations, Section 740.13) for both object
  code and source code.

  The following provides more details on the included cryptographic software:

  This software uses the SSL libraries from the Jetty project written
  by mortbay.org.
  Hadoop Yarn Server Web Proxy uses the BouncyCastle Java
  cryptography APIs written by the Legion of the Bouncy Castle Inc.

--------------------------------------------------------------------------------

This product includes code from Apache Cassandra, which includes the following in
its NOTICE file:

  Apache Cassandra
  Copyright 2009-2020 The Apache Software Foundation

  This product includes software developed by The Apache Software
  Foundation (http://www.apache.org/).

--------------------------------------------------------------------------------

This product includes code from Apache commons-lang, which includes the following in
its NOTICE file:

  Apache commons-lang
  Copyright 2001-2020 The Apache Software Foundation

  This product includes software developed at
  The Apache Software Foundation (http://www.apache.org/).

--------------------------------------------------------------------------------

This product includes code from StreamSets Data Collector, which includes the following in
its NOTICE file:

  StreamSets datacollector-oss
  Copyright 2018 StreamSets Inc.

  This product includes software developed at
  StreamSets (http://www.streamsets.com/).

--------------------------------------------------------------------------------

This product includes code from hilbert-curve project
 * Copyright https://github.com/davidmoten/hilbert-curve
 * Licensed under the Apache-2.0 License

--------------------------------------------------------------------------------

This product includes code from Apache Avro, which includes the following in
its NOTICE file:

  Apache Avro
  Copyright 2010-2019 The Apache Software Foundation

  This product includes software developed at
  The Apache Software Foundation (https://www.apache.org/).

  NUnit license acknowledgement:

  | Portions Copyright © 2002-2012 Charlie Poole or Copyright © 2002-2004 James
  | W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright © 2000-2002
  | Philip A. Craig

  Based upon the representations of upstream licensors, it is understood that
  portions of the mapreduce API included in the Java implementation are licensed
  from various contributors under one or more contributor license agreements to
  Odiago, Inc. and were then contributed by Odiago to Apache Avro, which has now
  made them available under the Apache 2.0 license. The original file header text
  is:

  | Licensed to Odiago, Inc. under one or more contributor license
  | agreements.  See the NOTICE file distributed with this work for
  | additional information regarding copyright ownership.  Odiago, Inc.
  | licenses this file to you under the Apache License, Version 2.0
  | (the "License"); you may not use this file except in compliance
  | with the License.  You may obtain a copy of the License at
  |
  |     https://www.apache.org/licenses/LICENSE-2.0
  |
  | Unless required by applicable law or agreed to in writing, software
  | distributed under the License is distributed on an "AS IS" BASIS,
  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  | implied.  See the License for the specific language governing
  | permissions and limitations under the License.

  The Odiago NOTICE at the time of the contribution:

  | This product includes software developed by Odiago, Inc.
  | (https://www.wibidata.com).

  Apache Ivy includes the following in its NOTICE file:

  | Apache Ivy
  | Copyright 2007-2010 The Apache Software Foundation
  |
  | This product includes software developed by
  | The Apache Software Foundation (https://www.apache.org/).
  |
  | Portions of Ivy were originally developed by
  | Jayasoft SARL (http://www.jayasoft.fr/)
  | and are licensed to the Apache Software Foundation under the
  | "Software Grant License Agreement"
  |
  | SSH and SFTP support is provided by the JCraft JSch package,
  | which is open source software, available under
  | the terms of a BSD style license.
  | The original software and related information is available
  | at http://www.jcraft.com/jsch/.

  Apache Log4Net includes the following in its NOTICE file:

  | Apache log4net
  | Copyright 2004-2015 The Apache Software Foundation
  |
  | This product includes software developed at
  | The Apache Software Foundation (https://www.apache.org/).

  csharp reflect serializers were contributed by Pitney Bowes Inc.

  | Copyright 2019 Pitney Bowes Inc.
  | Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
  | You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0.
  | Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  | See the License for the specific language governing permissions and limitations under the License.
