2017/11/26

ZK framework 8.5研討會紀錄


  • ZK之佈景主題步驟
    • 下載JAR or maven
    • zk.xml設定
    • 可使用 js  , cookies 動態更換佈景
    • 需客製化可從git下載 template , 修改內容後打包jar上傳至專案
  • MVVM
    • model-view-viewModel
    • 著重於資料綁定
    • 讓資料與畫面無偶合 , 只處理資料問題
  • 8.5 版本
    • 新增<fragment>
      • 元素 @bind @save @load @command @validator @ jsvalidator @init
      • 支援PWA特性
    • 新增<if>
      • 網頁動態互動效果
      • feature if  為靜態
    • <apply>取代<include> 
    • 新增<template>
      • 重複性工作
      • RWD效果
    • 新增RWD
      • 因效果不定 , 需自行寫code偵測網頁大小與行為
      • 可套用 boostrap
      • 可用<template>達到效果

2017/9/28

DB2連線錯誤 ERRORCODE=-4499, SQLSTATE=08001


  • 參考網址
  • Check the DB2 listening port
    • 尋找db2服务名称
      • db2 get database manager configuration
      • 查看  TCP/IP Service name   (SVCENAME) [服務名稱]
    • 查看TCP/IP服务名称和/etc/services中定义的db2服务名称是否匹配
      • nano /etc/services
      • 找尋[服務名稱]
      • 取得 port

2017/9/14

用 Annotaion完成web service (server端)


  • 開啟eclipse 新建一個web專案
  • 新增package與class
    • server1  :  提共可呼叫的功能
    • startServer : 啟動web service用
  • 在web.xml設定啟用tomcat時需實作的class
  • 建立web service功能
    • 提共一個加法功能

  • 註冊與發布web service功能 
    • 註冊與發佈 wsdl url
  • 啟動tomcat , 進入browser查看wsdl
    • http://localhost:1234/cal?wsdl
  • 下載並開啟soupUI 工具進行測試
    • 新增專案 , 填入http://localhost:1234/cal?wsdl
    • arg0填入11111
    • arg1填入22222
    • 送出結果得到33333


2017/9/13

DB2 table被鎖住


  • 參考網址
  • 某日發生表被鎖住的問題 , error如下但非絕對
    • Exception = com.ibm.db2.jcc.am.SqlTimeoutException: DB2 SQL Error: SQLCODE=-952, SQLSTATE=57014, SQLERRMC=null, 
  • 步骤一:使用命令get snapshot来查询哪些进程锁了哪些表。命令如下
    • db2 get snapshot for locks on databasename
  • 步骤二:使用命令force来断开这些进行了死锁的进程来。命令如下:
    • db2 "force application (handle id)"
  • 步骤三: 使用命令list application查看是否已经断开了哪些进行了死锁的进程
    • db2 list applications




    2017/9/11

    Line bot - 放置java web專案至heroku (1)


    • 本篇目標按照Heroku官方文件說明放置 tomcat服務與java web專案至heroku上
      • 因line bot 在使用reply功能時 , 需要一個中介網址處理回覆內容 , 因此line bot會要求設定 webhook url , line就會將收到的使用者訊息送至此 url  , 接著開發者就可以自訂如何回覆使用者的訊息 , 在本篇使用 heroku網站來充當 webhook
    • 在開始之前 , 你應已經申請並建立line bot 帳號 (後續才會用到)
    • 如果希望line bot有push 送出訊息功能 , 請選用deveopler trial版本
      • reply api : 使用者->line bot->使用者
      • push api :  line bot->使用者




    • 至heroku官網申請帳號
    • 開起eclipse並建立一個maven web專案
      • 選用maven-archetype-webapp 幫我快速建立一個乾淨的maven web專案 , 並且compiler成功 , 可參考maven篇
      • 建立一個index.jsp放在webcontent , 內容寫上 hello david
      • 建立runtime tomcat 8.0 , 並且新增server並啟用看看是否成功
      • pom設置參考官方文件


    • 如果編譯無問題, 進行測試
      • mvn package
      • 在target 目錄下應會產生 
        • dependency/webapp-runner.jar
        • 與專案的war檔
      • 打開cmd , 並切換到專案目錄 , 執行指令便會啟動tomcat 與專案
        • java  -jar target/dependency/webapp-runner.jar  target/*.war
      • 打開瀏覽器 http://localhost:8080 , 查看是否啟動成功
    • 在eclipse專案根目錄新增一個Procfile檔案
        • 此檔案為heroku執行指令用
        • 檔案內容加上一行  參考網址
          • web: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war
        • 這樣heroku就會依照Procfile指令啟動 tomcat 與 java web專案

    • 將專案與Procfile檔案完成以後  , 再來就是透過 git 將程式部屬上heroku
      • 在 heroku  官方網站 下載安裝檔 並且安裝 heroku和git
      • 安裝完畢後 , 開啟 cmd 切換到eclipse專案根目錄的位置 , 即 pom.xml 與 Procfile 同一層
        • cd  C:\xxxxxx
      • 登入heroku帳密
        • heroku login
      • 先為eclipse專案目錄建立git reposity , 並將程式commit
        • git init
        • git add .
        • git commit -m "my initial apps"
      • 在heroku建立一個專案並自行定義一個heroku合法的專案名稱linenotice-1
        • heroku create --app linenotice-1
      • 將本機程式放到heroku , heroku會偵測到程式語言是java , 並且自動為maven專案做 mvn package
        • git push heroku master
    • 啟動heroku專案 ,  會自動執行 Procfile裡的指令 , 即啟動tomcat與web專案
      • heroku open
    • 如果有錯誤 , 可以使用 heroku logs查看log
    • 查看瀏覽器結果
      • 本篇使用免費版 , 當閒置30分鐘無使用 , heroku會將專案關閉




    2017/8/31

    java 指令


    • 查詢Heap Size  參考網址
      • java -XX:+PrintFlagsFinal -version | grep HeapSize
    • 設定head size給程序
      • java -Xmx5120m package.class
    • 打包jar
      • # cd 指定目錄
      • 準備 manifest.mf 內容
        • Main-Class: 含有程式進入點(main方法)的Main Class名稱
      • # jar -cvfm XXXXX.jar   manifest.mf  A.class B.class 



    Hadoop 練習筆記 - spark-submit (5)


    • 建立可執行之Jar檔供spark執行
    • Fat-jar
      • Fat-jar也就叫做UberJar,是一种可执行的Jar包(Executable Jar)。
      • FatJar和普通的jar不同在于它包含了依赖的jar包
    • Maven 打包方式 , 各有其目的 
    • 打開eclipse建立一個maven專案
      • pom.xml 內容
        • spark scope=provied , 代表在打包成jar檔時不含 , 因OS環境已有相關套件
        • 利用maven-shade-plugin 打包成可執行的 fat-jar檔案
        • 令其名為sparkTest


      • test.Test1.java
        • 簡單輸出 hello!!字串
      • 執行 mvn package進行打包 , 在target目錄下將產生兩個jar檔
        • sparkTest.jar (包含所有相依class)
        • original-sparkTest.jar (僅包含自己的class)
      • 將sparkTest.jar丟入/home/spark/shareFolder/這個共用目錄
      • 切換spark使用者
        • su - spark
      • 啟動spark standalone模式(前幾篇已經設定完畢)
        • start-all.sh
      • 檢查web UI介面 , spark 是否已經啟動
      • 將jar檔丟給spark執行結果

    2017/8/23

    Linux NFS Mount 筆記


    • Server端
      • 參考網址  參考網址  參考網址
      • 建立掛載目錄
        • mkdir /share/server
      • 編輯可掛載目錄
        • nano /etc/exports
        • /share/server/ [ClientIP.0/24](rw,no_root_squash,no_all_squash,sync)
        • 權限:(rw,no_root_squash,no_all_squash,sync)
      • 開啟服務
        • service nfslock restart 
        • service rpcbind restart 
        • service nfs restart
      • 問題處理  參考網址
    • Client端
      • 建立目錄
        • mkdir /share/client
      • 顯示server可mount的目錄
        • showmount -e [ServerIP]
      • Mount目錄
        • mount -t nfs master:/share/server/ /share/client
    • 檢驗結果
    • Client端 開機自動掛載 參考網址   參考網址
      • 設定檔案
        • nano /etc/fstab 
        • master:/share/server /share/client nfs  defaults 0 0
      • 無須重開機 , 測試
        • mount -a
    • 解除mount
      • umount /share/client
      • 強制 -l

    Hadoop 練習筆記 - Spark - Standalone mode (4)

    • 建議完成第一篇環境
    • Spark幾種部署方式 參考網址
      • Local Mode
      • YARN Mode
      • Standalone Mode
      • HA Mode
      • Mesos Mode
    • Standalone Mode
      • 完成local mode安裝
      • 將local mode完成之spark目錄scp至所有slave主機上
      • 參考之前的文章 ,建立無密碼SSH連線至所有slave主機上
      • 設定Master主機上 , conf/salves 檔案 , 加入以下
        • slave1
          slave2
      • 執行sbin/start-all.sh 啟動Standalone Mode
      • 進入管理介面驗證 , master:8080



    • 啟動一個spark程序交由standalone 
      • spark-shell --master spark://master:7077
    • 在管理介面port 8080 將多一條程序


    • 讀取檔案 textFile 将本地文件或 HDFS 文件轉换成 RDD
      • 進入 spark-shell --master spark://master:7077
      • 本地文件
        • 需要各節點都有同一份文件
        • 依照測試的結果 , master會先在本地端檢查是否有該檔案 , 再呼叫work node再各自的本地端找尋檔案
        • 可使用mount 去 shard folder  , 依照本篇作法 , 自行mount目錄
        • 測試結果
        • local 路徑應用 : "file:///home/spark/shareFolder/test


      • HDFS文件
        • 先將自製文件上傳到hdfs
        • su - hadoop
        • hadoop fs -mkdir /spark
        • hadoop fs -chown -R spark /spark
        • hadoop fs -put /test /spark/test
        • su - spark
        • spark-shell --master spark://master:7077
        • var aaa = sc.textFile("hdfs://master:9000/spark/test")


    2017/8/16

    Hadoop 練習筆記 - Spark - local mode(3)

    參考網址
    • 建議完成第一篇環境
    • Spark幾種部署方式 參考網址
      • Local Mode
      • YARN Mode
      • Standalone Mode
      • HA Mode
      • Mesos Mode
    • Local Mode
      • Master主機 , slave主機都建立使用者 spark
        • useradd spark
        • passwd spark
      • 切換使用者
        • su spark
      • 依照Master主機環境下載 Scala , Spark
      • 解tar以後放入 /home/spark
        • /home/spark/scala-2.12.3
        • /home/spark/spark-2.2.0-bin-hadoop2.7
      • 設定環境變數
        • nano /home/spark/.bash_profile
        • source /home/spark/.bash_profile 
      • 啟動Spark , 驗證是否安裝完畢
        • 透過不同參數決定用何種模式啟動spark 參考網址
        • spark-shell
      • 另外可透過web UI port 4040 檢驗


    2017/8/15

    Hadoop 練習筆記 - HBase(2)


    • 完成前篇Hadoop環境後
    • Master主機  , Slave主機新增使用者  hbase , 並完成SSH無密碼連線 , 可參考前篇 
    • Master主機
      • 切換使用者來完成以下操作
        • su hbase
      • 下載最新hbase-1.2.6-bin.tar.gz 解壓縮放在 /home/hbase/下
      • 設定環境 hbase-env.sh
        • nano /home/hbase/hbase-1.2.6/conf/hbase-env.sh
        • export JAVA_HOME=/usr/java/jdk1.8.0_141/
        • remark 兩行 , 因jdk 8 已不適用 , 會有error 參考網址
        • #export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize$........
        • #export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX$
      • 修改設定檔hbase-site.xml
        • nano /home/hbase/hbase-1.2.6/conf/hbase-site.xml
        • <configuration>

              <property>
                  <name>hbase.cluster.distributed</name>
                  <value>true</value>
              </property>
                 
              <property>
                  <name>hbase.rootdir</name>
                  <value>hdfs://master:9000/hbase</value>
              </property>

              <property>
                  <name>hbase.zookeeper.quorum</name>
                  <value>master</value>
              </property>

          </configuration>
      • 修改設定檔regionservers
        • nano /home/hbase/hbase-1.2.6/conf/regionservers
        • slave1
          slave2
      • 做到此可將 Hbase資料夾複製到所有slave上 
        • scp -r hbase-1.2.6 slave1:~/
        • scp -r hbase-1.2.6 slave2:~/
      • 設置環境變數
        • export HBASE_HOME=/home/hbase/hbase-1.2.6
          export HADOOP_CLASSPATH=$HBASE_HOME/lib/*
          export PATH=$HBASE_HOME/bin:$PATH
        • source ~/.bash_profile
      • 啟動 hadoop 
        • start-all.sh
        • 建立hbase用目錄 參考網址
          • hadoop fs -mkdir /hbase 
          • hadoop fs -chown -R hbase /hbase 
      • 啟動 Hbase
        • /home/hbase/hbase-1.2.6/bin/start-hbase.sh
      • 開啟firefox進入web UI檢驗結果 參考網址
        • In HBase newer than 0.98.x, the HTTP ports used by the HBase Web UI changed from 60010 for the Master and 60030 for each RegionServer to 16010 for the Master and 16030 for the RegionServer.

    2017/8/14

    SSH無密碼登入一些問題處理筆記


    • 切換需要之使用者
      • su test
    • 建立公鑰私鑰
      • ssh-keygen
      • 一路enter 
    • 傳輸公鑰至遠端主機
      • ssh-copy-id  [遠端帳號]@[遠端IP] 
    • 測試SSH 是否無須密碼
      • ssh [遠端帳號]@[遠端IP]
      • ssh [遠端帳號]@[遠端IP] whoami

    • 仍需密碼之處理 
      • 遠端ssh server 設定  參考網址
        • nano /etc/ssh/sshd_config  , 確認是否開啟
          • StrictModes yes
            #當使用者的 host key 改變之後,Server 就不接受連線,可以抵擋部分的木馬程式!
          • RSAAuthentication yes   
            # 是否使用純的 RSA 認證!?僅針對 version 1
          • PubkeyAuthentication yes
            # 是否允許 Public Key ?當然允許啦!僅針對 version 2
          • AuthorizedKeysFile      .ssh/authorized_keys
            # 上面這個在設定若要使用不需要密碼登入的帳號時,那麼那個帳號的存放檔案所在檔名! 這個設定值很重要喔!檔名給他記一下!
      • 遠端目錄權限 (放寬反而無效)  參考網址
        • /home => 754 (待確認)
        • /home/test => 754
        • /home/test/.ssh => 700
        • /home/test/.ssh =>  600

    2017/8/11

    Hadoop 練習筆記 - HDFS(multi mode) (1)

    參考網址
    參考網址
    • 目標 : 建立 Hadoop 實現分散式環境
    • 準備 : CentOS 7  * 3  
      • 1 master , 2 slave
    • 在master主機 /etc/hosts 設定三台domain
      • 192.168.100.100 master
      • 192.168.100.101 slave1
      • 192.168.100.102 slave2
    • 建立hadoop帳號密碼 , 在master主機建立ssh-key鑰  參考網址  , 參考網址
      • useradd hadoop
      • passwd hadoop
      • su hadoop
      • ssh-keygen
      • ssh-copy-id hadoop@192.168.100.101/102
      • 測試無密碼 ssh連線
    • 將hadoop 設為最高權限 (可執行所有指令) 
      • root -> visudo
      • 加入此行  " hadoop  ALL=(ALL)       ALL "
    • 安裝Oracle jdk, 移除open jdk 參考網址 
      • 至官方下載最新jdk
      • su -
      • 安裝rpm yum install jdk-8u51-linux-x64.rpm
      • 變更預設jdk
        • alternatives  --config java
        • 如果未出現選項先update
          • update-alternatives --install /usr/bin/java java /usr/java/jdk1.7.0_79/bin/java 300
      • 移除openjdk 
        • rpm -qa | grep openjdk
        • yum remove -y  [套件名稱]
      • 建立JAVA_HOME
        • nano /etc/profile
        • export JAVA_HOME=/usr/java/jdk1.8.0_141
        • source /etc/profile
        • env | grep java
    • 至官網下載hadoop 安裝檔 2.8.1放置在 /home/hadoop下
    • 配置XML
      • core-site.xml (是核心配置,為 hadoop 指定基本配置信息)
      • hdfs-site.xml  (配置hdfs参数,比如備份數量)
      • mapred-site.xml (配置map-reduce属性)
        • 已改由yarn取代
      • yarn-site.xml (配置yarn属性)
    • Master主機 
      • HDFS設定
        • nano /home/hadoop/hadoop-2.8.1/etc/hadoop/hdfs-site.xml 


      • 核心的主機交換資料位址設定
        • nano /home/hadoop/hadoop-2.8.1/etc/hadoop/core-site.xml 

      • 使用 yarn 管理 MR
        • nano /home/hadoop/hadoop-2.8.1/etc/hadoop/mapred-site.xml

      • yarn-site 的資源管理員設定
        • nano /home/hadoop/hadoop-2.8.1/etc/hadoop/yarn-site.xml 

      • 環境變數
        • nano /home/hadoop/hadoop-2.8.1/etc/hadoop/hadoop-env.sh
        • export JAVA_HOME=/usr/java/latest
        • nano /home/hadoop/hadoop-2.8.1/etc/hadoop/yarn-env.sh
        • export JAVA_HOME=/usr/java/latest
    • Slave主機
      • yarn-site 設定
        • nano /home/hadoop/hadoop-2.8.1/etc/hadoop/yarn-site.xml 

      •  mapred 由 yarn 管理
        • nano /home/hadoop/hadoop-2.8.1/etc/hadoop/mapred-site.xml

      • HDFS 設定
        • nano /home/hadoop/hadoop-2.8.1/etc/hadoop/hdfs-site.xml

      • 核心主機
        • nano /home/hadoop/hadoop-2.8.1/etc/hadoop/core-site.xml 

    • 添加環境變數
      • source .bash_profile

    • 格式化 hdfs 檔案系統
      • master
        • rm -rf /home/hadoop/namenode
        • mkdir /home/hadoop/namenode
        • 格式化namenode資料夾
          • hdfs namenode -format
      • slave
        • rm -rf /home/hadoop/datanode
        • mkdir /home/hadoop/datanode
    • 設定Node
      • master
        • nano /home/hadoop/hadoop-2.8.1/etc/hadoop/slaves     
        • 加入 slave1 slave2
    • 啟動hadoop
      • cd /home/hadoop/hadoop-2.8.1/sbin/start-all.sh
    • 驗證
      • master觀看 HDFS 驗證
        • hdfs dfs -mkdir /home
        • hdfs dfs -ls /
      • master使用 dfsadmin 觀看報表
        • hdfs dfsadmin -report
      • master使用jps查看進程
        • 應有 NameNode , SecondaryNameNode , Jps , ResourceManager
      • slave使用jps查看進程
        • 應有NodeManager , DataNode , Jps
      • master查看瀏覽器管理介面
        • http://localhost:50070
    • 啟動後查看管理介面
      • http://localhost:50070/ – web UI of the NameNode daemon
      • http://localhost:50030/ – web UI of the JobTracker daemon
      • http://localhost:50060/ – web UI of the TaskTracker daemon




    2017/7/30

    HTML5 AJAX下載 , 使用BLOB



    •  提共瀏覽器等待下載 , 非同步方式 參考網址  參考網址   參考網址
      • AJAX端
        • 將表單資料傳送給server
        • 回傳型態會json
        • 接到res.content的Base64內容須再做一次轉換動作base64ToArrayBuffer()
        • 建立blob物件
        • 下載視窗出現
        • window.atob() 方法 , IE9以下不支援***
        • 範例使用chrome瀏覽器可正常運行 , 如是以下瀏覽器需做修改
          • IE10+ 
            • var canvas = document.createElement("canvas");
            • if ('msToBlob' in canvas) { 
            •   navigator.msSaveBlob(_blob, _filename);
            • }
          • FireFox 
            •  document.body.appendChild(a);
            • a.click();
            •  document.body.removeChild(a);

      • Server端 ( Action )
        • 已先將檔案準備好
        • 開始讀取檔案
        • 將檔案串流轉換為Base64編碼
        • PrintWriter 回傳JSON物件給Client接收



    2017/5/19

    mysql 簡易備份還原


    • 備份
      • CMD視窗
      • 切換至&MYSQL_HOME/bin
      • mysqldump -a -u root -p dimdb > xxxxx.sql
    • 還原
      • CMD視窗
      • 切換至&MYSQL_HOME/bin
      • mysql -u root -p dimdb < xxxxx.sql

    2017/1/10

    org.apache.ibatis.binding.BindingException


    • Exception :
      • org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): dim.dao.JmvHostMapper.selectByExample
    • 原因:
      • ibatis 的 condfig檔未加入 mapper.xml檔案

    test2