タグ

ブックマーク / www.ne.jp (33)

  • Sparkパーティションメモ(Hishidama's Apache Spark partition Memo)

    概要 RDDはScalaのコレクションのSeqのようなもので、データを順番に保持している。 RDDの内部はパーティションに分かれている。 パーティション毎に別々のサーバーでデータを保持する。したがって、分散処理する際にはパーティション毎に並列に処理される。 mapやfilter等の基的な操作の場合、データの順序は変わらない。 処理によっては、データの順序が変わることがある。(データの順序が保持されない) (例えば重複データの無いRDDであっても、distinctの後は順序が変わってしまう) 「パーティションをどう分けるか」を決めるPartitionerというクラスもあるが、RDDが必ずPartitionerを保持しているとも限らない。 Sparkのパーティション数は、100~1万くらいにするのが良いそうだ。 実際の処理はパーティション単位で並列に実行されるので、各パーティションが各サーバ

    wlbhiro
    wlbhiro 2016/08/01
    coalesceでパーティションを減らす場合、順番はそのまま、均等ではなくなる。増やすことはできない。 repartitionでパーティション数を減らす場合は、均等になるが順番はランダム、増やすこともできる。
  • Spark Kryoメモ(Hishidama's Apache Spark Kryo serialization Memo)

    概要 Spark(1系)のデフォルトのシリアライズ方法は、Java標準のシリアライズである。 つまり、RDDで保持する対象となるクラスはjava.io.Serializable(またはjava.io.Externalizable)をミックスイン(実装)している必要がある。 (Scalaのケースクラスは自動的にSerializableがミックスインされるので、ケースクラスを使う場合は気にしなくて良い) それとは別に、別途シリアライザーを定義しておき、それを使う方法がある。 デフォルトではKryo serializationを使う方法が用意されている。 Kryoを「クリョ」と読んで「言いづらいなぁ」と思っていたのだけれど、「クライオ」と読むらしい^^;[/2014-09-16] Kryoはオブジェクトのグラフ(つまりコレクション?)を効率よくシリアライズ/クローンする為のJavaフレームワーク

    wlbhiro
    wlbhiro 2016/07/22
    kryo=クライオ
  • SparkContextメモ(Hishidama's Apache Spark SparkContext Memo)

    概要 SparkContextの生成 SparkConf [/2014-09-15] マスターURL [2014-09-03] SparkContextのメソッド [/2014-09-15] HDFSのローカリティー [2014-09-04] 共有変数 [2014-08-21] 概要 org.apache.spark.SparkContextは、Sparkで操作を行うための主たる入り口。 最初にdriverでSparkContextのインスタンスを作り、そこからRDDを生成することになる。 ちなみに、SparkContextインスタンスの変数名は、Sparkシェルだとsc、Spark Examplesだとsparkになっている。 SparkContextをインポートする際は、org.apache.sparkパッケージに他に色々なクラスがあるので、丸ごとインポートするのが良い。 また、Spa

  • scala(Hishidama's scala command Memo)

    scalaコマンド Scalaでは、scalaコマンドによってクラスを実行する他に、対話型インタープリターとしてコマンドを入力して実行することが出来る。 REPL(Read Eval Print Loop) REPLとは、コマンドラインからコマンド(Scalaの命令)を入力して、その場でインタープリターが解釈して実行してくれるもの。 ちょっとしたクラス・メソッドを試したい時に重宝する。 (Read=コマンド読み込み、Eval=解釈・実行、Print=結果表示、Loop=それらを繰り返す) 引数なしでscalaコマンドを実行すると、REPL(インタープリター)が起動する。 > scala Welcome to Scala version 2.8.0.final (Java HotSpot(TM) Client VM, Java 1.6.0_22). Type in expressions t

    wlbhiro
    wlbhiro 2016/06/20
    :historyで履歴
  • Embulkローカルファイル出力メモ(Hishidama's Embulk output-local-file Memo)

    S-JIS[2015-08-09/2021-12-19] 変更履歴 Embulk ローカルファイルの出力 Embulkのローカルファイル書き込みのメモ。 概要 ローカルファイルはデフォルトで(追加プラグイン無しで)出力できる。 ファイルの形式はフォーマッターで指定する。 圧縮して出力したい場合はエンコーダーを指定する。 ローカルファイル出力で出力されるカラム(項目)は、入力データの全カラムになる。 カラム名も入力時に付けられたカラム名が使用される。 カラム名を変えたり、カラムの並び順を変えたり、出力するカラムを選択したりしたい場合は、フィルターを使う。 csvファイルの例 config.yml: in: ~ out: type: file path_prefix: /tmp/example/result/store_info file_ext: csv formatter: type: c

  • Embulkフィルターメモ(Hishidama's Embulk filter Memo)

    S-JIS[2015-08-09/2015-09-27] 変更履歴 Embulk フィルター Embulkのフィルターのメモ。 概要 Embulkでは、読み込んだデータを多少加工することが出来る。 これはフィルタープラグインで行う。 出力系のプラグインには、フィルターで加工された後のデータが渡される。 カラム名変更フィルター 入力時に付けられたカラム名を変更するには、「type: rename」のフィルターを使う。 例えば、idというカラム名をsample_id、accountをaccount_idに変更するには、以下の様に記述する。 config.yml: in: ~ filters: - type: rename columns: id: sample_id account: account_id out: type: stdout 実行例: $ embulk preview conf

  • Embulkローカルファイル入力メモ(Hishidama's Embulk input-local-file Memo)

    S-JIS[2015-08-09/2017-07-16] 変更履歴 Embulk ローカルファイルの入力 Embulkのローカルファイル読み込みのメモ。 概要 ローカルファイルはデフォルトで(追加プラグイン無しで)読み込める。 ファイルの形式はパーサーで指定する。 圧縮されているファイルを読み込みたい場合はデコーダーを指定する。 embulkのguessコマンドでローカルファイルを読み込み、レイアウトを推測してymlファイルを生成することが出来る。 csvファイルの例 config.yml: in: type: file path_prefix: /tmp/example/master/store_info parser: type: csv charset: UTF-8 newline: CRLF delimiter: ',' quote: '"' escape: '\' null_st

  • Sparkシェル メモ(Hishidama's Apache Spark shell Memo)

    概要 Sparkシェルは、Sparkの命令をコマンドラインから入力して、その場で実行できるもの。 ScalaのREPLにSparkのライブラリーを入れて使えるようになっている。 Sparkをインストールした場所が「D:\scala\spark-1.0.2-bin-hadoop1」だったとすると、以下のコマンドでSparkシェルを起動できる。 > cd /d D:\scala\spark-1.0.2-bin-hadoop1 > bin\spark-shell 起動すると、(ログもいっぱい出るのだが、それを除くと)以下のような画面が表示され、コマンドを入力できるようになる。 Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /___/ .__/\_,_/_/ /_/\_\ version 1.0.2 /_/ Us

  • Scala Javaコレクション変換メモ(Hishidama's Scala JavaConversions Memo)

    Scala2.8.0では、scala.collection.JavaConversionsオブジェクトのメソッドをインポートしておくと、変換を自動的に行ってくれるようになる。 したがって、Javaコレクションに対しScalaコレクションのメソッドを適用すれば、JavaコレクションからScalaコレクション(のラッパークラス)に暗黙に変換される。 scala> import scala.collection.JavaConversions._ import scala.collection.JavaConversions._ scala> val jl = new java.util.ArrayList[Int] jl: java.util.ArrayList[Int] = [] scala> jl += 123 res0: scala.collection.mutable.Buffer[I

    wlbhiro
    wlbhiro 2016/01/12
    コレクションの変換方法
  • Spark RDDメモ(Hishidama's Apache Spark RDD Memo)

    RDDの不変とは RDDの不変(イミュータブル)とは、“依存RDD(系譜)”と“処理内容”が変わらないという意味であり、「“処理した結果のデータ(値)”が常に変わらない」という意味ではない。[2014-09-08] 「一度出来上がったデータ(値)は、正常な手段では変更されない」という意味では、データが不変と言えなくもないが。 Sparkでは、障害が起きてRDDの一部が消失すると、入力元の(依存している)RDDを使って再処理してデータを作り直す。 基的には、依存RDDのデータ(値)が障害前と同じであれば、再処理した結果のデータも障害前と同じになる。 しかし、障害前と同じにならないケースもある。 破損していない入力データが見つかるまで再帰的に依存RDDを辿っていくことになるが、一番先頭まで辿り着いてしまうと、HDFS等の外部システムからデータを再度読み込むことになる。 もしそのデータの内容が

    wlbhiro
    wlbhiro 2015/08/20
    persist = cache = RDD永続化
  • Spark SQLメモ(Hishidama's Apache Spark SQL Memo)

    概要 Spark SQLは、Spark(RDD)の操作をSQL(SELECT文)で行う為のクラス群。 Sparkをインストールすればそのまま使える。(他に特に何かをインストールする必要は無い) Spark SQLを使う場合、SQLContextとSchemaRDDクラスを使う。 import org.apache.spark._ import org.apache.spark.sql._ val sc: SparkContext = ~ val sqlContext = new SQLContext(sc) import sqlContext._ SQLContextインスタンスはSparkContextを使って生成する。 SQLContextには通常のRDDからSchemaRDDへ変換する暗黙変換メソッドが定義されているので、インポートしておく。 SchemaRDDはRDD[Row]、す

  • Javaアプリケーション メモ(Hishidama's Java-Application Memo)

    JavaアプリケーションはJavaソースを(C言語やC++等と同様に)コンパイルし、コンパイルして出来たファイルを実行するもの。 (実際にはJavaで作った全てのプログラムがコンパイル・実行するものだけれども、ここではJavaアプレットやサーブレットと区別する意味で「Javaアプリケーション」と呼んでいる) javacコマンドでコンパイルし、javaコマンドで実行する。 実行は、クラス内のpublic static void main(String[] args)メソッド(あるいは...)から行われる。 JDK1.5から、main()が実行される前にメソッドpremain()を呼ぶこともやろうと思えば出来るようになった。[2007-11-12] コンパイル方法と実行方法 [/2008-12-20] 単一ファイルソースコードの実行 [2018-10-01] 複数ファイルソースコードの実行 [

    wlbhiro
    wlbhiro 2015/02/27
    バージョン番号一覧
  • Javaスレッドメモ(Hishidama's Java thread Memo)

    概要 Javaでは、マルチスレッド用のクラスとしてThreadが用意されている。[2017-04-15] しかし新しいJavaでは、Threadを直接使う事はあまり無い。 ExecutorService/Future(JDK 1.5)やFork/Join(JDK 1.7)といったクラスが追加されているので、そちらを使う。 Java21で仮想スレッド(virtual thread)が導入された。[2023-09-23] これにより、従来のスレッドはプラットフォームスレッド(platform thread)と呼ぶようになった。 Javaでは、マルチスレッド用のThreadクラスが用意されている。 Threadを継承して独自のクラスを作り、runメソッドをオーバーライドして処理体を記述する。 class スレッドクラス名 extends Thread { @Override public vo

    wlbhiro
    wlbhiro 2015/02/20
    ナノ秒単位でsleep
  • Scala配列メモ(Hishidama's Scala Array Memo)

    配列の宣言方法 Scalaでは、配列はArrayクラスで宣言する。 (C言語やJavaの配列のような、配列宣言専用の文法は無い) Scala Java 備考

  • Scalaオブジェクトメモ(Hishidama's Scala object Memo)

    概要 Javaではstatic(静的)なメンバー(フィールド・メソッド)というものを定義できた。 静的なフィールドとは、アプリケーション内(JavaVM内)に一箇所にしか存在しないフィールド(データ)のこと。 (通常の(動的な)フィールドは、インスタンス毎にデータを保持する) Scalaにはstaticは無い。代わりにシングルトンオブジェクトを作成する機能がある。 シングルトンとは、インスタンスがアプリケーション内に1つしか存在しないこと。 クラスのインスタンスが1つしか作られないとき、その唯一のインスタンスをシングルトンオブジェクトと言う。 ※オブジェクトのメンバーはstaticメンバーの様に扱えるが、実際にはstaticではない Scalaでシングルトンオブジェクトを定義するにはobjectを使う。 classと同様に、他クラスを継承したい場合はextends、トレイトを継承したい場合

    wlbhiro
    wlbhiro 2014/12/01
    scala変数はstaticではない。
  • Scala Listメモ(Hishidama's Scala List Memo)

    ScalaのListはJavaのListとはかなり異なる。 JavaではListは代表的なコレクションのひとつだが、ScalaではSeqが代表であり、ListはSeqの一種。 概要 ScalaのListはJavaのListとは異なり、単方向(片方向)のリスト(かなり原始的でその分シンプルなリスト)である。 継承関係は、Seq←LinearSeq←List。 JavaのListはインターフェースであり、具象クラスでよく使われるのはArrayListやLinkedList。 JavaのListでデータを追加するメソッドはadd()であり、データはリストの末尾に追加される。 ArrayListは内部で配列を使ってデータを保持しており、配列サイズを超えるデータが追加される場合には拡張される。 LinkedListは双方向リストであり、末尾データへの“ポインター(参照)”を保持しているので、末尾へ簡

    wlbhiro
    wlbhiro 2014/12/01
    scalaのlistは来た順に先頭に追加する。
  • Scala Predefオブジェクトメモ(Hishidama's Scala Predef Memo)

    Scalaでは、デフォルトで使える関数がいくつか用意されている。 これらはPredefオブジェクトで定義されており、暗黙にインポートされているのでデフォルトで呼べる。

    wlbhiro
    wlbhiro 2014/12/01
    exit方法
  • Playの雛形メモ(Hishidama's Play framework2.0 example Memo)

    呼ばれる順序 Play2.0の雛形アプリケーションを実行した際に処理(クラス・テンプレート)が呼ばれる順序。 下準備 Play!2.0のアプリケーションを起動する。(サーバーが起動し、TCPポート9000で待ちに入る) ブラウザーで「http://localhost:9000」にアクセスする。 サーバーにアクセスされると、まずconf/routesの設定を参照する。# Home page GET / controllers.Application.index controllers.Applicationオブジェクト(app/conrollers/Application.scala)のindexメソッド(コントローラー)が呼ばれる。package controllers object Application extends Controller { def index = Action {

  • Twilight Space FINAL Linuxメモ

    ディレクトリの同期をとるため、rsyncを実行したところ、以下のようなエラーメッセージが出て終了した。 # rsync -auvz --delete /mnt/samba/BACKUP/ /shares/BACKUP/ ・ ・ ・ rsync error: some files could not be transferred (code 23) at main.c(789) # ネットで調べてみると、code23のエラー原因としては(1)バックアップ元のファイル、フォルダにLinkStation、TeraStationの使用禁止文字が使用されている (2)コピーできない特定のフォルダ、ファイルをコピーしようとしている、が考えられるとのこと。 上のエラーメッセージだけだと、どのフォルダもしくはファイルがおかしいのか分からない。 エラーでコピーできなかったとすれば、再度rsyncを-uオプシ

  • 分散処理から集中処理へ・時代のトレンドを読む

    ここでまず、自分自身の勉強も兼ねてグリッドコンピューティングについて 簡単に説明してみよう。グリッドコンピューティングとは、ネットワークを経由して 接続されているコンピュータに処理を分散させることで、 あたかもスーパーコンピュータを使用しているかのような演算能力を手に入れる 処理方式である。 例えば、有名なのはSETI@homeである。 そこでは最盛期300万台以上のパソコンがネットワークで緩結合されて使用されていたという。 こうすることで、安価にスパコンの演算性能を実現し、かつ、 各ノードの遊休リソースを有効活用するわけである。 これは広帯域なネットワークが拡がってきたことで、初めて可能になったといえる。 時代のトレンドは「分散処理」と「ダウンサイジング」と言われているので、 これは時代のトレンドにマッチした流行のスタイルと言えるだろう。 事実、今や今後のコンピュータの開発を左右する存在

    wlbhiro
    wlbhiro 2014/12/01