<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    筆記

    way

    2012年5月30日

    最近在網(wǎng)上看到的相關(guān)材料都比較陳舊,也太簡略,參看了一下其他人的內(nèi)容,針對Hive2.1.1做點分享:
    1)下載apache-hive-2.1.1-bin.tar.gz

    2)解壓縮,下面的命令行如啟動報錯,請自行查略Hive啟動配置

    3)啟動hiveserver2 (非必須,使用jdbc訪問的時候才使用)
    bin目錄下
    hive --service hiveserver2 -p10001來啟動hiveserver2 服務(wù)(默認為10000端口)
    nohup hive --service hiverserver2 -p10001可以在后臺跑
    4)hive腳本運行流程
    bin目錄下,使用命令方法為:
    ./hive <parameters> --service serviceName <service parameters>
    舉例:hive --debug :
       查看bin/hive文件
    流程中會判斷$1=‘--debug’則$DEBUG=‘--debug’
     
    if [ "$DEBUG" ]; then
      if [ "$HELP" ]; then //如還有--help,就會執(zhí)行debug_help方法。
        debug_help
        exit 0
      else
        get_debug_params "$DEBUG"
        export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS $HIVE_MAIN_CLIENT_DEBUG_OPTS"http://設(shè)置HIVE_MAIN_CLIENT_DEBUG_OPTS的參數(shù)中加入debug相應(yīng)參數(shù)
      fi
    fi
    if [ "$SERVICE" = "" ] ; then
      if [ "$HELP" = "_help" ] ; then
        SERVICE="help"
      else
        SERVICE="cli"     //默認賦值cli
      fi
    fi
    這個shell腳本很多變量應(yīng)該是在其他sh文件中定義,其中$SERVICE_LIST就是其他很多sh文件的最開始形成的:export SERVICE_LIST="${SERVICE_LIST}${THISSERVICE} "
    hive腳本最后的$TORUN "$@" ,默認情況下TORUN其實就是cli,即執(zhí)行/ext/cli.sh腳本,該腳本中主要是調(diào)用/ext/util/execHiveCmd.sh 來執(zhí)行最后的CliDriver。
     【shell腳本中的$*,$@和$#
    舉例說:
    腳本名稱叫test.sh 入?yún)⑷齻€: 1 2 3
    運行test.sh 1 2 3后
    $*為"1 2 3"(一起被引號包住)
    $@為"1" "2" "3"(分別被包住)
    $#為3(參數(shù)數(shù)量)
    即exec $HADOOP jar ${HIVE_LIB}/$JAR $CLASS $HIVE_OPTS "$@" //1
    其中:
    $HADOOP=$HADOOP_HOME/bin/hadoop 【hive腳本中定義HADOOP=$HADOOP_HOME/bin/hadoop】
    $CLASS=org.apache.hadoop.hive.cli.CliDriver【傳入的第一個參數(shù),在cli.sh中有定義】
    hadoop腳本(2.7.3為例)中最終會執(zhí)行:
    # Always respect HADOOP_OPTS and HADOOP_CLIENT_OPTS
        HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"
        #make sure security appender is turned off
        HADOOP_OPTS="$HADOOP_OPTS -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,NullAppender}"
     
        export CLASSPATH=$CLASSPATH
        exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@" //2
    hive的debug參數(shù)就是在啟動hive腳本時放到HADOOP_OPTS中的
    1和2處結(jié)合可得到最終的運行命令,查看一下運行結(jié)果:ps -ef|grep CliDriver

      /usr/java/jdk1.8.0_101/bin/java -Xmx256m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=.. -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=.. -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,console -Djava.library.path=.. -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Xmx512m -Dproc_hivecli -XX:+UseParallelGC -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=-Dlog4j.configurationFile=hive-log4j2.properties -Djava.util.logging.config.file=..
      
    -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar /yuxh/app/apache-hive-2.*/lib/hive-cli-2.*.jar org.apache.hadoop.hive.cli.CliDriver
    posted @ 2017-03-29 16:01 yuxh 閱讀(1583) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2015-09-23 21:14 yuxh 閱讀(4416) | 評論 (0)編輯 收藏
    appfuse3.5使用Hibernate4.3.6, 而Hibernate日志框架使用了jboss-logging,想在后臺打出sql的參數(shù)一直無法生效。
    檢查配置文件,框架里面的兩個配置文件,src/test/resources/log4j2.xml(單元測試時配置),src/main/resources/log4j2.xml(運行時配置)
    搞清log4j2的配置后,各種修改(主要是
      <Logger name="org.hibernate.SQL" level="trace"/>
      <Logger name="org.hibernate.type" level="trace"/>)
    用junit測試任然無法打印出真實參數(shù)。根據(jù)這些實踐,確定log4j2是使用無誤生效的,只是org.hibernate這部分的logger一直未起效
    參考國內(nèi)外網(wǎng)站,一直無人回答hibernate4的這個問題,有人指出這部分Hibernate官方文檔只是提了一句,一直未更新相關(guān)內(nèi)容。最后有人提到應(yīng)該是 jboss-logging 的LoggerProviders這個類的問題,看實現(xiàn)對log4j2已經(jīng)做支持。最后發(fā)現(xiàn) jboss-logging使用的是3.2.0.beta,對比相關(guān)類的源代碼,更改為3.2.0.Final,生效!

    P.S 把這個問題提交給Appfuse官網(wǎng),issue APF-1478,作者標志為4.0版本修復(fù)。
    posted @ 2015-07-22 14:11 yuxh 閱讀(296) | 評論 (0)編輯 收藏
    新電腦裝上eclipse4.4.2,導(dǎo)入maven項目之后,依賴庫總是有很多錯誤。最后搜索到可能是eclipse的bug(據(jù)說是JAVA_HOME沒有正確傳遞),查看到eclipse默認的是安裝的jre目錄,修改到j(luò)dk目錄下,依賴問題解決。
    不過目前版本仍然沒有解決pom文件的“Plugin execution not covered by lifecycle configuration”錯誤,暫時忽略不管吧。
    posted @ 2015-06-02 10:27 yuxh 閱讀(331) | 評論 (0)編輯 收藏
    本打算繼承一個API中的Parent類(Parent繼承自GrandParent類),重寫其中的service方法,copy了Parent的service方法。不過發(fā)現(xiàn)Parent的service中也有super.service方法。當時考慮直接調(diào)用GrandParent的service方法。。。未遂(包括反射也不行)。正好看到老外寫的一篇文章,翻譯:
    在Son類里面寫一個test方法:
    public void test() {
     
    super.test();
     
    this.test();
    }
    反編譯之后:
    public void test()
        {
        
    //    0    0:aload_0         
        
    //    1    1:invokespecial   #2   <Method void Parent.test()>
        
    //    2    4:aload_0         
        
    //    3    5:invokevirtual   #3   <Method void test()>
        
    //    4    8:return          
        }
    使用ASM可以完成對GrandParent方法的調(diào)用
    public class GrandParent {
        
    public void test() {
                System.out.println(
    "test of GrandParent");
        }
    }

    public class Parent extends GrandParent{
        
    public void test() {
            System.out.println(
    "test of Parent");
        }
    }

    public class Son extends Parent{
        
    public void test() {
            System.out.println(
    "test of Son");
        }
    }
    調(diào)用Son實例的test方法只會執(zhí)行Son的test方法。而ASM可以修改class,先寫一個Example類繼承Son,重寫test方法

     1 import java.io.FileOutputStream;
     2  
     3 import org.objectweb.asm.ClassWriter;
     4 import org.objectweb.asm.MethodVisitor;
     5 import org.objectweb.asm.Opcodes;
     6  
     7 public class ASMByteCodeManipulation extends ClassLoader implements Opcodes {
     8  
     9  public static void main(String args[]) throws Exception {
    10   ClassWriter cw = new ClassWriter(0);
    11   cw.visit(V1_1, ACC_PUBLIC, "Example"null"Son"null);
    12  
    13   // creates a MethodWriter for the (implicit) constructor
    14   MethodVisitor mw = cw.visitMethod(ACC_PUBLIC, "<init>""()V"null,null);
    15   mw.visitVarInsn(ALOAD, 0);
    16   mw.visitMethodInsn(INVOKESPECIAL, "Son""<init>""()V");
    17   mw.visitInsn(RETURN);
    18   mw.visitMaxs(11);
    19   mw.visitEnd();
    20  
    21   // creates a MethodWriter for the 'test' method
    22   mw = cw.visitMethod(ACC_PUBLIC, "test""()V"nullnull);
    23   mw.visitFieldInsn(GETSTATIC, "java/lang/System""out","Ljava/io/PrintStream;");
    24   mw.visitLdcInsn("test of AI3");
    25   mw.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream""println",
    26     "(Ljava/lang/String;)V");
    27   //Call test() of GrandParent
    28   mw.visitVarInsn(ALOAD, 0);
    29   mw.visitMethodInsn(INVOKESPECIAL, "GrandParent""test""()V");
    30   //Call test() of GrandParent
    31   mw.visitVarInsn(ALOAD, 0);
    32   mw.visitMethodInsn(INVOKESPECIAL, "Parent""test""()V");
    33   //Call test() of GrandParent
    34   mw.visitVarInsn(ALOAD, 0);
    35   mw.visitMethodInsn(INVOKESPECIAL, "Son""test""()V");
    36   mw.visitInsn(RETURN);
    37   mw.visitMaxs(21);
    38   mw.visitEnd();
    39  
    40   byte[] code = cw.toByteArray();
    41   FileOutputStream fos = new FileOutputStream("Example.class");
    42   fos.write(code);
    43   fos.close();
    44  
    45   ASMByteCodeManipulation loader = new ASMByteCodeManipulation();
    46   Class<?> exampleClass = loader.defineClass("Example", code, 0,
    47     code.length);
    48   Object obj = exampleClass.newInstance();
    49   exampleClass.getMethod("test"null).invoke(obj, null);
    50  
    51  }
    52 }
    輸出:
    test of AI3
    test of GrandParent
    test of Parent
    test of Son
    看看怎樣實現(xiàn)的,11行定義一個新的類Example繼承Son。22行,Example重寫test方法,先打印“test of AI3”,再分別在29、32、35行調(diào)用GrandParent、Parent、Son的test方法。
     main方法中,45行創(chuàng)建Example的實例,再用反射調(diào)他的test方法。
    使用invokespecial這種方式也有局限,只能從子類調(diào)用。否則報錯:
    Exception in thread "main" java.lang.VerifyError: (class: Example, method: test1 signature: (LAI2;)V) Illegal use of nonvirtual function call
    posted @ 2012-05-31 11:23 yuxh 閱讀(2056) | 評論 (0)編輯 收藏
    使用Google calendar v3 API的時候,大量發(fā)現(xiàn)Builder使用。比如Credential類,查了查Builder模式的講解,始終感覺代碼的實現(xiàn)和標準定義不太相同。最后發(fā)現(xiàn)這種實現(xiàn)方式是《Effective java 2nd》中的一種實現(xiàn)(Item 2: Consider a builder when faced with many constructor parameters)。靜態(tài)工廠和構(gòu)造器都有一個通病:對于存在大量可選構(gòu)造參數(shù)的對象,擴展性不好。經(jīng)典的解決方案是提供多個構(gòu)造函數(shù),第一個構(gòu)造函數(shù)只有必須的參數(shù),第二個構(gòu)造函數(shù)除了必須參數(shù)還有一個可選參數(shù),第三個除了必須參數(shù)還有兩個可選參數(shù)。。。這樣下去知道最后一個可選參數(shù)出現(xiàn)(telescoping constructor)。這種方案的問題是,當構(gòu)建對象的時候很容易把其中兩個參數(shù)的位置放反。。。。(難發(fā)現(xiàn)的bug)
    另一種解決方案是JavaBean 模式,先調(diào)用無參構(gòu)造函數(shù)再調(diào)用各個set方法來組裝對象。這種方案的問題是不能強制一致性。如果沒有set某些必須的參數(shù)的話,對象可能處于不一致(
    inconsistent)的狀態(tài)(難發(fā)現(xiàn)的bug)。另外一個缺點是JavaBean模式不能讓類immutable,需要程序員額外工作保證線程安全。
    第三種方式就是Builder設(shè)計模式。這種方式混合了telescoping constructor模式的安全性和JavaBean模式的可讀性。客戶端調(diào)用有所有必填參數(shù)的構(gòu)造器(或靜態(tài)工廠),得到一個builder對象。然后調(diào)用builder對象的方法去set各個選填參數(shù)。最后調(diào)用無參的build方法產(chǎn)生一個immutable的對象實例。immutable對象有非常多優(yōu)點而且可能很有用。builder的set方法都是返回builder本身,所以調(diào)用也是可以chained。如:
      GoogleCredential credentialNew = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
                        .setJsonFactory(JSON_FACTORY).setClientSecrets(clientSecrets)
                        .addRefreshListener(
    new CredentialStoreRefreshListener(userID, new DBCredentialStore())).build()
                        .setAccessToken(accessToken).setRefreshToken(refreshToken)
    客戶端代碼很好寫,更重要的是易讀。Builder模式模擬了在Ada和Python語言里的命名可選參數(shù)(named optional parameters)。
    同時Builder類設(shè)置為static也是對Item 22:Favor static member classes over nonstatic的實踐
    posted @ 2012-05-30 17:44 yuxh 閱讀(396) | 評論 (0)編輯 收藏

    導(dǎo)航

    <2012年5月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    統(tǒng)計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    收藏夾

    博客

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产尤物在线视精品在亚洲| 亚洲AV无码乱码在线观看性色扶 | 亚洲AV无码一区二区三区在线观看| 免费国产成人高清视频网站| 亚洲另类少妇17p| 久久久久亚洲国产| 国产成人综合久久精品亚洲| a级毛片免费观看在线| 在线观看视频免费完整版| 亚洲国产精品狼友中文久久久 | 在线a级毛片免费视频| 91手机看片国产永久免费| 亚洲无人区午夜福利码高清完整版 | 亚洲国产精品视频| 亚色九九九全国免费视频| 亚洲s色大片在线观看| 亚洲中文无码线在线观看| 美女黄网站人色视频免费| 成人免费毛片视频| 亚洲欧洲久久av| 亚洲一本之道高清乱码| 久久不见久久见免费视频7| 国产一卡二卡≡卡四卡免费乱码| 国产午夜亚洲精品午夜鲁丝片| 亚洲一级毛片免费观看| WWW免费视频在线观看播放| 亚洲AV综合永久无码精品天堂| 暖暖日本免费中文字幕| 日韩高清在线免费看| 亚洲国产精品一区二区第一页| 亚洲中文字幕无码中文字| 男女免费观看在线爽爽爽视频| 亚洲国产精品无码久久九九| 1区1区3区4区产品亚洲| 91精品手机国产免费| 波多野结衣一区二区免费视频| 在线免费观看毛片网站| 亚洲日韩精品国产一区二区三区| 久久九九免费高清视频| AV无码免费永久在线观看| 亚洲字幕在线观看|