hadoop支援lzo完整過程
-
啟用lzo
-
安裝lzo
-
增加索引
簡介
啟用lzo的壓縮方式對於小規模叢集是很有用處,壓縮比率大概能降到原始日誌大小的1/3。同時解壓縮的速度也比較快。
lzo並不是linux系統原生支援,所以需要下載安裝軟體包。這裡至少需要安裝3個軟體包:lzo, lzop, hadoop-gpl-packaging。
gpl-packaging的作用主要是對壓縮的lzo檔案建立索引,否則的話,無論壓縮檔案是否大於hdfs的block大小,都只會按照預設啟動2個map操作。
部署
安裝lzop native library
[root@localhost ~]# wget [root@localhost ~]# tar -zxvf lzo-2.06.tar.gz[root@localhost ~]# cd lzo-2.06[root@localhost ~]# export CFLAGS=-m64[root@localhost ~]# ./configure -enable-shared -prefix=/usr/local/hadoop/lzo/[root@localhost ~]# make && sudo make install編譯完lzo包之後,會在/usr/local/hadoop/lzo/生成一些檔案。 將/usr/local/hadoop/lzo目錄下的所有檔案打包,並同步到叢集中的所有機器上。 在編譯lzo包的時候,需要一些環境,可以用下面的命令安裝好lzo編譯環境 [root@localhost ~]# yum -y install lzo-devel zlib-devel gcc autoconf automake libtool1234567891011121314151617181912345678910111213141516171819
安裝hadoop-lzo
這裡下載的是Twitter hadoop-lzo,可以用Maven(如何安裝Maven請參照本部落格的《Linux命令列下安裝Maven與配置》)進行編譯。 [root@localhost ~]# wget 下載後的檔名是master,它是一個zip格式的壓縮包,可以進行解壓: [root@localhost ~]# unzip master解壓後的資料夾名為hadoop-lzo-master 當然,如果你電腦安裝了git,你也可以用下面的命令去下載 [root@localhost ~]# git clone 中的pom.xml依賴了hadoop2.1.0-beta,由於我們這裡用到的是Hadoop 2.2.0,所以建議將hadoop版本修改為2.2.0: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <hadoop.current.version>2.2.0</hadoop.current.version> <hadoop.old.version>1.0.4</hadoop.old.version> </properties> 然後進入hadoop-lzo-master目錄,依次執行下面的命令 [root@localhost ~]# export CFLAGS=-m64[root@localhost ~]# export CXXFLAGS=-m64[root@localhost ~]# export C_INCLUDE_PATH=/usr/local/hadoop/lzo/include[root@localhost ~]# export LIBRARY_PATH=/usr/local/hadoop/lzo/lib[root@localhost ~]# mvn clean package -Dmaven.test.skip=true[root@localhost ~]# cd target/native/Linux-amd64-64[root@localhost ~]# tar -cBf - -C lib . | tar -xBvf - -C ~[root@localhost ~]# cp ~/libgplcompression* $HADOOP_HOME/lib/native/[root@localhost ~]# cp target/hadoop-lzo-0.4.18-SNAPSHOT.jar $HADOOP_HOME/share/hadoop/common/其實在tar -cBf – -C lib . | tar -xBvf – -C ~命令之後,會在~目錄下生成一下幾個檔案: [root@localhost ~]# ls -l1-rw-r--r-- 1 libgplcompression.a2-rw-r--r-- 1 libgplcompression.la3lrwxrwxrwx 1 libgplcompression.so -> libgplcompression.so.0.0.04lrwxrwxrwx 1 libgplcompression.so.0 -> libgplcompression.so.0.0.05-rwxr-xr-x 1 libgplcompression.so.0.0.0其中libgplcompression.so和libgplcompression.so.0是連結檔案,指向libgplcompression.so.0.0.0,將剛剛生成的libgplcompression*和target/hadoop-lzo-0.4.18-SNAPSHOT.jar同步到叢集中的所有機器對應的目錄。1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515212345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
配置hadoop環境變數
1、在Hadoop中的$HADOOP_HOME/etc/hadoop/hadoop-env.sh加上下面配置: export LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib 2、在$HADOOP_HOME/etc/hadoop/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>3、在$HADOOP_HOME/etc/hadoop/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><property> <name>mapred.child.env</name> <value>LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib</value></property>將剛剛修改的配置檔案全部同步到叢集的所有機器上,並重啟Hadoop叢集,這樣就可以在Hadoop中使用lzo。123456789101112131415161718192021222324252627282930313233343536123456789101112131415161718192021222324252627282930313233343536
驗證lzo(透過hive測試)
建立lzo表
CREATE TABLE lzo ( ip STRING,user STRING,time STRING, request STRING, status STRING,size STRING, rt STRING, referer STRING, agent STRING, forwarded String ) partitioned by (date string, host string )row format delimited fields terminated by '\t'STORED AS INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat"OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat";12345678910111213141516171819201234567891011121314151617181920
匯入資料
LOAD DATA Local INPATH '/home/hadoop/data/access_20151230_25.log.lzo' INTO TABLE lzo PARTITION(date=20151229,host=25);/home/hadoop/data/access_20151219.log檔案的格式如下:xxx.xxx.xx.xxx - [23/Dec/2015:23:22:38 +0800] "GET /ClientGetResourceDetail.action?id=318880&token=Ocm HTTP/1.1" 200 199 0.008 "xxx.com" "Android4.1.2/LENOVO/Lenovo A706/ch_lenovo/80" "-"直接採用lzop /home/hadoop/data/access_20151219.log即可生成lzo格式壓縮檔案/home/hadoop/data/access_20151219.log.lzo1234512345
索引LZO檔案
1. 批次lzo檔案修改 $HADOOP_HOME/bin/hadoop jar /home/hadoop/hadoop-2.2.0/share/hadoop/common/hadoop-lzo-0.4.20-SNAPSHOT.jar com.hadoop.compression.lzo.DistributedLzoIndexer /user/hive/warehouse/lzo 2. 單個lzo檔案修改 $HADOOP_HOME/bin/hadoop jar /home/hadoop/hadoop-2.2.0/share/hadoop/common/hadoop-lzo-0.4.20-SNAPSHOT.jarcom.hadoop.compression.lzo.LzoIndexer/user/hive/warehouse/lzo/20151228/lzo_test_20151228.lzo1234567891011121312345678910111213
利用hive執行mr任務
set hive.exec.reducers.max=10; set mapred.reduce.tasks=10;select ip,rt from nginx_lzo limit 10; 在hive的控制檯能看到類似如下格式輸出,就表示正確了! hive> set hive.exec.reducers.max=10; hive> set mapred.reduce.tasks=10; hive> select ip,rt from lzo limit 10; Total MapReduce jobs = 1Launching Job 1 out of 1Number of reduce tasks is set to 0 since there's no reduce operator Starting Job = job_1388065803340_0009, Tracking URL = Kill Command = /home/hadoop/hadoop-2.2.0/bin/hadoop job -kill job_1388065803340_0009 Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 02013-12-27 09:13:39,163 Stage-1 map = 0%, reduce = 0%2013-12-27 09:13:45,343 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 1.22 sec2013-12-27 09:13:46,369 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 1.22 sec MapReduce Total cumulative CPU time: 1 seconds 220 msec Ended Job = job_1388065803340_0009 MapReduce Jobs Launched: Job 0: Map: 1 Cumulative CPU: 1.22 sec HDFS Read: 63570 HDFS Write: 315 SUCCESS Total MapReduce CPU Time Spent: 1 seconds 220 msec OK xxx.xxx.xx.xxx "XXX.com"Time taken: 17.498 seconds, Fetched: 10 row(s)123456789101112131415161718192021222324123456789101112131415161718192021222324
修改使用中hive表的輸入輸出格
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31496956/viewspace-2199882/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- hadoop,hive啟用lzo壓縮和建立lzo索引薦HadoopHive索引
- hadoop中使用lzo的壓縮Hadoop
- 配置Hadoop中啟用LZO壓縮Hadoop
- hadoop Kerberos過程HadoopROS
- hadoop叢集內lzo的安裝與配置Hadoop
- 【Hadoop】按照map-reduce的思想試述完整的pagerank計算過程Hadoop
- Hadoop之 MapReducer工作過程Hadoop
- iOS App 的完整啟動過程iOSAPP
- 深入剖析Vue原始碼 - 完整渲染過程Vue原始碼
- Hexo部落格系統搭建的完整過程Hexo
- 一次完整的 HTTP 請求過程HTTP
- 一次完整的HTTP請求過程HTTP
- Virtual box搭建10G rac完整過程
- Hadoop2.3.0詳細安裝過程Hadoop
- 記一次完整的wordpress安裝過程
- Nginx支援Socket轉發過程詳解Nginx
- openGauss 支援儲存過程除錯儲存過程除錯
- nginx 處理客戶端請求的完整過程Nginx客戶端
- Hadoop過程中配置SSH免密碼登入Hadoop密碼
- 搭建yarn(hadoop-2.2.0)環境詳細過程YarnHadoop
- Hadoop學習第四天--MapReduce提交過程Hadoop
- openGauss 函式及儲存過程支援函式儲存過程
- JAVA反序列化漏洞完整過程分析與除錯Java除錯
- 完整的一次 HTTP 請求響應過程(二)HTTP
- 完整的一次 HTTP 請求響應過程(一)HTTP
- kafka connect,將資料批量寫到hdfs完整過程Kafka
- VS2012 編譯Qt 4.8.4完整過程編譯QT
- oracle自定義過程來獲得完整的sql語句OracleSQL
- 完整的分頁儲存過程以及c#呼叫方法儲存過程C#
- Nginx圖片下載不完整的處理過程Nginx
- Hadoop原始碼分析(完整版)Hadoop原始碼
- (轉)Index Rebuild Online 過程(9i)完整版IndexRebuild
- Hadoop1.x MapReduce 程式執行的詳細過程Hadoop
- Hadoop平臺學習過程的一些總結Hadoop
- Entity Framework 6 Code First新特性:支援儲存過程Framework儲存過程
- DNS協議 是什麼?說說DNS 完整的查詢過程?DNS協議
- hadoop需要哪些技術支援Hadoop
- Hadoop原始碼:namenode格式化和啟動過程實現Hadoop原始碼