總網頁瀏覽量

2014年11月2日 星期日

Location計算方法

1. 日誌之外列 location另外算法
讀取到中斷的列不重讀

int oldonelinesize =0;
bool isForwardPart =true;
遇到</log> 讓 isForwardPart=true;  這是考慮到像上次那樣破碎日誌

if(isFullProcessLog ==false && onelinelog.length >  oldonelinesize)
{
//紀錄虛線完整的行是多少字元
 oldonelinesize = onelinelog.length;
}

//該行為虛線且沒有讀取完整
if(isFullProcessLog ==false  && onelinelog.length < oldonelinelogsize)
{
//該行前半部分,不算換行字元
if(isForwardPart==true)
{
location=location+onelinelog.length
isForwardPart=false;

}
//非前半部分,算上換行字元
if(isForwardPart==false)
{
location=location+onelinelog.length+newline
isForwardPart=true;
}

}
else
{
_location=_location+oneline.length+newline
}

2.
有些LogType是以
<!--------------------------->隔開
所以應該要在判斷破裂tag加上 && isProcessFullLog==true



總之虛線行只要是破裂的就不要重讀了
這樣計算方式主要建立在log沒破裂的時候
如果Log有破裂狀況會導致計算location歪掉


另外INIManager要改為非static

2014年7月4日 星期五

解法

sql hbase hive cassandra都印 在report上印出節點數目
http://stackoverflow.com/questions/141993/best-way-to-compare-2-xml-documents-in-java

Document sqlReport ;


節點名稱不同是否equal???


for(int i =0;i<sqlnodeList.length;i++)
{
   sqlnode = sqlnodelist.item(i);

  bool hbase =compare(sqlnode,hbasenodelist)
bool cass = compare(sqlnode,cassnodelist)
}


for(int j =0;j<hbasenodelist.length;j++]){

if(sqlnode.equal(hbasenode[j]))
{
hbaseflag = true;
hbasenodelist.remove(sqlnode)
sqlReport.add(sqlnode);

}

}


if(hbaseflag==false)
{

sqlnode.changeNodeNameAs(hbase);
sqlReport.add(sqlnode)

}

loop最後hbase剩下來的是sql沒有的node
for(剩下hbaseNodlist)
{
所有節點名稱改為<sql>
}


}


}




sqlval=xml2string(sqlxmlDoc);




result[1]=sqlval;
result[2]=hbaseval;
result[3]=cassval;

2014年5月2日 星期五

安裝hadoop 單機模式(cdh4.3.0) 未完成

因為電腦配備不夠好所以
改安裝偽分布模式


1.首先安裝jdk 6
2.安裝ssh
3.下載hadoop-2.0.0 cdh4 cloudera


格式化hdfs時候
遇到unable to load native hadoop library for your platform問題
是因為lib/native沒有.so檔案
所以要自個重新編譯一次原始碼

之前我安裝hadoop1.1.2是因為官方已經有附上.so檔案了

前奏
step1:

$ sudo apt-get install g++ autoconf automake libtool make cmake zlib1g-dev pkg-config libssl-dev


安装protobuf过程
protoc --version查看protobuf版本是2.4.1版
所以sudo apt-get autoremove libprotoc7 卸載
接著wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz 


tar xvf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
依序執行命令安裝protoc
./configure  --prefix=/usr                 #因為ubuntu預設Lib會裝在/usr/local/lib之下  即使安裝完畢也無法使用protoc指令   所以必須加上 prefix=/usr
make
make check
make install
(如果出現permission denied ,那麼就sudo make install)
("cannot install ............. to a directory not ending in"那麼就打上make clean
重新編譯一次)

protoc--version
確認版本libprotoc 2.5.0


安裝maven
我安裝3.2.1版  下載
apache-maven-3.2.1.bin.tar.gz
解壓縮至/usr/local/apache-maven-3.2.1.bin

環境變數在自己帳號家目錄之下以及root帳號家目錄之下的.bashrc設定
export M2_HOME=/usr/local/apache-maven-3.2.1.bin
export PATH=${M2_HOME}/bin

查看maven版本
mvn -version
編譯遇上問題  protobuf出現錯誤
解決方法如下
https://issues.apache.org/jira/browse/HADOOP-9346
 <dependency>
         <groupId>com.google.protobuf</groupId>
         <artifactId>protobuf-java</artifactId>
拿掉      <version>2.4.0a</version>
加上       <version>2.5.0</version>
       </dependency>
       <dependency>
         <groupId>commons-daemon</groupId>

之後可以編譯了
去hadoop的src目錄之下
編譯指令是mvn compile -Pnative
但過程有出現exception  應該是網路的問題
接著會進入很多個test run要等一陣子
可以休息一下 出去逛個街再回來



格式化過程出現:

[WARN]..........  should be specified as a URI in configuration files. Please update hdfs configuration.


主要是hdfs.site.xml的dfs.name.dir路徑表示方式已經跟舊版不一樣
解決辦法:
<property>

<name>dfs.name.dir</name>

<value> file:/home/useraccount/hadoopfolder/dfs/name</value>

<final>ture</final>

<description>The directories where the namenode stores its persistent matadata.</description>

</property>

啟動hadoop遇到

Class org.apache.hadoop.thriftfs.NamenodePlugin not found


主要是因為hdfs.site.xml我用了官方預設的設定
將namenode與datanode的plugin標籤註解就OK
(我拿etc/hadoop-mapreduce1-pseduo之下的配置檔案
直接套用  結果出現上面bug)


格式化後重啟hadoop遇到
java.io.IOException: Incompatible clusterIDs
然後datanode沒有起來
解法:格式化之前先將 dfs.data.dir的目錄之下所有檔案清空



secondarynamenode出現
“Inconsistent checkpoint fields”的Exception
是因為格式化之前沒有清掉hadoop.tmp.dir目錄下的資料
  此异常即是配置hadoop.tmp.dir参数引起的,在hdfs-site.xml中增加此参数,重新启动集群即可。


若遇到
 java.io.IOException: Failed on local exception: java.io.EOFException; Host Details : local host is: "*******"; destination host is: OOOOOO;
請檢查一下
/etc/hosts

我原本寫
127.0.0.1 localhost之後又寫127.0.0.1 machinename
將後面那個拿掉之後重新格式化、清空dfs.data.dir與hadoop.tmp.dir之嘔
重啟hadoop此exception隨風而逝

不過關閉hadoop仍會出現此exception

2013年12月20日 星期五

更改命名空間後編譯不過的問題 vs c#

更改命名空間的做法網路上很多教學
這篇記錄更改命名空間後編譯不過的問題

改變命名空間後
要在solution點右鍵選property
設定debug地方只勾選要編譯成DLL的專案
才會編譯成功

2013年10月30日 星期三

C# 序列化 反序列化binaryformatter

序列化目前就筆者所知有三種
一種序列化為binary型式
一種序列化為xml型式
另一種序列化為json型式

其中json型式沒有支援輸出檔案,要自己做
本篇用binaryformat序列化法


    [Serializable]
    class MessageEvent: ISerializable
    {

        public MessageEvent(SerializationInfo info, StreamingContext context) {
          message= (string)info.GetValue("message", typeof(string));
          timestamp = (long)info.GetValue("timestamp", typeof(long));//typeof型態要符合變數型態,否則會報TargetInvocationException
          property = (string)info.GetValue("property", typeof(string));    

        }

         
        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
info.AddValue("label",variable);
info.AddValue("label",variable);
info.AddValue("label",variable);
   
        }

     
    }



序列化:
            MessageEvent mesEvent= new MessageEvent("hello earth",100L,"new");
            string FILE_DIRECTORY = "D:\\SerializeFile\\";
            DateTime saveNow = DateTime.Now;
            String fileTimestamp = saveNow.ToString(("yyyyMMddHHmmssfff"));
            BinaryFormatter serializer = new BinaryFormatter();
            FileStream file = new   FileStream(FILE_DIRECTORY+fileTimestamp+".txt", FileMode.Create);
            serializer.Serialize(file, mesEvent);
            file.Close();



反序列化:


        public static void DeserializeFile() {
            while (true)
            {
                string[] filesnames = Directory.GetFiles(FILE_DIRECTORY);
                foreach (string filename in filesnames)
                {
                if(File.Exists(filename)){
                 
                    MessageEvent resultMesEvent = null;
                    FileStream file = null;

                    try
                    {


                        BinaryFormatter serializer = new BinaryFormatter();
                        file = new FileStream(filename,FileMode.Open);
                        resultMesEvent = (MessageEvent)serializer.Deserialize(file);
                     
                        Console.WriteLine("Serialize Success");
                    }
                    catch (TargetInvocationException ex) {

                        Console.WriteLine("please check serialized obj construct");
                 
                    }
                    catch (System.IO.IOException ioe)
                    {

                        Console.WriteLine(ioe);

                    }
                    finally {
                        file.Close();
                        File.Delete(filename);//file.Close之後才delete
                     
                         }

                }
             
             
                }

            }
        }
    

C# 列印日期(顯示毫秒)

   DateTime saveNow = DateTime.Now;
            System.Console.WriteLine("step 1: " + saveNow.ToString("yyyy/MM/dd tt hh:mm:ss.fffff"));
            String str = saveNow.ToString(("yyyyMMddHHmmssfff"));