Comprehensive Security for Hadoop

(This is the 8th article of LINE Advent Calendar 2016)

Hello everyone, this is Neil Tu from Data Labs. I am in charge of Hadoop architecture at Line Corp. I construct and manage Hadoop clusters and their ecosystems, and supply a high availability, and high performance platform for the engineers and data analysts in our group.

Today, the topic we are going to talk about is “Comprehensive Security for Hadoop”.

Abstract

Nowadays, Hadoop has become a popular platform for data storage, data analysis, reporting, and distributed calculations. Basically, Hadoop cluster is an open platform that supplies users with the required resources and HDFS capacity to execute queries. But as you know, Hadoop cluster comprises of many different componments with their own administration models, such as HDFS, Yarn, hive etc. It needs to access each componment to modify or edit access permissions. This is hard to manage, so a central management tool is necessary. Maybe it is better to name it ‘Framework’. Currently, there are some united open source administration management frameworks. Ranger for Hortonworks, and Sentry for Cloudera. Beside this, Ambari, HDFS and Yarn all provide a UI to track the status of a job or the job history. Sometimes you don’t want the information of a cluster to be seen by others, so you may need a tool which can do the user authentication for you. For this requirement, Knox can help you to achieve. You can regard Knox as a reverse proxy which provides a single REST API access point of authentication and access for Hadoop services.

SwiftでElmを作る

この記事は、LINE Advent Calendar 2016の 7日目の記事です

こんにちは、開発1センター・開発2室の 稲見 (@inamiy) です。 普段はiOSエンジニアとしてSwiftを書いていますが、最近はもっぱら関数型プログラミング全般に興味があります。

今日は、「SwiftでElmを作る」というテーマで、お話しさせていただきます。

Elmって何?

Web向けの静的型付け・関数型プログラミング言語です。詳しくは http://elm-lang.org をご参照ください。

簡単に言うと、「Haskell + React.js + Redux」です。コンパイル時に、JavaScriptに変換されます。

さっそく、簡単なボタンカウンターの例を見てみましょう。

import Html exposing (beginnerProgram, div, button, text) 
import Html.Events exposing (onClick)

-- `main`関数 = プログラムの始まり。 
-- 初期状態(model)に`0`をセット + 以下にあるview関数、update関数をセット。 
main = 
  beginnerProgram { model = 0, view = view, update = update }

-- `view`関数 = モデル(状態)からビュー(Virtual DOM)を生成。 
-- プログラムがメッセージを受け取る度に呼ばれる。 
-- ユーザー入力(onClick)等の度に、プログラムにメッセージが送られる。 
view model = 
  div [] 
    [ button [ onClick Decrement ] [ text "-" ] 
    , div [] [ text (toString model) ] 
    , button [ onClick Increment ] [ text "+" ] ]

-- `Msg` = メッセージ型。今回は2つのパターンだけ定義。 
type Msg = Increment | Decrement

-- `update`関数 = 状態遷移関数。 
-- 「メッセージ」と「現在の状態」を引数に、「新しい状態」を返す。 
-- プログラムがメッセージを受け取る度に呼ばれる。 
update msg model = 
  case msg of 
    Increment -> 
      model + 1

    Decrement ->
      model - 1

Elasticsearch を検索エンジンとして利用する際のポイント

こんにちは、LINE でスタンプ・着せかえショップのバックエンド開発をしている川田 (@hktechno) です。

この記事は、LINE Advent Calendar 2016 の 6 日目の記事です。

今年の4月に、Java も Elasticsearch もまともに知らなかった新卒エンジニアが Elasticsearch クラスタの管理を突然任されて苦労した話をしようと思います。

Elasticsearch とは

Elasticsearch は、Elastic 社が開発している検索・分析エンジンおよびそのストレージを担うソフトウェアです。簡単に言えば、検索に特化したクエリを投げることができるデータベースのようなものです。No-SQL 型の DB といっても良いと思います。

Elasticsearch のすごいところは、大量のドキュメントの中から形態素解析や n-gram など自然言語的な解析を行った上で、素早く検索クエリを処理でき、かつノードを増やすことで簡単にスケールアウトすることができることです。最近では、Elasticsearch は様々なログの収集・分析にも使われるようになっていて、どちらかと言うとログ収集で苦労した話が多いと思います。ちなみに、私の所属しているチームでは、ログ収集・メトリック分析ツールとしても Elasticsearch を利用しています。

Androidで日付表記をお手軽に国際化する

こんにちは、LINEでAndroid clientを開発しているShojiです。何故か一部からはビルド王子と呼ばれています。この記事はLINE Advent Calendar2016の5日目の記事です。

Androidアプリの日付表記の国際化

せっかく頑張ってコードを書いて、テストしたAndroidアプリなら海外含めて沢山の人に使って欲しいですよね?

LINEは海外でも使われているのでUIテキストの翻訳をするのは勿論ですが、アプリの国際化はUIの翻訳に限りません。特にLINEはアプリの性格上日付表示がUI上に多く、このフォーマットを各言語文化にあった形で表示する必要があります。

toLowerCaseの落とし穴とCase Foldingの話

こんにちは。LINEでAndroid Clientを開発しているMasakuniです。

これはLINE Advent Calendar 2016の4日目の記事となります。

LINEのアプリ・サービスは多くの国で使われているため、国際化や多言語化はサービス開発時における重大なテーマの一つです。 今回は、その中でも「大文字・小文字変換」について話をします。

Javaにおける String#toLowerCase() / toUpperCase() の挙動

まずは一つ、問題を出してみましょう。

Q. 以下のJavaテストコードは常にpassすることが保証されているでしょうか?

assertEquals("i", "I".toLowerCase()); 

A. No.

一見単純なテストコードですが、これはJavaの実行環境によっては失敗することがあります。何故かと言うと、 "I".toLowerCase()"I".toLowerCase(Locale.getDefault()) と等価であり、実行環境のデフォルトロケールによって動作が変わるからです。

LINEのエンジニアリングを支える社内ツール

p>この記事は LINE Advent Calendar2016 の 3 日目の記事です。

はじめに

はじめまして、LINEの@huydxです。現在「Engineering Efficiency」というかっこいい名前のチームに配属されています。日常の仕事では、社内のモニタリングミドルウェア、自動化ツールの開発などにおいて、主にバックエンド側を担当しています。エンジニアリングで組織全体の生産性と幸せを向上することです。この記事では、チームの取り組み、そして個人的な気づきなどを紹介させていただきます。

背景

現在私が所属している部署はLINEメッセージのバックエンド側を担当しています。システムの規模が大きくなるとともに、組織全体も大きくなる一方です。ソフトウェアのスケールはもちろん難しいですが、組織のスケールも簡単なことではありません。

もちろん、体制、マネージメントなどで頑張って、組織を小さく分割するなどの方向で進むところもあります。ですが、LINEメッセージプラットフォームの特徴として、モノリシックな「Talk-server」という巨大なJavaアプリが中心に存在し、たくさんの開発者がそこに毎日コントリビュートしています。そこで、効率良く安全にLINEメッセージ基盤を提供するためどうしてもマネージメントだけでは無理なところがあって、そこでちゃんとエンジニアリングで解決できるものを解決し、エンジニアたちが安心して効率よくパフォーマンスを出るようにするのが私のチームのミッションのひとつです。

git で reviewer を探すスクリプトを作りました

こんにちは、LINE の Android Client を開発している munetoshi です。

この記事は LINE Advent Calendar2016 の 2 日目の記事です。

レビュアーを探すスクリプトを作りました

皆さん、元気にコードレビューをしていますか?レビューはしっかり行いたいものですが、適したレビュアーを見つけるのって面倒ですよね。 特にチームの人数が多い場合、私みたいな引きこもり系エンジニアには、誰が何を担当しているのかを完全に把握するのは難しいです。その割に、私は広く浅くコードに触れることも多いので、”これって誰にレビューしてもらえばいいのかなー” と途方に暮れることもあります。弊社ではコード管理に git/GitHub を使っているので、git history や blame を見ればいいのでしょうけれど、プルリクエストを作るたびにその作業をするのは骨が折れます。

そこで、 git history をたどってレビュアーに適した人を探し出すスクリプト”suggest_reviewer” を作ることにしました。

で、どうやってレビュアーを探すのさ

基本的には、git history を使ってレビュアー探すのですが、このとき以下の条件を満たすようにします。

  1. 変更されたファイルに詳しい人が、レビュアーとして選出される。
  2. 変更されたすべてのファイルで、レビュアーの誰かがレビューできる。
  3. 無駄にレビュアーを増やさない。

LINE Advent Calendar 2016のお知らせ

こんにちは、LINEで技術関連のPRを担当している三木です。エンジニアの活動をサポートする仕組みや、イベントの企画などを担当しています。

さて、タイトルの通り、LINE Engineers’ BlogにてAdvent Calendarを実施することになりましたのでお知らせします。Advent Calendarの実施は、本ブログ開設以来、初めてとなります。

本ブログでは通常、LINEのサービスに関する技術記事を関連部門のエンジニアが執筆していますが、Advent Calendarは一種の「お祭り」ということもあり、今回テーマには特に制約を設けず、自身の関心が高い技術領域について思う存分書いてください、という要件で執筆者を募集しました。結果、16名のエンジニアが手を挙げてくれました。

平日枠のみの公開となりますが(最終公開日:12/22)、初年度の開催ということでご容赦いただければ幸いです。なお、本ブログでは基本的には記事を日本語・韓国語・英語で公開しておりますが、Advent Calendarの記事は日本語版のみの公開となりますことをご了承ください。

読者の方へのプレゼントについて

Advent Calendarはクリスマスシーズンのお楽しみイベントでもありますので、本ブログをご覧頂いている皆様にも、ささやかなプレゼントをご用意しました。

LINE NotifyにSticker送信機能と画像アップロード機能が追加されました

こんにちは。LINE Notifyの開発をしている長谷部です。

先日のblogで、コマンドラインからLINE Notifyを利用してLINEにメッセージを送信する方法についてご紹介しました。この度、LINE NotifyのAPIに画像アップロード機能とsticker送信機能が追加されましたのでご紹介します。

Sticker送信機能

先日のblogで、Jenkinsのビルド結果をLINE Notifyで通知する例を紹介しました。 そのときに、失敗時にムーンが小馬鹿にしてくる画像を送信したわけですが、ブログを書いているときに我々は気づいてしまったのです。

「…Sticker、送れるようにすれば良いのでは?」、と。

Stickerが送れると、LINEらしさもあって良さそうです。というわけで、Sticker送信機能を追加しました。

コマンドラインからStickerを送信する

curlコマンドを利用してstickerを送信してみます。

$ curl -X POST https://notify-api.line.me/api/notify -H 'Authorization: Bearer
YOUR_PERSONAL_ACCESS_TOKEN' -F 'message=test' -F 'stickerPackageId=1' -F 'stickerId=113'

LINE Ad SDKを利用したテスト自動化

この記事では、LINEプラットフォームで提供している広告クライアントモジュールをテストした方法をご紹介します。LINEの広告クライアントモジュールは、モバイルとWebで使用できますが、ここではモバイルクライアントのテスト方法だけを説明したいと思います。

LINE Ads Platformの概要

LINE Ads Platformは、下図のようにシンプルな構造になっています。サーバとクライアント間の通信には多様なプロトコルが使用できますが、今回のテストはHTTPプロトコルを対象にしています。