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.

######################################################################