memo
<! -- referrenced below sites. https://stackoverflow.com/questions/49456579/running-a-bat-file-using-an-html-button https://qiita.com/itasnasal/items/c9bd297c6c2050db6d76 https://docs.microsoft.com/ja-jp/previous-versions/windows/scripting/cc364421(v=msdn.10)?redirectedfrom=MSDN https://maywork.net/computer/powershell-xlsx-search/ --> <html> <head> <title>Run Exe or Batch files with Javascript and HTA</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <!-- <HTA:APPLICATION APPLICATIONNAME="Run Exe or Batch files with Javascript and HTA" ID="MyHTMLapplication" VERSION="1.0"/> --> </head> <script language="Javascript"> function RunMe(){ // get current path var path = location.pathname; fso = new ActiveXObject("Scripting.FileSystemObject"); WshShell = new ActiveXObject("WScript.Shell"); var temp = fso.GetSpecialFolder(2); // 2:%TEMP% var myself = function(){return fso.OpenTextFile(path).ReadAll();}(path); // myself = myself.replace(/^[\s\S]*\/\* powershell code from here/m, "" ); // myself = myself.replace(/ powershell code to here \*\/*$/gm, "" ); myself = myself.replace(/^[\s\S]*\/\* powershell code from here/m, "" ).replace(/ powershell code to here.+/, "" ); var tempps1 = fso.BuildPath( temp, "searchFromExcel.ps1" ); var ouf = fso.CreateTextFile( tempps1,true, false ); ouf.Write( myself ); ouf.Close(); var temptxt = fso.BuildPath( temp, "findFromExcel.txt" ); var TargetDir = document.getElementById("TargetDir").value; var Keyword = document.getElementById("Keyword").value; if (TargetDir.replace(/^s+|s+$/g,'') == "") { alert("input directory path !"); return } if (Keyword.replace(/^s+|s+$/g,'') == "") { alert("input Keyword !"); return } var cmd = "powershell -NoProfile -ExecutionPolicy Unrestricted " + tempps1 + " " + TargetDir + " " + Keyword + " " + temptxt; WshShell.Run(cmd,1,true); // fso.DeleteFile(tempps1); } </script> Dir パス : <input name="TargetDir" id="TargetDir"><br><br> 検索文字 : <input name="Keyword" id="Keyword"><br><br><br> <input type="button" Value="バッチ実行" onClick="RunMe();" </html> <!--////////////////////////////////////////////////////////////////////// /* powershell code from here function Release-Ref ($ref) { ([System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$ref) -gt 0) [System.GC]::Collect() [System.GC]::WaitForPendingFinalizers() } function Search-Excel { param( [string] $fullPath, [string] $keyword, [string] $temptxtName ) $Excel = New-Object -ComObject Excel.Application try { $Excel.Visible = $False # Get-ChildItem $fullPath -Filter "*.xlsx" -Recurse | % { $fullPath = $_.FullName $workbook = $Excel.Workbooks.Open($fullPath) $workbook.Worksheets | % { $sheetName = $_.Name $range = $_.UsedRange $r = $range.Find($keyword) if ($r -eq $Null) { } else { $firstColumn = $r.Column $firstRow = $r.Row do { $psObj = [PSCustomObject]@{ "FullPath"=$fullPath; "Sheet" = $sheetName; "Address" = $r.Address(); "Value" = $r.Value()} if (Test-Path -Path $temptxtName ) { Write-Output ($psObj.FullPath + "," + $psObj.Sheet + "," + $psObj.Address + "," + $psObj.Value) | Out-File -Encoding utf8 -Append $temptxtName } else { Write-Output ($psObj.FullPath + "," + $psObj.Sheet + "," + $psObj.Address + "," + $psObj.Value) | Out-File -Encoding utf8 $temptxtName } $r = $range.FindNext($r) if ($r -eq $Null) { # Get-Content -Path $filepath | Sort-Object | Get-Unique -AsString break } } while ($r.Column -ne $firstColumn -Or $r.Row -ne $firstRow) } $workbook.Close() | Out-Null } # } } finally { $Excel.Quit() | Out-Null $a = Release-Ref($excel) } } if (-not($MyInvocation.PSCommandPath)) { $TargetDir = $Args[0] $Keyword = $Args[1] $temptxtName = $Args[2] # Search-Excel $TargetDir $Keyword $temptxtName Get-ChildItem $TargetDir -Filter "*.xlsx" -Recurse | % { Search-Excel $_.FullName $Keyword $temptxtName} } powershell code to here */-->
1.PowerShell 始めよう
仕事中PowerShellを触ることになって忘れないようにちょっとずつメモしておきたくブログをはじめました。
1.PowerShellのソース編集用_EditorとしてPowerShell iseを使用します。
キーボードでwindow キー + R 押す
powershell ise を入力して Enterキー 押す
白い部分(左上)はソースコードのEditor機能で
ダークブルー(左下)の部分はコンソールになります。
右部分はモジュールの導入情報です。
2.コンソールでaliasに登録されているコマンド一覧を確認します。
aliasと入力すると一覧が出てきます。
コーディングする時には非常に助かりますので、
覚えておくととても便利です。
長すぎるので一部だけキャプチャーしました。
試しにls コマンドを実行してみます。
3.ファイル実行
取り敢えずecho.ps1としてファイルに保存して実行してみましょう。
実行は赤い枠に囲まれている緑の開始ボタンを押せばコンソールに実行結果が表示されます。
# write-out で出力
$str = "Test-string"
Write-Host "Write-Host : ${str}"
Write-Output "Write-Output : ${str}"
echo "echo : ${str}"
PS C:\Users\x121e> C:\powershell_memo\echo.ps1
このシステムではスクリプトの実行が無効になっているため、ファイル C:\powershell_memo\echo.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
+ CategoryInfo : セキュリティ エラー: (: ) []、ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnauthorizedAccess
何か怒っていますね。
実行権限がないので、コンソールで実行権限を付与してみます。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
を実行したらポップアップ画面が出てきますが、「すべて実行」を選択します。
細かい説明はこちら参照 => ponsuke0531 さんのQita
改めて緑の実行ボタンを押すと実行されます。
出力のコマンドにはecho、Write-Error、Write-HostやWrite-Outputなど色々あります。
細かい説明はこちら参照 => tooljp さんのブログ
デッバグする方法
処理を中断したい行にBreakpointを指定してデッバグします。
ショットキーF9あるいは下記のように操作します。
改めて緑の開始ボiンを押せば下記のように処理が中断されてbreakpoinの行まで実行結果がコンソールに表示されるのを確認できます。
F11キーを押せば一歩ずつ進みます。
最後まで実行する場合はF5を押します。
次回はExcel操作についてメモしておきます。
2017.03.21 CDH5で擬似分散モードのHadoopクラスタを構築する
転載: http://www.task-notes.com/entry/20150608/1433732400
JDKのインストール
OracleのJDKをインストールします。 Java Development Kit Installation によるとJDK1.8も対象です。JDKのインストールについての詳細は CentOSにJava(JDK)をRPMでインストール を参照。
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm" -O jdk-8u45-linux-x64.rpm # yum -y localinstall jdk-8u45-linux-x64.rpm # java -version java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode) # echo "export JAVA_HOME=/usr/java/default" > /etc/profile.d/jdk.sh # source /etc/profile.d/jdk.sh
CDH 5 Requirements and Supported Versions
CDH5のインストール
CDH5 の RPM をダウンロードしてインストールします。
# wget http://archive.cloudera.com/cdh5/one-click-install/redhat/6/x86_64/cloudera-cdh-5-0.x86_64.rpm # yum -y --nogpgcheck localinstall cloudera-cdh-5-0.x86_64.rpm # yum clean all
CDH5 は直接リポジトリを追加してもいいです。
# wget http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/cloudera-cdh5.repo -P /etc/yum.repos.d/
パッケージの公開鍵を先にインポートしておく場合は実行してください。
# rpm --import http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera
擬似分散環境の設定
擬似分散環境用の設定ファイルhadoop-conf-pseudo
をインストールします。依存関係のあるモジュールも自動でインストールされるため、HDFSやYARNも含まれています。
# yum -y install hadoop-conf-pseudo
今回はローカルの仮想マシンで構築しているのでファイアーウォールを無効化しておきます。これでローカルマシンからアクセスできるようになります。
# service iptables stop # chkconfig iptables off
Hadoopはホスト名を参照するので次のように設定しておきます。
# vi /etc/hosts 127.0.0.1 localhost 192.168.33.100 vm-cluster
localhostをホスト名に変更します。
# vi /etc/hadoop/conf/core-site.xml <property> <name>fs.defaultFS</name> <value>hdfs://vm-cluster:8020</value> </property>
こちらも同じくlocalhostをホスト名に変更して下さい。これでWeb管理画面にアクセスできるようになります。
# vi /etc/hadoop/conf/mapred-site.xml <property> <name>mapred.job.tracker</name> <value>vm-cluster:8021</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>vm-cluster:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>vm-cluster:19888</value> </property>
HDFSの起動
Namenodeのフォーマットをします。JDKをインストールしてJAVA_HOMEをセットしていない、またはホスト名を書いてないとエラーになります。
# sudo -u hdfs hdfs namenode -format
HDFS(Namenode / Secondarynamenode / Datanode)を起動します。擬似分散環境の場合、ひとつのサーバーで構築するので Secondarynamenode は必要ありませんが起動しても特に問題ありません。
# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done starting datanode, logging to /var/log/hadoop-hdfs/hadoop-hdfs-datanode-vm-cluster.out Started Hadoop datanode (hadoop-hdfs-datanode): [ OK ] starting namenode, logging to /var/log/hadoop-hdfs/hadoop-hdfs-namenode-vm-cluster.out Started Hadoop namenode: [ OK ] starting secondarynamenode, logging to /var/log/hadoop-hdfs/hadoop-hdfs-secondarynamenode-vm-cluster.out Started Hadoop secondarynamenode: [ OK ]
起動できたらブラウザでhttp://192.168.33.10:50070/
にアクセスしてみましょう。HDFSのWeb管理画面が表示されれば成功です。
YARNの起動
HDFS上に各種ディレクトリを作成します。スクリプトが用意されてるので実行しましょう。これをしてないと YARN の起動で失敗します。
# sudo /usr/lib/hadoop/libexec/init-hdfs.sh
終わったら次のコマンドでHDFS上のディレクトリを確認してください。
# sudo -u hdfs hadoop fs -ls -R /
YARNを起動します。
# sudo service hadoop-yarn-resourcemanager start starting resourcemanager, logging to /var/log/hadoop-yarn/yarn-yarn-resourcemanager-vm-cluster.out Started Hadoop resourcemanager: [ OK ] # sudo service hadoop-yarn-nodemanager start starting nodemanager, logging to /var/log/hadoop-yarn/yarn-yarn-nodemanager-vm-cluster.out Started Hadoop nodemanager: [ OK ] # sudo service hadoop-mapreduce-historyserver start starting historyserver, logging to /var/log/hadoop-mapreduce/mapred-mapred-historyserver-vm-cluster.out ... Started Hadoop historyserver: [ OK ]
起動できたら以下のWeb管理画面にアクセスしてみます。
- ResourceManager - http://192.168.33.100:8088/
- NodeManager - http://192.168.33.100:8042/
- JobHistory - http://192.168.33.100:19888/
WordCountの実行
HDFSとYARNのインストールが終わったので、MapReduceのサンプルプログラムを実行します。
ディレクトリを作成してテストデータを用意してください。
# sudo su - hdfs # echo "hoge fuga bar foo hoge fuga" > wordcount.txt # hadoop fs -mkdir -p /user/hdfs/input # hadoop fs -put wordcount.txt /user/hdfs/input # hadoop fs -cat /user/hdfs/input/wordcount.txt hoge fuga bar foo hoge fuga
WordCoundのサンプルプログラムは既に用意されてるので次のコマンドで実行します。
# hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount /user/hdfs/input/wordcount.txt /user/hdfs/output
以下のようにログが流れたら成功です。
15/06/04 01:38:25 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032 15/06/04 01:38:27 INFO input.FileInputFormat: Total input paths to process : 1 15/06/04 01:38:27 INFO mapreduce.JobSubmitter: number of splits:1 15/06/04 01:38:27 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1433381720702_0001 15/06/04 01:38:28 INFO impl.YarnClientImpl: Submitted application application_1433381720702_0001 15/06/04 01:38:28 INFO mapreduce.Job: The url to track the job: http://vm-cluster:8088/proxy/application_1433381720702_0001/ 15/06/04 01:38:28 INFO mapreduce.Job: Running job: job_1433381720702_0001 15/06/04 01:38:38 INFO mapreduce.Job: Job job_1433381720702_0001 running in uber mode : false 15/06/04 01:38:38 INFO mapreduce.Job: map 0% reduce 0% 15/06/04 01:38:45 INFO mapreduce.Job: map 100% reduce 0% 15/06/04 01:38:59 INFO mapreduce.Job: map 100% reduce 100% 15/06/04 01:39:00 INFO mapreduce.Job: Job job_1433381720702_0001 completed successfully ...
出力されたファイルを確認してみましょう。単語毎にカウントされました。
$ hadoop fs -ls -R /user/hdfs/output -rw-r--r-- 1 hdfs supergroup 0 2015-06-04 01:38 /user/hdfs/output/_SUCCESS -rw-r--r-- 1 hdfs supergroup 26 2015-06-04 01:38 /user/hdfs/output/part-r-00000 $ hadoop fs -cat /user/hdfs/output/part-r-00000 bar 1 foo 1 fuga 2 hoge 2
Vagrantで自動構築
以上の内容でVagrantのスクリプトを書きました。VagrantとVirtualBoxがすでにインストールされてるなら次のコマンドだけで擬似分散モードの仮想マシンが作成できます。詳細は README を参考にしてみて下さい。 tasukujp/hadoop-pseudo-distributed · GitHub
$ git clone git@github.com:tasukujp/hadoop-pseudo-distributed.git $ cd hadoop-pseudo-distributed $ vagrant up
2017.03.21 Hadoop使いのためのRPMの便利な使い方5つ
転載 : http://linux.wwing.net/WordPress/?p=134
Hadoop使いのためのRPMの便利な使い方5つ
Hadoopにどっぷりつかってもうすぐほぼ一年。去年の今頃はKVMやCluster、Linuxのパフォーマンスチューニングやらで休む暇もなかったわけですが、今年はより自転車操業的生活を送っています。
– * – * – * –
さて、Hadoopのクラスタを構築する場合、エンタープライズで安定して利用できるとということからRed Hat Enterprise LinuxやCentOSを選ぶ方は多いでしょう。これらのOSにHadoopをインストールする場合、ClouderaのCDH(Cloudera’s distribution including Apache Hadoop)をRPMパッケージ[1]を利用すると便利です。あるいは、前回紹介したCloudera Managerを利用すればもっと簡単にセットアップできます。
今回はRPMの便利な使い方を5つ紹介します。インストールや削除などの基本的な使い方には触れていませんので、興味があればRed Hat 社のDeployment Guideなどをご覧ください。
断りのない限り、下記のコマンドは全てrootユーザーあるいはsudoで実行する必要があります。
1.パッケージがインストールされているかを調べる
hadoopパッケージがインストールされているかを確認したいことはありますよね?そんなときには rpm -qa | grep <文字列>が便利です。-qa オプションによりインストールされている全てのパッケージが一覧できるので、その結果をgrepすることで、探したいパッケージを抽出できます。例えばhadopパッケージがインストールされているかを調べる場合は以下のように行います。
[root@node2 ~]# rpm -qa |grep hadoop
hadoop-httpfs-2.0.0+88-1.cdh4.0.0.p0.26.el6.x86_64
hadoop-hdfs-2.0.0+88-1.cdh4.0.0.p0.26.el6.x86_64
hadoop-0.20-mapreduce-0.20.2+1215-1.cdh4.0.0.p0.23.el6.x86_64
hadoop-2.0.0+88-1.cdh4.0.0.p0.26.el6.x86_64
hadoop-mapreduce-2.0.0+88-1.cdh4.0.0.p0.26.el6.x86_64
hadoop-yarn-2.0.0+88-1.cdh4.0.0.p0.26.el6.x86_64
hadoop-client-2.0.0+88-1.cdh4.0.0.p0.26.el6.x86_64
[root@node2 ~]#
検索したい文字列が思い浮かばないと探しにくい、というデメリットはありますが、個人的には最も利用しているかもしれません。
2. 最後にインストールしたパッケージを表示する
前回書いたCloudera Managerを使ってセットアップしたような場合、何のパッケージがインストールされたかが気になることがあります。こういうときは rpm -qa –last を利用することができます。
[root@node2 ~]# rpm -qa –last |more
cloudera-manager-daemons-4.0.1-1.cm401.p0.44 2012年06月30日 10時07分57秒
cloudera-manager-agent-4.0.1-1.cm401.p0.44 2012年06月30日 10時00分23秒
hue-2.0.0+58-1.cdh4.0.0.p0.16.el6 2012年06月30日 10時00分00秒
hue-shell-2.0.0+58-1.cdh4.0.0.p0.16.el6 2012年06月30日 09時59分51秒
hue-useradmin-2.0.0+58-1.cdh4.0.0.p0.16.el6 2012年06月30日 09時59分43秒
hue-beeswax-2.0.0+58-1.cdh4.0.0.p0.16.el6 2012年06月30日 09時59分34秒
hue-jobsub-2.0.0+58-1.cdh4.0.0.p0.16.el6 2012年06月30日 09時59分24秒
(略)
インストールされた時間もわかります。yumを使ってインストールした場合には/var/log/yum.logを確認しても良いでしょう。
3. コマンドやファイルがどのパッケージに属しているかを確認する
インストールされたファイルが、いったいどのRPMパッケージに属しているのかを調べたいことはないでしょうか?例えば yarn というコマンド、どのRPMパッケージでインストールされたんだっけ?という場合に役立ちます。RPMパッケージが特定できればアンインストールするなんてこともできますしね。
[root@node2 ~]# which yarn
/usr/bin/yarn
[root@node2 ~]# rpm -qf /usr/bin/yarn
hadoop-yarn-2.0.0+88-1.cdh4.0.0.p0.26.el6.x86_64
[root@node2 ~]#
4. RPMパッケージのインストールでどのファイルが更新されたのかを調べる
RPMパッケージにはインストールするファイルのリストが入っています。rpm -ql <パッケージ名> により、パッケージのインストールした時に変更(追加)されたファイルを確認できます。
[root@node2 ~]# rpm -ql hadoop-yarn
/etc/hadoop/conf.empty/yarn-env.sh
/etc/hadoop/conf.empty/yarn-site.xml
/etc/security/limits.d/yarn.conf
/usr/bin/yarn
/usr/lib/hadoop-yarn
/usr/lib/hadoop-yarn/bin
/usr/lib/hadoop-yarn/bin/container-executor
/usr/lib/hadoop-yarn/bin/mapred
/usr/lib/hadoop-yarn/bin/yarn
/usr/lib/hadoop-yarn/cloudera
/usr/lib/hadoop-yarn/cloudera/cdh_version.properties
/usr/lib/hadoop-yarn/etc
(略)
これを一歩応用し、RPMパッケージをインストールする前に、追加されるファイルを確認をすることも可能です。これには上記のコマンドのオプションを少し変更して、rpm -qlp のようにパッケージのファイル名を指定をします。
例えばyumdownloaderというコマンドを利用してrpmファイルをダウンロードし、追加されるファイルを確認してみましょう。(yumdownloaderがインストールされていない場合、yum install yum-utilsによりyum-utilsパッケージをインストールしておいてください)
[root@node2 ~]# yumdownloader hadoop-yarn-nodemanager
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
* base: ftp.nara.wide.ad.jp
* extras: ftp.nara.wide.ad.jp
* updates: ftp.nara.wide.ad.jp
hadoop-yarn-nodemanager-2.0.0+88-1.cdh4.0.0.p0.26.el6.x8 | 4.7 kB 00:00
[root@node2 ~]#
[root@node2 ~]# rpm -qlp hadoop-yarn-nodemanager-2.0.0+88-1.cdh4.0.0.p0.26.el6.x86_64.rpm
/etc/default/hadoop-yarn-nodemanager
/etc/rc.d/init.d/hadoop-yarn-nodemanager
[root@node2 ~]#
このように、インストールしなくても初期スクリプトが含まれていることがわかります。便利ですね。
5. パッケージインストール時に実行されるスクリプトを確認する
RPMパッケージをインストール/アンインストール時に、スクリプトを自動で実行させることができます。例えばパッケージをインストールしたときにユーザーを作成したり、必要なディレクトリを作成すれば、人の手を介さずに実行させることができるので便利です。その一方、パッケージのインストール時に何を行っているのか確認したい場合もあるでしょう。そんなときには rpm -q <パッケージ名> –scripts と指定してみましょう。
[root@node2 ~]# rpm -q hadoop-yarn –scripts
preinstall scriptlet (using /bin/sh):
getent group yarn >/dev/null || groupadd -r yarn
getent passwd yarn >/dev/null || /usr/sbin/useradd –comment “Hadoop Yarn” –shell /bin/bash -M -r -g yarn -G hadoop –home /var/lib/hadoop-yarn yarn
[root@node2 ~]#
preinstはインストールする前に実行されるスクリプト、postinstはインストール後に実行されるスクリプト。
preuninstはアンインストール前に実行されるスクリプト、postuninstはアンインストール後に実行されるスクリプトです。
この例ではインストールする前に、yarnというグループとユーザーを作成し、ホームディレクトリを/var/lib/hadoop/yarn に設定しているようなことがわかりますね。
このようにRPMパッケージは意外に情報が含まれているので、インストールや削除以外の使い方を知っていると役立つかもしれません。これらHadoop使いのためのRPMの便利な使い方5つ[2]を活用してHadoopライフを満喫してください。
[1] RPM=RPM Package Mangerの略称。 昔は RedHat Package Mangerの略だった。
[2] 実はHadoopとは全く関係ないRPMの話だったことに気づきました?