AppPot経由でHttpFSでREST化したHadoopとやり取りする
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に投入したいファイルを選択します。
ファイルの読み込み
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 MuleのHDFSコネクタを使おうと思ったけど、Mule CEではだめだったので、今回はだめ。
begirama.hatenablog.com WebHDFSはクライアントから個々のデータノードへアクセスさせるので、社外ネットワークに存在するモバイルアプリに対して、すべてのデータノードを公開することはできないのでNG。
HadoopにWebベースでアクセスする方式を検討して丸1日。 HttpFSにたどり着きました。
WebHDFSをインターフェイスを似せてくれているので、WebHDFSをやった後だと理解は楽だった。 結局使わなかったWebHDFSの検証も無駄ではなかったと思いたい・・・。
設定
$HADOOP_HOME/etc/hadoop/core-site.xml
次の項目を設定する必要があります。
設定ファイルを晒します。
<?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アドレスが途中で変わってしまうという事象が発生した。 この時、
参考にさせていただいたサイト
WebHDFS APIメモ(Hishidama's Hadoop WebHDFS REST API Memo)
公式マニュアル
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
コネクタの入手 GitHub - mulesoft/hdfs-connector: Connects Mule to Hadoop Distributed File System.
サンプル Mule HDFS Connector
このAPIリファレンスにRequires Mule Enterprise License
と記載があるのですが、最初は見落としていました。
- マニュアル HDFS Connector
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」を選択してインストールします。
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」を選択します。
HDFSコネクタのサンプルを試す
「File」、「Import」からダウンロードしたサンプルのmule-project.xmlを含むディレクトリを開きます。
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/にアクセスします。
Webベースでいろいろな操作ができるようになっているので、適当に実行してみると・・・
Mule EEが必要だったみたいです。 今回はCEで検証する必要があったので、一旦ここまで。
Hiveでファイルからデータをロードする
前記事はこれ。 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で環境を作っていきます。
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をセットアップしたいと思います。
環境
OS X El Capitan 10.11.6
リモートログインをONにしておきます。
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