2014/11/6 
安達仁
自己紹介 
 氏名 
 安達仁(あだちじん) 
 所属 
 某SIer 
 いわゆるITゼネコン。Excelで仕様書w 
 以前は長野の工場で働いてました。仕事は「組み込みからサーバまで」 
 OSSのサポートサービス、構築・運用支援、教育 
 実質Hadoop部隊 
 その片隅で働いてます。(^^ゞ 
 好きな言語 
 C系 
 Java、C/C++、C# 
 Objective-Cは挫折しました... 
 Javaをdisって通ぶる風潮はキライ
HadoopとWindows 
 Hadoopと言えば 
 Linuxオンリー(*1) 
- Linuxのコマンドを直たたきする 
public class ProcessTree { 
private static boolean isSetsidSupported() { 
ShellCommandExecutor shexec = null; 
boolean setsidSupported = true; 
try { 
String[] args = {"setsid", "bash", "-c", "echo $$"}; 
shexec = new ShellCommandExecutor(args); 
shexec.execute(); 
} catch (IOException ioe) { 
: 
} 
} 
- パスの区切り文字の一貫性の無さ 
- File.separatorを使ったり、"/"を使ったり 
- JNIを使用する 
- soファイルは同梱されるが、dllは同梱されない 
- Cygwinでスタンドアロンモードは動くが... 
 WindowsでHadoopは「茨の道」 
ここ 
*1 http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cdh_ig_req_supported_versions.html
M$! くぁwせdrftgyふじこlp 
 Windows用のディストリビューション 
 Hortonworks Data Platform(HDP) 
- HortonworksのHadoopディストリビューション 
- Linux版と(ほぼ)同時にWindows版をリリース 
- 現在、HDP 2.2 Preview が試せます(*1) 
 HDInsight 
- MicrosoftのHadoopディストリビューション 
- 元々は「Hadoop on Azure」と呼ばれていた 
- HDPを同梱しているが、WebUIやODBCドライバで若干の味付けが異なる 
- 2年ほど前はオンプレをサポートすると言っていたが、Azureにシフト 
- オンプレは疑似分散(エミュレータと呼ばれる)のみ(*2) 
HDP 2.1 をWindows 8 にインストールしてみました 
*1 http://jp.hortonworks.com/hdp/downloads/ 
*2 http://azure.microsoft.com/ja-jp/documentation/articles/hdinsight-get-started-emulator/
動作環境 
 OS(*1) 
 Windows Server 2008 R2 
 Windows Server 2012 
- いずれも64bit 
 Windows 7/8は保証外 
 ソフトウェア(*2) 
 Python 2.7.x 
- インストールでのみ使われる 
 Java JDK 1.7.x 
 その他 
本来の動作保証 
今回の検証はこ 
ちら 
- VC++ 2010、.NET 4.0 のランタイム 
- HiveのメタストアにSQL Serverを使える 
*1 http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1-Win-latest/bk_installing_hdp_for_windows/content/win-supported-os.html 
*2 http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1-Win-latest/bk_installing_hdp_for_windows/content/win-software-req.html
インストール(1/3) 
 依存関係のソフトウェア 
 みんな大好きWindows8 
 Java、Pythonをインストールしてパスを通す 
 HDPのインストール 
 管理者権限でコマンドプロンプトを開く 
- Administratorユーザーを有効にしておくこと 
 以下のコマンドを実行 
> runas /user:administrator "cmd /C msiexec /lv C:hdplog.txt /i  
C:PATHTOhdp-2.1.5.0.winpkg.msi MSIUSEREALADMINDETECTION=1" 
*1 http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1-Win-latest/bk_installing_hdp_for_windows/content/win-chap2-singlenode.html
インストール(2/3) 
 HDPのインストール(続き) 
 (SIerが作った業務アプリのような)ひどいインストーラが起動する 
- 画面に収まっていない、文字が重なっている、タブオーダーがめちゃくちゃ、すべての設定を無理やり集約 
その他の設定 
Hiveの設定Oozieの設定 
HAの設定 
① 
①Hadoopの設定 
- パスワード 
- 他はデフォルトのまま 
②Hive/Oozieの設定 
- 不要でも設定する 
基本設定 
②
インストール(3/3) 
 HDPのインストール(続き) 
 「Hadoopコマンドライン」のショートカットが作られる(はずだが、作られない) 
- Start-HadoopAdminShell.cmd をhadoopユーザーで起動 
- 以降のコマンドはhadoopユーザーで実行すること 
> runas /user:hadoop "C:hdphadoop-2.4.0.2.1.5.0-2060binStart-HadoopAdminShell.cmd" 
 HDFSをフォーマットする 
> hadoop namenode -format 
 Hadoop関連のサービスを起動する 
> cd C:hdp 
> start_local_hdp_services 
 HDFSにホームディレクトリを作成する 
> hadoop fs -mkdir -p /user/hadoop
サンプルの実行 
 WordCountの実行 
 「Hadoopコマンドライン」を起動 
- HDFSに入力ディレクトリを作成 
- ローカルから入力ディレクトリにファイルをコピー 
- WordCountを実行 
> hadoop fs -mkdir input 
> hadoop fs -put C:hdphadoop-2.4.0.2.1.5.0-2060etchadoop*.xml input 
> hadoop jar C:hdphadoop-2.4.0.2.1.5.0-2060sharehadoopmapreducehadoop-mapreduce-examples- 
2.4.0.2.1.5.0-2060.jar wordcount input output 
14/11/04 19:12:21 INFO client.RMProxy: Connecting to ResourceManager at vm-win8/ 
169.254.80.8 
0:8032 
: 
File Input Format Counters 
Bytes Read=460773 
File Output Format Counters 
Bytes Written=145193 
> hadoop fs -cat output/* | more 
"mapreduce_shuffle" 1 
: 
YARN! 
【注意】hadoopユーザーで実行しないと「Exception from container-launch 
...」が発生する(*1) 
*1 http://jp.hortonworks.com/community/forums/topic/how-to-set-execute-permissions-on-windows/ 
(バックスラッシュ)も問 
題なし
[おまけ]Hive on Tezのインストール(1/3) 
 HDPのインストーラを起動する 
 インストーラで「変更」はできず、再インストールが必要 
 事前にSQL Serverなど周辺環境を揃えておくこと(後述) 
Hiveの設定 
① 
①Hive/Oozieの設定 
- DB名 
- ユーザー名 
- パスワード 
- SQLServerを使用する(画面から 
見切れている) 
- Oozieは不要でも設定する 
②Tezを利用する 
- 「Use Tez in Hive」にチェックを入 
れる 
基本設定 
② 
Oozieの設定
[おまけ]Hive on Tezのインストール(2/3) 
 メタストア用DBの準備 
 SQL Server (Express) のインストール 
- 構成マネージャーでTCP/IPの接続を許可、TCPポート:1433を設定する(*1) 
 DB、ユーザーの作成 
- インストーラで設定するDB名、ユーザー名で作成する 
 テーブルの作成 
- C:hdphive-0.13.0.2.1.5.0-2060scriptsmetastoreupgrademssqlhive-schema- 
0.13.0.mssql.sql をSQL Server Management Studio で流す 
 SQL ServerのJDBCドライバ 
- sqljdbc4.jar をC:hdphive-0.13.0.2.1.5.0-2060lib に配置する 
*1 http://symfoware.blog68.fc2.com/blog-entry-920.html
[おまけ]Hive on Tezのインストール(3/3) 
 ファイアウォールの設定 
 無効にできる環境であれば、無効にする 
 SQL Serverのポート 
- TCP:1433 
- UDP:1434(管理用) 
 メタストアサーバのポート 
- TCP:9083 
 HiveおよびTezの環境を用意する 
 Hive用のディレクトリを作成する 
> hadoop fs -mkdir -p /user/hive/warehouse 
 Tezのライブラリを配置する 
> hadoop fs -put C:hdptez-0.4.0.2.1.5.0-2060* /apps/tez
[おまけ]Hive on Tezの実行(1/2) 
 Hiveコマンドで実験 
 適当なtsvファイルを用意する 
> type c:tempt_user.tsv 
1 aaa 
2 bbb 
3 ccc 
 Hiveコマンドを起動 
> c:hdphive-0.13.0.2.1.5.0-2060binhive 
 テーブルを作成してデータをロード 
hive> CREATE TABLE t_user ( 
id int, 
name string) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY 't' 
(バックスラッシュ)も問 
LINES TERMINATED BY 'n' 
題なし 
; 
hive> LOAD DATA LOCAL INPATH 'C:Tempt_user.tsv' OVERWRITE INTO TABLE t_user; 
: 
Loading data to table t_user
[おまけ]Hive on Tezの実行(2/2) 
 Hiveコマンドで実験(つづき) 
- クエリを実行 
hive> select * from t_user order by id; 
Query ID = hadoop_20141105214242_ce859abf-10b5-47fd-8304-9765b5f08694 
Total jobs = 1 
Tezで実行されている 
Launching Job 1 out of 1 
Tez session was closed. Reopening... 
Session re-established. 
: 
Status: Running (application id: application_1415164941328_0005) 
: 
Map 1: -/- Reducer 2: 0/1 
Map 1: 0/1 Reducer 2: 0/1 
: 
Status: Finished successfully 
OK 
1 aaa 
2 bbb 
3 ccc
おしまい

HDPをWindowsで動かしてみた

  • 1.
  • 2.
    自己紹介  氏名  安達仁(あだちじん)  所属  某SIer  いわゆるITゼネコン。Excelで仕様書w  以前は長野の工場で働いてました。仕事は「組み込みからサーバまで」  OSSのサポートサービス、構築・運用支援、教育  実質Hadoop部隊  その片隅で働いてます。(^^ゞ  好きな言語  C系  Java、C/C++、C#  Objective-Cは挫折しました...  Javaをdisって通ぶる風潮はキライ
  • 3.
    HadoopとWindows  Hadoopと言えば  Linuxオンリー(*1) - Linuxのコマンドを直たたきする public class ProcessTree { private static boolean isSetsidSupported() { ShellCommandExecutor shexec = null; boolean setsidSupported = true; try { String[] args = {"setsid", "bash", "-c", "echo $$"}; shexec = new ShellCommandExecutor(args); shexec.execute(); } catch (IOException ioe) { : } } - パスの区切り文字の一貫性の無さ - File.separatorを使ったり、"/"を使ったり - JNIを使用する - soファイルは同梱されるが、dllは同梱されない - Cygwinでスタンドアロンモードは動くが...  WindowsでHadoopは「茨の道」 ここ *1 http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cdh_ig_req_supported_versions.html
  • 4.
    M$! くぁwせdrftgyふじこlp Windows用のディストリビューション  Hortonworks Data Platform(HDP) - HortonworksのHadoopディストリビューション - Linux版と(ほぼ)同時にWindows版をリリース - 現在、HDP 2.2 Preview が試せます(*1)  HDInsight - MicrosoftのHadoopディストリビューション - 元々は「Hadoop on Azure」と呼ばれていた - HDPを同梱しているが、WebUIやODBCドライバで若干の味付けが異なる - 2年ほど前はオンプレをサポートすると言っていたが、Azureにシフト - オンプレは疑似分散(エミュレータと呼ばれる)のみ(*2) HDP 2.1 をWindows 8 にインストールしてみました *1 http://jp.hortonworks.com/hdp/downloads/ *2 http://azure.microsoft.com/ja-jp/documentation/articles/hdinsight-get-started-emulator/
  • 5.
    動作環境  OS(*1)  Windows Server 2008 R2  Windows Server 2012 - いずれも64bit  Windows 7/8は保証外  ソフトウェア(*2)  Python 2.7.x - インストールでのみ使われる  Java JDK 1.7.x  その他 本来の動作保証 今回の検証はこ ちら - VC++ 2010、.NET 4.0 のランタイム - HiveのメタストアにSQL Serverを使える *1 http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1-Win-latest/bk_installing_hdp_for_windows/content/win-supported-os.html *2 http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1-Win-latest/bk_installing_hdp_for_windows/content/win-software-req.html
  • 6.
    インストール(1/3)  依存関係のソフトウェア  みんな大好きWindows8  Java、Pythonをインストールしてパスを通す  HDPのインストール  管理者権限でコマンドプロンプトを開く - Administratorユーザーを有効にしておくこと  以下のコマンドを実行 > runas /user:administrator "cmd /C msiexec /lv C:hdplog.txt /i C:PATHTOhdp-2.1.5.0.winpkg.msi MSIUSEREALADMINDETECTION=1" *1 http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1-Win-latest/bk_installing_hdp_for_windows/content/win-chap2-singlenode.html
  • 7.
    インストール(2/3)  HDPのインストール(続き)  (SIerが作った業務アプリのような)ひどいインストーラが起動する - 画面に収まっていない、文字が重なっている、タブオーダーがめちゃくちゃ、すべての設定を無理やり集約 その他の設定 Hiveの設定Oozieの設定 HAの設定 ① ①Hadoopの設定 - パスワード - 他はデフォルトのまま ②Hive/Oozieの設定 - 不要でも設定する 基本設定 ②
  • 8.
    インストール(3/3)  HDPのインストール(続き)  「Hadoopコマンドライン」のショートカットが作られる(はずだが、作られない) - Start-HadoopAdminShell.cmd をhadoopユーザーで起動 - 以降のコマンドはhadoopユーザーで実行すること > runas /user:hadoop "C:hdphadoop-2.4.0.2.1.5.0-2060binStart-HadoopAdminShell.cmd"  HDFSをフォーマットする > hadoop namenode -format  Hadoop関連のサービスを起動する > cd C:hdp > start_local_hdp_services  HDFSにホームディレクトリを作成する > hadoop fs -mkdir -p /user/hadoop
  • 9.
    サンプルの実行  WordCountの実行  「Hadoopコマンドライン」を起動 - HDFSに入力ディレクトリを作成 - ローカルから入力ディレクトリにファイルをコピー - WordCountを実行 > hadoop fs -mkdir input > hadoop fs -put C:hdphadoop-2.4.0.2.1.5.0-2060etchadoop*.xml input > hadoop jar C:hdphadoop-2.4.0.2.1.5.0-2060sharehadoopmapreducehadoop-mapreduce-examples- 2.4.0.2.1.5.0-2060.jar wordcount input output 14/11/04 19:12:21 INFO client.RMProxy: Connecting to ResourceManager at vm-win8/ 169.254.80.8 0:8032 : File Input Format Counters Bytes Read=460773 File Output Format Counters Bytes Written=145193 > hadoop fs -cat output/* | more "mapreduce_shuffle" 1 : YARN! 【注意】hadoopユーザーで実行しないと「Exception from container-launch ...」が発生する(*1) *1 http://jp.hortonworks.com/community/forums/topic/how-to-set-execute-permissions-on-windows/ (バックスラッシュ)も問 題なし
  • 10.
    [おまけ]Hive on Tezのインストール(1/3)  HDPのインストーラを起動する  インストーラで「変更」はできず、再インストールが必要  事前にSQL Serverなど周辺環境を揃えておくこと(後述) Hiveの設定 ① ①Hive/Oozieの設定 - DB名 - ユーザー名 - パスワード - SQLServerを使用する(画面から 見切れている) - Oozieは不要でも設定する ②Tezを利用する - 「Use Tez in Hive」にチェックを入 れる 基本設定 ② Oozieの設定
  • 11.
    [おまけ]Hive on Tezのインストール(2/3)  メタストア用DBの準備  SQL Server (Express) のインストール - 構成マネージャーでTCP/IPの接続を許可、TCPポート:1433を設定する(*1)  DB、ユーザーの作成 - インストーラで設定するDB名、ユーザー名で作成する  テーブルの作成 - C:hdphive-0.13.0.2.1.5.0-2060scriptsmetastoreupgrademssqlhive-schema- 0.13.0.mssql.sql をSQL Server Management Studio で流す  SQL ServerのJDBCドライバ - sqljdbc4.jar をC:hdphive-0.13.0.2.1.5.0-2060lib に配置する *1 http://symfoware.blog68.fc2.com/blog-entry-920.html
  • 12.
    [おまけ]Hive on Tezのインストール(3/3)  ファイアウォールの設定  無効にできる環境であれば、無効にする  SQL Serverのポート - TCP:1433 - UDP:1434(管理用)  メタストアサーバのポート - TCP:9083  HiveおよびTezの環境を用意する  Hive用のディレクトリを作成する > hadoop fs -mkdir -p /user/hive/warehouse  Tezのライブラリを配置する > hadoop fs -put C:hdptez-0.4.0.2.1.5.0-2060* /apps/tez
  • 13.
    [おまけ]Hive on Tezの実行(1/2)  Hiveコマンドで実験  適当なtsvファイルを用意する > type c:tempt_user.tsv 1 aaa 2 bbb 3 ccc  Hiveコマンドを起動 > c:hdphive-0.13.0.2.1.5.0-2060binhive  テーブルを作成してデータをロード hive> CREATE TABLE t_user ( id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY 't' (バックスラッシュ)も問 LINES TERMINATED BY 'n' 題なし ; hive> LOAD DATA LOCAL INPATH 'C:Tempt_user.tsv' OVERWRITE INTO TABLE t_user; : Loading data to table t_user
  • 14.
    [おまけ]Hive on Tezの実行(2/2)  Hiveコマンドで実験(つづき) - クエリを実行 hive> select * from t_user order by id; Query ID = hadoop_20141105214242_ce859abf-10b5-47fd-8304-9765b5f08694 Total jobs = 1 Tezで実行されている Launching Job 1 out of 1 Tez session was closed. Reopening... Session re-established. : Status: Running (application id: application_1415164941328_0005) : Map 1: -/- Reducer 2: 0/1 Map 1: 0/1 Reducer 2: 0/1 : Status: Finished successfully OK 1 aaa 2 bbb 3 ccc
  • 15.