タグ

ブックマーク / masayuki038.github.io (31)

  • Transaction protocol of Delta Lake

    Databricks から Delta Lake というモジュールがリリースされました。これは Databricks で提供している Delta という Transactional なストレージの一部を OSS として公開したようです。このモジュールは現在 Spark に対応しています。 この Delta のトランザクションの仕組みが気になったので、GitHub に公開されているコードを clone し、データを append / overwrite するテストコードを動かしてトランザクションがどのような仕組みで実現されているか調べてみました。 Setup 公開されたコードは GitHub にあります。Scala が動く環境であればテストコードを動かすことはできます。Windows の場合は winutils が必要です。 package は org.apache.spark.sql.de

    msykt
    msykt 2019/04/29
    Delta Lake のトランザクションの仕組みを調べてみた
  • Java / Gandiva on Windows

    Apache Arrow の Issue を watch していたら、Gandiva が Windows 環境でも動くようになっていたので、開発環境を構築しました。 C++ Development Setup Gandiva は C++ で開発されているので、まず C++ の開発環境が必要になります。WindowsC++ の開発環境の構築に関しては、以下に記載されています。 Developing on Windows 今回は Visual Studio 2017 の Community をインストールしました。 Compile Apache Arrow は 様々な言語に対応していますが、それらを1つの git リポジトリで管理しています。

    msykt
    msykt 2019/04/07
    Windows 環境で gandiva_jni.dll をビルドしてテストが動くのを確認しました #gandiva
  • Hadoop / Spark Conference 2019 Japan

    3⁄14 に開催された Hadoop / Spark Conference 2019 Japan に行ってきました。参加したセッションの内容と感想を書いてみました。 Hadoop / Spark Conference Japan 2019 ご挨拶・開催にあたって 「Hadoop もう終わりつつあるのでは?」と思われがちだけど、HDFS とか YARN といった技術は分散並列処理の基盤として主流だよ、という話。実際「Hadoop」という文字を Web の記事等で目にすることはかなり少なくなりましたが、分析基盤の構築の事例はまだ結構見るので、それらを支える技術として進化しているようです。 Apache Hadoopの現在と未来 参加申請の時に取ったアンケート結果の発表から。オンプレでの運用が多いのと、Kudu を使っているところがあったのが面白いな、と。あとは新機能の Hadoop Subma

    msykt
    msykt 2019/03/17
    3/14の Hadoop/Spark Conference 2019 Japan に行ってきたので、参加したセッションの内容と感想を書いてみました。 #hcj2019
  • Failed to generate Javadoc on JDK11

    JDK11 で Javadoc の生成に失敗することがありました。 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:3.0.1:jar (attach-javadocs) on project sqlline: MavenReportException: Error while generating Javadoc: [ERROR] Exit code: 1 - Picked up JAVA_TOOL_OPTIONS: -XX:+UseContainerSupport [ERROR] javadoc: error - The code being documented uses modules but the packages defined in https://docs.oracl

    msykt
    msykt 2019/03/10
  • sqlline の実行環境を jlink で作成する

    JDBC 経由で DB に接続したい時に、sqlline という SQL コマンドラインツールを使っています。このツールは既に fatjar や Docker Image でも提供されているのですが、JRE や Docker をインストールしていない環境でも使いたいことが何度かありました。 Java 9 から jlink というツールが提供されています。このツールは、実行可能なバイナリを含んだ JRE を生成します。生成する JRE には、必要なモジュールのみを含められるようになっている為、ファイルサイズを抑えることができそうです。 当初はこの jlink を使って sqlline の実行可能なバイナリを作成しようとしたのですが、jlink は automatic module (Java 9 以前の module-info.java が無いモジュール) に対応していない為、実行可能なバイ

  • parquet-cli-java

    dev@parquet.apache.org で、parquet-mr の古いモジュールの廃止案が出ています。廃止対象の中には Parquet ファイルの情報を出力する Command Line Tool の parquet-tools も含まれています。 [DISCUSS] Remove old modules? parquet-tools は Parquet ファイルの情報を確認するのに便利だったのですが、parquet-cli もあるので 2つ CLI をメンテするのはどうなんだろう?という話になっています。 私は parquet-cli は使ったことが無かったので、使い方を調べてみました。(2019/02/17 時点) なお私が知る限りですが、「parquet-cli」という名前のツールは parquet-mr に含まれている Java のツールと、chhantyal/parque

    msykt
    msykt 2019/02/19
    parquet-cli(java)について書いた。
  • Update Octopress to 3.0

    大分blogの更新をサボっていましたが、GWでちょっと時間ができたので、Octopressを3.0にアップデートしました。最初に構築した際の事もあまり覚えてなかったので、アップデート作業の内容と課題を書いておきます。 Docker 元々Octopress用のDockerコンテナを作っていて、そこでblogの更新をできるようにしていたので、今回のアップデート作業で失敗しても良いように一旦commitしてイメージを作ってから始めました。アップデートに失敗しても環境が壊れる心配をしなくて良いのが嬉しい。 Ruby Travis CIのoctopressのページを見ると、Rubyのバージョンは2.0.0と1.9.3でテストしており、どちらも特に問題がないのでRubyのバージョンを1.9.3 => 2.0.0にアップしました。また、このコンテナにはRubyをパッケージインストールしていたのですが、r

    msykt
    msykt 2016/05/05
    octopressのアップデートの顛末について
  • Getting Started with Quasar

    Quasar - Fiber, Channel, Actor Quasarは軽量スレッド、GoライクなChannl、ErlangライクなActorや、非同期プログラミングツールを提供するJavaのライブラリです。 今回は、Fiber、Channel、Actorを試してみました。 Bytecode Instrumentation このライブラリを使うには、Instrumentationを使ってバイトコードの書き換えを行う必要があります。この書き換えは、JVMの起動オプションにQuasarが提供するJava Agentを指定して実行時に書き換えを行うか、もしくはAntタスクを使って事前に書き換えを実行してく必要があります。今回はJava Agentを使って試してみました。どちらの使い方も以下のページに記載されています。 GETTING STARTED - Instrumenting Your

    msykt
    msykt 2015/01/04
    ブログ書いた。「Javaで軽量スレッド、Channel、Actorが使えるQuasarを使ってみた」
  • Debugging Maven Plugins

    Maven plugin throw some exception eclipseでincubator-parquet-mrのコードをビルドする為に、mvn eclipse:eclipseを実行したところ、以下のエラーが出ました。 [ERROR] Failed to execute goal com.twitter:scrooge-maven-plugin:3.9.0:compile (thrift-sources) on project parquet-scrooge: Execution thrift-sources of goal com.twitter:scrooge-maven-plugin:3.9.0:compile failed. NullPointerException -> [Help 1] org.apache.maven.lifecycle.LifecycleExec

    msykt
    msykt 2014/08/25
    ブログ書いた。Maven Pluginのエラーに遭遇した時にその場でデバッグする方法
  • CouchDB Source Code Reading part7

    couch_db:update_doc/4 前回はHTTP経由でドキュメントを更新する流れを見てきました。今回は更新まわりのより深いところを見ていこうと思います。前回の流れからcouch_db:update_doc/4を見ていきます。 couch_db.erl: 1update_doc(Db, Doc, Options, UpdateType) -> 2 case update_docs(Db, [Doc], Options, UpdateType) of 3 {ok, [{ok, NewRev}]} -> 4 {ok, NewRev}; 5 {ok, [{{_Id, _Rev}, Error}]} -> 6 throw(Error); 7 {ok, [Error]} -> 8 throw(Error); 9 {ok, []} -> 10 % replication success 11

    msykt
    msykt 2014/07/12
    ブログ書いた。『CouchDB ソースコードリーディング その7』
  • CouchDB Source Code Reading part4

    couch_db_updater:refresh_validate_doc_funs/1 今回はcouch_db_updater:init/1から呼び出している関数の中でまだ見ていないrefresh_validate_doc_funs/1を読んで行きます。 couch_db_updater.erl: 1refresh_validate_doc_funs(Db0) -> 2 Db = Db0#db{user_ctx = #user_ctx{roles=[<<"_admin">>]}}, 3 DesignDocs = couch_db:get_design_docs(Db), 4 ProcessDocFuns = lists:flatmap( 5 fun(DesignDocInfo) -> 6 {ok, DesignDoc} = couch_db:open_doc_int( 7 Db, Des

    msykt
    msykt 2014/06/16
    ブログ書いた
  • CouchDB Source Code Reading part3

    couch_db_updater:init_db/6の以下の部分を掘り下げてみたいと思います。 couch_db_updater.erl: 1 {ok, IdBtree} = couch_btree:open(Header#db_header.fulldocinfo_by_id_btree_state, Fd, 2 [{split, fun(X) -> btree_by_id_split(X) end}, 3 {join, fun(X,Y) -> btree_by_id_join(X,Y) end}, 4 {reduce, fun(X,Y) -> btree_by_id_reduce(X,Y) end}, 5 {compression, Compression}]), 6 {ok, SeqBtree} = couch_btree:open(Header#db_header.docinfo_

    msykt
    msykt 2014/06/08
    ブログ書いた。『CouchDB ソースコードリーディング その3』
  • CouchDB Source Code Reading part2

    couch_db_updater:init/1 前回はヘッダ部を読み込むコードを読んだので、今回はDBの読み込み準備?のところを読んでみます。couch_db_updater:init/1からinit_db/6を呼び出す手前のところから。 couch_db_updater.erl: 1init({MainPid, DbName, Filepath, Fd, Options}) -> 2(..sinp...) 3 ReaderFd = open_reader_fd(Filepath, Options), 4 Db = init_db(DbName, Filepath, Fd, ReaderFd, Header, Options), 5 Db2 = refresh_validate_doc_funs(Db), 6 {ok, Db2#db{main_pid = MainPid}}. ヘッダ読み込

    msykt
    msykt 2014/05/26
    ブログ書いた。『CouchDB ソースコードリーディング その2』
  • CouchDB Source Code Reading part1

    Why CouchDB? 数年前にCouchDBのデータフォーマットについて解説しているページを読みました。CouchDBの内部ではデータをB+treeで保持しており、且つデータはappend onlyでMVCCである、という部分が面白くて、その時からCouchDBに興味がありました。しかしコードがErlangで書かれており、当時の私にはCouchDBのコードを読むことができませんでした。 1年ほど前からErlangのコードにちょっとずつ触れるようになり、CouchDBのコードも時間をかければ読めるような気がするので、気が向いた時にちょっとずつ読んでいこうと思います。 当はある程度読んでまとめてからアウトプットしようと思っていたのですが、正直言ってかなり苦戦していて、まとめられる気がしなくなったので、読んだところからダラダラと書いていくことにしました。ですので、続かないかも。 Sourc

    msykt
    msykt 2014/05/25
    ブログ書いた。『CouchDB ソースコードリーディング その1』
  • Development Environment For Rails4 With Docker And Ansible

    DockerとAnsibleを使ってRails4の開発環境を作ってみました。 Environment ruby2.1.0 rails4 emacs24 ruby-mode rinari rhtml Docker Dockerfileにはsshdでログインできる程度の下地を作るところまでを書いています。 Dockerfile: 1FROM ubuntu 2 3ADD sources.list /etc/apt/ 4RUN apt-get update 5RUN apt-get install -y vim 6RUN apt-get install -y openssh-server 7RUN apt-get install -y sudo 8RUN echo "masayuki ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers 9RUN mkdir /var/r

    msykt
    msykt 2014/02/22
    ブログ書いた。"DockerとAnsibleを使ってRails4の開発環境を構築する"
  • Serf Source Code Reading part2

    前回のmemberlistに続き、今回はserfのコードを読んでみました。 Serf Summery serfは、memberlistを利用してクラスタ内のノードのJoin/Leaveやユーザ定義のイベントをフックし、各イベントにマッピングされたユーザスクリプトを実行します。 Packages serfは以下の3つのpackageで構成されています。 serf memberlistを作成 memberlistのメッセージングの仕組みの拡張 UserEvent ノードの状態をスナップショットとして保存し、リストアする仕組み agent 各ノード上で起動されるプロセス コマンドからのリクエストを受け付けて処理し、結果を返す command CLI 任意のノードのエージェントにリクエストを投げ、レスポンスを表示する Full State Sync Message Expansion serfはm

    msykt
    msykt 2014/01/20
    ブログ書いた。「Serfのコードを読んでみた その2」
  • Serf Source Code Reading

    このところ、Serfのコードを読んでいました。一旦、読んで理解した内容をまとめてみたいと思います。 Packages Serfは大きく次の2つのパッケージに分かれており、各々の役割は以下のようになっています。 memberlist クラスタのノードの状態管理 イベントの発行 serf コマンドの提供 イベントをフックして任意のスクリプトを実行する仕組み クラスタの状態のスナップショットの作成とリストア そして、serfはパッケージはmemberlistパッケージに依存しています。 今回はmemberlistについて分かったことを書いていきます。 Memberlist Summary memberlistはSerfクラスタの各ノード内に1つずつ存在しており、Serfクラスタ内の全ノード情報を保持しています。この保持しているノード情報が、Serfクラスタのノード間でやり取り(full stat

    msykt
    msykt 2014/01/15
    ブログ書いた。「Serfのコードを読んでみた」
  • How to assign a port mapping to a running docker container - act-act

    How to Assign a Port Mapping to a Running Docker Container Dec 30th, 2013 Docker ちょっと前にVPSサービスの乗り換えをしました。それまで、1つのVPS仮想ノードに複数のサービスを置いていたのですが、この乗り換えを機にDockerを使ってサービス毎にコンテナを用意し、各々の環境を切り離すようにしました。 その中で個人用の開発環境用のコンテナも作り、仕事以外の開発はそのDockerコンテナ上で行っているのですが、1つ問題がでてきました。それは、コンテナが公開したいポートが開発中に変わってきてしまうことです。 Dockr port mapping Dockerは0.6.5からコンテナ起動時(docker run)に-pでホストとコンテナのポートのマッピングを指定するようになっています。

    msykt
    msykt 2013/12/30
  • Erlang mode and Distel

    Erlang IDE 前回のポストからかなり時間が経ちましたが、少し時間ができたので、暫くErlangで遊んでみようと思います。 Erlangの開発環境ですが、いくつかある中で、EmacsのErlang modeにするか、EclipseのErlideにするか迷いました。検討した結果、コンパイルの仕方等から覚える為に、今回はErlang modeを使うことにしました。 Setting for Erlang mode Erlangをインストール後、.emacsファイルを開き、Erlangのtoolsディレクトリの下の.elファイルを読み込むようにします。 .emacs: 1;; erlang-mode 2(setq load-path (cons "/opt/erlang/lib/erlang/lib/tools-2.6.10/emacs" 3 load-path)) 4 (setq erla

    msykt
    msykt 2013/04/19
    "Erlang modeとDistel"
  • B+Tree in Ruby

    B+Tree And Ruby 以前、java.util.MapをBSONでファイルに保存するFileStoredMapというコレクションクラスを書きました。 今度はそれのTree版を書こうと考えたのですが、Tree自体をこれまでロクに書いたことが無かったので、まずはRubyでB+Treeを書いてみました。こういった作って動かしてみてどういうものか確認するのは、スクリプト言語の方が楽なので。実際、動かしながら作っていくのはなかなか面白い作業でした。 b_plus_tree.rb: 1class AbstractNode 2 @@root = nil 3 4 def initialize(n, keys, parent) 5 @slot = n 6 @keys = keys 7 @parent = parent 8 @@root = self unless @@root 9 end 10 1

    msykt
    msykt 2012/08/09
    RubyでB+Treeを書いてみた