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
Google I/O 2016。Keynote自分まとめ。Machine Learning、Google Home、Allo、Duo、Android N
Keynoteのライブ、見終わりました。
ここで録画が見られます。 www.youtube.com
Keynoteのメッセージの中心にはマシンラーニングがあったのかなと思います。 AlphaGoのようなマシンラーニングを活かすために、Google Assistantと、Assistantにテキストや、声でコミュニケーションするためのプロダクトが発表されました。
Google Home
Amazon Echoみたいなやつ。
家の中に置いておいて、声でGoogle Assistantに指示が出せます。
デモ中であったのは、「OK Google」って言って、音楽をかけたり(家中のスピーカーにも出力できる!)、宇宙について調べたり、スケジュールを変更したり。
リアルにどこまで使えるかやってみたい。 そのうち、Google Homeと連携するものを開発するためのツールが提供されるとのこと。
Google製メッセージアプリ「Allo」、ビデオチャットアプリ「Duo」
どちらもGoogleが出す、コミュニケーションアプリです。
- Allo 普通のメッセージアプリにない機能としては、ユーザーの振る舞いを学習して、相手の会話への回答の候補を出してくれます。それでよければ、タップして選ぶだけ。面白かったのが、相手が送ってきた犬の写真に対して、画像解析して、テキストへの返信と同じように「Cute dog!」などの回答候補がでること。
デモではチャットでレストランの予約をとっていました。 これも予約するためのプラットフォームに参加するお店がどのくらい日本で増えるかな。
個人的には、メッセージのフロントはLINEとか、FacebookメッセージやSlackなどなんでも良くって、後ろでGoogle Assistantが動いてて、会話のサジェスチョンもしてくれるし、レストランも予約してくれるってアーキテクチャがいいな。 きっとbotフレームワークもでるよね。
- Duo 娘さんのダンスが可愛いね。 電話をかけると、受ける方は取る前に相手の動画を見られる。誰かが家のインターフォンみたいなかんじだねって言ってた。確かに。
ハングアウトはどうなるんだろ。
Androidについて
Android Wear 2.0
これまでスマートフォンを母艦としないと何もできませんでしたが、スタンドアローンでいくつかの機能が動くようです。スタンドアローンで何ができて、何ができないのか、詳細はWearのセッションを楽しみにしたいと思います。
Android N
Android N自体は以前から発表されているので、知っている人は知っているという感じでした。 ここから誰でもNの名前を投票できるって。 Help name Android N
DaydreamっていうVRの仕組みでは、Android Nが前提となっているようです。
Daydream。Mobile VRの仕組み。スマートフォン、ヘッドセット&コントローラー、App。Android NにVR Modeがある。端末は結構スペック要りそうかな。#io16jp
— ryohei sogo (@rsogo) 2016年5月18日
Android Studio 2.2
既にプレビュー版がダウンロード可能になっています。 Layout Designerが新しくなるみたいです。XCodeなみにUIの開発が楽になれば・・・。
Android Instant App
インストールしないNativeアプリ。このあたり眠くて記憶がない。
Introducing Android Instant Apps | Android Developers Blog
Android Instant Apps | Android Developers
Firebase2.0
Androidとは直接関係ないけど、バックエンドサービスのFirebaseにも触れていました。
Firebase。Analytics、Cloud Messaging、Notification。この機能がFreeってこと?
— ryohei sogo (@rsogo) 2016年5月18日
#io16jp
@rsogo Firebase、Database、File Storageは有料みたい。Analytics、Cloud Messaging、Notificationだけ使えばいい場合には、無料だし良さそうだね。https://t.co/X0CF9cRuq9
— ryohei sogo (@rsogo) 2016年5月18日
#io16jp
Google I/O 2016 Live有りAndroidセッションまとめ
いよいよGoogle I/Oが今年も始まりますね。
ライブストリーミングがある予定の、Android関連セッションのうち、私が興味があるものをリストアップしてみました。 ちなみに私が興味があるのはAndroidの最新情報の概要と、AndroidアプリのUI、UX、アーキテクチャです。あと、Wearはどうなるのか?
May 18
キーノート
まずはキーノート。Androidについても何かしら発表があるでしょう。 goo.gl
What's new in Android" at #io16:
初日のキーノートの後は、Androidの最新情報のまとめから。キーノートと、What's newまでは生で見たい気がする。 goo.gl
Image compression for Android developers
What's newの後にいきなり、細かいトピックですが、画像の圧縮について。 goo.gl
Multi-Window mode
あんまり興味ないけど、一応、Android Nからサポートされるマルチウィンドウへの対応。 goo.gl
What the Fragment?
Fragmentについて。なんで今頃わざわざGoogle I/Oでやるんだろうか。 みんなどういう風に使うか、悩んでいるから? goo.gl
Android Auto: The Road Ahead
直近使うことはなさそうだけど、話題性としては、車の中で使用するためのプラットフォーム、Android Autoについて。 goo.gl
May 19
Android themes & styles demystified
テーマとスタイルについて。 goo.gl
What's new in Android development tools
Androidの開発ツールについて。最近2.xにバージョンアップしたAndroid Stuidioについてでしょうか。 goo.gl
What's new in Android Wear?
はっきり言って、Wearに関するセッションは少ないです。 今回のI/Oでも盛り上がりに欠けそうな予感はしていますが、新しい発表はあるでしょうか。 goo.gl
The experts' guide to Android development tools
Android Studioの深いところやTipsを教えてくれて、生産性があがるらしいです。 goo.gl
May 20
Android UI and layouts
UIとレイアウトについて。カスタムView、カスタムLayout、効率的なLayout階層構造などについて教えてくれるみたいです。 goo.gl
Android application architecture: Get ready for the next billion!
オフライン対応についてみたい。 goo.gl
A window into transitions
画面遷移のアニメーションなどについて。これ、iOSと比較して弱かったところなので、最新だとどうなっているのか興味がある。 goo.gl
Cordovaを6.xに、cordova-androidを5.xにバージョンアップしました
Cordovaをバージョンアップしました。
- バージョンアップ前
$ cordova -version 5.4.1
- バージョンアップ
$ sudo npm install -g cordova@6.1.1
- バージョンアップ後
$ cordova -version 6.1.1
Pluginのバージョン確認
$ cordova plugin version com.phonegap.plugins.PushPlugin 2.5.0 "PushPlugin" cordova-plugin-console 1.0.2 "Console" cordova-plugin-device 1.1.0 "Device" cordova-plugin-statusbar 2.0.0 "StatusBar" cordova-plugin-whitelist 1.2.0 "Whitelist"
合わせてcordova platformのバージョンアップ
以前からcordova-androidのバージョンが古いと警告がでていたので、platformのバージョンアップもやります。
cordova-android 5についての公式のリリース情報はこちら。手順も載ってる。 Cordova Android 5.0.0 - Apache Cordova
Using this version of Cordova with older version of cordova-android is being deprecated. Consider upgrading to cordova-android@5.0.0 or newer.
- バージョンアップ前
$ cordova platform Installed platforms: android 4.1.1 browser 4.0.0 Available platforms: amazon-fireos ~3.6.3 (deprecated) blackberry10 ~3.8.0 firefoxos ~3.6.3 ios ~4.1.0 osx ~4.0.1 webos ~3.7.0
- バージョンアップ
$ cordova platform update android Updating android project... Android project updated with cordova-android@5.1.1 Discovered plugin "PushPlugin" in config.xml. Installing to the project
- バージョンアップ後
$ cordova platform Installed platforms: android 5.1.1 browser 4.0.0 Available platforms: amazon-fireos ~3.6.3 (deprecated) blackberry10 ~3.8.0 firefoxos ~3.6.3 ios ~4.1.0 osx ~4.0.1 webos ~3.7.0
android 5.1.1に上がってますね。