隨筆-314  評論-209  文章-0  trackbacks-0
           
               摘要: DMI ,即Desktop Management Interface。也有被稱為SMBIOS,即System Management BIOS。常用參數(shù)較低版本的dmidecode命令不支持參數(shù),因此要看信息的話,要用more/less/grep來配合才能更好些。較高版本的dmidecode命令有如下參數(shù):-h 查看幫助信息。-q  不顯示未知設(shè)備。-t type &n...  閱讀全文
          posted @ 2015-09-10 11:24 xzc 閱讀(555) | 評論 (1)編輯 收藏
               摘要: Parquet是面向分析型業(yè)務(wù)的列式存儲格式,由Twitter和Cloudera合作開發(fā),2015年5月從Apache的孵化器里畢業(yè)成為Apache頂級項目,最新的版本是1.8.0。列式存儲列式存儲和行式存儲相比有哪些優(yōu)勢呢?可以跳過不符合條件的數(shù)據(jù),只讀取需要的數(shù)據(jù),降低IO數(shù)據(jù)量。壓縮編碼可以降低磁盤存儲空間。由于同一列的數(shù)據(jù)類型是一樣的,可以使用更高效的壓縮編碼(例如Run Length E...  閱讀全文
          posted @ 2015-09-09 15:11 xzc 閱讀(511) | 評論 (0)編輯 收藏
               摘要: 轉(zhuǎn)自:http://www.infoq.com/cn/articles/hadoop-file-format/Hadoop 作為MR 的開源實現(xiàn),一直以動態(tài)運行解析文件格式并獲得比MPP數(shù)據(jù)庫快上幾倍的裝載速度為優(yōu)勢。不過,MPP數(shù)據(jù)庫社區(qū)也一直批評Hadoop由于文件格式并非為特定目的而建,因此序列化和反序列化的成本過高[7]。本文介紹Hadoop目前已有的幾種文件格式,分析其特點、開銷及使用場...  閱讀全文
          posted @ 2015-09-09 11:54 xzc 閱讀(358) | 評論 (0)編輯 收藏
               摘要: 轉(zhuǎn)自:http://blog.csdn.net/lastsweetop/article/details/9173061轉(zhuǎn)載請注明出處:http://blog.csdn.net/lastsweetop/article/details/9173061所有源碼在github上,https://github.com/lastsweetop/styhadoop簡介codec其實就是coder和decoder...  閱讀全文
          posted @ 2015-09-09 11:54 xzc 閱讀(346) | 評論 (0)編輯 收藏
               摘要: hadoop對于壓縮格式的是透明識別,我們的MapReduce任務(wù)的執(zhí)行是透明的,hadoop能夠自動為我們 將壓縮的文件解壓,而不用我們?nèi)リP(guān)心。如果我們壓縮的文件有相應(yīng)壓縮格式的擴展名(比如lzo,gz,bzip2等),hadoop就會根據(jù)擴展名去選擇解碼器解壓。hadoop對每個壓縮格式的支持,詳細見下表:壓縮格式工具算法文件擴展名多文件可分割性DEFLATE無DEFLATE.deflate不...  閱讀全文
          posted @ 2015-09-09 11:21 xzc 閱讀(503) | 評論 (0)編輯 收藏

          自從Hadoop集群搭建以來,我們一直使用的是Gzip進行壓縮

          當(dāng)時,我對gzip壓縮過的文件和原始的log文件分別跑MapReduce測試,最終執(zhí)行速度基本差不多

          而且Hadoop原生支持Gzip解壓,所以,當(dāng)時就直接采用了Gzip壓縮的方式

          關(guān)于Lzo壓縮,twitter有一篇文章,介紹的比較詳細,見這里

          Lzo壓縮相比Gzip壓縮,有如下特點:

          1. 壓縮解壓的速度很快
          2. Lzo壓縮是基于Block分塊的,這樣,一個大的文件(在Hadoop上可能會占用多個Block塊),就可以由多個MapReduce并行來進行處理

          雖然Lzo的壓縮比沒有Gzip高,不過由于其前2個特性,在Hadoop上使用Lzo還是能整體提升集群的性能的

          我測試了12個log文件,總大小為8.4G,以下是Gzip和Lzo壓縮的結(jié)果:

          1. Gzip壓縮,耗時480s,Gunzip解壓,耗時180s,壓縮后大小為2.5G
          2. Lzo壓縮,耗時160s,Lzop解壓,耗時110s,壓縮后大小為4G

          以下為在Hadoop集群上使用Lzo的步驟:

          1. 在集群的所有節(jié)點上安裝Lzo庫,可從這里下載

          cd /opt/ysz/src/lzo-2.04

          ./configure –enable-shared

          make

          make install

          #編輯/etc/ld.so.conf,加入/usr/local/lib/后,執(zhí)行/sbin/ldconfig

          或者cp /usr/local/lib/liblzo2.* /usr/lib64/

          #如果沒有這一步,最終會導(dǎo)致以下錯誤:

          lzo.LzoCompressor: java.lang.UnsatisfiedLinkError: Cannot load liblzo2.so.2 (liblzo2.so.2: cannot open shared object file: No such file or directory)!

          2. 編譯安裝Hadoop Lzo本地庫以及Jar包,從這里下載

              export CFLAGS=-m64

              export CXXFLAGS=-m64

              ant compile-native tar

              #將本地庫以及Jar包拷貝到hadoop對應(yīng)的目錄下,并分發(fā)到各節(jié)點上

              cp lib/native/Linux-amd64-64/* /opt/sohuhadoop/hadoop/lib/native/Linux-amd64-64/

              cp hadoop-lzo-0.4.10.jar /opt/sohuhadoop/hadoop/lib/

          3. 設(shè)置Hadoop,啟用Lzo壓縮

          vi core-site.xml

          <property>     

          <name>io.compression.codecs</name>     

          <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.BZip2Codec</value>

          </property>

          <property>     

          <name>io.compression.codec.lzo.class</name>     

          <value>com.hadoop.compression.lzo.LzoCodec</value>

          </property>

           

          vi mapred-site.xml

          <property>

          <name>mapred.compress.map.output</name>     

          <value>true</value>   

          </property>   

          <property>     

          <name>mapred.map.output.compression.codec</name>      

          <value>com.hadoop.compression.lzo.LzoCodec</value>   

          </property>

          4. 安裝lzop,從這里下載

           

          下面就是使用lzop壓縮log文件,并上傳到Hadoop上,執(zhí)行MapReduce操作,測試的Hadoop是由3個節(jié)點組成集群

          lzop -v 2011041309.log

          hadoop fs -put *.lzo /user/pvlog

          #給Lzo文件建立Index

          hadoop jar /opt/sohuhadoop/hadoop/lib/hadoop-lzo-0.4.10.jar com.hadoop.compression.lzo.LzoIndexer /user/pvlog/

          寫一個簡單的MapReduce來測試,需要指定InputForamt為Lzo格式,否則對單個Lzo文件仍不能進行Map的并行處理

          job.setInputFormatClass(com.hadoop.mapreduce.LzoTextInputFormat.class);

          可以通過下面的代碼來設(shè)置Reduce的數(shù)目:

          job.setNumReduceTasks(8);

          最終,12個文件被切分成了36個Map任務(wù)來并行處理,執(zhí)行時間為52s,如下圖:

          我們配置Hadoop默認的Block大小是128M,如果我們想切分成更多的Map任務(wù),可以通過設(shè)置其最大的SplitSize來完成:

          FileInputFormat.setMaxInputSplitSize(job, 64 *1024 * 1024);

          最終,12個文件被切分成了72個Map來處理,但處理時間反而長了,為59s,如下圖:

          而對于Gzip壓縮的文件,即使我們設(shè)置了setMaxInputSplitSize,最終的Map數(shù)仍然是輸入文件的數(shù)目12,執(zhí)行時間為78s,如下圖:

          從以上的簡單測試可以看出,使用Lzo壓縮,性能確實比Gzip壓縮要好不少

          posted @ 2015-09-09 11:19 xzc 閱讀(429) | 評論 (0)編輯 收藏
               摘要: 部分內(nèi)容出處:http://www.atatech.org/article/detail/5617/0http://www.atatech.org/article/detail/4392/515 一.UDFS函數(shù)介紹1. 基本UDF(1)SHOWFUNCTIONS:這個用來熟悉未知函數(shù)。     DESCRIBE FUNCTION<...  閱讀全文
          posted @ 2015-08-06 17:36 xzc 閱讀(722) | 評論 (0)編輯 收藏
          轉(zhuǎn)自:http://www.cnblogs.com/shitouer/archive/2012/12/19/2823641.html

          最近在看《Hadoop:The Definitive Guide》,對其分布式文件系統(tǒng)HDFS的Streaming data access不能理解。基于流的數(shù)據(jù)讀寫,太抽象了,什么叫基于流,什么是流?Hadoop是Java語言寫的,所以想理解好Hadoop的Streaming Data Access,還得從Java流機制入手。流機制也是JAVA及C++中的一個重要的機制,通過流使我們能夠自由地操作包括文件,內(nèi)存,IO設(shè)備等等中的數(shù)據(jù)。

          首先,流是什么?

          流是個抽象的概念,是對輸入輸出設(shè)備的抽象,Java程序中,對于數(shù)據(jù)的輸入/輸出操作都是以“流”的方式進行。設(shè)備可以是文件,網(wǎng)絡(luò),內(nèi)存等。

          流具有方向性,至于是輸入流還是輸出流則是一個相對的概念,一般以程序為參考,如果數(shù)據(jù)的流向是程序至設(shè)備,我們成為輸出流,反之我們稱為輸入流。

          可以將流想象成一個“水流管道”,水流就在這管道中形成了,自然就出現(xiàn)了方向的概念。

          當(dāng)程序需要從某個數(shù)據(jù)源讀入數(shù)據(jù)的時候,就會開啟一個輸入流,數(shù)據(jù)源可以是文件、內(nèi)存或網(wǎng)絡(luò)等等。相反地,需要寫出數(shù)據(jù)到某個數(shù)據(jù)源目的地的時候,也會開啟一個輸出流,這個數(shù)據(jù)源目的地也可以是文件、內(nèi)存或網(wǎng)絡(luò)等等。

          流有哪些分類?

          可以從不同的角度對流進行分類:

          1. 處理的數(shù)據(jù)單位不同,可分為:字符流,字節(jié)流

          2.數(shù)據(jù)流方向不同,可分為:輸入流,輸出流

          3.功能不同,可分為:節(jié)點流,處理流

          1. 和 2. 都比較好理解,對于根據(jù)功能分類的,可以這么理解:

          節(jié)點流:節(jié)點流從一個特定的數(shù)據(jù)源讀寫數(shù)據(jù)。即節(jié)點流是直接操作文件,網(wǎng)絡(luò)等的流,例如FileInputStream和FileOutputStream,他們直接從文件中讀取或往文件中寫入字節(jié)流。

          處理流:“連接”在已存在的流(節(jié)點流或處理流)之上通過對數(shù)據(jù)的處理為程序提供更為強大的讀寫功能。過濾流是使用一個已經(jīng)存在的輸入流或輸出流連接創(chuàng)建的,過濾流就是對節(jié)點流進行一系列的包裝。例如BufferedInputStream和BufferedOutputStream,使用已經(jīng)存在的節(jié)點流來構(gòu)造,提供帶緩沖的讀寫,提高了讀寫的效率,以及DataInputStream和DataOutputStream,使用已經(jīng)存在的節(jié)點流來構(gòu)造,提供了讀寫Java中的基本數(shù)據(jù)類型的功能。他們都屬于過濾流。

          舉個簡單的例子:

          復(fù)制代碼
          public static void main(String[] args) throws IOException {
                  // 節(jié)點流FileOutputStream直接以A.txt作為數(shù)據(jù)源操作
                  FileOutputStream fileOutputStream = new FileOutputStream("A.txt");
                  // 過濾流BufferedOutputStream進一步裝飾節(jié)點流,提供緩沖寫
                  BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
                          fileOutputStream);
                  // 過濾流DataOutputStream進一步裝飾過濾流,使其提供基本數(shù)據(jù)類型的寫
                  DataOutputStream out = new DataOutputStream(bufferedOutputStream);
                  out.writeInt(3);
                  out.writeBoolean(true);
                  out.flush();
                  out.close();
                  // 此處輸入節(jié)點流,過濾流正好跟上邊輸出對應(yīng),讀者可舉一反三
                  DataInputStream in = new DataInputStream(new BufferedInputStream(
                          new FileInputStream("A.txt")));
                  System.out.println(in.readInt());
                  System.out.println(in.readBoolean());
                  in.close();
          }
          復(fù)制代碼

          流結(jié)構(gòu)介紹

          Java所有的流類位于java.io包中,都分別繼承字以下四種抽象流類型。

           字節(jié)流字符流
          輸入流InputStreamReader
          輸出流OutputStreamWriter

          1.繼承自InputStream/OutputStream的流都是用于向程序中輸入/輸出數(shù)據(jù),且數(shù)據(jù)的單位都是字節(jié)(byte=8bit),如圖,深色的為節(jié)點流,淺色的為處理流。

           

          2.繼承自Reader/Writer的流都是用于向程序中輸入/輸出數(shù)據(jù),且數(shù)據(jù)的單位都是字符(2byte=16bit),如圖,深色的為節(jié)點流,淺色的為處理流。

          常見流類介紹:

          節(jié)點流類型常見的有:

          對文件操作的字符流有FileReader/FileWriter,字節(jié)流有FileInputStream/FileOutputStream。

          處理流類型常見的有:

          緩沖流:緩沖流要“套接”在相應(yīng)的節(jié)點流之上,對讀寫的數(shù)據(jù)提供了緩沖的功能,提高了讀寫效率,同事增加了一些新的方法。

            字節(jié)緩沖流有BufferedInputStream/BufferedOutputStream,字符緩沖流有BufferedReader/BufferedWriter,字符緩沖流分別提供了讀取和寫入一行的方法ReadLine和NewLine方法。

            對于輸出地緩沖流,寫出的數(shù)據(jù),會先寫入到內(nèi)存中,再使用flush方法將內(nèi)存中的數(shù)據(jù)刷到硬盤。所以,在使用字符緩沖流的時候,一定要先flush,然后再close,避免數(shù)據(jù)丟失。

          轉(zhuǎn)換流:用于字節(jié)數(shù)據(jù)到字符數(shù)據(jù)之間的轉(zhuǎn)換。

            僅有字符流InputStreamReader/OutputStreamWriter。其中,InputStreamReader需要與InputStream“套接”,OutputStreamWriter需要與OutputStream“套接”。

          數(shù)據(jù)流:提供了讀寫Java中的基本數(shù)據(jù)類型的功能。

            DataInputStream和DataOutputStream分別繼承自InputStream和OutputStream,需要“套接”在InputStream和OutputStream類型的節(jié)點流之上。

          對象流:用于直接將對象寫入寫出。

            流類有ObjectInputStream和ObjectOutputStream,本身這兩個方法沒什么,但是其要寫出的對象有要求,該對象必須實現(xiàn)Serializable接口,來聲明其是可以序列化的。否則,不能用對象流讀寫。

            還有一個關(guān)鍵字比較重要,transient,由于修飾實現(xiàn)了Serializable接口的類內(nèi)的屬性,被該修飾符修飾的屬性,在以對象流的方式輸出的時候,該字段會被忽略。

           

          posted @ 2015-07-16 11:36 xzc 閱讀(382) | 評論 (0)編輯 收藏

          Hive:

          利用squirrel-sql 連接hive

          add driver -> name&example url(jdbc:hive2://xxx:10000)->extra class path ->Add

          {hive/lib/hive-common-*.jar

          hive/lib/hive-contrib-*.jar

          hive/lib/hive-jdbc-*.jar

          hive/lib/libthrift-*.jar

          hive/lib/hive-service-*.jar

          hive/lib/httpclient-*.jar

          hive/lib/httpcore-*.jar

          hadoop/share/hadoop/common/hadoop-common--*.jar

          hadoop/share/hadoop/common/lib/common-configuration-*.jar

          hadoop/share/hadoop/common/lib/log4j-*.jar

          hadoop/share/hadoop/common/lib/slf4j-api-*.jar

          hadoop/share/hadoop/common/lib/slf4j-log4j-*.jar}

          ->List Drivers(wait ..then class name will auto set org.apache.hive.jdbc/HiveDriver)->OK->Add aliases ->chose the hive driver->done

           

          Hive數(shù)據(jù)遷移

          1.導(dǎo)出表

          EXPORT TABLE <table_name> TO 'path/to/hdfs';

          2.復(fù)制數(shù)據(jù)到另一個hdfs

          hadoop distcp hdfs://:8020/path/to/hdfs hdfs:///path/to/hdfs

          3.導(dǎo)入表

          IMPORT TABLE <table_name> FROM 'path/to/another/hdfs';

          Hive 輸出查詢結(jié)果到文件

          輸出到本地文件:

          insert overwrite local directory './test-04'
          row format delimited
          FIELDS TERMINATED BY '\t'
          COLLECTION ITEMS TERMINATED BY ','
          MAP KEYS TERMINATED BY ':'
          select * from src;

          輸出到hdfs:

          輸出到hdfs好像不支持 row format,只能另辟蹊徑了

          INSERT OVERWRITE DIRECTORY '/outputable.txt'
          select concat(col1, ',', col2, ',', col3) from myoutputtable;

          當(dāng)然默認的分隔符是\001

          若要直接對文件進行操作課直接用stdin的形式

          eg. hadoop fs -cat ../000000_0 |python doSomeThing.py

          #!/usr/bin/env python

          import sys

          for line in sys.stdin:

              (a,b,c)=line.strip().split('\001')

           

          Hive 語法:

          hive好像不支持select dicstinct col1 as col1 from table group by col1

          需要用grouping sets

          select col1 as col1 from table group by col1 grouping sets((col1))

          Beeline:

          文檔:https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients

          利用jdbc連接hive:

          hive2='JAVA_HOME=/opt/java7 HADOOP_HOME=/opt/hadoop /opt/hive/bin/beeline -u jdbc:hive2://n1.hd2.host.dxy:10000 -n hadoop -p fake -d org.apache.hive.jdbc.HiveDriver --color=true --silent=false --fastConnect=false --verbose=true'

          beeline利用jdbc連接hive若需要執(zhí)行多條命令使用

          hive2 -e "xxx" -e "yyy"  -e...

          posted @ 2015-06-13 16:48 xzc 閱讀(3442) | 評論 (0)編輯 收藏
               摘要: 兩個月前使用過hbase,現(xiàn)在最基本的命令都淡忘了,留一個備查~進入hbase shell console$HBASE_HOME/bin/hbase shell如果有kerberos認證,需要事先使用相應(yīng)的keytab進行一下認證(使用kinit命令),認證成功之后再使用hbase shell進入可以使用whoami命令可查看當(dāng)前用戶hbase(main)> whoami表的管理1)查看有哪...  閱讀全文
          posted @ 2015-04-28 11:48 xzc 閱讀(256) | 評論 (0)編輯 收藏
          僅列出標題
          共32頁: First 上一頁 3 4 5 6 7 8 9 10 11 下一頁 Last 
          主站蜘蛛池模板: 元朗区| 阿克苏市| 迁西县| 蓬溪县| 香河县| 东乡县| 鹤庆县| 东城区| 盘锦市| 乐至县| 育儿| 邵阳市| 黔西县| 金塔县| 栾城县| 通河县| 浦城县| 包头市| 花莲市| 娄底市| 广水市| 嵊泗县| 朝阳市| 澄城县| 林州市| 长海县| 叙永县| 磴口县| 墨竹工卡县| 澜沧| 宁德市| 广汉市| 托克逊县| 广饶县| 衡阳市| 德庆县| 乐业县| 黑山县| 青浦区| 金山区| 葫芦岛市|