White scenery @showyou, hatena

If you have any comments, you may also send twitter @shsub or @showyou.

「Coinhive事件裁判費用」に寄付しました #JHA_Coinhive

www.hacker.or.jp

表題のとおりです。宛先間違えてなければ明日送金されるはずです。(協会名、にほんなのかにっぽんなのかわからないですね)

 

個人的にはCoinhive

  • 告知して使わせるのはOK
  • 告知なしに走らせるのはOUT

と思っています。

 

とはいえ、既に辞めていたこと、対して稼いでいないこと(額の大小が問題ではないのかもしれませんが)等踏まえても 、せいぜい口頭で注意する程度なんじゃないかと思っています。逮捕して取り調べうけてPC差し押さえられて消されるのは酷いよね。

 

というか警察さんはこんなことよりドメイン乗っ取ったりする方をとっ捕まえてほしいです(これは手順が正規っぽいので逮捕難しそうですが)

 

 

あと地裁の判決で、「広告と同じようなものだからOK」とかいう判決が出てましたが、それはちょっと違うんじゃないかなと思いました。(特に興味のない)広告はうざいんで出来れば無くなって欲しいです、広告無いと困るビジネスはそろそろビジネスモデル変えたほうがいいです。

だいぶ前の話ですが、確かサラ金が手法に問題があってWeb広告を取りやめるって話になった時に、「サラ金はWeb広告の多くを占めてるから、無くなるとWebポータルがやって行けなくなる」と語った検索エンジン屋の人がいて、ああク◯だなとか思ったこともあります(誰とはいいませんが今VTuberやってる人です)。

 

---

 

ところでだいぶ前に勤めていた会社で、ちょっと違うんですが困ったことになったことがありまして。一言で言うと「ブラウザのURLを手で書き換えて接続したら、始末書を書かされそうになった」ということなのですが。

 

もうそろそろ時効かと思うんで、もうちょっと細かく書きます。

とある(表に出てない)システムでうまく表示がされないという問い合わせを同期から受けまして、その同期と同じURLでつなごうとしました。

そのシステムがユーザIDをgetパラメータで渡していたため、URLを書き換えたらもしかして他の人の見れるのでは?という気がして変えました。しかし何も表示されないので、別の情報も見て対策されてるのか、まあ当然だよねって感じでブラウザ閉じたんです。

そしたら後で、DB破損されてることが発覚し、アクセスログから自分がURL変えて繋いだことが原因だということもわかりました。そのシステム作った人の上司からは「なんでシステムがおかしいと思った時に報告しなかったんだ」とか「なんでこんなことしたんだ」とか問い詰められ、挙げ句の果てに「始末書書け」って言われました。

(いや、自分の見た目からだと正常に空のページが返ってきたとしか思えないし・・)とか(いやブラウザのURL書き換えただけなんだが・・そもそも同期からの依頼で調査してたわけだし)とか思ったりして、精神的苦痛を受けました。

こういったのってなんとかならないんですかねぇ。

AtCoder Beginner Contest 124(ABC124)に参加しました

前に用事があって遅れたのに、Cが早解き問題でした。そしてAをスマホから提出したら改行されてなくて一回RE食らいました。お通夜モードです。

A:

AとBの方大きい側をピックアップして足して、1引いて、もう一回AとBの大きい方を足す。

https://atcoder.jp/contests/abc124/submissions/4947013

B:

順番にH_i > H_j(jは1~i-1まで)を満たすか判定すればいいです。

https://atcoder.jp/contests/abc124/submissions/4950397

C:

最初に反転しないで2つ目以降一致したら反転するのと、最初から反転させるのの2通りの判定を試す必要があります。

今回なぜかintの値が等しい物同士の比較が不一致になることがあったりして、int関数かけたりしたせいで、問題の割に時間食いました・・何が違ったんだろう?

https://atcoder.jp/contests/abc124/submissions/4953203

D:

1の塊と0の塊に分けて木でも作って、順番に最適なのを取っていく方法を考えましたが、WAとTLE起こしました。そもそも塊見なくて、0->1と1->0に変化するとこ見てればいいんですね。

ただ解説見て実装しても通らないです。。

これが分かりやすそうなので参考にしてみます。

 https://atcoder.jp/contests/abc124/submissions/4964740 

Google Code Jam 2019 - Round 1aに参加しました

結果は1問目だけSmall解けて4191位。ボーダーは1問目Small+3問目Largeを2時間で解くことなんで遠いですね。

 

1問目

RxCのマスを一定の条件の下、全部移動するという問題。

全探索しました。少なくともメモ化するなり、もっと効率の良い方法があるでしょうね。

Smallだけ通過。

gistce682390114b6ed68ce929cef1285093

 

2問目

問題が意味不明だったのでパス。

3問目

恐らく後ろから数文字が一致する組み合わせを、文字毎に区別してカウントするという問題のはずですが・・サンプルは通りましたがWAでした。

一個気づいたのは、

PA
KA
PI
QI

みたいな物が出された場合、

  • Aで韻を踏んでるからPAとKA
  • Iで韻を踏んでるからPIとQI

の4つは取れますよねぇ。このケースはサンプルに無いんで分かりづらいです。

あと何が不足してるんだろう?まあどちらにせよメモ化とかしないとLarge無理ですが。

gista4b13cd8fc9a0939fd1c6e2b1611dbff

Google Code Jam 2019 - Qualification Roundに参加しました

naoya_tさんがカラオケボックスで行うと聞いたので、参加しました。Qualification Roundは他の人との相談OKでした。

結果はAとBが全部通って41ptで通過です。

A

各桁を順番に見ていって、4だったらAのその桁の1を立てるってことをしました。例えば4桁目が4だったらAに+10^4するとか。

毎回N - Aに4の文字が含まれるか見てました。しかし後々考えたら4の時に10^桁増やすので、上位の桁の値が減ることないですね。チェックする数値が0とかならまた変わってきそうですが。

あと毎回数値を10で割って桁数確認してたのですが、最初に桁数数えといてそれだけループ回せばよかったですね。

・・等等いろいろひどいのですが、こんなのでも10^100通りました。Python3のintしゅごい。

gist8ca90e38ae148ccd51e1c8beee4fc837

B

スタートとゴールを結んだ線に対して線対称、もっと言えばSとEを交換すれば完了(・・という助言を頂きました。ただただ感謝)

gist978874d8cb7f5eecb5cf62946e603503

C

まずLarge無視して2つの素数の全探索を行おうと思ったのですが、手元で動いてSampleも通ったのに、本編ではRuntime Errorが出て動きませんでした。Python3.4.3, Python 3.5.1で動作確認済みです。なぜだ・・

REエラーで通らなかった

ABCもあったので途中で断念しました。

AtCoder Beginner Contest 123(ABC123)に参加しました

Bが普段より少し難しく、CがBよりも楽でした。

 

A

e-a < k

https://atcoder.jp/contests/abc123/submissions/4844897

B

全探索しても5!=120通りなので、深さ優先で全探索しました。深さ優先探索に書きなれてなくて時間かかりました。

https://atcoder.jp/contests/abc123/submissions/4850115

C

各点から次の点に行くまでのコストが全部1で、効率化も図れなさそうでした。

なので、一番ボトルネックになってる所が、そのまま時間に影響すると踏みました。

よって、math.ceil( n/ a~eの最小 ) - 1 + 5を答えとしました。

https://atcoder.jp/contests/abc123/submissions/4852114

D

解説見ずに解けませんでした。

純粋に全ての組み合わせで計算していくとどう考えてもTLEなので、途中でA+BにCの最大値を足しても和のリストのK番目以降だったら、それ以降除外(A, B, Cは降順にソート)したらどうかと思いましたがダメでした。

解説見ると、A+Bの和の上位K件とCの和を足したらなんとか行ける的なことが書いてますが、Pythonだと時間が厳しいです。

自分の書いたコードだと最後のテストがTLEになる一方(https://atcoder.jp/contests/abc123/submissions/4864733)、他の人のはギリギリ2000msecになったりします(https://atcoder.jp/contests/abc123/submissions/4865171)。

 

それよりかは、a*b*c <= K の条件を使ったほうがいいでしょうね(https://atcoder.jp/contests/abc123/submissions/4866932)。ただなんとなくaとかが団子状態になってたら、a*b*d > Kでもa+b+cの順位がK番目以内に入ってきそうな気もするんですが・・

 

今回運良くCが素早く解けたので、レートが上がりました。Cをコンスタントに解いて緑に上がれるといいです。

 

あと全然関係ないですが、今日の昼はGoogle Code JamのQualification Roundに参加してました。こっちはまだ続いてるので回答書きませんが、1日に2つのコンテストはハードですね。

 

4/7 1:25 追記

D問題の自前で書いてTLEになる方(https://atcoder.jp/contests/abc123/submissions/4864733)、処理系をPython3(CPython)からPyPyにしたところ、余裕で通るようになりました。それでも自分で元々考えてたコードは遅すぎてTLEなのですが・・。Pythonで時間が気になる場合はPyPy選んだほうがいいのかもしれませんね。

JavaScriptから縦持ちのCSVデータを読み取ってPlotly.jsで可視化した

注:方向性が偏っている事をご容赦下さい ちょっとTwitterの発言を集計してcsvファイルにして、それをPlotly.jsを使って、チャートとして表示するプログラムを組みました。

f:id:showyou:20200328134653p:plain

元データ f:id:showyou:20200328134632p:plain

ちょっとチャートの表示時刻と元データで時間がずれてます。

プログラムは、動く実物はこちらにございます。

何をしたか

参考1に沿ってLine+markersのチャートを作るのと、参考2を参考にcsvからチャートに行う物の、両方を行いました。

まずcsv2Arrayでcsvデータを配列にしています。これは参考2と一緒です。

function csv2Array(str) {
  var csvData = [];
  var lines = str.split("\n");
  for (var i = 0; i < lines.length; ++i) {
    var cells = lines[i].split(",");
    csvData.push(cells);
  }
  return csvData;
}

次に名前が与えられた時に、それが何番目かを返す関数を作っています。これは、恐らくplotするときのデータに連想配列が使えないからです。 今さらだけどforループしなくてもhoge['名前'] = 要素番号にしておけばもっと効率いいことに気づきました。でももっとマシな方法はあるはずです。

// n をidに変換する
function getId(name, n){
    for ( i = 0; i < 9; i++){
        //console.log(i)
        //console.log(name[i]);
        //console.log(n);
        if( name[i] == n ){
            return i
        }
    }
    return -1
}

最後にチャートを描画する部分です。これも参考2をベースにしてますが、

  • データが縦持ちである
  • Plotlyを使っている

辺りでアレンジをしています。

今回種別が9種類と決まっているので、forループで9回と固定してます。通常は連想配列の大きさを見たほうがいいかもしれません。 names, colorsはほぼ定数なので関数の外に出してます。

あとちなみに普段はPython使ってるのでJavaScriptは詳しくありません。Pythonならdefaultdictとか使えるんだけどなぁ。

function drawLineChart(data, div) {
    var output = {}; // データを入れるところ    
    var x = [], y = [];
    var i;

    //配列の配列の、初期化
    for ( i = 0; i < 9; i++){
        x[i] = [];
        y[i] = [];
    }
    
    // データ1行毎に、xyに値を格納
    for (var row in data){
        id = getId(names, data[row][1]);
        //console.log(id)
        if(id >= 0){
            x[id].push(data[row][0]);
            y[id].push(data[row][2]);
        }
    }
    
    var output = [];
    for ( i = 0; i < 9; i++){
        output[i] = {
          name: names[i],
          x: x[i],
          y: y[i],
          line: {
              color: color[i]
          },
          mode: 'lines+markers'
        }
    }

    var layout = {};

    Plotly.newPlot(div, output, layout, {showSendToCloud: true});
}

補足

Q:サイトへのアクセスありますか? f:id:showyou:20200328134613j:plain

また、集計自体は(Twitter上で公開されてるデータとはいえ)非公式で行ってます。なので公式から怒られたら消します。

集計部分についてのロジックは要望があれば後ほど載せます。

参考

  1. Line Charts in Plotly.js https://plot.ly/javascript/line-charts/
  2. CSVデータをchart.jsでグラフ化する! https://qiita.com/tabetomo/items/f1fa423bf826a1d2efb8

Hadoop / Spark Conference 2019 感想とログ #hcj2019

イベント情報:

https://www.eventbrite.com/e/hadoop-spark-conference-japan-2019-tickets-56807065462

所感

Hadoop, YARNに関しては新しい情報はあまり無かった気がします。Hadoopは周辺のテクニックとかの話が多かったと思います。

HDFSに関してはOzoneというS3のような新ストレージが紹介されていました。

一方でSparkSQLのチューニングに関しては3連続でセッションが続いてました。内容とはしては

  • EXPLAINしてボトルネック見つけろ
  • とにかくMerge Joinはshuffle挟むんで遅いから、EXPLAIN ANALYZEしてBroadcast hash joinに持ち込め(HiveにおけるMap side joinみたいなもの?)

といった感じでした。

あと自分は観ていないですがKafkaのセッションが大人気だったようです。Spring XD・・ それとk8s(Kubernates)の勢いは驚異に感じてるようでしたね。Sparkも新しいバージョンでk8sサポートしてるようです。

PrestoとSparkSQLのどちらが早いかに関しては、懇親会で「メモリに乗り切るならPrestoの方が早い」とお聞きしました(あくまで伝聞なので注意)。

ただ現状Hadoopクラスタ用意出来るのって(AWSのEMRとかもあるものの)大抵オンプレミスでマシンを用意できるところに限られていて、小規模なとこはBigQueryに集約しちゃうんじゃ?って感じもします。流石にタブーなのか、会の中で一言もBigQueryって単語は出てこなかったですが。DPCTでリクルートテクノロジーズの方はHadoopからBigQueryに移ったようなことおっしゃってましたし。あと個人的にはBigQueryは完全ベンダーロックインなのも気がかりです。

さらに、Tensorflow/Pytorch on k8sとon Spark(+ on k8sもあるかもしれませんが)の棲み分けどうすんだって気もしました。

ログ(メモ)

基調講演

hamakenさん

Hadoopは終わりつつあるのでは?

Apache Hadoopの現在と未来

Ajs_kaさん@Yahoo Japan

事前アンケートの結果

Hadoopの現在と未来

  • 様々なデータストアに対応
  • クラスタを束ねることでマスタの負荷を軽減
  • オブジェクトストレージ機能の開発(Ozone)
  • HDFS Erasure Codingによるディスクの節約
  • Submarine: YARNの最新機能をつかって、TensorFlow, PyTorch等をHadoop上で分散実行させる

  • 現在の課題

  • 今後の野望

    • Java 11への対応
    • リリースサイクルの加速化

The Ozone Object Store

Arpitさん@cloudera

  • HDFSの限界

    • 小さいファイルが非効率
    • 3億ファイルが限界
  • New opportunities

    • Streaming
    • Cloud-like
    • S3 to ingest data
  • 以下を満たすデータストアが必要  - 既存のアプリケーションがそのまま動く  - 既存のHDFSからそのまま移行できる

What is Ozone

  • A spiritual successor to HDFS
  • Roadmap: support k8s
  • 最初は100億オブジェクトをサポート
  • ネイティブメモリを使ってJava GCを回避

Ozoneユースケース

  • オンプレのS3

What makes Apache Spark

猿田さん

  • バージョン2の途中でSparkの性能が10倍に上がった?
  • Spark 3.0 AI関連 Project Hydrogenがリリース
  • Structured Streaming
  • Pythonからの活用、Pandas UDF
  • AI/Deep Learning関連
  • Sparkの使われ方
    • バッチ、ETL、データ分析は多い AIはこれから
    • k8s: Spark 2.3からサポート
  • 現時点ではYARNの利用が圧倒的
  • Spark 3.0での予定:GPU, FPGAの活用等

What's Next for Apache Spark 3.0

Xiao Liさん@Databrics

Spark 2.4のMajor Features

  • Spark on K8s, Avro Support, Image source
  • Unified AnanyticsがAI成功の鍵
  • Unifying data science & engineering

Project Hydrogen:

  • gang scheduling DLのジョブをSparkのstageとして埋め込む
  • GPU Aware scheduling
  • Mlflow
  • Graphライブラリの課題:GraphXがあまり活発に開発されてない
  • Cypher: グラフライブラリの新版?

Data Source API v2

  • Streaming support, columnar scan, statics and data partitioning, Transactional CTAS, RTAS
  • クエリ実行時の再最適化
  • Navive Spark Apps on k8s Spark3.0のfeature:Hadoop 3.0 support

Cloud-Nativeなデータ分析基盤でのPrestoの活用

廣瀬 智史さん@SmartNews https://speakerdeck.com/satoshihirose/cloud-native-data-infrastructure-with-presto

  • 2014年当時:S3 -> MR(pythonのMR job) + MongoDB
  • Presto導入後:S3+ Presto + Hive
  • 今:Hive/Spark + EMR + S3, 広告配信と?でHive Metastoreが分かれている
  • Prestoでデータ統合をしている
  • PrestoはEMR使わずにEC2上にクラスタを構築している
  • 課題:バージョンアップ追従仕組み 監視強化 RCFile->ORCへの移行 Streaming Processingの拡充
  • Presto Software Foundation: Facebookじゃない団体で設立 PrestodbからPrestosqlへ分岐

OASIS: SPARK

Yoshida Keijiさん@LINE https://speakerdeck.com/line_developers/oasis-lines-data-analysis-tool-using-apache-spark

  • BI Dashboard
  • Security: Rangerでファイルへのアクセスを管理
  • マルチテナントのクエリ安定性を求めるためにSpark採用
  • ZEPPELINE使っていたが
    • スケジューラで実行するときに、別ユーザで実行できてしまう
    • yarn-clusterモードが使えず、1台に1Sparkアプリケーションを入れる必要がある OASIS
  • 1 notebook sessionに付き1 spark appricationとしてyarnに割り当てられる
  • HDFSへはノートブックのユーザでアクセスされる
  • サービスごとにSPACEを作り、SPACE内でnotebookは共有される
  • スケジューリング
  • DAU 200人ほど
  • Hadoop Cluster: 500 Datanode, 30PB, 150 hive database 1,500 hive tables
  • Data Engineering Meetup https://dem.connpass.com/event/120994/

C会場 LT

Flink SQL Client

Kimura Sotaroさん@dot Data https://www.slideshare.net/SotaroKimura/flinksqlclient-136105751 YAML, コードでデータの投入管理

(昼食とってた為メモなし)

Sonnet の Impala

菅沼 嘉一さん@So-net Media Networks https://www.slideshare.net/suganoo1/2impalahadoop

  • Total 2PB, 8TB/day
  • CDH 5.15
  • Data Node 20台: 8TB
  • メタデータ: AWS RDB
  • Impala: hiveから1時間毎にImpalaクエリ実行
  • データ容量が90%近くなると性能落ちる
  • DBパーティション数は20万/ Clouderaの推奨は3~5万
  • バージョンアップはどこかでミスがあるとインストールできなくなる(戻るは押さない)
  • Active-Stanbyを取っている。データコピーはdistcp

Sparkを使うためのApache Livy

@Yahoo Japan

  • Apache Livy: SparkをRestfulに使うAPIサーバ
  • Spark jobがLivy経由でされるようになった
  • Jupyter ZeppelinからSparkを利用できるようになった
  • HA対応まだしてない

Introduction to Apache Hivemall v0.5.2 and v0.6

myuiさん@Treasure Data

HivemallはHive, Spark(Dataframe, SQL, steram), Pig上で動く

  • 0.5.2: Birckhouse UDF, Field-aware Factorization Machines, Okapi BM
  • 0.6: Adam HD, Gradient Boostring, XGBoost, Sparse Vector, Support Spark 2.4
  • 0.7: Word2Vec, Multi-cass LogiReg, Grid search, Yarn SQL on hadoopは何がいいか? -> Tez+Yarnがいい。Sparkはリソース食いつぶす

1日100個以上のHadoopクラスターを使い捨てる方法 & Spark Streamingで全世界の混雑状況を20分ごとに集計

ソフトバンク株式会社 中里 浩之さん 濱田 佑さん https://speakerdeck.com/nakazax/how-to-throw-away-100-hadoop-clusters-a-day

  • 2016: ETL EC2 + Jenkins on EC2 -> Redshift スケールできない
  • Spark on EMR、1時間分のETLを1クラスターが担当
  • 1日48個(多い日は200個くらい)くらいEMRインスタンスが立っている
  • EMR:ステップ機能が使える
  • Lambda(Python)でRunJobFlowをコール、パラメータが非常に多い。HOCONを利用 時刻をプレースホルダにしてjenkinsから起動
  • Glue Data Catalog フルマネージドHiveメタストア SPOF回避、同時接続数制限なし

Deep Dive into Spark SQL with Advanced Performance Tuning

上新 卓也さん(Databricks)

https://www.slideshare.net/ueshin/deep-dive-into-spark-sql-with-advanced-performance-tuning

  • Databrick Platform: AzureとAWSで使用可能
  • Sparkアプリケーション、ライブラリもSparkSQLをベースにしている
    • MLlib, GraphFrameなど
  • Spark SQL : queries から RDDsへのコンパイラ
  • Run EXPLAIN Plan
  • Interpret Plan
  • Tune Plan

Delarative APIs:

 何をしたいのか を定義   SQL/ Hive QL, Dataset(コンパイル時に型情報が必要なのでJava, Scalaのみ)/DataFrame APIs   DataFrame APIはuntypedなフレーム処理、Datasetはtypeなフレーム処理

Metadata Catalog:

  • Hive metastore
  • temporary view manager
  • global temporary view manager
  • funtion registry(セッション毎に登録しなおす必要がある)
    - PySpark Python UDF / Pandas UDF
    - JavaによるNative UDAF インタフェース
    - Hive UDF/UDAF
    - Higher UDF
    

Partition metadata取得のコスト - Hive metastoreのアップグレード - Cardinalityの高いパーティションカラムを避ける - Partition pruning predicates

Cache Manager - プランが一致したときにキャッシュデータと置き換える - Cross session

Cache 多すぎるとディスクに書き出されることがあり、遅くなることがある。不必要にキャッシュしないことが大事

Optimizer

Planner

  • Logical PlanをPhysical Planへ コストに基づいて最適なPhysical Planを選択
  • Broadcast Joinが使えればMarge sort joinではなくこちらを使う(片方のテーブルがメモリに乗れば)
    • autoBroadcastJoinThreshold
    • 統計情報がたまにおかしくなるので、EXPLAIN ANALYZEを実行してを最新に保つ
  • Broadcast joinヒントを使って強制的にさせる
  • Equal joinを使う
    • =をjoin keyに含めたjoin
    • =があるとO(n),ないとO(n2)

Query Exection

  • Memory Manager
    • Spark.executor.memoryとspark.memory.fractionを、監視外メモリのため、余裕をもって設定する。Netty buffer とparquetwriter bufferはSparkが監視できない
    • Off-heapを有効化
  • Code Generator

Data Sources

  • computationとstorageの分離
  • Scan Vetorization(Parquet, ORC)を使う
    • JVMSIMDを利用しやすくなって高速化, Parquet 10倍早くなった事例も
  • Partitioning and Bucketing使う

An Insider’s Guide to Maximizing Spark SQL Performance

Xiao Liさん(Databricks)

https://www.slideshare.net/ueshin/an-insiders-guide-to-maximizing-spark-sql-performance

(注:資料公開されないと運営から言われていましたが、公開されました。感謝!)

Engineering manager

Focus: Catalyst Optimization & Tungsten Execution

  • Read Plan
  • Interpret Plan
  • Tune Plan
  • []? (わからず)

  • これまでのSparkはSQLのPlanが表示できなかった?? Spark 3.0で改善

  • なんで!=0(0.0でなし) で0.35のデータが弾かれるんだろう・・ -> Explainするとintにcastしてることが分かる
  • hiveでテーブルを作った場合、Hive serde readerはSpark native readerより遅いので、spark.sql.hige.convertMetastoreOrc = Trueを使う (注:hive-serde tableとnative tableの違いわからず) (注:Pushed downってなんだ?)
  • ORC(Spark navite table)使うと、自動でcastされることがある nestedPluneSchema, trueを使え
  • 1回別のセッションでクエリをキャッシュすると、別のセッションでも同じクエリならキャッシュが使われる
  • Job Tab in Spark UI
    • Jobs
    • Stages ○ ステージごとのタスク所要時間が分かる
    • Tasks
  • Executors Tab
    • メモリ使用量やデータ転送量が分かる
    • Thread dumpで詳細が分かる
  • Storage Tab
  • (Linkedinがqueueシステムを作ってる?) f:id:showyou:20190315094640j:plain f:id:showyou:20190315094709j:plain f:id:showyou:20190315094730j:plain f:id:showyou:20190315094749j:plain f:id:showyou:20190315094806j:plain f:id:showyou:20190315094829j:plain f:id:showyou:20190315094851j:plain

Spark SQL の性能改善の取り組み

Yoshida Keijiさん@LINE https://speakerdeck.com/line_developers/improving-spark-sql-performance

  • Cbo.enable = False ルールベース使う
  • ユーザのクエリを変えずに性能を向上させる

    1. 統計情報を使う
      • 例:sort merge join -> broadcast hash join
      • autoBroadcastHashJoinThrethord = 10MB 設定
      • OASISで作るとき、自動的に統計情報を取る?
    2. 独自最適化ルールを加える
      • hiveで作られたデータ、sqoopからロードされたデータはLOAD DATAが呼ばれ、統計情報が取られない
      • extraOptimization使って自前の最適化ルールを作る。今回の場合はデータ量見てbroadcast hintを加える
    3. CBOを使う
      • Spark 2.2.0~使用可能、ただしdefaultではcost baseはoff(DatabricsはCBO on)
      • join順番を最適化できる
      • CBO on で速度10倍
      • Cost=weight * numOfRows + (1.0 -weight) * dataSize weightはデフォルトで0.7。いかにカラムの統計情報を、最小限、自動的に取るかは課題
  • Q: 独自ルールを加えた時、テストをどう行っている?難しいと思うんだけど

  • A: テストは行っていない

マルチテナント Hadoop クラスタのためのモニタリング Best Practice

平野 智巌さん(楽天株式会社)

  • 楽天市場で使っているHadoop
  • サービスの例:CustomerDNA, Rakuten Airis(注:AIというかレコメンド?)
  • 420 Slaves, 30PB, 70000-80000jobs, 80teams, MR, Hive Tez, Spark, Spark ML, Sqoop, Hbase, Slider 4 clusters(Japan, oversea)
  • 600+ account, 70000+jobs
  • 細かなチェックできない、申請したら使ってもらう
  • Small Hadoop Admin Team: 2.5人+マネージャで回している

  • グラフの作り方 Graphite + Grafana

  • 最重要ダッシュボード
  • マルチテナント特有のダッシュボード

  • 中間ファイル格納用にSSDを追加することで、処理速度を改善

  • 7億ファイルあって限界が来ている
  • Q: Hiveでテーブル作るとHDFSがHiveユーザで作られる気がするが? A: 弊環境ではHiveテーブル作ると各ユーザで作られる
  • (注:しきい値設けてアラートをメールかチャットに飛ばせばいいのでは?と思いました)

おまけ

観てないので紹介だけ。

DataFrameとDatasetの内部をのぞいてみる

石崎 一明さん@日本IBM 東京基礎研

https://www.slideshare.net/ishizaki/hscj2019ishizakipublic

Hive/Spark/HBase on S3 & NFS -- HDFSを運用しない気軽Hadoop/Spark

Yifeng Jiang‏さん

https://www.slideshare.net/uprush/hive-sparks3acommitterhbasenfs

Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ

関山 宣孝さん@AWS

https://www.slideshare.net/ssuserca76a5/hcj2019-hadoop-sparks3/ssuserca76a5/hcj2019-hadoop-sparks3

スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム

井島 洸二さん@Yahoo Japan

https://www.slideshare.net/techblogyahoo/hadoop-spark-conference-japan-2019-yosegi-135810726

(2019/03/15 10:00追記)

HDFSにおけるサポータビリティ(保守性)の改善について

Kobayashi Daisukeさん@Cloudera

https://www.slideshare.net/Cloudera_jp/hdfs-supportaiblity-improvements

Arrow_FDW ~PostgreSQLで大量のログデータを処理するためのハードウェア最適化アプローチ

KaiGai Koheiさん@HeteroDB

https://www.slideshare.net/kaigai/20190314-pgstrom-arrowfdw