برنامه نویسی

ساخت دریاچه داده NBA مبتنی بر ابر با AWS 🏀

به روز 3 خوش آمدید از چالش 30 روزه DevOps من! امروز، من به یک پروژه جذاب پرداختم: ایجاد یک دریاچه داده مبتنی بر ابر برای تجزیه و تحلیل NBA. با استفاده از AWS S3، چسب AWS، و آمازون آتنا، من یک راه حل مقیاس پذیر و کارآمد برای ذخیره، پرس و جو و تجزیه و تحلیل داده های NBA دنیای واقعی واکشی شده از API SportsData.io.

اگر علاقه مند به یادگیری نحوه ترکیب محاسبات ابری، معماری بدون سرور و API های خارجی برای ایجاد خطوط لوله داده قدرتمند هستید، این پست برای شما مناسب است.


دریاچه داده چیست؟

الف دریاچه داده یک مخزن متمرکز است که به شما امکان می دهد داده های ساختاریافته و بدون ساختار را در هر مقیاسی ذخیره کنید. برخلاف پایگاه‌های داده سنتی، که نیاز به تغییر داده‌ها قبل از ذخیره‌سازی دارند، دریاچه‌های داده به شما امکان می‌دهند داده‌های خام را تخلیه کرده و آن‌ها را در صورت نیاز پردازش کنید.

دریاچه داده

برای این پروژه، من یک دریاچه داده مناسب برای آن ایجاد کردم تجزیه و تحلیل NBA. راه اندازی شامل:

  • ذخیره سازی داده های خام در آمازون S3.
  • فهرست نویسی داده ها و ایجاد طرحواره با چسب AWS.
  • پرس و جو بر حسب تقاضا با استفاده از SQL از طریق آمازون آتنا.

اهداف پروژه

  1. یک سطل آمازون S3 ایجاد کنید برای ذخیره داده های خام و پردازش شده NBA.
  2. داده های نمونه را آپلود کنید (بازیابی شده از SportsData.io API) به S3.
  3. چسب AWS را تنظیم کنید فهرست نویسی و ساختار داده ها برای پرس و جو.
  4. پرس و جو را با آمازون آتنا فعال کنید، اجازه دسترسی مبتنی بر SQL به تجزیه و تحلیل NBA را می دهد.
  5. کل گردش کار را خودکار کنید با استفاده از اسکریپت پایتون

پشته فناوری

این چیزی است که من برای زنده کردن این پروژه استفاده کردم:

خدمات AWS

  • آمازون S3: برای ذخیره سازی مقیاس پذیر داده های خام و ساختار یافته.
  • چسب AWS: فهرست نویسی داده ها و تعریف طرحواره ها.
  • آمازون آتنا: برای اجرای پرس و جوهای SQL روی داده ها به طور مستقیم از S3.

زبان برنامه نویسی

  • پایتون: برای ایجاد خودکار منابع و پردازش داده ها.

API خارجی


چگونه کار می کند

کل گردش کار را می توان به مراحل زیر تقسیم کرد:

مرحله 1: یک سطل S3 ایجاد کنید

آمازون S3 ستون فقرات این دریاچه داده است. این به عنوان یک مکان ذخیره سازی متمرکز برای تمام داده های خام و پردازش شده عمل می کند. سطل با استفاده از پایتون ایجاد شد boto3 کتابخانه، با پوشه های جداگانه برای داده های خام و داده های پردازش شده.

import boto3

def create_s3_bucket(bucket_name):
    s3 = boto3.client('s3')
    s3.create_bucket(Bucket=bucket_name)
    print(f"S3 bucket '{bucket_name}' created successfully.")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 2: واکشی داده ها از SportsData.io

برای پر کردن دریاچه داده، نمونه داده‌های بازیکن NBA را از API SportsData.io استخراج کردم. این API اطلاعات جامعی در مورد تیم ها، بازیکنان و آمار بازی ارائه می دهد.

این تابعی است که برای واکشی داده های پخش کننده نوشتم:

import requests

def fetch_nba_player_data(api_key, endpoint):
    headers = {"Ocp-Apim-Subscription-Key": api_key}
    response = requests.get(endpoint, headers=headers)
    if response.status_code == 200:
        return response.json()
    else:
        raise Exception("Failed to fetch data from SportsData.io")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 3: داده ها را در S3 آپلود کنید

هنگامی که داده ها بازیابی شدند، در آن ذخیره شدند داده های خام پوشه سطل S3.

def upload_to_s3(bucket_name, file_name, data):
    s3 = boto3.client('s3')
    s3.put_object(Bucket=bucket_name, Key=file_name, Body=data)
    print(f"Data uploaded to {bucket_name}/{file_name}.")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 4: چسب AWS را تنظیم کنید

AWS Glue با ایجاد یک طرح و فهرست‌نویسی، جستجوی داده‌های خام JSON را آسان می‌کند. با استفاده از چسب، یک پایگاه داده و جدولی برای نمایش داده های NBA ایجاد کردم.

def create_glue_database(database_name):
    glue = boto3.client('glue')
    glue.create_database(DatabaseInput={'Name': database_name})
    print(f"Glue database '{database_name}' created successfully.")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


جستجوی داده ها با آتنا

با داده‌های فهرست‌بندی شده، من از آمازون آتنا برای پرس‌وجو از داده‌های ذخیره‌شده در S3 با استفاده از SQL استفاده کردم. به عنوان مثال، برای واکشی همه بازیکنان NBA که به عنوان گارد پوینت گارد (PG) بازی می کنند، عبارت زیر را انجام دادم:

SELECT FirstName, LastName, Position, Team
FROM nba_players
WHERE Position = 'PG';
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آتنا مستقیماً داده ها را از S3 بدون نیاز به پایگاه داده یا سرور استعلام می کند و آن را به ابزاری قدرتمند برای تجزیه و تحلیل تبدیل می کند.


خودکار کردن گردش کار

برای گره زدن همه چیز به هم، یک را ایجاد کردم اسکریپت پایتون که کل فرآیند راه اندازی را خودکار می کند. این اسکریپت:

  1. یک سطل S3 ایجاد می کند.
  2. داده ها را از SportsData.io واکشی می کند.
  3. داده ها را در S3 آپلود می کند.
  4. چسب AWS را برای فهرست نویسی پیکربندی می کند.

در اینجا گزیده ای است:

def main():
    # Step 1: Create S3 bucket
    bucket_name = "sports-analytics-data-lake"
    create_s3_bucket(bucket_name)

    # Step 2: Fetch NBA data
    api_key = "YOUR_SPORTSDATA_API_KEY"
    endpoint = "https://api.sportsdata.io/v3/nba/scores/json/Players"
    nba_data = fetch_nba_player_data(api_key, endpoint)

    # Step 3: Upload data to S3
    upload_to_s3(bucket_name, "raw-data/nba_player_data.json", str(nba_data))

    # Step 4: Create Glue database
    create_glue_database("nba_analytics")

    print("NBA Data Lake setup completed successfully.")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


آموخته های کلیدی از روز 3

  1. خدمات ابری گردش کار پیچیده را ساده می کند

    سرویس‌های AWS مانند S3، Glue و Athena روشی بی‌نظیر برای ذخیره، فهرست‌نویسی و جستجوی داده‌ها بدون مدیریت سرورها ارائه می‌کنند.

  2. اتوماسیون ضروری است

    استفاده از اسکریپت های پایتون برای ایجاد خودکار منابع، تکرارپذیری را تضمین می کند و تلاش دستی را به حداقل می رساند.

  3. API ها موارد استفاده در دنیای واقعی را باز می کنند

    ادغام API های خارجی، مانند SportsData.io، پروژه ها را با داده های دنیای واقعی غنی می کند و عملکرد را گسترش می دهد.


چالش های پیش رو

  1. آموزش چسب و آتنا

    درک نحوه تعامل AWS Glue با آتنا مدتی طول کشید، اما زمانی که جریان کار را درک کردم، بصری شد.

  2. طراحی طرحواره برای داده های خام

    ایجاد یک طرح واره برای داده های خام JSON به آزمون و خطا نیاز داشت، به خصوص هنگام کار با ساختارهای تودرتو.


پیشرفت های آینده

در حالی که دریاچه داده عملکردی است، همیشه جایی برای بهبود وجود دارد. در اینجا چند ایده وجود دارد:

  1. جذب خودکار داده ها: از AWS Lambda برای وارد کردن خودکار داده های جدید در سطل S3 استفاده کنید.
  2. تبدیل داده ها: از چسب AWS ETL (Extract, Transform, Load) برای تمیز کردن و پردازش داده های خام استفاده کنید.
  3. تجزیه و تحلیل پیشرفته: AWS QuickSight را برای ایجاد داشبورد برای تجسم داده ها ادغام کنید.

نتیجه گیری

روز 3 من چالش 30 روزه DevOps همه چیز در مورد ترکیب بود خدمات ابری AWS، API های خارجی، و پایتون برای ساخت یک دریاچه داده قدرتمند برای تجزیه و تحلیل NBA. این پروژه نه تنها قدرت معماری بدون سرور را نشان داد، بلکه نشان داد که چگونه دریاچه‌های داده می‌توانند بینش‌های زمان واقعی را برای موارد استفاده در دنیای واقعی فعال کنند.

اگر در حال کاوش در زمینه مهندسی داده، محاسبات ابری، یا جریان های کاری DevOps هستید، امیدوارم این وبلاگ به شما انگیزه دهد تا چالش خود را انجام دهید. سوال یا پیشنهادی دارید؟ بیایید در نظرات زیر ارتباط برقرار کنیم!


منابع

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا