Apache Lens
=====

Apache Lens is a unified Analytics Platform. Lens aims to cut the Data Analytics silos by providing a single view of data
across multiple tiered data stores and optimal execution environment for the analytical query.

This distribution is a convenient binary distribution for users to try out server and client packages of Apache Lens.

Detailed install and run steps available at http://lens.apache.org/lenshome/install-and-run.html and
docker setup details available at http://lens.apache.org/lenshome/pseudo-distributed-setup.html

Detailed documentation for the project is available at https://lens.apache.org

Here are quick start steps :

Before starting the server, you need to set HADOOP_HOME and HIVE_HOME environment variables. These should point to
the Hadoop and Hive installation directories. Lens depends on apache Hive 2.1+.

Installing Hive :
$ # Download hive binary from http://apache.org/download.cgi
$ # extract
$ export HIVE_HOME=<extracted_directory>

Server packaging is server/ folder.
$ cd server

Starting lens server :
bin/lens-ctl start

Lens server also comes with simple UI service which can be used to browse catalog and submit queries. Once the server
starts up, you can open the UI service on http://<serverhost>:19999/index.html and browse.

Client distribution is in client/ folder.

$ cd client

Running examples :
$ bin/run-examples sample-metastore
$ bin/run-examples populate-metastore
$ bin/run-examples runqueries

Starting lens cli :
bin/lens-cli.sh

Stopping Lens server :
bin/lens-ctl stop

------

LICENSE files included in the distribution are to be in compliance with bundled dependent jars. All the jars
bundled are in compliance with Apache license. Most of the jars are available in dual license of which at least
one license is in compliance with Apache license. The license of all the bundled jars are summarized at
https://cwiki.apache.org/confluence/display/LENS/Licensing+in+Apache+Lens

NOTE:
Binary distribution of the release does not include dependency org.acplt:oncrpc:jar:1.0.7, as its licensing is
not in compliance with Apache licensing. It would be required for ganglia metrics reporting. If user is
interested in ganglia metrics reporting, the jar needs to be downloaded and used.

