You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@airflow.apache.org by "Wan, Derek" <De...@mlp.com> on 2019/12/28 00:24:26 UTC
MySQL running into UnicodeDecodeError
Hi all,
Beginner here. Upon following https://airflow.apache.org/docs/stable/howto/initialize-database.html, I found I do not have access to set explicit_defaults_for_timestamp=1 in my /etc/my.cnf. Thus, I asked the DB admin to set this for me and restart the server. On the webserver, I tried a tutorial dag and got this:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/flask/app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/flask/app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/flask/app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/flask_admin/base.py", line 69, in inner
return self._run_view(f, *args, **kwargs)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/flask_admin/base.py", line 368, in _run_view
return fn(self, *args, **kwargs)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/flask_login/utils.py", line 258, in decorated_view
return func(*args, **kwargs)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/airflow/www/utils.py", line 290, in wrapper
return f(*args, **kwargs)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/airflow/www/utils.py", line 337, in wrapper
return f(*args, **kwargs)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/airflow/utils/db.py", line 74, in wrapper
return func(*args, **kwargs)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/airflow/www/views.py", line 1213, in trigger
external_trigger=True
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/airflow/utils/db.py", line 74, in wrapper
return func(*args, **kwargs)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/airflow/models/dag.py", line 1659, in create_dagrun
session=session)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/airflow/utils/db.py", line 70, in wrapper
return func(*args, **kwargs)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/airflow/models/dag.py", line 1346, in create_dagrun
run.refresh_from_db()
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/airflow/utils/db.py", line 74, in wrapper
return func(*args, **kwargs)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/airflow/models/dagrun.py", line 109, in refresh_from_db
DR.run_id == self.run_id
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3325, in one
ret = self.one_or_none()
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3294, in one_or_none
ret = list(self)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3367, in __iter__
return self._execute_and_instances(context)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3392, in _execute_and_instances
result = conn.execute(querycontext.statement, self._params)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 982, in execute
return meth(self, multiparams, params)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/sqlalchemy/sql/elements.py", line 287, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1101, in _execute_clauseelement
distilled_params,
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1250, in _execute_context
e, statement, parameters, cursor, context
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1478, in _handle_dbapi_exception
util.reraise(*exc_info)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 153, in reraise
raise value
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1246, in _execute_context
cursor, statement, parameters, context
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 581, in do_execute
cursor.execute(statement, parameters)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/mysql/connector/cursor_cext.py", line 272, in execute
self._handle_result(result)
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/mysql/connector/cursor_cext.py", line 163, in _handle_result
self._handle_resultset()
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/mysql/connector/cursor_cext.py", line 651, in _handle_resultset
self._rows = self._cnx.get_rows()[0]
File "/export/home/anaconda/2018.12/envs/dwan_98_airflow/lib/python3.7/site-packages/mysql/connector/connection_cext.py", line 301, in get_rows
else self._cmysql.fetch_row()
SystemError: <method 'fetch_row' of '_mysql_connector.MySQL' objects> returned a result with an error set
This is what my DB admin checked for me:
mysql> show variables like '%character%';
+--------------------------+------------------------------------------------------------+
| Variable_name | Value |
+--------------------------+------------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+------------------------------------------------------------+
mysql> show variables like '%collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
mysql> select version();
+------------+
| version() |
+------------+
| 5.7.18-log |
+------------+
1 row in set (0.00 sec)
I note that he didn't explicitly check explicit_defaults_for_timestamp=1, but I observed that airflow initdb would an error otherwise, so I assume the successful initialization means this has been set.
Allow me to copy some lines from the scheduler:
09:12 $ airflow scheduler
[2019-12-28 09:12:49,852] {settings.py:254} INFO - settings.configure_orm(): Using pool settings. pool_size=5, max_overflow=10, pool_recycle=1800, pid=23368
____________ _____________
____ |__( )_________ __/__ /________ __
____ /| |_ /__ ___/_ /_ __ /_ __ \_ | /| / /
___ ___ | / _ / _ __/ _ / / /_/ /_ |/ |/ /
_/_/ |_/_/ /_/ /_/ /_/ \____/____/|__/
[2019-12-28 09:12:54,211] {__init__.py:51} INFO - Using executor LocalExecutor
[2019-12-28 09:12:54,924] {scheduler_job.py:1323} INFO - Starting the scheduler
[2019-12-28 09:12:54,924] {scheduler_job.py:1331} INFO - Running execute loop for -1 seconds
[2019-12-28 09:12:54,924] {scheduler_job.py:1332} INFO - Processing each file at most -1 times
[2019-12-28 09:12:54,924] {scheduler_job.py:1335} INFO - Searching for files in /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags
[2019-12-28 09:12:54,931] {scheduler_job.py:1337} INFO - There are 1 files in /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags
[2019-12-28 09:12:54,988] {scheduler_job.py:1388} INFO - Resetting orphaned tasks for active dag runs
[2019-12-28 09:12:55,708] {dag_processing.py:556} INFO - Launched DagFileProcessorManager with pid: 23558
[2019-12-28 09:12:55,716] {settings.py:55} INFO - Configured default timezone <Timezone [UTC]>
[2019-12-28 09:12:55,723] {settings.py:254} INFO - settings.configure_orm(): Using pool settings. pool_size=5, max_overflow=10, pool_recycle=1800, pid=23558
and the scheduler log:
...
[2019-12-28 09:17:39,320] {scheduler_job.py:153} INFO - Started process (PID=26499) to work on /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags/tutorial.py
[2019-12-28 09:17:39,321] {scheduler_job.py:1539} INFO - Processing file /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags/tutorial.py for tasks to queue
[2019-12-28 09:17:39,321] {logging_mixin.py:112} INFO - [2019-12-28 09:17:39,321] {dagbag.py:403} INFO - Filling up the DagBag from /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags/tutorial.py
[2019-12-28 09:17:39,326] {scheduler_job.py:1551} INFO - DAG(s) dict_keys(['dwan_tutorial']) retrieved from /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags/tutorial.py
[2019-12-28 09:17:45,022] {scheduler_job.py:161} INFO - Processing /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags/tutorial.py took 5.703 seconds
[2019-12-28 09:17:45,331] {logging_mixin.py:112} INFO - [2019-12-28 09:17:45,330] {settings.py:254} INFO - settings.configure_orm(): Using pool settings. pool_size=5, max_overflow=10, pool_recycle=1800, pid=26852
[2019-12-28 09:17:45,332] {scheduler_job.py:153} INFO - Started process (PID=26852) to work on /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags/tutorial.py
[2019-12-28 09:17:45,334] {scheduler_job.py:1539} INFO - Processing file /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags/tutorial.py for tasks to queue
[2019-12-28 09:17:45,334] {logging_mixin.py:112} INFO - [2019-12-28 09:17:45,334] {dagbag.py:403} INFO - Filling up the DagBag from /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags/tutorial.py
[2019-12-28 09:17:45,339] {scheduler_job.py:1551} INFO - DAG(s) dict_keys(['dwan_tutorial']) retrieved from /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags/tutorial.py
[2019-12-28 09:17:51,036] {scheduler_job.py:161} INFO - Processing /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags/tutorial.py took 5.704 seconds
[2019-12-28 09:17:51,054] {logging_mixin.py:112} INFO - [2019-12-28 09:17:51,054] {settings.py:254} INFO - settings.configure_orm(): Using pool settings. pool_size=5, max_overflow=10, pool_recycle=1800, pid=27065
[2019-12-28 09:17:51,056] {scheduler_job.py:153} INFO - Started process (PID=27065) to work on /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags/tutorial.py
[2019-12-28 09:17:51,057] {scheduler_job.py:1539} INFO - Processing file /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags/tutorial.py for tasks to queue
[2019-12-28 09:17:51,058] {logging_mixin.py:112} INFO - [2019-12-28 09:17:51,058] {dagbag.py:403} INFO - Filling up the DagBag from /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags/tutorial.py
[2019-12-28 09:17:51,063] {scheduler_job.py:1551} INFO - DAG(s) dict_keys(['dwan_tutorial']) retrieved from /home/dwan/Workspace/dev/dev_py/quanterest/quanterest/airflow/dags/tutorial.py
Help much appreciated!
Regards,
Derek Wan
######################################################################
The information contained in this communication is confidential and
may contain information that is privileged or exempt from disclosure
under applicable law. If you are not a named addressee, please notify
the sender immediately and delete this email from your system.
If you have received this communication, and are not a named
recipient, you are hereby notified that any dissemination,
distribution or copying of this communication is strictly prohibited.
######################################################################