2014年11月16日日曜日

UbuntuでJSONの整形 (2)

UbuntuでJSONの整形で紹介した方法では、
日本語がユニコードにエスケープされてしまうので回避方法を紹介します。(キーのソートも追加しました)

JsonPrettyPrint.pyを作成
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json

jsonStr = raw_input()
prettyPrint = json.loads(jsonStr)
print json.dumps(prettyPrint, indent=4, ensure_ascii=False, sort_keys=True)

整形する場合は

$ python JsonPrettyPrint.py
{"キー":"値"}

{
    "キー": "値"
}

でできます。

sample : JsonPrettyPrint.py

2014年11月8日土曜日

Maven projectで、Maven project以外のjarを参照する方法

Local Repository(localRepo)を作成し、jarを配置。
jarと同じ位置に、pomファイル(SampleSub-1.0.0.pom)を作成する。

- ファイル構成

  SampleMain
    |- pom.xml
    |- src
    |- localRepo
        |- sample
            |- sub
                |- SampleSub
                    |- 1.0.0
                        |- SampleSub-1.0.0.pom
                        |- SampleSub-1.0.0.jar

- SampleSub-1.0.0.pom

  <project>
    <groupId>sample.sub</groupId>
    <artifactId>SampleSub</artifactId>
    <version>1.0.0</version>
  </project>

メインのpomにrepositoryとdependencyを追加する。

- pom.xml

  <project>
    ...

    <repositories>
      <repository>
        <id>local Repo</id>
        <url>file:${basedir}/localRepo</url>
      </repository>
    </repositories>

    <dependencies>
      <dependency>
        <groupId>sample.sub</groupId>
        <artifactId>SampleSub</artifactId>
        <version>1.0.0</version>
      </dependency>
    </dependencies>

  </project>

2014年10月26日日曜日

Linux(Ubuntu)でファイル構成を確認する方法

Linux(Ubuntu)でファイル構成を確認する方法

tree

インストールされていない場合は

sudo apt-get install tree

でインストールされる。

2014年10月22日水曜日

JUnitとTestNGのassert関数の違い

JUnitとTestNGのassert関数には、パラメーターに違いがある。

- JUnit
    assertEquals(Object expected, Object actual)

- TestNG(org.testng.Assert)
    assertEquals(Object actual, Object expected)

求められる結果は一緒だが、expectedとactualを逆に書いてしまうとエラー時のログがややこしくなる。

ただし、TestNGにはorg.testng.AssertJUnitというクラスがある。

- TestNG(org.testng.AssertJUnit)
    assertEquals(Object expected, Object actual)

JUnitとTestNGの両方を使う機会がある場合は、org.testng.AssertJUnitを使っておけば、間違いが減るかも。

2014年5月19日月曜日

Apache Maven プロジェクト作成

Apache Mavenでプロジェクトを新規作成するときの手順

前提:Mavenがインストールされていること

コマンド


mvn archetype:create -DgroupId=com.sample -DartifactId=Sample

 groupId:パッケージ名(com.sample)
 artifactId:プロジェクト名(Sample)

「BUILD SUCCESS」と出力されれは、作成成功です。

ファイル構成


Sample
 |- pom.xml
 |- src
     |- main
     |   |- java
     |       |- com
     |           |- sample
     |               |- App.java
     |- test
         |- java
             |- com
                 |- sample
                     |- AppTest.java

2014年5月4日日曜日

Linux(Ubuntu)の環境変数について

「Linux」 「環境変数」でググると
bashrc、profileの2系統のファイルが出てくる。

今までは、何も考えずbashrc($home配下)を使用していて
問題なく動作していたが、若干気になったので調べてみた。


そもそも、bashrc、profileのファイル自体、各二か所に配置されている。

  1. 「/etc」配下(bash.bashrc、profile)
  2. 「$home」配下(.bashrc、.profile)
1は全アカウント共通の設定、2はアカウント固有の設定で、
ログイン時に1度読み込まれます。

そのため、環境変数などの固定(ログイン時に1度読み込めば良い)値は
profileの方に設定すれば良い。


bashrcはシェル実行時に毎回読み込まれるらしいのですが、
今のところ、bashrcに設定すべき情報が見当たらないので、
見つかったら更新します。。。

2014年4月29日火曜日

UbuntuにApache Mavenのインストール

UbuntuにApache Mavenをインストールしてみる。

前提としてJavaをインストールして下さい。

ダウンロード

$ cd /usr/local/apache-maven
$ sudo wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/maven/maven-3/3.2.1/binaries/apache-maven-3.2.1-bin.tar.gz
$ sudo tar -zxvf apache-maven-3.2.1-bin.tar.gz
$ sudo rm apache-maven-3.2.1-bin.tar.gz
※保存場所とバージョンは適切に変更して下さい。

環境変数

$ vim /etc/profile
下記を追記
export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.1
export PATH=$PATH:$M2_HOME/bin:
※再起動

確認コマンド

$ mvn -version

参考:
http://maven.apache.org/download.cgi

2014年4月24日木曜日

TestNGの優先度

TestNGを用いてテストを行う際、テストの実行順によって、結果が変わってしまうことがある。
そんな時は、テストアノテーションに優先度を指定し、実行順を固定すれば良い。

@Test(priority = -1)

デフォルトは0で、小さい順にテストが実行される。

2014年4月15日火曜日

HiveでJSONを解析(json_tuple)

HiveでJSONを解析する方法の1つjson_tupleの使い方を説明します。

テストデータ

-----------------------------------------------------------------
{
    "key1":"sample1",
    "key2":2,
    "key3":{
        "key4":[
            {
                "key5":"sample5"
            },
            {
                "key5":"sample6"
            }
        ]
    }
}
{"key1":"test1","key2":22,"key3":{"key4":[{"key5":"test5"},{"key5":"test6"}]}}
-----------------------------------------------------------------
※JSONが1行毎に複数存在する、ログデータのようなものを想定

テーブル定義

-----------------------------------------------------------------
CREATE EXTERNAL TABLE json_table (
raw_data string
)
ROW FORMAT DELIMITED
LINES TERMINATED BY '\n'
LOCATION '/data/sample';
-----------------------------------------------------------------
※ログ1行(改行区切り)をStringとして定義

get_json_objectでkey5を取得する場合

hive> SELECT get_json_object(json_table.raw_data, '$.key1'), get_json_object(json_table.raw_data, '$.key2') FROM json_table;

sample1 2
test1   22
⇒取得する項目が少なければ良いが、多いとHQLが見難くなる。

json_tupleを使うと

hive> SELECT keys.* FROM json_table AS json LATERAL VIEW json_tuple(json.raw_data, 'key1', 'key2') keys as k1, k2;

sample1 2
test1   22
⇒こっちの方が若干見やすい。。。
※LATERAL VIEWについては、別途説明します。


参考:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-json_tuple

HiveでJSONを解析(get_json_object)

HiveでJSONを解析する方法の1つget_json_objectの使い方を説明します。

テストデータ

-----------------------------------------------------------------
{
    "key1":"sample1",
    "key2":2,
    "key3":{
        "key4":[
            {
                "key5":"sample5"
            },
            {
                "key5":"sample6"
            }
        ]
    }
}
{"key1":"test1","key2":22,"key3":{"key4":[{"key5":"test5"},{"key5":"test6"}]}}
-----------------------------------------------------------------
※JSONが1行毎に複数存在する、ログデータのようなものを想定

テーブル定義

-----------------------------------------------------------------
CREATE EXTERNAL TABLE json_table (
raw_data string
)
ROW FORMAT DELIMITED
LINES TERMINATED BY '\n'
LOCATION '/data/sample';
-----------------------------------------------------------------
※ログ1行(改行区切り)をStringとして定義

HQL

hive> SELECT get_json_object(json_table.raw_data, '$.key1') FROM json_table;

sample1
test1

hive> SELECT get_json_object(json_table.raw_data, '$.key3.key4[0].key5') FROM json_table;

sample5
test5

参考:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-get_json_object

2014年3月22日土曜日

Apache Hiveを使ってみる

Apache Hiveを使ってみる。

準備:
Hiveを使用するには、JavaとHadoopのインストールが必要です。
※パス、ファイル名、ユーザは必要に応じて変更して下さい。

Hiveダウンロード

$ cd /usr/local/
$ sudo wget http://ftp.riken.jp/net/apache/hive/hive-0.12.0/hive-0.12.0-bin.tar.gz
$ sudo tar -zxvf hive-0.12.0-bin.tar.gz
$ sudo mv hive-0.12.0-bin/ hive
$ sudo chown hadoop:hadoop hive/

※必要に応じたバージョンをダウンロード(今回は.0.12.0を使用)
http://ftp.riken.jp/net/apache/hive/

Hadoopユーザに切り替え

$ su hadoop

環境変数

$HOME/.profileに下記を追加

export HIVE_HOME=/usr/local/hive
export PATH=$HIVE_HOME/bin:$PATH

Hive動作確認

テーブル作成
hive
hive> CREATE EXTERNAL TABLE sample (
    > data string
    > )
    > LOCATION '/data/sample/';
OK
Time taken: 28.416 seconds
※HDFS上の/data/sample/にデータがあることが前提

クエリの実行
hive> SELECT * FROM sample;
OK
sample
test
Time taken: 1.279 seconds, Fetched: 2 row(s)

2014年3月21日金曜日

UbuntuでXMLの整形

Ubuntu環境でXMLを整形したい場合は、xmllintを使うと簡単にできます。

$ xmllint --format xml.txt
<?xml version="1.0"?>
<tag1>
  <tag2>1</tag2>
  <tag3>"test"</tag3>
</tag1>

※ファイルに出力する場合は、「> xml2.txt」を後につける。


「xmllintがインストールされていません」とエラーが出る場合は、下記のコマンドでインストール

$ sudo apt-get install libxml2-utils

UbuntuでJSONの整形

Ubuntu環境でJSONを整形したい場合は、Pythonを使うと簡単にできます。
※最近の環境ではPythonがプリインストールされている。

$ echo '{"key1":"value","key2":2}' | python -mjson.tool
{
    "key1": "value",
    "key2": 2
}

ファイルを整形する場合は

$ cat json.txt | python -mjson.tool
{
    "key1": "value",
    "key2": 2,
    "key3": [
        3,
        4,
        5
    ],
    "key4": {
        "key5": "test",
        "key6": 6
    }
}

で簡単にできます。

※ファイルに出力する場合は、「> json2.txt」を後につける。

UbuntuでJSONの整形に続く

2014年3月3日月曜日

Hadoopの環境構築

Apache Hiveを使用するために
Apache Hadoopの環境をシングルノードで構築します。

環境:Ubuntu 12.04

Java

Hadoopを使用するには、Javaのインストールが必要です。

User & Group


Hadoop用のUserとGroupを作成します。
$ sudo addgroup hadoop
$ sudo adduser --ingroup hadoop hadoop

SSH


HadoopはNode間の通信にSSHを使用するので設定が必要です。

sshの鍵(RSA暗号方式)を作成する。
$ su - hadoop
$ ssh-keygen -t rsa -P ""

$HOME/.ssh/ディレクトリに秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が作成される。
※本来はパスワードを設定するが、今回は未設定とする。

公開鍵を設定ファイル(authorized_keys)に保存
$ cp $HOME/.ssh/id_rsa.pub $HOME/.ssh/authorized_keys

接続確認
$ ssh localhost

Hadoop


Hadoopを下記からダウンロード

http://www.apache.org/dyn/closer.cgi/hadoop/common/

ダウンロードしたファイルを解凍し、ユーザ、グループ、権限の設定を行う。
$ cd /usr/local
$ sudo tar xzf hadoop-1.2.1.tar.gz
$ sudo mv hadoop-1.2.1 hadoop
$ sudo chown -R hduser:hadoop hadoop
$ sudo mv hadoop-1.2.1/ hadoop

環境変数


$HOME/.profileに下記を追加

export HADOOP_PREFIX=/usr/local/hadoop

unalias fs &> /dev/null
alias fs="hadoop fs"
unalias hls &> /dev/null
alias hls="fs -ls"

export PATH=$PATH:$HADOOP_PREFIX/bin

/usr/local/hadoop/conf/hadoop-env.shの下記を修正

# The java implementation to use.  Required.
export JAVA_HOME=/usr/lib/jvm/java-7-oracle

データの保存先設定


データ保存用のディレクトリを作成し、ユーザ、グループ、権限の設定を行う。
$ sudo mkdir -p /app/hadoop/tmp
$ sudo chown hadoop:hadoop /app/hadoop/tmp
$ sudo chmod 750 /app/hadoop/tmp

/usr/local/hadoop/conf/core-site.xmlに下記を追加

<property>
  <name>hadoop.tmp.dir</name>
  <value>/app/hadoop/tmp</value>
</property>
<property>
  <name>fs.default.name</name>
  <value>hdfs://localhost:54310</value>
</property>

/usr/local/hadoop/conf/mapred-site.xmlに下記を追加

<property>
  <name>mapred.job.tracker</name>
  <value>localhost:54311</value>
</property>

/usr/local/hadoop/conf/hdfs-site.xmlに下記を追加

<property>
  <name>dfs.replication</name>
  <value>1</value>
</property>

NameNodeの初期化


$ /usr/local/hadoop/bin/hadoop namenode -format

Hadoopの起動


$ /usr/local/hadoop/bin/start-all.sh

動作確認


/home/hadoop/sampleの配下に適当なファイルを作成し、下記を実行
$ hadoop dfs -copyFromLocal /home/hadoop/sample /data/sample

 下記のコマンドでコピーされたことを確認
$ hadoop dfs -ls /data/sample

Hadoopの終了


$ /usr/local/hadoop/bin/stop-all.sh

2014年2月22日土曜日

Ubuntuにjavaをインストール

Ubuntu 12.04にjava(JDK 7)をインストールしてみました。

環境:Ubuntu 12.04.1 32ビット

インストールコマンド
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer

確認コマンド
$ java -version

JAVA_HOME
$ sudo vim /etc/profile

下記を追記
export JAVA_HOME=/usr/lib/jvm/java-7-oracle

2014年2月18日火曜日

Android(4.2)の開発者向けオプション

実機でAndroidのアプリ開発を行う際は、
「開発者向けオプション」から「USBデバック」などの設定を有効にする必要があると思いますが、
Android 4.2(Jelly Bean)から「開発者向けオプション」が非表示となっています。

「開発者向けオプション」は下記の手順で表示されます。

  1. 「設定」アプリを起動
  2. 「端末情報」を選択
  3. ビルドバージョンを7回タップ

上記の手順を行うと「端末情報」の上に「開発者向けオプション」が表示されます。

参考:
http://developer.android.com/intl/ja/tools/device.html