Apache Zeppelin è un notebook open source basato sul Web e uno strumento collaborativo per l'immissione, il rilevamento, l'analisi e la visualizzazione di dati interattivi. Zeppelin supporta oltre 20 lingue tra cui Apache Spark, SQL, R, Elasticsearch e molte altre. Apache Zeppelin ti consente di creare splendidi documenti basati sui dati e vedere i risultati delle tue analisi.
Prerequisiti
- Un'istanza del server Vultr CentOS 7.
- Un utente sudo .
- Un nome di dominio puntato verso il server.
Per questo tutorial, useremo zeppelin.example.com
come nome di dominio puntato verso l'istanza Vultr. Assicurati di sostituire tutte le occorrenze del nome di dominio di esempio con quello effettivo.
Aggiorna il tuo sistema di base usando la guida Come aggiornare CentOS 7 . Dopo aver aggiornato il sistema, procedere con l'installazione di Java.
Installa Java
Apache Zeppelin è scritto in Java, quindi per funzionare richiede JDK. Scarica il pacchetto Oracle SE JDK RPM.
wget --no-cookies --no-check-certificate --header "Cookie:oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.rpm"
Installa il pacchetto scaricato.
sudo yum -y localinstall jdk-8u151-linux-x64.rpm
Se Java è stato installato correttamente, dovresti essere in grado di verificarne la versione.
java -version
Vedrai il seguente output.
[user@vultr ~]$ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
Prima di poter procedere oltre, dovremo impostare le variabili di ambiente JAVA_HOME
e JRE_HOME
. Trova il percorso assoluto dell'eseguibile JAVA nel tuo sistema.
readlink -f $(which java)
Vedrai un risultato simile.
[user@vultr ~]$ readlink -f $(which java)
/usr/java/jdk1.8.0_151/jre/bin/java
Ora, imposta le variabili di ambiente JAVA_HOME
e in JRE_HOME
base al percorso della directory Java.
echo "export JAVA_HOME=/usr/java/jdk1.8.0_151" >> ~/.bash_profile
echo "export JRE_HOME=/usr/java/jdk1.8.0_151/jre" >> ~/.bash_profile
Esegui il bash_profile
file.
source ~/.bash_profile
Ora puoi eseguire il echo $JAVA_HOME
comando per verificare se la variabile di ambiente è impostata.
[user@vultr ~]$ echo $JAVA_HOME
/usr/java/jdk1.8.0_151
Installa Zeppelin
Apache Zeppelin fornisce tutte le dipendenze insieme ai file binari, quindi non è necessario installare nient'altro che Java. Scarica il binario Zeppelin sul tuo sistema. Puoi sempre trovare l'ultima versione dell'applicazione nella pagina di download di Zeppelin .
wget http://www-us.apache.org/dist/zeppelin/zeppelin-0.7.3/zeppelin-0.7.3-bin-all.tgz
Estrai l'archivio.
sudo tar xf zeppelin-*-bin-all.tgz -C /opt
Il comando sopra estrarrà l'archivio in /opt/zeppelin-0.7.3-bin-all
. Rinominare la directory per comodità.
sudo mv /opt/zeppelin-*-bin-all /opt/zeppelin
Apache Zeppelin è ora installato. Puoi avviare immediatamente l'applicazione, ma non sarà accessibile a te, in quanto è in ascolto localhost
. Configureremo Apache Zeppelin come servizio. Configureremo anche il web server Nginx come proxy inverso.
In questo passaggio, imposteremo un file di unità Systemd per l'applicazione Zeppelin. Ciò assicurerà che il processo dell'applicazione venga avviato automaticamente al riavvio del sistema e agli errori.
Per motivi di sicurezza, creare un utente senza privilegi per eseguire il processo Zeppelin.
sudo adduser -d /opt/zeppelin -s /sbin/nologin zeppelin
Fornire la proprietà dei file all'utente Zeppelin appena creato.
sudo chown -R zeppelin:zeppelin /opt/zeppelin
Creare un nuovo file di unità di servizio Systemd.
sudo nano /etc/systemd/system/zeppelin.service
Popolare il file con il seguente.
[Unit]
Description=Zeppelin service
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/opt/zeppelin/bin/zeppelin-daemon.sh start
ExecStop=/opt/zeppelin/bin/zeppelin-daemon.sh stop
ExecReload=/opt/zeppelin/bin/zeppelin-daemon.sh reload
User=zeppelin
Group=zeppelin
Restart=always
[Install]
WantedBy=multi-user.target
Avvia l'applicazione.
sudo systemctl start zeppelin
Abilita il servizio Zeppelin per l'avvio automatico all'avvio.
sudo systemctl enable zeppelin
Per verificare se il servizio è in esecuzione, è possibile eseguire quanto segue.
sudo systemctl status zeppelin
Per impostazione predefinita, il server Zeppelin è in ascolto localhost
sulla porta 8080
. In questo tutorial, useremo Nginx come proxy inverso in modo che sia possibile accedere all'applicazione tramite standard HTTP
e HTTPS
porte. Configureremo anche Nginx per l'utilizzo di SSL generato con Let's Encrypt SSL gratuita CA.
Installa Nginx.
sudo yum -y install nginx
Avvia Nginx e abilita l'avvio automatico all'avvio.
sudo systemctl start nginx
sudo systemctl enable nginx
Installa Certbot, che è l'applicazione client per Let's Encrypt CA.
sudo yum -y install certbot
Prima di poter richiedere i certificati, è necessario consentire la porta 80
e / 443
o standard HTTP
e HTTPS
servizi attraverso il firewall.
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload
Nota : per ottenere certificati da Let's Encrypt CA, il dominio per il quale devono essere generati i certificati deve essere puntato verso il server. In caso contrario, apportare le modifiche necessarie ai record DNS del dominio e attendere la propagazione del DNS prima di effettuare nuovamente la richiesta di certificato. Certbot controlla l'autorità di dominio prima di fornire i certificati.
Genera i certificati SSL.
sudo certbot certonly --webroot -w /usr/share/nginx/html -d zeppelin.example.com
È probabile che i certificati generati siano archiviati in /etc/letsencrypt/live/zeppelin.example.com/
. Il certificato SSL verrà archiviato come fullchain.pem
e la chiave privata verrà archiviata come privkey.pem
.
Let's Encrypt certificati scadranno tra 90 giorni, quindi si consiglia di impostare il rinnovo automatico dei certificati utilizzando i processi Cron.
Apri il file di lavoro cron.
sudo crontab -e
Aggiungi la seguente riga alla fine del file.
30 5 * * * /usr/bin/certbot renew --quiet
Il precedente cron job verrà eseguito ogni giorno alle 5:30. Se il certificato è in scadenza, lo rinnoverà automaticamente.
Creare un nuovo file di blocco del server per il sito Zeppelin.
sudo nano /etc/nginx/conf.d/zeppelin.example.com.conf
Popolare il file.
upstream zeppelin {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name zeppelin.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name zeppelin.example.com;
ssl_certificate /etc/letsencrypt/live/zeppelin.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/zeppelin.example.com/privkey.pem;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/zeppelin.access.log;
location / {
proxy_pass http://zeppelin;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
}
location /ws {
proxy_pass http://zeppelin/ws;
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection upgrade;
proxy_read_timeout 86400;
}
}
Riavvia Nginx per rendere effettive le modifiche.
sudo systemctl restart nginx zeppelin
Zeppelin è ora accessibile al seguente indirizzo.
https://zeppelin.example.com
Per impostazione predefinita, non è abilitata l'autenticazione, quindi è possibile utilizzare direttamente l'applicazione.
Poiché l'applicazione è accessibile a tutti, anche i blocchi appunti creati sono accessibili a tutti. È molto importante disabilitare l'accesso anonimo e abilitare l'autenticazione in modo che solo gli utenti autenticati possano accedere all'applicazione.
Disabilita l'accesso anonimo
Per disabilitare l'accesso anonimo predefinito, copiare il modello del file di configurazione nella sua posizione live.
cd /opt/zeppelin
sudo cp conf/zeppelin-site.xml.template conf/zeppelin-site.xml
Modifica il file di configurazione.
sudo nano conf/zeppelin-site.xml
Trova le seguenti righe nel file.
<property>
<name>zeppelin.anonymous.allowed</name>
<value>true</value>
Modificare il valore in false
per disabilitare l'accesso anonimo.
Abilita autenticazione Shiro
Ora che abbiamo disabilitato l'accesso anonimo, dobbiamo abilitare un qualche tipo di meccanismo di autenticazione in modo che gli utenti privilegiati possano accedere. Apache Zeppelin utilizza l'autenticazione Apache Shiro. Copia il file di configurazione di Shiro.
sudo cp conf/shiro.ini.template conf/shiro.ini
Modifica il file di configurazione.
sudo nano conf/shiro.ini
Trova le seguenti righe nel file.
[users]
admin = password1, admin
user1 = password2, role1, role2
user2 = password3, role3
user3 = password4, role2
L'elenco contiene nome utente, password e ruoli degli utenti. Per ora, useremo solo admin
e user1
. Cambiare la password di admin
e user1
e disabilitare gli altri utenti da loro commentando. È inoltre possibile modificare il nome utente e i ruoli degli utenti. Per ulteriori informazioni sugli utenti e i ruoli di Apache Shiro, leggi la guida all'autorizzazione di Shiro .
Dopo aver modificato le password, il blocco di codice dovrebbe apparire così.
[users]
admin = StrongPassword, admin
user1 = UserPassword, role1, role2
# user2 = password3, role3
# user3 = password4, role2
Ora riavvia Zeppelin per applicare le modifiche.
sudo systemctl restart zeppelin
Dovresti vedere che l'autenticazione è stata abilitata e sarai in grado di accedere usando il nome utente e la password impostati nel file di configurazione di Shiro.