読者です 読者をやめる 読者になる 読者になる

そごうソフトウェア研究所

SOA、開発プロセス、ITアーキテクチャなどについて書いています。Twitterやってます@rsogo

AppPot経由でHttpFSでREST化したHadoopとやり取りする

f:id:begirama:20160921004308p:plain

GetAnonymouseToken

  • GETメソッド
http://localhost:8080/apppot/api/1/apppot.TestApplication/1.0.0/anonymousTokens?appKey=40c71254aca44664b61635573085ef1d&deviceUDID=bd393116-0b47-4b9e-a186-e64ffc0fbdf2
  • Response
{
  "status": "OK",
  "errCode": 0,
  "description": null,
  "results": "e3b82dd1cd964b76a2ee62c0ec97344f"
}

Login

  • POSTメソッド
http://localhost:8080/apppot/api/1/apppot.TestApplication/1.0.0/auth/login
  • Request
{
  "username": "yamada",
  "password": "12345678@X",
  "appId": "apppot.TestApplication",
  "appVersion": "1.0.0",
  "deviceUDID": "bd393116-0b47-4b9e-a186-e64ffc0fbdf2",
  "isPush": "false",
  "companyId": 1
}
  • Response
{
  "status": "OK",
  "errCode": 0,
  "description": null,
  "apppotInfo": "AppPot Server 2.3.6 ",
  "authInfor": {
    "userTokens": "e0f08ddd14d3496d978afdb3530fe64f",
    "validTime": 1474388126575,
    "userId": 2,
    "userInfo": {
      "account": "yamada",
      "firstName": "太郎",
      "lastName": "山田"
    },
    "groupsAndRoles": [
      {
        "groupId": 1,
        "groupName": "開発グループ",
        "description": "",
        "roleId": 2,
        "roleName": "Super Admin"
      }
    ]
  }
}

ファイルの状態確認

  • GETメソッド
http://localhost:8080/apppot/api/1/apppot.TestApplication/1.0.0/gateway/hdfs/hoge?user.name=rsogo&op=liststatus

HttpFSの検証で作ったファイルをAppPot経由で参照することができました。

  • Response
{
  "status": "OK",
  "errCode": 0,
  "description": "",
  "results": {
    "hoge": {
      "FileStatuses": {
        "FileStatus": [
          {
            "pathSuffix": "hoge",
            "type": "FILE",
            "length": 19,
            "owner": "rsogo",
            "group": "supergroup",
            "permission": "755",
            "accessTime": 1474384290147,
            "modificationTime": 1474384291294,
            "blockSize": 134217728,
            "replication": 1
          }
        ]
      }
    }
  }
}

ファイルの作成

  • apppot-token: Loginの結果得られたトークン
  • Content-Type: application/octet-stream
http://localhost:8080/apppot/api/1/apppot.TestApplication/1.0.0/gateway/hdfs/hoge1?op=CREATE&data=true&user.name=rsogo&overwrite=true

POSTMANを使っていますが、ファイルの添付ができるので、Hadoopに投入したいファイルを選択します。 f:id:begirama:20160921011546p:plain

ファイルの読み込み

http://localhost:8080/apppot/api/1/apppot.TestApplication/1.0.0/gateway/hdfs/hoge1?op=open&user.name=rsogo
{
  "status": "OK",
  "errCode": 0,
  "description": "",
  "results": {
    "hoge1": "aaa,bbb"
  }
}

OK

HttpFSの検証

バイルアプリからのリクエストをリアルタイムにHadoopに投入する方法を検討しています。

begirama.hatenablog.com MuleHDFSコネクタを使おうと思ったけど、Mule CEではだめだったので、今回はだめ。

begirama.hatenablog.com WebHDFSはクライアントから個々のデータノードへアクセスさせるので、社外ネットワークに存在するモバイルアプリに対して、すべてのデータノードを公開することはできないのでNG。

HadoopにWebベースでアクセスする方式を検討して丸1日。 HttpFSにたどり着きました。

WebHDFSをインターフェイスを似せてくれているので、WebHDFSをやった後だと理解は楽だった。 結局使わなかったWebHDFSの検証も無駄ではなかったと思いたい・・・。

設定

$HADOOP_HOME/etc/hadoop/core-site.xml

次の項目を設定する必要があります。

  • hadoop.proxyuser.{USER_NAME}.hosts
  • hadoop.proxyuser.{USER_NAME}.groups

設定ファイルを晒します。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
       <name>fs.defaultFS</name>
       <value>hdfs://localhost:9000</value>
    </property>
    <property>
       <name>hadoop.proxyuser.rsogo.hosts</name>
       <value>localhost</value>
    </property>
    <property>
       <name>hadoop.proxyuser.rsogo.groups</name>
       <value>*</value>
    </property>
    <property>
       <name>doop.job.ugi</name>
       <value>rsogo,staff</value>
    </property>
</configuration>

rsogoの所は起動ユーザーです。環境に合わせて書き換える必要があります。

HttpFSの起動

$ $HADOOP_HOME/sbin/httpfs.sh start
Setting HTTPFS_HOME:          /usr/local/Cellar/hadoop/2.7.1/libexec
Setting HTTPFS_CONFIG:        /usr/local/Cellar/hadoop/2.7.1/libexec/etc/hadoop
Sourcing:                    /usr/local/Cellar/hadoop/2.7.1/libexec/etc/hadoop/httpfs-env.sh
Setting HTTPFS_LOG:           /usr/local/Cellar/hadoop/2.7.1/libexec/logs
Setting HTTPFS_TEMP:           /usr/local/Cellar/hadoop/2.7.1/libexec/temp
Setting HTTPFS_HTTP_PORT:     14000
Setting HTTPFS_ADMIN_PORT:     14001
Setting HTTPFS_HTTP_HOSTNAME: Ryohei-no-MacBook-Pro.local
Setting HTTPFS_SSL_ENABLED: false
Setting HTTPFS_SSL_KEYSTORE_FILE:     /Users/rsogo/.keystore
Setting HTTPFS_SSL_KEYSTORE_PASS:     password
Setting CATALINA_BASE:       /usr/local/Cellar/hadoop/2.7.1/libexec/share/hadoop/httpfs/tomcat
Setting HTTPFS_CATALINA_HOME:       /usr/local/Cellar/hadoop/2.7.1/libexec/share/hadoop/httpfs/tomcat
Setting CATALINA_OUT:        /usr/local/Cellar/hadoop/2.7.1/libexec/logs/httpfs-catalina.out
Setting CATALINA_PID:        /tmp/httpfs.pid

(略)

tomcatが起動します。14000ポートをデフォルトでリッスンするみたいです。

ファイルの作成

使うのはこのファイル。

$ cat sample.txt 
1   aaa
2   bbb
3   ccc

WebHDFS同様、ファイルの生成には2回のリクエストが必要です。

$ curl -i -X PUT "http://localhost:14000/webhdfs/v1/hoge?op=create&overwrite=true&user.name=rsogo"
HTTP/1.1 307 Temporary Redirect
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth="u=rsogo&p=rsogo&t=simple&e=1474419838951&s=xlo/gx4W9ABt+0kB7NCLb1xVHFk="; Path=/; Expires= , 21-9-2016 01:03:58 GMT; HttpOnly
Location: http://localhost:14000/webhdfs/v1/hoge?op=CREATE&data=true&user.name=rsogo&overwrite=true
Content-Type: application/json
Content-Length: 0
Date: Tue, 20 Sep 2016 15:03:58 GMT

WebHDFSと違うのは、リダイレクトされるホスト名、ポート番号が変わらないというところ。

ヘッダーに"content-type: application/octet-stream"を付ける必要がある。付けないと400 Bad Requestが返ってくるよ。

$ curl -i -X PUT "http://localhost:14000/webhdfs/v1/hoge?op=CREATE&data=true&user.name=rsogo&overwrite=true" -T sample.txt --header "content-type: application/octet-stream"
HTTP/1.1 100 Continue

HTTP/1.1 201 Created
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth="u=rsogo&p=rsogo&t=simple&e=1474420289696&s=DcQxT8lP7kcCBuBbxaaCKyR5LqM="; Path=/; Expires= , 21-9-2016 01:11:29 GMT; HttpOnly
Content-Type: application/json
Content-Length: 0
Date: Tue, 20 Sep 2016 15:11:31 GMT

ファイルの確認

$ curl -i "http://localhost:14000/webhdfs/v1/hoge?op=liststatus&user.name=rsogo"
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth="u=rsogo&p=rsogo&t=simple&e=1474420414909&s=ELbVZf2Fqnyg5v0ohAWraURvTC4="; Path=/; Expires= , 21-9-2016 01:13:34 GMT; HttpOnly
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 20 Sep 2016 15:13:34 GMT

{"FileStatuses":{"FileStatus":[{"pathSuffix":"hoge","type":"FILE","length":19,"owner":"rsogo","group":"supergroup","permission":"755","accessTime":1474384290147,"modificationTime":1474384291294,"blockSize":134217728,"replication":1}]}}

ファイルのオープンと読み込み

WebHDFSだと2回に分けて取ってくるけど、1回のリクエストで取ってこれる。

$ curl -i "http://localhost:14000/webhdfs/v1/hoge?op=open&user.name=rsogo"
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth="u=rsogo&p=rsogo&t=simple&e=1474420480591&s=haNBlr1YEaySxzRQSH/bE2Ed8eg="; Path=/; Expires= , 21-9-2016 01:14:40 GMT; HttpOnly
Content-Type: application/octet-stream
Content-Length: 19
Date: Tue, 20 Sep 2016 15:14:40 GMT

1   aaa
2   bbb
3   ccc

HttpFSの停止

$ $HADOOP_HOME/sbin/httpfs.sh stop

WebHDFSの検証

ファイルの作成

ファイルのアクセスは2回に分けて行う必要があります。

作成するファイルの中身はこんな感じです。

$ cat sample.txt 
1   aaa
2   bbb
3   ccc

まず、1回目。

  • PUTメソッドを利用します
  • 操作名はop=create
  • 上書きするoverwrite=true
  • ユーザーはここではhadoopを起動させているユーザーを指定しました。user.name=rsogo
$ curl -i -X PUT "http://localhost:50070/webhdfs/v1/hoge?op=create&overwrite=true&user.name=rsogo"
HTTP/1.1 307 TEMPORARY_REDIRECT
Cache-Control: no-cache
Expires: Tue, 20 Sep 2016 09:59:29 GMT
Date: Tue, 20 Sep 2016 09:59:29 GMT
Pragma: no-cache
Expires: Tue, 20 Sep 2016 09:59:29 GMT
Date: Tue, 20 Sep 2016 09:59:29 GMT
Pragma: no-cache
Content-Type: application/octet-stream
Set-Cookie: hadoop.auth="u=rsogo&p=rsogo&t=simple&e=1474401569719&s=BASKS30rCxMmFD2EbnvPj3Km04A="; Path=/; Expires=?, 20-9-2016 19:59:29 GMT; HttpOnly
Location: http://192.168.10.2:50075/webhdfs/v1/hoge?op=CREATE&user.name=rsogo&namenoderpcaddress=localhost:9000&overwrite=true
Content-Length: 0
Server: Jetty(6.1.26)

ここでLocationにリダイレクト先のURIが返ってきます。 Hadoopはデータが分散して配置されるのでデータが配置されている場所が返ってきます。

2回目。 リダイレクトされたURL宛に-Tで送るファイルを指定して、リクエストを送ります。

$ curl -i -X PUT "http://192.168.10.2:50075/webhdfs/v1/hoge?op=CREATE&user.name=rsogo&namenoderpcaddress=localhost:9000&overwrite=true" -T sample.txt 
HTTP/1.1 100 Continue

HTTP/1.1 201 Created
Location: hdfs://localhost:9000/hoge
Content-Length: 0
Connection: close

201 Createdが返ってくればOK。

ファイルの状態確認

$ curl -i "http://localhost:50070/webhdfs/v1/hoge?op=LISTSTATUS"
HTTP/1.1 200 OK
Cache-Control: no-cache
Expires: Tue, 20 Sep 2016 10:08:06 GMT
Date: Tue, 20 Sep 2016 10:08:06 GMT
Pragma: no-cache
Expires: Tue, 20 Sep 2016 10:08:06 GMT
Date: Tue, 20 Sep 2016 10:08:06 GMT
Pragma: no-cache
Content-Type: application/json
Transfer-Encoding: chunked
Server: Jetty(6.1.26)

{"FileStatuses":{"FileStatus":[
{"accessTime":1474365590688,"blockSize":134217728,"childrenNum":0,"fileId":16409,"group":"supergroup","length":19,"modificationTime":1474365591427,"owner":"rsogo","pathSuffix":"","permission":"755","replication":1,"storagePolicy":0,"type":"FILE"}
]}}

ownerはファイル生成の時に指定したユーザーになってますね。 "owner":"rsogo"

ファイルの読み込み

これもCreate同様、2回に別けて行う必要があります。

1回目。Namenodeに向かって下記のコマンドを投げると、リダイレクトを指示されます。

  • GETメソッドを利用します
  • 操作名はop=OPEN
$ curl -i "http://localhost:50070/webhdfs/v1/hoge?op=OPEN"
HTTP/1.1 307 TEMPORARY_REDIRECT
Cache-Control: no-cache
Expires: Tue, 20 Sep 2016 10:09:39 GMT
Date: Tue, 20 Sep 2016 10:09:39 GMT
Pragma: no-cache
Expires: Tue, 20 Sep 2016 10:09:39 GMT
Date: Tue, 20 Sep 2016 10:09:39 GMT
Pragma: no-cache
Content-Type: application/octet-stream
Location: http://192.168.10.2:50075/webhdfs/v1/hoge?op=OPEN&namenoderpcaddress=localhost:9000&offset=0
Content-Length: 0
Server: Jetty(6.1.26)

2回目、支持されたURIにアクセスすることで、Body部に先程作成したファイルの内容が返ってきます。

  • GETメソッドを利用します
$ curl -i "http://192.168.10.2:50075/webhdfs/v1/hoge?op=OPEN&namenoderpcaddress=localhost:9000&offset=0"
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET
Access-Control-Allow-Origin: *
Content-Type: application/octet-stream
Connection: close
Content-Length: 19

1   aaa
2   bbb
3   ccc

検証中、自宅のルーターが不安定でIPアドレスが途中で変わってしまうという事象が発生した。 この時、

参考にさせていただいたサイト

tagomoris.hatenablog.com

WebHDFS APIメモ(Hishidama's Hadoop WebHDFS REST API Memo)

公式マニュアル

WebHDFS REST API

Mule HDFSコネクタ5.0.0の検証(Mule EEが必要でした。途中で止めています)

MuleにはHDFSコネクタというのがあって、HDFSに接続できるみたいです。試してみたいと思います。 この検証の結果としては、Mule EEがHDFSコネクタの検証に必要だと分かったため、途中で止めています。

HDFSコネクタの情報源

  • リリースノート

HDFS Connector Release Notes // MuleSoft Documentation

このコネクタは「Select」というカテゴリに分類されています。 コネクタのサポートポリシーはこちらに記載があります。

Anypoint Connectors // MuleSoft Documentation

Product Versioning and Back Support Policy

このAPIリファレンスにRequires Mule Enterprise Licenseと記載があるのですが、最初は見落としていました。

Anypoint Studioの準備

HDFSコネクタを使用するためにAnypoint Studioをインストールします。 Anypoint StudioはこちらのDownload Anypoint Studioからダウンロードして、インストーラを実行して下さい。 Mule Runtime Engine | MuleSoft Developers

Mule Runtimeのインストール

Anypoint Studioでは埋め込みのMule Runtimeを使うことができます。 インストールもAnypoint Studioから実行できます。

Anypoint Studioの「Help」、「Install New Software」からWork withで「Mule Runtimes for Anypoint Studio」を選択します。

「Anypoint Studio Community Runtimes」を選択してインストールします。 f:id:begirama:20160920122639p:plain f:id:begirama:20160920122701p:plain

HDFSコネクタのインストール

リリースノートからインストールマニュアルへのリンクが404になるんだけど、多分Githubで公開されてる、このサイトを見ればOKそう。

hdfs-connector/USAGE.md at master · mulesoft/hdfs-connector · GitHub

HDFSコネクタもAnypoint Studioからインストールできます。

Anypoint Studioの「Help」、「Install New Software」からWork withで「Anypoint Connectors Update Site」を選択します。

f:id:begirama:20160920123833p:plain f:id:begirama:20160920123859p:plain

HDFSコネクタのサンプルを試す

「File」、「Import」からダウンロードしたサンプルのmule-project.xmlを含むディレクトリを開きます。 f:id:begirama:20160920125712p:plainf:id:begirama:20160920125822p:plain

mule-app.propertiesのconfig.nameNodeUriにHadoopがリッスンしているホスト名とポート番号を設定します。

config.nameNodeUri=hdfs://localhost:9000
config.sysUser=

Anypont Studioで「Run」を実行します。

自分の場合は、dw:transform-message周りでエラーがでたので、List_Status_Flowと、Glob_Status_Flowを丸っと削除することで実行することができました。

エラーが出ずに実行できればhttp://localhost:8090/にアクセスします。

f:id:begirama:20160920151036p:plain

Webベースでいろいろな操作ができるようになっているので、適当に実行してみると・・・

f:id:begirama:20160920151259p:plain

Mule EEが必要だったみたいです。 今回はCEで検証する必要があったので、一旦ここまで。

Hiveでファイルからデータをロードする

前記事はこれ。 begirama.hatenablog.com

begirama.hatenablog.com

読み込むファイルを作成します

今回はタブ区切りの次のようなファイルを作成します。

1    aaa
2   bbb
3   ccc

読み込む先のテーブルを作成します

項目の区切りをタブ、行末を改行として、数値型のidと、文字列型のnameを持つテーブルを作成します。項目の区切りとかを、ロード時じゃなくて、テーブル作成時に指定できるのが、RDBMSとは違う感じ。

hive> create table hoge(id int, name string) row format 
> delimited fields terminated by '\t' 
> lines terminated by '\n';
create table hoge(id int, name string) row format delimited fields terminated by '\t' lines terminated by '\n'
OK
Time taken: 0.138 seconds

load dataでさっき作ったファイルを読み込みます

hive> load data local inpath '/Users/rsogo/work/hive/sample.txt' into table hoge;
load data local inpath '/Users/rsogo/work/hive/sample.txt' into table hoge
Loading data to table testdb.hoge
Table testdb.hoge stats: [numFiles=1, totalSize=19]
OK
Time taken: 1.659 seconds

ロードしたデータをselectしてみます。項目名が出るように設定して・・・

hive> set hive.cli.print.header=true;
set hive.cli.print.header=true

selectします。

hive> select * from hoge;
select * from hoge
OK
hoge.id hoge.name
1   aaa
2   bbb
3   ccc
NULL    NULL
Time taken: 0.118 seconds, Fetched: 4 row(s)

あれ、最後の空行が1レコードとして登録されてる。

Hiveでデータベースを準備する

前にMac上にセットアップした環境にHiveで環境を作っていきます。

begirama.hatenablog.com

Hiveデータベースを作成

データベースを確認する

hive> show databases;
show databases
OK
default
Time taken: 0.567 seconds, Fetched: 1 row(s)

データベースを作成

hive> create database testdb;
create database testdb
OK
Time taken: 0.253 seconds
hive> show databases;
show databases
OK
default
testdb
Time taken: 0.074 seconds, Fetched: 2 row(s)

データベースを選択

hive> use testdb;
use testdb
OK
Time taken: 0.018 seconds

Hiveテーブルを作成

テーブルを確認する

hive> show tables;
show tables
OK
Time taken: 0.211 seconds

テーブルを作成

hive> CREATE TABLE pokes (foo INT, bar STRING);
CREATE TABLE pokes (foo INT, bar STRING)
OK
Time taken: 0.581 seconds
hive> show tables;
show tables
OK
pokes
Time taken: 0.075 seconds, Fetched: 1 row(s)

作成したテーブル定義を確認

hive> describe pokes;
describe pokes
OK
foo                     int                                         
bar                     string                                      
Time taken: 0.588 seconds, Fetched: 2 row(s)

MacにHadoopとHiveをセットアップする

MuleからHadoopに接続するのが目的です。 今回はHadoopをセットアップしたいと思います。

http://hadoop.apache.org/images/hadoop-logo.jpg

環境

OS X El Capitan 10.11.6

リモートログインをONにしておきます。 f:id:begirama:20160919224451p:plain

Hadoop

install

brew install hadoop

HADOOP_HOMEは/usr/local/Cellar/hadoop/2.7.1/libexecでした。

export HADOOP_HOME=/usr/local/Cellar/hadoop/2.7.1/libexec

設定ファイルの変更

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
       <name>fs.defaultFS</name>
       <value>hdfs://localhost:9000</value>
    </property>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

フォーマット

hadoop namenode -format
$ hadoop namenode -format
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
16/09/19 18:56:23 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = ryohei-no-macbook-pro.local/192.168.11.5
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 2.7.1
STARTUP_MSG:   classpath = 略
STARTUP_MSG:   build = https://git-wip-us.apache.org/repos/asf/hadoop.git -r 15ecc87ccf4a0228f35af08fc56de536e6ce657a; compiled by 'jenkins' on 2015-06-29T06:04Z
STARTUP_MSG:   java = 1.8.0_45
************************************************************/
16/09/19 18:56:23 INFO namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT]
16/09/19 18:56:23 INFO namenode.NameNode: createNameNode [-format]
16/09/19 18:56:24 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Formatting using clusterid: CID-2c03a33c-9032-4af1-a0d8-195f92730991
16/09/19 18:56:24 INFO namenode.FSNamesystem: No KeyProvider found.
16/09/19 18:56:24 INFO namenode.FSNamesystem: fsLock is fair:true
16/09/19 18:56:24 INFO blockmanagement.DatanodeManager: dfs.block.invalidate.limit=1000
16/09/19 18:56:24 INFO blockmanagement.DatanodeManager: dfs.namenode.datanode.registration.ip-hostname-check=true
16/09/19 18:56:24 INFO blockmanagement.BlockManager: dfs.namenode.startup.delay.block.deletion.sec is set to 000:00:00:00.000
16/09/19 18:56:24 INFO blockmanagement.BlockManager: The block deletion will start around 2016 9 19 18:56:24
16/09/19 18:56:24 INFO util.GSet: Computing capacity for map BlocksMap
16/09/19 18:56:24 INFO util.GSet: VM type       = 64-bit
16/09/19 18:56:24 INFO util.GSet: 2.0% max memory 889 MB = 17.8 MB
16/09/19 18:56:24 INFO util.GSet: capacity      = 2^21 = 2097152 entries
16/09/19 18:56:24 INFO blockmanagement.BlockManager: dfs.block.access.token.enable=false
16/09/19 18:56:24 INFO blockmanagement.BlockManager: defaultReplication         = 1
16/09/19 18:56:24 INFO blockmanagement.BlockManager: maxReplication             = 512
16/09/19 18:56:24 INFO blockmanagement.BlockManager: minReplication             = 1
16/09/19 18:56:24 INFO blockmanagement.BlockManager: maxReplicationStreams      = 2
16/09/19 18:56:24 INFO blockmanagement.BlockManager: shouldCheckForEnoughRacks  = false
16/09/19 18:56:24 INFO blockmanagement.BlockManager: replicationRecheckInterval = 3000
16/09/19 18:56:24 INFO blockmanagement.BlockManager: encryptDataTransfer        = false
16/09/19 18:56:24 INFO blockmanagement.BlockManager: maxNumBlocksToLog          = 1000
16/09/19 18:56:24 INFO namenode.FSNamesystem: fsOwner             = rsogo (auth:SIMPLE)
16/09/19 18:56:24 INFO namenode.FSNamesystem: supergroup          = supergroup
16/09/19 18:56:24 INFO namenode.FSNamesystem: isPermissionEnabled = true
16/09/19 18:56:24 INFO namenode.FSNamesystem: HA Enabled: false
16/09/19 18:56:24 INFO namenode.FSNamesystem: Append Enabled: true
16/09/19 18:56:24 INFO util.GSet: Computing capacity for map INodeMap
16/09/19 18:56:24 INFO util.GSet: VM type       = 64-bit
16/09/19 18:56:24 INFO util.GSet: 1.0% max memory 889 MB = 8.9 MB
16/09/19 18:56:24 INFO util.GSet: capacity      = 2^20 = 1048576 entries
16/09/19 18:56:24 INFO namenode.FSDirectory: ACLs enabled? false
16/09/19 18:56:24 INFO namenode.FSDirectory: XAttrs enabled? true
16/09/19 18:56:24 INFO namenode.FSDirectory: Maximum size of an xattr: 16384
16/09/19 18:56:24 INFO namenode.NameNode: Caching file names occuring more than 10 times
16/09/19 18:56:24 INFO util.GSet: Computing capacity for map cachedBlocks
16/09/19 18:56:24 INFO util.GSet: VM type       = 64-bit
16/09/19 18:56:24 INFO util.GSet: 0.25% max memory 889 MB = 2.2 MB
16/09/19 18:56:24 INFO util.GSet: capacity      = 2^18 = 262144 entries
16/09/19 18:56:24 INFO namenode.FSNamesystem: dfs.namenode.safemode.threshold-pct = 0.9990000128746033
16/09/19 18:56:24 INFO namenode.FSNamesystem: dfs.namenode.safemode.min.datanodes = 0
16/09/19 18:56:24 INFO namenode.FSNamesystem: dfs.namenode.safemode.extension     = 30000
16/09/19 18:56:24 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.window.num.buckets = 10
16/09/19 18:56:24 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.num.users = 10
16/09/19 18:56:24 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.windows.minutes = 1,5,25
16/09/19 18:56:24 INFO namenode.FSNamesystem: Retry cache on namenode is enabled
16/09/19 18:56:24 INFO namenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry cache entry expiry time is 600000 millis
16/09/19 18:56:24 INFO util.GSet: Computing capacity for map NameNodeRetryCache
16/09/19 18:56:24 INFO util.GSet: VM type       = 64-bit
16/09/19 18:56:24 INFO util.GSet: 0.029999999329447746% max memory 889 MB = 273.1 KB
16/09/19 18:56:24 INFO util.GSet: capacity      = 2^15 = 32768 entries
16/09/19 18:56:24 INFO namenode.FSImage: Allocated new BlockPoolId: BP-816378738-192.168.11.5-1474278984811
16/09/19 18:56:24 INFO common.Storage: Storage directory /tmp/hadoop-rsogo/dfs/name has been successfully formatted.
16/09/19 18:56:25 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
16/09/19 18:56:25 INFO util.ExitUtil: Exiting with status 0
16/09/19 18:56:25 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at {Dummy}
************************************************************/

start-all.shで起動

$ $HADOOP_HOME/sbin/start-dfs.sh 
start-all.sh 
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
16/09/19 22:36:55 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Starting namenodes on [localhost]
Password:
localhost: starting namenode, logging to /usr/local/Cellar/hadoop/2.7.1/libexec/logs/hadoop-rsogo-namenode-Ryohei-no-MacBook-Pro.local.out
localhost: Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Password:
localhost: starting datanode, logging to /usr/local/Cellar/hadoop/2.7.1/libexec/logs/hadoop-rsogo-datanode-Ryohei-no-MacBook-Pro.local.out
localhost: Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Starting secondary namenodes [0.0.0.0]
Password:
0.0.0.0: starting secondarynamenode, logging to /usr/local/Cellar/hadoop/2.7.1/libexec/logs/hadoop-rsogo-secondarynamenode-Ryohei-no-MacBook-Pro.local.out
0.0.0.0: Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
16/09/19 22:37:36 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
starting yarn daemons
starting resourcemanager, logging to /usr/local/Cellar/hadoop/2.7.1/libexec/logs/yarn-rsogo-resourcemanager-Ryohei-no-MacBook-Pro.local.out
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Password:
localhost: starting nodemanager, logging to /usr/local/Cellar/hadoop/2.7.1/libexec/logs/yarn-rsogo-nodemanager-Ryohei-no-MacBook-Pro.local.out
localhost: Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8

バージョンチェック

$ hadoop version
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Hadoop 2.7.1
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 15ecc87ccf4a0228f35af08fc56de536e6ce657a
Compiled by jenkins on 2015-06-29T06:04Z
Compiled with protoc 2.5.0
From source with checksum fc0a1a23fc1868e4d5ee7fa2b28a58a
This command was run using /usr/local/Cellar/hadoop/2.7.1/libexec/share/hadoop/common/hadoop-common-2.7.1.jar

stop-all.shで停止

$ $HADOOP_HOME/sbin/stop-all.sh 
This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
16/09/19 22:34:25 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Stopping namenodes on [localhost]
Password:
localhost: stopping namenode
Password:
localhost: stopping datanode
Stopping secondary namenodes [0.0.0.0]
Password:
0.0.0.0: stopping secondarynamenode
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
16/09/19 22:34:55 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
stopping yarn daemons
stopping resourcemanager
Password:
localhost: stopping nodemanager
no proxyserver to stop

Hive

install

$ brew install hive

起動

動作確認してデータベース一覧を表示できればOK。

$ hive
hive> show databases;
show databases
OK
default