apeescape2.com
  • メイン
  • モバイルデザイン
  • 人とチーム
  • 仕事の未来
  • プロジェクト管理
バックエンド

ハッカソンでApacheSparkとDockerを使用して天気アプリを作成した方法

以前の2つの記事で、聴衆に Apache Spark そして Docker 。前述の両方のテクノロジーを含む完全に機能するアプリケーションを紹介するときが来ました。

その動機は「データの形で空から降り注いだ」ものであり、IBMが主催したハッカソンによって引き起こされました。 Sparkathon’s 目的は、気象データとApache Spark for IBM Bluemixの分析を使用して、気象関連のモバイルアプリケーションを構築することでした。

IBMは重く Sparkへの投資 、最近のデジタル部分を購入しました 天気予報チャンネル 。結果として、このイベントは彼らの宣伝に最適のようです。



インスピレーション

あなたは今まであなたの場所の天気について不平を言ったことがありますか、いくつかの計画された休暇と使うお金がありましたが、知りませんでした どこ トーゴ?答えが「はい」の場合、あなたは本当に欲しいです 私の完璧な天気 アプリ。

画像:アプリのユースケース。

アプリの使用方法を説明するために、いくつかの使用例を示します。

  1. 凧揚げを約束した子供がいます この 週ですが、あなたが住んでいる場所は絶対に風がなく、言葉を破りたくありません。
  2. あなたは私のように風が強くて雨の多い場所(スコットランド、エジンバラ)に住んでいて、肌に暖かさを感じたいと思っています。 番号 雨。
  3. あなたは雪だるまを作りたいという衝動を持っており、それを成し遂げるまで休むことはありません。
  4. あなたは釣りに行きたいです、そして今度はあなたは本当に何かを捕まえたいです。

それが何をするか

サービスの背後にある考え方は非常に単純です。まず、特定の時点での完璧な天気の意味を定義します。現在、下のスクリーンショットに示すように、気温、風速、降水タイプ、降水確率でフィルタリングできます。その後、サービスが残りを実行し、最適な宛先が表示されます。結果は、元のクエリに一致する完全な日数で並べ替えられ、各都市で検出され、上位5つに制限されます。完璧な日もまた、異なる背景でマークされています。

例を挙げたUXデザインとは

前のセクションで定義したユースケースでサービスを使用する方法を見てみましょう。

  1. 風は16〜32 km / hに設定します。これは、凧を飛ばすのに理想的で、雨の可能性が少なく、気温も快適です。
  2. 最低気温を十分に暖かく設定し、雨の確率を0%に設定します。
  3. 気温を0℃前後に設定し、降水タイプとして雪を選択し、降水確率を高くします。
  4. 風速を16km / h未満に設定し、雨や雲が少ないように設定します。晴れすぎないようにし、魚を水深に深く入れ、快適な温度にします。

このアプリケーションは旅行検索サービスのモモンドと統合されているため、必要に応じて、選択した目的地への行き方を簡単に確認できます。

作り方

基本的に、外部の旅行検索サービスを除くすべてがIBMBluemixプラットフォーム内で実行されます。

IBMは、ハッカソンのすべての参加者に無料トライアルを提供したので、アプリをどこで実行するかを心配する必要はありませんでした。

アプリケーション内でデータがどのように流れるか、およびアーキテクチャ図に示されているコンポーネントがどのように組み合わされるかを見てみましょう。

Playアプリは、Dockerコンテナー内でホストされます。そのサービスの1つは、Weather Serviceに連絡して、10日間の天気予報をCloudantにダウンロードすることができます。ダウンロード後のステップで、SparkはCloudantから生の気象データを読み取り、処理してCloudantに保存し、Playアプリケーションからすばやく簡単にアクセスできるようにします。

ユーザーがアプリのメインページに移動すると、完璧な天気を定義するためのさまざまなコントロールを含むフォームが表示されます。彼らの入力はバックエンドに送信され、Cloudantに完璧な日を含む都市を照会します。次に、前のクエリで返された都市の予測の10日間すべてに対して別のクエリが実行されます。得られた結果はユーザーに表示され、セルは1日あたりの都市ごとの気象条件を表します。すべての都市の最後のセルには、旅行サービスへのリンクがあります。それをクリックすると、ユーザーはモモンドのWebサイトに移動し、フライト検索フォームに目的地と旅行日が事前に入力されます。ユーザーが以前にサービスを使用したことがある場合(およびブラウザにCookieが保存されている場合)、出発地と旅行者の数も事前に入力されている可能性があります。もちろん、このフォームのフィールドは変更できます。たとえば、より良い運賃を求めてさまざまな旅行日を試すことができます。

これは、アプリケーションの構築方法とほぼ同じです。次のセクションでは、いくつかのコンポーネントの詳細について説明します。

画像:天気アプリのコンポーネント。

SparkとInsightsfor Weather

プロジェクトの最初のフェーズは、Weather APIおよびその他のBluemixサービスがどのように機能するかを理解することに費やされ、その後、Sparkを使用した最初の気象データの調査が行われました。データモデルがどのように機能し、アプリケーションでどのように使用できるかを理解できました。

このアプリの目的のために、次のWeather RESTAPIエンドポイントの最初のもののみが使用されます。

GET /v2/forecast/daily/10day - Weather Standard 10-day Daily Forecast GET /v2/forecast/hourly/24hour - Weather Standard Hourly Forecast GET /v2/observations/current - Current Weather Observation GET /v2/observations/timeseries/24hour - Time-Series Observation

エンドポイントは、以下を提供することにより、関心のあるすべての都市の天気予報について照会されます。 ジオコード 問題の場所の緯度と経度を取得するパラメータ。

サービスの性質上、Weather APIに対して行われるリクエストの数は、サポートされている都市の数と相関関係があります。 Insights for Weather Serviceの無料利用枠の制限である1日あたり500コールを検討し、デモの目的で、ヨーロッパの50の観光タイプの都市の安全な数に行くことにしました。これにより、都市ごとに1日に数回の呼び出しを実行し、APIを使用する権利を失うリスクなしに失敗したリクエストを処理できます。世界のほとんどの都市をカバーするのに十分なリクエストを受け取るには、支払いを開始する必要があります。

プロジェクトの最終的な目標は、世界のすべての都市のスパーククランチ気象データ(〜50,000)に10日間の予測データを掛けて、1日に数回実行して予測を可能な限り正確にすることです。

すべてのSparkコードは Jupyter ノート。これまでのところ、Sparkジョブを実行する他の方法はありません。生の気象データはCloudantDBから読み取られ、処理されて書き戻されます。

Cloudant NoSQL DB

つまり、Cloudant NoSQLDBを使用するのは非常に楽しいと思いました。使いやすく、優れたブラウザベースのUIを備えています。そのようなドライバーはありませんが、単純なREST APIを備えており、HTTPを介して対話するのは簡単でした。

ただし、BluemixSparkにはCloudantData Sources APIが含まれており、低レベルの呼び出しを必要とせずにCloudantの読み取りと書き込みに使用できます。 CloudantでSparkから新しいデータベースを作成することはできないため、たとえばWebUIを使用して事前に作成する必要があることに注意してください。

PlayFramework

WebアプリケーションはScalaで書かれています。とても簡単です。コントローラーはAngularJSとBootstrapを備えた1ページのアプリを提供し、サービスはWeatherAPIとCloudantと相互作用します。

PHP7を使用する必要があります

私が直面した興味深い課題の1つは、IBM ContainerServiceに直接関係しています。私の意図は、アプリをポート80で実行して、ユーザーフレンドリーにすることでした。ただし、Bluemixで、Dockerポートフォワーディングを使用して外部ポート80をPlayアプリのDocker内部ポート9000にマップする方法が見つかりませんでした。私の回避策は、 ルート コンテナ内(推奨される方法ではありません)およびPlayのapplication.confを編集するには:

# Production port play.server.http.port = '80'

Docker

Dockerは、特にBluemixへのデプロイメント時に非常に便利でした。 Cloud Foundry Appsの知識は必要なく、Scalaビルドパックなどについて心配する必要はありませんでした。 Dockerイメージをプッシュして、実行されていることを確認できます。

Dockerイメージの作成には、Typesafeを使用しました Dockerプラグイン 、だから私は適切なDockerfileさえ必要としませんでした。

短い初期構成の後、クラウドで実行されているアプリを確認するために必要なコマンドはわずかです。

# log in to IBM Bluemix cf login cf ic login # create the image locally sbt docker:publishLocal # rename it docker tag -f my-perfect-weather:1.0-SNAPSHOT registry.ng.bluemix.net/radek1st/my-perfect-weather:1.0 # push it docker push registry.ng.bluemix.net/radek1st/my-perfect-weather:1.0 # and run it cf ic run --name my-perfect-weather -p 80 -m 2048 registry.ng.bluemix.net/radek1st/my-perfect-weather:1.0

Bluemix Container Serviceは、イメージを実行する前に、イメージに対して脆弱性アセスメントを実行することに注意してください。私のアプリにはあまり意味がありませんでしたが、それでもパッチを適用する必要がありました/etc/login.defs親イメージの、実行できるように。これが Dockerfile 興味があれば。

私が遭遇した課題

SparkはまだIBMBluemixに新しく追加されたものであるため、特定の制限があります。現在、コードはノートブックの一部としてのみ実行できるため、実行をスケジュールする方法はありません。これは私がハッカソンのために持っていた時間の終わりにかなりの発見でした。それが何を意味するのか 私の完璧な天気 Sparkノートブックを再実行しないと、提示された天気の日が徐々に古くなるということです 手動で 。 IBMがこの欠点に迅速に対処することを願っています。

また、表示された結果にいくつかの問題があることに気付いた後に表面化したInsights for WeatherAPIのドキュメントに小さな不正確さがありました。のために 降水型 、期待値は 雨 そして 雪 、しかし私はまた3番目の値を見つけました 降水量 。天気のコンテキストからは、雨と雪を示しているように見えるため、アプリを簡単にするために雪として扱われます。

私が誇りに思っている成果

画像:天気アプリでDockerとSparkを使用しています。

おもう 私の完璧な天気 非常にクールなアイデアであり、これらのさまざまなテクノロジーをすべて非常に迅速にブレンドして実装できたことを誇りに思います。それにもかかわらず、それは多くのルーズエンドを伴うハックですが、最も重要なのはそれが機能していることです!

私が学んだこと

この短いプロジェクトで多くのことを学びました。私はIBMBluemixを初めて使用したので、それ自体が冒険でした。

Cloudant DBのことは聞いたことがありませんが、MongoDBの経験があれば、移行はかなり簡単でした。

また、フロントエンドで作業するべきではないことも学びました。私は本質的にバックエンド開発者であり、 物事を美しく見せるための才能 、したがって、BootstrapとCSSの操作は、検索、コピー、貼り付け、変更の演習でした。デザイン、ビジュアル、デモ、一般的なアドバイスを手伝ってくれた妻に感謝します。

私の完璧な天気の次は

気象制御をさらに追加して、世界のほとんど、または少なくとも近い将来にはヨーロッパ全体をカバーするように拡張したいと思います。基準に一致する都市/天気の日が増えると、最も完璧な日を提示するのが難しくなるため、ユーザーのセッションからのデータにSparkMLlibとSparkStreamingを使用する余地があります。

IBMがSparkジョブをスケジュールする機能をすぐに追加して、サービスが完全に自動化されるようになることを願っています。

結論

次の場所に移動すると、コンピューター、スマートフォン、またはタブレットでアプリケーションを自分でチェックアウトできます。 myperfectweather.eu 。

コードをピークにしたい場合は、 Github 。

My Perfect Weatherは、600人近くの参加者がいるIBMSparkathonの競合プロジェクトとして作成されました。大賞とファンのお気に入りを獲得しました。チェックしてください プロジェクトページ 詳細を知りたい場合。

効果的なエンジニアリング管理のための根本的な率直なフレームワークの使用

プロジェクト管理

効果的なエンジニアリング管理のための根本的な率直なフレームワークの使用
なぜ新興市場の通貨は変動するのですか?

なぜ新興市場の通貨は変動するのですか?

財務プロセス

人気の投稿
Linuxカーネル開発の25年を祝う
Linuxカーネル開発の25年を祝う
空の状態–UXの最も見過ごされている側面
空の状態–UXの最も見過ごされている側面
ARKitデモ:拡張現実映画制作
ARKitデモ:拡張現実映画制作
Xamarinを使用したクロスプラットフォームアプリの構築:Android開発者の視点
Xamarinを使用したクロスプラットフォームアプリの構築:Android開発者の視点
チャットボットUX–デザインのヒントと考慮事項
チャットボットUX–デザインのヒントと考慮事項
 
Docker入門:DevOpsの簡素化
Docker入門:DevOpsの簡素化
AWSでのTerraformによるダウンタイムゼロのJenkins継続的デプロイ
AWSでのTerraformによるダウンタイムゼロのJenkins継続的デプロイ
サバイバルメトリクス:起動時のバーンレートを把握する
サバイバルメトリクス:起動時のバーンレートを把握する
RESTアシュアードvs。 JMeter:RESTテストツールの比較
RESTアシュアードvs。 JMeter:RESTテストツールの比較
ApeeScapeは、人材経済をさらに推進するために一流のリーダーシップを活用します
ApeeScapeは、人材経済をさらに推進するために一流のリーダーシップを活用します
人気の投稿
  • php-utf-8
  • パートナーシップまたは法人として課税されることを選択できるLLC。
  • 投資された現金が時間の経過とともに収入を得るという事実は、お金の時間価値と呼ばれます。
  • 過去10年間の音楽業界の統計
  • 新しい日付()
カテゴリー
データサイエンスとデータベース 設計プロセス 分散チーム トレンド Uiデザイン 技術 革新 Kpiと分析 モバイルデザイン アジャイルタレント

© 2021 | 全著作権所有

apeescape2.com