Apache Drill Embedded And Distributed System - apache-drill

I am new in Apache Drill. I have gone through the Apache Drill official site and their documentation, but couldn't understand when to use Distribute system and when to use Embedded System.
I want to apply Drill in live project.So please give some advice which one to use (Embedded or Distributed) and how ?
Thanks in advance.

Embedded Mode: This requires less configuration & it is preferred for testing purpose.
As per drill docs:
Drill in embedded mode installs Drill locally on your machine. Embedded mode is a quick way to install and try Drill without having to perform any configuration tasks. A ZooKeeper installation is not required. Installing Drill in embedded mode configures the local Drillbit service to start automatically when you launch the Drill shell.
Distributed Mode: In this mode, drill runs on one or more nodes in a clustered environment. Running a ZooKeeper quorum is required.
As you asked, for live project you should use distributed mode. If you are using any hadoop cluster, you can install Drill on the same cluster. You need to install Drill on all the nodes. Check docs for more details.
Edit:
As you are new to Drill, for POC purpose you should use embedded mode.
Download Drill.
Start Drill with command bin/drill-embedded (for linux).
For windows check docs.
Add plugin through web UI
Start Querying.

Related

Portable MongoDB and MySQL/PostgreSQL binaries

I'm currently developing a Python application and I would like to know if there are any ways to pack MongoDB and MySQL (or Postgresql) into the application. By packing I mean taking those application binaries and distribute them with the application files.
For example, Metasploit PRO has some applications like nginx, postgresql, java, ruby, etc... under /opt/metasploit (they come with the application setup), and I would like to know if that could be done with any Linux application. And if so, how could I "choose" what binaries are needed? Would they work for any Debian distro? Can any application follow that procedure? Could it be done with MySQL and MongoDB?
P.D: I would like to do this to distribute one unique application instead of having to "obligate" the user to setup the databases independently, and for pure curiosity.
Thank you very much in advance!
MongoDB already distributes its binaries as standalone binaries in the sense that everything needed for the database (or shell tools) to run is included in the respective binary (mongo/mongos/mongod).
However, these binaries are OS (Linux distribution)-specific. Meaning, for example, they dynamically link against libssl and libcurl and you need to have the right versions of those libraries on the host system. So, for example, a MongoDB binary for Ubuntu 14.04 is likely to not work on Ubuntu 16.04.
As far as I know MongoDB does not support building for "generic linux". Only specific OSes like Ubuntu 16.04 are supported.
With that said, you could possibly build a "portable" MongoDB yourself if you accept some limitations, since its source code is available:
You need to figure out how to build MongoDB on some linux distribution that gives you the baseline glibc that would be compatible with all of your targets.
You may have to forego functionality like TLS connections, or figure out how to link against openssl statically (probably non-trivial).
This would be easier with older MongoDB versions (4.0, 3.6) since they have fewer system dependencies.
I think you can pack the required services and your application as Docker image or Virtual Machine box.
As my experience, I used to package the MongoDB and other Linux CLI tools with my NodeJS web application into a VM box using Vagrant. Or you can use Docker if you prefer container-based application.
If you use Vagrant, the provisioning feature may help you to setup the database before running the application. Check https://www.vagrantup.com/docs/provisioning

Windows Service installation on Docker Container

I am trying to port one of our Tomcat based Windows application to Windows Nano Server Container. The installation process includes two Windows Service installations - an ActiveMQ service and another Tomcat Service. This is achieved using two batch files provided with the product. In addition to installing the service, they also pass several arguments pertaining to JVM. Now the issue I am facing is I am not able to get these services installed on a Nano Server. The same Dockerfile works perfect and installs the product on Windows Server Core Container.
Observation: The services which get installed through batch files are dependent on two system components - Ancillary Function Driver for Winsock (Service name: afd) and TCP/IP Protocol Driver (Service Name: tcpip). This is something which I discovered on a VM where the product was installed when checking the service properties. I see that they are absent in a Nano Server Container but are present in Windows Server Core container. Could that be a reason? If yes, is there any way to get those services running on Nano Server?
I am at a loss on how to troubleshoot this issue. Are there any limitations on Nano Server Container when it comes to Windows Services?
Consider building your docker container from the ground up,
Determine and set your prerequisites
Install all of the dependencies first
Install the application and services in question
(For additional information you can look at this wiki page.)
The Nano server container is minimal and misses many windows default services, you’ll have to build most of them through Dockerfile yourself.
The easiest method will be to do this manually on Nano server and confirm everything to be working in the docker container/image, and then later generate an automated build.

Create a Sideloading Windows 8 Modern App Installer

We have a Windows 8 Modern / Metro app that we wish to deploy outside the store. I have read a bunch of materials on getting a side loading license to allow this. However, we need to go beyond just copying the app over and running some PowerShell commands, we also need to install a particular hardware driver and make some registry keys.
Can anyone recommend an installer creator that can perform all of these tasks?
Out of curiosity, is it possible to distribute through the Windows Store and have it do more than just copy the app down, i.e. execute an installations script?
By design, the installation process for a Store app, whether downloaded from the Store or side-loaded, is not customizable. For Store downloads, this is done to guarantee that the app install won't create anything that cannot be reversed during an uninstall, e.g. create registry entries, copy files, and otherwise do things that can permanently alter the system.
For side-loading, although you cannot alter the specific package deployment process itself, you can use the Powershell deployment as just one step in an overall install process. You should be able to build such an installer with any number of existing Desktop application installer tools, which give you control over all steps in your install process including registry, drivers, running scripts, etc. So you'd just have the app package and PS scripts as part of the installer .msi or .exe, and executing the PS script is done from the installer.
(By the way, the Store/PS app install processes use the same API in Windows.Management.Deployment.PackageManager to do the work. This API can be used only from a full-trust process like the Store (a piece of system code) or Powershell running in an admin console, but is there so desktop apps can implement alternate install procedures directly.)

Automatic tool detection with Jenkins/Hudson?

What mechanisms exists in Jenkins/Hudson to automatically detect tools that are installed on the Nodes?
For example, .NET frameworks, Visual Studio versions, Setup-Builder Tools, installed scripting language executables, etc.
I'm currently trying to figure out if and how (and whether it makes sense) Jenkins can auto-detect our tools that I have to install on all the Nodes (Salves).
Since our Nodes are Windows machines, hard-coding paths doesn't make sense (IMHO) due to path mismatch Windows 64bit vs. 32bit / XP vs. Windows 7 / different language versions.
Also, quite a few tools require installation, so just mirroring over files isn't an option either.
Obviously, I could just define a set of environment variables for our tools and use these from Jenkins. But I much rather use/build something that makes new Nodes/Slaves auto-configured.
You can also read this question as: Is it possible to write a plugin that automatically detects "stuff" on Windows slaves and makes that available as Node Properties? (and where would I start if I wanted to do that?)
AFAIK, the only tools that Jenkins can natively autoconfigure are Java JDK, Ant, and Maven. I'm not sure what other plugins can do.
You might have to go the environment variables way, or you could create a multi-configuration job that installs your tools onto the slaves, if they don't already exist. This would assume that your tools can do quiet installs, and that you can specify the installation directory (same across all platforms).
I've gone with the route of having a set of common environment variables for all nodes.
Since I have to manage what is installed on the Windows nodes manually anyway -- many tools have installers I need to run prior to using them -- adjusting the environment variables on each node isn't such a big deal. (I have a small batch script that set's up everything via setx.)

create and restore a mysql db using a setup project (installer) in VS.Net

What is the best practice for creating an installer for a winform application.
The application is supposed to install the following without connecting to internet.
.Net Framework 3.5sp1
MySQL Server
My SQL Connector
Restore Mysql db
Update Config file with the MySQL uname/pwd.
I have all the msi files for installing the above mentioned items. But am wondering about the best practice to create the installer.
Thanks in advance,
Hi I came up with a similar situation. Firstly you should have .NET framework offline installer which can be downloaded from http://www.microsoft.com/downloads/en/details.aspx?FamilyID=992cffcb-f8ce-41d9-8bd6-31f3e216285c. I assume you are using visual studio installer. There are couple of choices but I prefer to copy the offline .NET installer to the setup projects output directory and from requirements on target machine tab I set the install URL property of .NET framework the exact name of offline setup file. As described in the figure.
So the installer does not try to connect to a remote computer to download .NET framework and install it however I think it is more appropriate that it connects to a Microsoft server and installs it. Anyways the next step is to configure the MySQL server. MySQL is really generous for me since they support a fully documented noinstall files. You can find the document here: http://dev.mysql.com/doc/refman/5.5/en/windows-install-archive.html
Using a noinstall zip archive you can copy the dbengine core files to any folder on the clint machine. And change the configuration parameters of MySQL. You can name the MySQL service anything you want. Start the the service and create tables. You can do all of this stuff from custom actions tab of the setup project choosing the appropriate script files or you can write code for it. The beautiful thing is that your customer does not need to know that he/she is installing a database engine on the target machine. I hope this helps. Thanks.