我正在使用胶水控制台而不是dev端点。胶水作业可以使用以下代码访问胶水目录和表
datasource0 = glueContext.create_dynamic_frame.from_catalog(database =
"glue-db", table_name = "countries")
print "Table Schema:", datasource0.schema()
print "datasource0", datasource0.show()
现在,我想从胶水数据库胶数据库获取所有表的元数据。 我在awsglue.context api中找不到函数,因此我正在使用boto3。
client = boto3.client('glue', 'eu-central-1')
responseGetDatabases = client.get_databases()
databaseList = responseGetDatabases['DatabaseList']
for databaseDict in databaseList:
databaseName = databaseDict['Name']
print ("databaseName:{}".format(databaseName))
responseGetTables = client.get_tables( DatabaseName = databaseName,
MaxResults=123)
print("responseGetDatabases{}".format(responseGetTables))
tableList = responseGetTables['TableList']
print("response Object{0}".format(responseGetTables))
for tableDict in tableList:
tableName = tableDict['Name']
print("-- tableName:{}".format(tableName))
代码在lambda函数中运行,但在胶水etl作业中失败,并出现以下错误
botocore.vendored.requests.exceptions.ConnectTimeout:HTTPSConnectionPool(host ='glue.eu-central-1.amazonaws.com',port = 443):URL超过最大重试次数:/(由ConnectTimeoutError(,'连接到gum.eu-central-1.amazonaws.com的连接超时(连接超时= 60)'))
问题似乎出在环境配置中。胶水VPC有两个子网 专用子网:使用s3端点进行粘合,允许来自RDS安全组的入站流量。它有 公共子网:在带有nat网关的胶水vpc中。专用子网可通过网关nat访问。我不确定我在这里想念的是什么。
答案 0 :(得分:0)
您可以通过明确指定区域来尝试按以下方式创建boto客户端吗?
client = boto3.client('glue',region_name='eu-central-1')
答案 1 :(得分:0)
在创建boto3客户端时尝试使用代理:
from pyhocon import ConfigFactory
service_name = 'glue'
default = ConfigFactory.parse_file('glue-default.conf')
override = ConfigFactory.parse_file('glue-override.conf')
host = override.get('proxy.host', default.get('proxy.host'))
port = override.get('proxy.port', default.get('proxy.port'))
config = Config()
if host and port:
config.proxies = {'https': '{}:{}'.format(host, port)}
client = boto3.Session(region_name=region).client(service_name=service_name, config=config)
glue-default.conf和glue-override.conf是通过glue部署到集群的,而spark则提交到/ tmp目录。
我有一个类似的问题,我通过使用胶水中的公共库做了同样的事情: s3://aws-glue-assets-eu-central-1/scripts/lib/utils.py
答案 2 :(得分:0)
从Glue Python Shell运行此命令时,我遇到了类似的问题。
因此,我为Glue服务(服务名称:“ com.amazonaws.eu-west-1.glue”)创建了端点(VPC-> Endpoints),该端点被分配给与Glue Connection相同的子网和安全组。这是在Glue Python Shell Job中使用的。