![](/img/trans.png)
[英]BigQuery code failing due to MemoryError using pandas python client library
[英]Network is unreachable while using BigQuery API client library for Python
我正在使用Google Compute Engine的Python專用BigQuery API客戶端庫 。 進行查詢時會引發網絡無法訪問的錯誤。
[INFO:2018-01-02 16:16:04,887:oauth2client.transport] Attempting refresh to obtain initial access_token
[INFO:2018-01-02 16:16:04,924:oauth2client.client] Refreshing access_token
Traceback (most recent call last):
File "/test/data/reports/ga_bigquery.py", line 130, in ga_table_string
if bq_dataset.table("ga_sessions_{}".format(str_date)).exists():
File "/test/data/reports/.venv/lib/python2.7/site-packages/gcloud/bigquery/table.py", line 472, in exists
query_params={'fields': 'id'})
File "/test/data/reports/.venv/lib/python2.7/site-packages/gcloud/connection.py", line 343, in api_request
target_object=_target_object)
File "/test/data/reports/.venv/lib/python2.7/site-packages/gcloud/connection.py", line 241, in _make_request
return self._do_request(method, url, headers, data, target_object)
File "/test/data/reports/.venv/lib/python2.7/site-packages/gcloud/connection.py", line 270, in _do_request
body=data)
File "/test/data/reports/.venv/lib/python2.7/site-packages/oauth2client/transport.py", line 153, in new_request
credentials._refresh(orig_request_method)
File "/test/data/reports/.venv/lib/python2.7/site-packages/oauth2client/client.py", line 765, in _refresh
self._do_refresh_request(http_request)
File "/test/data/reports/.venv/lib/python2.7/site-packages/oauth2client/client.py", line 797, in _do_refresh_request
self.token_uri, method='POST', body=body, headers=headers)
File "/test/data/reports/.venv/lib/python2.7/site-packages/httplib2/__init__.py", line 1609, in request
(response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
File "/test/data/reports/.venv/lib/python2.7/site-packages/httplib2/__init__.py", line 1351, in _request
(response, content) = self._conn_request(conn, request_uri, method, body, headers)
File "/test/data/reports/.venv/lib/python2.7/site-packages/httplib2/__init__.py", line 1272, in _conn_request
conn.connect()
File "/test/data/reports/.venv/lib/python2.7/site-packages/httplib2/__init__.py", line 1075, in connect
raise socket.error, msg
socket.error: [Errno 101] Network is unreachable
可能是什么原因?
我使用以下選項運行代碼:
[root@myserver]# strace -ff -e poll,select,connect,recvfrom,sendto python run.py --date=20180102 >> strace.log
[root@myserver]# cat strace.log | grep unreachable
connect(3, {sa_family=AF_INET6, sin6_port=htons(443), inet_pton(AF_INET6, “2404:6800:4003:c02::54”, &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network isunreachable)
connect(4, {sa_family=AF_INET6, sin6_port=htons(443), inet_pton(AF_INET6, “2404:6800:4003:803::200a”, &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network is unreachable)
connect(5, {sa_family=AF_INET6, sin6_port=htons(443), inet_pton(AF_INET6, “2404:6800:4003:808::200d”, &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network is unreachable)
connect(6, {sa_family=AF_INET6, sin6_port=htons(443), inet_pton(AF_INET6, “2404:6800:4003:c03::5f”, &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network isunreachable)
從日志看來,計算實例正在阻止傳出ipv6請求。 有什么方法可以在Google計算引擎中取消ipv6請求?
首先,如果您使用的是BigQuery API Client Library for Python ,則可能需要嘗試使用BigQuery Cloud Client Library for Python 。
原因之一可能是API客戶端庫使用httplib2向BigQuery發出請求,這在某些網絡設置(例如,代理服務器)中存在問題 。 雲庫使用更標准的請求庫,因此它應該更可靠。
其次,即使不切換庫,也應更改所使用的身份驗證庫。 您的堆棧跟蹤顯示oauth2client
,但不建議使用oauth2client 。 使用google-auth-httplib2將API客戶端庫與google-auth
庫一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.