Using an External Database for Hue
By default, Cloudera Manager uses SQLite for Hue's database. If necessary, you can configure Cloudera Manager to use an external database such as MySQL or PostgreSQL as the database for Hue. The procedure described in this topic illustrates how to migrate the Hue database from the default SQLite installation to another database.
To configure Cloudera Manager to use an external database for Hue
- Using the Cloudera Manager Admin Console, click the service instance for the Hue database you are reconfiguring. The Hue service instance page in Cloudera Manager Admin Console appears.
- Click Actions and click Stop. Confirm you want to stop the service by clicking Stop. If the Hue service is already stopped, skip this step.
- Click Actions for the Hue service, and click Dump Database. Confirm you want to dump the database by clicking Dump Database.
- Open the database dump file (by default /tmp/hue_database_dump.json) and remove all JSON objects with 'useradmin.userprofile' in the 'model' field. (You can verify the location of the Database Dump File by searching for Database Dump File in the Hue Configuration settings.)
Continue with the following instructions for Configuring the Hue Server to Store Data in MySQL or Configuring the Hue Server to Store Data in PostgreSQL . When you complete the instructions, start the Hue server.
Configuring the Hue Server to Store Data in MySQL
To configure the Hue Server to store data in MySQL:
- Create a new database and grant privileges to a Hue user to
manage this database. For example:
mysql> create database hue; Query OK, 1 row affected (0.01 sec) mysql> grant all on hue.* to 'hue'@'localhost' identified by 'secretpassword'; Query OK, 0 rows affected (0.00 sec)
- Using the Cloudera Manager Admin Console, click the service instance for the Hue database you are reconfiguring. The Hue service instance page in Cloudera Manager Admin Console appears.
- Click Configuration > View and Edit. In the Category pane, click the instance of Database under Service-Wide.
- Specify the settings for Hue's
Database Type, Hue's Database
Hostname, Hue's Database Port, Hue's Database Username, Hue's Database Password, and Hue's Database Name. For example, for a MySQL
database on the local host, you might use the following values:
Hue's Database Type = mysql Hue's Database Hostname = localhost Hue's Database Port = 3306 Hue's Database Username = hue Hue's Database Password = secretpassword Hue's Database Name = hue
- The following steps are for restoring the Hue data to the new database. If you would like Hue to start from a fresh state, you can start your Hue service now.
- Click Actions and click Synchronize Database.
- Determine the foreign key ID.
$ mysql -uhue -psecretpassword mysql > SHOW CREATE TABLE auth_permission;
- (InnoDB only) Drop the
foreign key that you retrieved in the previous step.
mysql > ALTER TABLE auth_permission DROP FOREIGN KEY content_type_id_refs_id_XXXXXX;
- Delete the rows in the django_content_type table.
mysql > DELETE FROM hue.django_content_type;
- In Hue service instance page, click Actions, and click Load Database. Confirm you want to load the database by clicking Load Database.
- (InnoDB only) Add back the
foreign key.
mysql > ALTER TABLE auth_permission ADD FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`);
Configuring the Hue Server to Store Data in PostgreSQL
To configure the Hue Server to store data in PostgreSQL:
- Install required packages.
To install on RHEL systems:
$ sudo yum install postgresql-devel gcc python-devel
To install on SLES systems:
$ sudo zypper install postgresql-devel gcc python-devel
To install on Ubuntu or Debian systems:
$ sudo apt-get install postgresql-devel gcc python-devel
- Install the module that provides the connector to
PostgreSQL.
sudo -u hue /usr/share/hue/build/env/bin/pip install setuptools sudo -u hue /usr/share/hue/build/env/bin/pip install psycopg2
- Install the PostgreSQL server. To install PostgreSQL on a RHEL system:
$ sudo yum install postgresql-server
To install PostgreSQL on SLES systems:
$ sudo zypper install postgresql-server
To install PostgreSQL on Ubuntu or Debian systems:
$ sudo apt-get install postgresql
- Initialize the data directories.
$ service postgresql initdb
- Configure client authentication.
- Edit /var/lib/pgsql/data/pg_hba.conf.
- Set the authentication methods for local to trust and for host to
password and add
the following line at the end.
host hue hue 0.0.0.0/0 md5
- Start the PostgreSQL server.
$ su - postgres # /usr/bin/postgres -D /var/lib/pgsql/data > logfile 2>&1 &
- Configure PostgreSQL to listen on all network interfaces.
- Edit /var/lib/pgsql/data/postgresql.conf and set
list_addresses.
listen_addresses = ‘0.0.0.0’ # Listen on all addresses
- Edit /var/lib/pgsql/data/postgresql.conf and set
list_addresses.
- Create the hue database and grant privileges to a hue user to manage the database.
# psql -U postgres postgres=# create database hue; postgres=# \c hue; You are now connected to database 'hue'. postgres=# create user hue with password 'secretpassword'; postgres=# grant all privileges on database hue to hue; postgres=# \q
- Restart the PostgreSQL server.
$ sudo service postgresql restart
- Verify connectivity.
psql –h localhost –U hue –d hue Password for user hue: secretpassword
- Configure the PostgreSQL server to start at boot. '
On RHEL systems:
$ sudo /sbin/chkconfig postgresql on $ sudo /sbin/chkconfig --list postgresql postgresql 0:off 1:off 2:on 3:on 4:on 5:on 6:off
On SLES systems:
$ sudo chkconfig --add postgresql
On Ubuntu or Debian systems:
$ sudo chkconfig postgresql on
- Using the Cloudera Manager Admin Console, click the service instance for the Hue database you are reconfiguring. The Hue service instance page in Cloudera Manager Admin Console appears.
- Click Configuration > View and Edit. In the Category pane, click Advanced under Service-Wide.
- Specify the settings for Hue
Service Configuration Safety Valve:
[desktop] [[database]] host=localhost port=5432 engine=postgresql_psycopg2 user=hue password=secretpassword name=hue
- Click Save Changes.
- The following steps are for restoring the Hue data to the new database. If you would like Hue to start from a fresh state, you can start your Hue service now.
- Click Actions and click Synchronize Database.
- Determine the foreign key ID.
bash# su – postgres $ psql –h localhost –U hue –d hue postgres=# \d auth_permission;
- Drop the foreign key that you retrieved in the previous
step.
postgres=# ALTER TABLE auth_permission DROP CONSTRAINT content_type_id_refs_id_XXXXXX;
- Delete the rows in the django_content_type table.
postgres=# TRUNCATE django_content_type CASCADE;
- In Hue service instance page, click Actions, and click Load Database. Confirm you want to load the database by clicking Load Database.
- Add back the foreign key you dropped.
bash# su – postgres $ psql –h localhost –U hue –d hue postgres=# ALTER TABLE auth_permission ADD CONSTRAINT content_type_id_refs_id_XXXXXX FOREIGN KEY (content_type_id) REFERENCES django_content_type(id) DEFERRABLE INITIALLY DEFERRED;