﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-XZC.Log-随笔分类-hadoop</title><link>http://www.blogjava.net/xzclog/category/53968.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 26 Nov 2018 10:54:46 GMT</lastBuildDate><pubDate>Mon, 26 Nov 2018 10:54:46 GMT</pubDate><ttl>60</ttl><item><title>HDFS副本设置——默认3</title><link>http://www.blogjava.net/xzclog/archive/2018/11/26/433518.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Mon, 26 Nov 2018 03:52:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2018/11/26/433518.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/433518.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2018/11/26/433518.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/433518.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/433518.html</trackback:ping><description><![CDATA[首先 dfs.replication这个参数是个client参数，即node level参数。需要在每台datanode上设置。
其实默认为3个副本已经够用了，设置太多也没什么用。

一个文件，上传到hdfs上时指定的是几个副本就是几个。以后你修改了副本数，对已经上传了的文件也不会起作用。可以再上传文件的同时指定创建的副本数
Hadoop dfs -D dfs.replication=1 -put 70M logs/2

可以通过命令来更改已经上传的文件的副本数：
hadoop fs -setrep -R 3 /

查看当前hdfs的副本数
hadoop fsck -locations
FSCK started by hadoop from /172.18.6.112 for path / at Thu Oct 27 13:24:25 CST 2011
....................Status: HEALTHY
Total size: 4834251860 B
Total dirs: 21
Total files: 20
Total blocks (validated): 82 (avg. block size 58954290 B)
Minimally replicated blocks: 82 (100.0 %)
Over-replicated blocks: 0 (0.0 %)
Under-replicated blocks: 0 (0.0 %)
Mis-replicated blocks: 0 (0.0 %)
Default replication factor: 3
Average block replication: 3.0
Corrupt blocks: 0
Missing replicas: 0 (0.0 %)
Number of data-nodes: 3
Number of racks: 1
FSCK ended at Thu Oct 27 13:24:25 CST 2011 in 10 milliseconds
The filesystem under path '/' is HEALTHY

某个文件的副本数，可以通过ls中的文件描述符看到
hadoop dfs -ls
-rw-r--r-- 3 hadoop supergroup 153748148 2011-10-27 16:11 /user/hadoop/logs/201108/impression_witspixel2011080100.thin.log.gz


如果你只有3个datanode，但是你却指定副本数为4，是不会生效的，因为每个datanode上只能存放一个副本。

 

参考：http://blog.csdn.net/lskyne/article/details/8898666<img src ="http://www.blogjava.net/xzclog/aggbug/433518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2018-11-26 11:52 <a href="http://www.blogjava.net/xzclog/archive/2018/11/26/433518.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>kafka节点假死</title><link>http://www.blogjava.net/xzclog/archive/2018/03/08/433087.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 08 Mar 2018 08:35:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2018/03/08/433087.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/433087.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2018/03/08/433087.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/433087.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/433087.html</trackback:ping><description><![CDATA[<div><div><div>一、前言</div><div>&nbsp; &nbsp; 早上醒来打开微信，同事反馈kafka集群从昨天凌晨开始写入频繁失败，赶紧打开电脑查看了kafka集群的机器监控，日志信息，发现其中一个节点的集群负载从昨天凌晨突然掉下来了，和同事反馈的时间点大概一致，于是乎就登录服务器开始干活。</div><div></div><div>二、排错</div><div>1、查看机器监控，看是否能大概定位是哪个节点有异常</div><div>技术分享</div><div>2、根据机器监控大概定位到其中一个异常节点，登录服务器查看kafka日志，发现有报错日志，并且日志就停留在这个这个时间点：</div><div>[2017-06-01 16:59:59,851] ERROR Processor got uncaught exception. (kafka.network.Processor)</div><div>java.lang.OutOfMemoryError: Direct buffer memory</div><div>&nbsp; &nbsp; &nbsp; &nbsp; at java.nio.Bits.reserveMemory(Bits.java:658)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; at java.nio.DirectByteBuffer.&lt;init&gt;(DirectByteBuffer.java:123)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:306)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; at sun.nio.ch.Util.getTemporaryDirectBuffer(Util.java:174)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; at sun.nio.ch.IOUtil.read(IOUtil.java:195)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:379)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.kafka.common.network.PlaintextTransportLayer.read(PlaintextTransportLayer.java:108)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:97)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:71)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:160)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:141)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.kafka.common.network.Selector.poll(Selector.java:286)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; at kafka.network.Processor.run(SocketServer.scala:413)3、查看kafka进程和监听端口情况，发现都正常，尼玛假死了</div><div>ps -ef |grep kafka &nbsp; &nbsp; &nbsp; &nbsp;## 查看kafka的进程</div><div>netstat -ntlp |grep 9092 &nbsp;##9092kafka的监听端口4、既然已经假死了，只能重启了</div><div></div><div>ps -ef |grep kafka |grep -v grep |awk &#8216;{print $2}&#8216; &nbsp;| xargs kill -9 &nbsp;</div><div>/usr/local/kafka/bin;nohup ./kafka-server-start.sh ../config/server.properties &amp;5、重启后在观察该节点的kafka日志，在一顿index重建之后，上面的报错信息在疯狂的刷，最后谷歌一番，解决了该问题</div><div>三、解决方案：</div><div></div><div>在</div><div>/usr/local/kafka/binkafka-run-class.sh去掉</div><div>-XX:+DisableExplicitGC添加</div><div>-XX:MaxDirectMemorySize=512m在一次重启kafka，问题解决。</div></div></div><img src ="http://www.blogjava.net/xzclog/aggbug/433087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2018-03-08 16:35 <a href="http://www.blogjava.net/xzclog/archive/2018/03/08/433087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hive中reduce个数设定</title><link>http://www.blogjava.net/xzclog/archive/2018/03/07/433084.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 07 Mar 2018 03:21:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2018/03/07/433084.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/433084.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2018/03/07/433084.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/433084.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/433084.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我们每次执行hive的hql时，shell里都会提示一段话：[python]&nbsp;view plaincopy...&nbsp;&nbsp;Number&nbsp;of&nbsp;reduce&nbsp;tasks&nbsp;not&nbsp;specified.&nbsp;Estimated&nbsp;from&nbsp;input&nbsp;data&nbsp;size:&nbsp;50...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2018/03/07/433084.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/433084.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2018-03-07 11:21 <a href="http://www.blogjava.net/xzclog/archive/2018/03/07/433084.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spark 累加历史 + 统计全部 + 行转列</title><link>http://www.blogjava.net/xzclog/archive/2017/10/23/432867.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Mon, 23 Oct 2017 14:05:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/10/23/432867.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432867.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/10/23/432867.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432867.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432867.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: spark 累加历史主要用到了窗口函数，而进行全部统计，则需要用到rollup函数1 &nbsp;应用场景：　　1、我们需要统计用户的总使用时长（累加历史）　　2、前台展现页面需要对多个维度进行查询，如：产品、地区等等　　3、需要展现的表格头如： 产品、2015-04、2015-05、2015-062 原始数据：product_code |event_date |dur...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2017/10/23/432867.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/432867.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-10-23 22:05 <a href="http://www.blogjava.net/xzclog/archive/2017/10/23/432867.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spark分析窗口函数</title><link>http://www.blogjava.net/xzclog/archive/2017/10/23/432866.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Mon, 23 Oct 2017 14:04:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/10/23/432866.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432866.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/10/23/432866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432866.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432866.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Spark1.4发布，支持了窗口分析函数(window functions)。在离线平台中，90%以上的离线分析任务都是使用Hive实现，其中必然会使用很多窗口分析函数，如果SparkSQL支持窗口分析函数，那么对于后面Hive向SparkSQL中的迁移的工作量会大大降低，使用方式如下：1、初始化数据创建表[sql]&nbsp;view plain&nbsp;cop...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2017/10/23/432866.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/432866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-10-23 22:04 <a href="http://www.blogjava.net/xzclog/archive/2017/10/23/432866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SparkSQL相关语句总结</title><link>http://www.blogjava.net/xzclog/archive/2017/10/23/432865.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Mon, 23 Oct 2017 13:03:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/10/23/432865.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432865.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/10/23/432865.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432865.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432865.html</trackback:ping><description><![CDATA[<h1 class="postTitle" style="margin-bottom: 10px; font-size: 14px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-variant: normal; white-space: normal; word-spacing: 0px; text-transform: none; font-weight: bold; color: rgb(75,75,75); font-style: normal; widows: 1; letter-spacing: normal; text-indent: 0px; -webkit-text-stroke-width: 0px"><a id="cb_post_title_url" class="postTitle2" style="text-decoration: none; color: rgb(26,139,200)" href="http://www.cnblogs.com/yangsy0915/p/4867203.html">SparkSQL相关语句总结</a></h1>
<div id="cnblogs_post_body" style="margin-bottom: 20px; white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(75,75,75); font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; text-indent: 0px; -webkit-text-stroke-width: 0px">
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">1.<strong>in 不支持子查询 eg. select * from src where key in(select key from test);</strong><br />支持查询个数 eg. select * from src where key in(1,2,3,4,5);<br />in 40000个 耗时25.766秒<br />in 80000个 耗时78.827秒<br /><br />2.<strong>union all/union</strong><br />不支持顶层的union all eg. select key from src UNION ALL select key from test;<br />支持select * from (select key from src union all select key from test)aa;<br />不支持 union<br />支持select distinct key from (select key from src union all select key from test)aa;<br /><br />3.<strong>intersect 不支持</strong></p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">4.<strong>minus 不支持</strong></p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">5.<strong>except 不支持</strong></p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">6.<strong>inner join/join/left outer join/right outer join/full outer join/left semi join 都支持</strong><br />left outer join/right outer join/full outer join 中间必须有outer<br />join是最简单的关联操作，两边关联只取交集;<br />left outer join是以左表驱动，右表不存在的key均赋值为null；<br />right outer join是以右表驱动，左表不存在的key均赋值为null；<br />full outer join全表关联，将两表完整的进行笛卡尔积操作，左右表均可赋值为null;<br />left semi join最主要的使用场景就是解决exist in;<br />Hive不支持where子句中的子查询，SQL常用的exist in子句在Hive中是不支持的<br />不支持子查询 eg. select * from src aa where aa.key in(select bb.key from test bb);<br />可用以下两种方式替换：<br />select * from src aa left outer join test bb on aa.key=bb.key where bb.key &lt;&gt; null;<br />select * from src aa left semi join test bb on aa.key=bb.key;<br />大多数情况下 JOIN ON 和 left semi on 是对等的<br />A,B两表连接，如果B表存在重复数据<br />当使用JOIN ON的时候，A,B表会关联出两条记录，应为ON上的条件符合；<span class="Apple-converted-space">&nbsp;</span><br />而是用LEFT SEMI JOIN 当A表中的记录，在B表上产生符合条件之后就返回，不会再继续查找B表记录了，<br />所以如果B表有重复，也不会产生重复的多条记录。<span class="Apple-converted-space">&nbsp;</span><br />left outer join 支持子查询 eg. select aa.* from src aa left outer join (select * from test111)bb on aa.key=bb.a;<br /><br />7. hive四中数据导入方式<br />1）<strong>从本地文件系统中导入数据到Hive表</strong><br />create table wyp(id int,name string) ROW FORMAT delimited fields terminated by '\t' STORED AS TEXTFILE;<br />load data local inpath 'wyp.txt' into table wyp;<br />2)<strong>从HDFS上导入数据到Hive表</strong><br />[wyp@master /home/q/hadoop-2.2.0]$ bin/hadoop fs -cat /home/wyp/add.txt<br />hive&gt; load data inpath '/home/wyp/add.txt' into table wyp;<br />3)<strong>从别的表中查询出相应的数据并导入到Hive表中</strong><br />hive&gt; create table test(<br />&gt; id int, name string<br />&gt; ,tel string)<br />&gt; partitioned by<br />&gt; (age int)<br />&gt; ROW FORMAT DELIMITED<br />&gt; FIELDS TERMINATED BY '\t'<br />&gt; STORED AS TEXTFILE;<br /><br />注：test表里面用age作为了分区字段，分区：在Hive中，表的每一个分区对应表下的相应目录，所有分区的数据都是存储在对应的目录中。<br />比如wyp表有dt和city两个分区，则对应dt=20131218city=BJ对应表的目录为/user/hive/warehouse/dt=20131218/city=BJ，<br />所有属于这个分区的数据都存放在这个目录中。<br /><br />hive&gt; insert into table test<br />&gt; partition (age='25')<br />&gt; select id, name, tel<br />&gt; from wyp;<br /><br /><strong>也可以在select语句里面通过使用分区值来动态指明分区：</strong><br />hive&gt; set hive.exec.dynamic.partition.mode=nonstrict;<br />hive&gt; insert into table test<br />&gt; partition (age)<br />&gt; select id, name,<br />&gt; tel, age<br />&gt; from wyp;<br /><br /><strong>Hive也支持insert overwrite方式来插入数据</strong><br />hive&gt; insert overwrite table test<br />&gt; PARTITION (age)<br />&gt; select id, name, tel, age<br />&gt; from wyp;<br /><br />Hive还支持多表插入<br />hive&gt; from wyp<br />&gt; insert into table test<br />&gt; partition(age)<br />&gt; select id, name, tel, age<br />&gt; insert into table test3<br />&gt; select id, name<br />&gt; where age&gt;25;<br />4)<strong>在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中</strong><br />hive&gt; create table test4<br />&gt; as<br />&gt; select id, name, tel<br />&gt; from wyp;<br /><br />8.<strong>查看建表语句</strong><br />hive&gt; show create table test3;</p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">9.<strong>表重命名</strong><br />hive&gt; ALTER TABLE events RENAME TO 3koobecaf;<span class="Apple-converted-space">&nbsp;</span><br /><br />10.<strong>表增加列</strong><br />hive&gt; ALTER TABLE pokes ADD COLUMNS (new_col INT);<span class="Apple-converted-space">&nbsp;</span><br /><br />11.<strong>添加一列并增加列字段注释</strong><span class="Apple-converted-space">&nbsp;</span><br />hive&gt; ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');<span class="Apple-converted-space">&nbsp;</span><br /><br />12<strong>.删除表</strong><br />hive&gt; DROP TABLE pokes;<span class="Apple-converted-space">&nbsp;</span><br /><br />13<strong>.top n</strong><br />hive&gt; select * from test order by key limit 10;<br />14.<strong>创建数据库</strong><br />Create Database baseball;<br /><br /></p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">14.<strong>alter table tablename &nbsp;change&nbsp;oldColumn newColumn column_type 修改列的名称和类型</strong></p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">alter table yangsy CHANGE product_no phone_no string</p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">&nbsp;</p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">15.<strong>导入.sql文件中的sql</strong></p>
<div>&nbsp;spark-sql&nbsp;--driver-class-path&nbsp;/home/hadoop/hive/lib/mysql-connector-java-5.1.30-bin.jar&nbsp;-f&nbsp;testsql.sql&nbsp;</div>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px"><br />insert into table CI_CUSER_20141117154351522 select mainResult.PRODUCT_NO,dw_coclbl_m02_3848.L1_01_02_01,dw_coclbl_d01_3845.L2_01_01_04 from (select PRODUCT_NO from CI_CUSER_20141114203632267) mainResult left join DW_COCLBL_M02_201407 dw_coclbl_m02_3848 on mainResult.PRODUCT_NO = dw_coclbl_m02_3848.PRODUCT_NO left join DW_COCLBL_D01_20140515 dw_coclbl_d01_3845 on dw_coclbl_m02_3848.PRODUCT_NO = dw_coclbl_d01_3845.PRODUCT_NO</p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">insert into CI_CUSER_20141117142123638 ( PRODUCT_NO,ATTR_COL_0000,ATTR_COL_0001) select mainResult.PRODUCT_NO,dw_coclbl_m02_3848.L1_01_02_01,dw_coclbl_m02_3848.L1_01_03_01 from (select PRODUCT_NO from CI_CUSER_20141114203632267) mainResult left join DW_COCLBL_M02_201407 dw_coclbl_m02_3848 on mainResult.PRODUCT_NO = dw_coclbl_m02_3848.PRODUCT_NO<span class="Apple-converted-space">&nbsp;</span><br /><br /><br /><strong>CREATE TABLE ci_cuser_yymmddhhmisstttttt_tmp(product_no string) row format serde 'com.bizo.hive.serde.csv.CSVSerde' ;<span class="Apple-converted-space">&nbsp;</span></strong><br /><strong>LOAD DATA LOCAL INPATH '/home/ocdc/coc/yuli/test123.csv' OVERWRITE INTO TABLE test_yuli2;</strong></p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">创建支持CSV格式的testfile文件<br /><strong>CREATE TABLE test_yuli7 row format serde 'com.bizo.hive.serde.csv.CSVSerde' as select * from CI_CUSER_2015031016272978</strong>6;</p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px"><strong>不依赖CSVSerde的jar包创建逗号分隔的表</strong><br />"create table " +listName+ " ROW FORMAT DELIMITED FIELDS TERMINATED BY ','" +<br />" as select * from " + listName1;</p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">create table aaaa ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE as select * from</p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px"><strong>ThriftServer 开启FAIR模式</strong><br />SparkSQL Thrift Server 开启FAIR调度方式:<br />1. 修改$SPARK_HOME/conf/spark-defaults.conf,新增<br />2. spark.scheduler.mode FAIR<br />3. spark.scheduler.allocation.file /Users/tianyi/github/community/apache-spark/conf/fair-scheduler.xml<br />4. 修改$SPARK_HOME/conf/fair-scheduler.xml(或新增该文件), 编辑如下格式内容<br />5. &lt;?xml version="1.0"?&gt;<br />6. &lt;allocations&gt;<br />7. &lt;pool name="production"&gt;<br />8. &lt;schedulingMode&gt;FAIR&lt;/schedulingMode&gt;<br />9. &lt;!-- weight表示两个队列在minShare相同的情况下,可以使用资源的比例 --&gt;<br />10. &lt;weight&gt;1&lt;/weight&gt;<br />11. &lt;!-- minShare表示优先保证的资源数 --&gt;<br />12. &lt;minShare&gt;2&lt;/minShare&gt;<br />13. &lt;/pool&gt;<br />14. &lt;pool name="test"&gt;<br />15. &lt;schedulingMode&gt;FIFO&lt;/schedulingMode&gt;<br />16. &lt;weight&gt;2&lt;/weight&gt;<br />17. &lt;minShare&gt;3&lt;/minShare&gt;<br />18. &lt;/pool&gt;<br />19. &lt;/allocations&gt;<br />20. 重启Thrift Server<br />21. 执行SQL前,执行<span class="Apple-converted-space">&nbsp;</span><br />22. set spark.sql.thriftserver.scheduler.pool=指定的队列名</p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">等操作完了 create table yangsy555 like CI_CUSER_YYMMDDHHMISSTTTTTT 然后insert into yangsy555 select * from yangsy555</p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">&nbsp;</p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px"><strong>创建一个自增序列表，使用row_number() over()为表增加序列号 以供分页查询</strong></p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px"></p>
<div>create&nbsp;table&nbsp;yagnsytest2&nbsp;as&nbsp;SELECT&nbsp;ROW_NUMBER()&nbsp;OVER()&nbsp;as&nbsp;id,*&nbsp;from&nbsp;yangsytest;</div>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">&nbsp;<img style="max-width: 900px; border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px" alt="" src="http://images2015.cnblogs.com/blog/820234/201510/820234-20151019003632710-1270467911.png" /></p>
<div>&nbsp;</div>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px">Sparksql的解析与Hiveql的解析的执行流程:</p>
<p style="margin: 10px auto; line-height: 1.5; text-indent: 0px"><img style="max-width: 900px; border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px" alt="" src="http://images2015.cnblogs.com/blog/820234/201510/820234-20151010162149456-1936201383.png" /></p></div> <img src ="http://www.blogjava.net/xzclog/aggbug/432865.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-10-23 21:03 <a href="http://www.blogjava.net/xzclog/archive/2017/10/23/432865.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快速传输大数据（tar+lz4+pv）</title><link>http://www.blogjava.net/xzclog/archive/2017/09/14/432818.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 14 Sep 2017 10:24:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/09/14/432818.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432818.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/09/14/432818.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432818.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432818.html</trackback:ping><description><![CDATA[ 如果用传统SCP远程拷贝，速度是比较慢的。现在采用lz4压缩传输。LZ4是一个非常快的无损压缩算法，压缩速度在单核300MB/S，可扩展支持多核CPU。它还具有一个非常快速的解码器，速度单核可达到和超越1GB/S。通常能够达到多核系统上的RAM速度限制。

 你PV 全命为Pipe Viewer，利用它我们可以查看到命令执行的进度。

下面介绍下lz4和pv的安装，下载软件：

下载pv-1.1.4.tar.gz wget http://sourceforge.jp/projects/sfnet_pipeviewer/downloads/pipeviewer/1.1.4/pv-1.1.4.tar.bz2/

下lz4的包难一些，可能要FQ：https://dl.dropboxusercontent.com/u/59565338/LZ4/lz4-r108.tar.gz

安装灰常简单：

pv安装：

[root ~]$ tar jxvf pv-1.1.4.tar.bz2 
[root ~]$ cd pv-1.1.4
[root pv-1.1.4]$ ./configure && make && make install
lz4安装：

[root ~]$ tar zxvf lz4-r108.tar.gz 
[root ~]$ cd lz4-r108
[root lz4-r108]$ make && make install
 

用法：（-c 后指定要传输的文件，ssh -p  是指定端口，后面的ip是目标主机的ip, -xC指定传到目标主机下的那个目录下，别的不用修改）：

tar -c mysql-slave-3307  |pv|lz4 -B4|ssh -p10022 -c arcfour128 -o"MACs umac-64@openssh.com"  192.168.100.234  "lz4 -d |tar -xC /data"
下面是我线上传一个从库的效果：


看到了吧，25.7G 只需要接近3分钟，这样远比scp速度快上了好几倍，直接scp拷贝离散文件，很消耗IO，而使用LZ4快速压缩，对性能影响不大，传输速度快

 

PS：下次补充同机房不同网段的传输效果及跨机房的传输效果^0^

 

作者：陆炫志

出处：xuanzhi的博客 http://www.cnblogs.com/xuanzhi201111

您的支持是对博主最大的鼓励，感谢您的认真阅读。本文版权归作者所有，欢迎转载，但请保留该声明。<img src ="http://www.blogjava.net/xzclog/aggbug/432818.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-09-14 18:24 <a href="http://www.blogjava.net/xzclog/archive/2017/09/14/432818.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hadoop 压缩实现分析</title><link>http://www.blogjava.net/xzclog/archive/2017/09/14/432817.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 14 Sep 2017 09:35:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/09/14/432817.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432817.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/09/14/432817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432817.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432817.html</trackback:ping><description><![CDATA[ 王 腾腾 和 邵 兵
2015 年 11 月 26 日发布
WeiboGoogle+用电子邮件发送本页面
 Comments  1
引子
随着云时代的来临，大数据（Big data）也获得了越来越多的关注。著云台的分析师团队认为，大数据（Big data）通常用来形容一个公司创造的大量非结构化和半结构化数据，这些数据在下载到关系型数据库用于分析时会花费过多时间和金钱。大数据分析常和云计算联系到一起，因为实时的大型数据集分析需要像 MapReduce 一样的框架来向数十、数百或甚至数千的电脑分配工作。
 &#8220;大数据&#8221;在互联网行业指的是这样一种现象：互联网公司在日常运营中生成、累积的用户网络行为数据。这些数据的规模是如此庞大，以至于不能用 G 或 T 来衡量。所以如何高效的处理分析大数据的问题摆在了面前。对于大数据的处理优化方式有很多种，本文中主要介绍在使用 Hadoop 平台中对数据进行压缩处理来提高数据处理效率。
压缩简介
Hadoop 作为一个较通用的海量数据处理平台，每次运算都会需要处理大量数据，我们会在 Hadoop 系统中对数据进行压缩处理来优化磁盘使用率，提高数据在磁盘和网络中的传输速度，从而提高系统处理数据的效率。在使用压缩方式方面，主要考虑压缩速度和压缩文件的可分割性。综合所述，使用压缩的优点如下：
1. 节省数据占用的磁盘空间；
2. 加快数据在磁盘和网络中的传输速度，从而提高系统的处理速度。
压缩格式
Hadoop 对于压缩格式的是自动识别。如果我们压缩的文件有相应压缩格式的扩展名（比如 lzo，gz，bzip2 等）。Hadoop 会根据压缩格式的扩展名自动选择相对应的解码器来解压数据，此过程完全是 Hadoop 自动处理，我们只需要确保输入的压缩文件有扩展名。
Hadoop 对每个压缩格式的支持, 详细见下表：
表 1. 压缩格式
压缩格式	工具	算法	扩展名	多文件	可分割性
DEFLATE	无	DEFLATE	.deflate	不	不
GZIP	gzip	DEFLATE	.gzp	不	不
ZIP	zip	DEFLATE	.zip	是	是，在文件范围内
BZIP2	bzip2	BZIP2	.bz2	不	是
LZO	lzop	LZO	.lzo	不	是
如果压缩的文件没有扩展名，则需要在执行 MapReduce 任务的时候指定输入格式。
1
2
3
4
5
hadoop jar /usr/home/hadoop/hadoop-0.20.2/contrib/streaming/
  hadoop-streaming-0.20.2-CD H3B4.jar -file /usr/home/hadoop/hello/mapper.py -mapper /
  usr/home/hadoop/hello/mapper.py -file /usr/home/hadoop/hello/
  reducer.py -reducer /usr/home/hadoop/hello/reducer.py -input lzotest -output result4 -
  jobconf mapred.reduce.tasks=1*-inputformatorg.apache.hadoop.mapred.LzoTextInputFormat*
性能对比
 Hadoop 下各种压缩算法的压缩比，压缩时间，解压时间见下表:
表 2. 性能对比
压缩算法	原始文件大小	压缩文件大小	压缩速度	解压速度
gzip	8.3GB	1.8GB	17.5MB/s	58MB/s
bzip2	8.3GB	1.1GB	2.4MB/s	9.5MB/s
LZO-bset	8.3GB	2GB	4MB/s	60.6MB/s
LZO	8.3GB	2.9GB	49.3MB/s	74.6MB/s
因此我们可以得出：
1) Bzip2 压缩效果明显是最好的，但是 bzip2 压缩速度慢，可分割。
2) Gzip 压缩效果不如 Bzip2，但是压缩解压速度快，不支持分割。
3) LZO 压缩效果不如 Bzip2 和 Gzip，但是压缩解压速度最快！并且支持分割！
这里提一下，文件的可分割性在 Hadoop 中是很非常重要的，它会影响到在执行作业时 Map 启动的个数，从而会影响到作业的执行效率！
所有的压缩算法都显示出一种时间空间的权衡，更快的压缩和解压速度通常会耗费更多的空间。在选择使用哪种压缩格式时，我们应该根据自身的业务需求来选择。
下图是在本地压缩与通过流将压缩结果上传到 BI 的时间对比。
图 1. 时间对比
图 1. 时间对比
使用方式
MapReduce 可以在三个阶段中使用压缩。
1. 输入压缩文件。如果输入的文件是压缩过的，那么在被 MapReduce 读取时，它们会被自动解压。
2.MapReduce 作业中，对 Map 输出的中间结果集压缩。实现方式如下：
1）可以在 core-site.xml 文件中配置，代码如下
图 2. core-site.xml 代码示例
图 2. core-site.xml 代码示例
2）使用 Java 代码指定
1
2
conf.setCompressMapOut(true);
conf.setMapOutputCompressorClass(GzipCode.class);
最后一行代码指定 Map 输出结果的编码器。
3.MapReduce 作业中，对 Reduce 输出的最终结果集压。实现方式如下：
1）可以在 core-site.xml 文件中配置，代码如下
图 3. core-site.xml 代码示例
图 3. core-site.xml 代码示例
2）使用 Java 代码指定
1
2
conf.setBoolean(&#8220;mapred.output.compress&#8221;,true);
conf.setClass(&#8220;mapred.output.compression.codec&#8221;,GzipCode.class,CompressionCodec.class);
最后一行同样指定 Reduce 输出结果的编码器。
压缩框架
我们前面已经提到过关于压缩的使用方式，其中第一种就是将压缩文件直接作为入口参数交给 MapReduce 处理，MapReduce 会自动根据压缩文件的扩展名来自动选择合适解压器处理数据。那么到底是怎么实现的呢？如下图所示：
图 4. 压缩实现情形
图 4. 压缩实现情形
我们在配置 Job 作业的时候，会设置数据输入的格式化方式，使用 conf.setInputFormat() 方法，这里的入口参数是 TextInputFormat.class。
TextInputFormat.class 继承于 InputFormat.class，主要用于对数据进行两方面的预处理。一是对输入数据进行切分，生成一组 split，一个 split 会分发给一个 mapper 进行处理；二是针对每个 split，再创建一个 RecordReader 读取 split 内的数据，并按照<key,value>的形式组织成一条 record 传给 map 函数进行处理。此类在对数据进行切分之前，会首先初始化压缩解压工程类 CompressionCodeFactory.class，通过工厂获取实例化的编码解码器 CompressionCodec 后对数据处理操作。
下面我们来详细的看一下从压缩工厂获取编码解码器的过程。
压缩解压工厂类 CompressionCodecFactory
压缩解压工厂类 CompressionCodeFactory.class 主要功能就是负责根据不同的文件扩展名来自动获取相对应的压缩解压器 CompressionCodec.class，是整个压缩框架的核心控制器。我们来看下 CompressionCodeFactory.class 中的几个重要方法：
1. 初始化方法
图 5. 代码示例
图 5. 代码示例
① getCodeClasses(conf) 负责获取关于编码解码器 CompressionCodec.class 的配置信息。下面将会详细讲解。
② 默认添加两种编码解码器。当 getCodeClass(conf) 方法没有读取到相关的编码解码器 CompressionCodec.class 的配置信息时，系统会默认添加两种编码解码器 CompressionCodec.class，分别是 GzipCode.class 和 DefaultCode.class。
③ addCode(code) 此方法用于将编码解码器 CompressionCodec.class 添加到系统缓存中。下面将会详细讲解。
2. getCodeClasses(conf)
图 6. 代码示例
图 6. 代码示例
① 这里我们可以看，系统读取关于编码解码器 CompressionCodec.class 的配置信息在 core-site.xml 中 io.compression.codes 下。我们看下这段配置文件，如下图所示：
图 7. 代码示例
图 7. 代码示例
Value 标签中是每个编码解码 CompressionCodec.class 的完整路径，中间用逗号分隔。我们只需要将自己需要使用到的编码解码配置到此属性中，系统就会自动加载到缓存中。
除了上述的这种方式以外，Hadoop 为我们提供了另一种加载方式：代码加载。同样最终将信息配置在 io.compression.codes 属性中，代码如下：
1
2
conf.set("io.compression.codecs","org.apache.hadoop.io.compress.DefaultCodec,
  org.apache.hadoop.io.compress.GzipCodec,com.hadoop.compression.lzo.LzopCodec");)
3. addCode(code) 方法添加编码解码器
图 8. 代码示例
图 8. 代码示例
addCodec(codec) 方法入口参数是个编码解码器 CompressionCodec.class，这里我们会首先接触到它的一个方法。
① codec.getDefaultExtension() 方法看方法名的字面意思我们就可以知道，此方法用于获取此编码解码所对应文件的扩展名，比如，文件名是 xxxx.gz2，那么这个方法的返回值就是&#8220;.bz2&#8221;，我们来看下 org.apache.hadoop.io.compress.BZip2Codec 此方法的实现代码：
图 9. 代码示例
图 9. 代码示例
② Codecs 是一个 SortedMap 的示例。这里有个很有意思的地方，它将 Key 值，也就是通过 codec.getDefaultExtension() 方法获取到的文件扩展名进行了翻转，举个例子，比如文件名扩展名&#8220;.bz2&#8221;，将文件名翻转之后就变成了&#8220;2zb.&#8221;。
系统加载完所有的编码解码器后，我们可以得到这样一个有序映射表，如下：
图 10. 代码示例
图 10. 代码示例
现在编码解码器都有了，我们怎么得到对应的编码解码器呢？看下面这个方法。
4. getCodec() 方法
        此方法用于获取文件所对应的的编码解码器 CompressionCodec.class。
图 11. 代码示例
图 11. 代码示例
getCodec(Path) 方法的输入参数是 Path 对象，保存着文件路径。
① 将文件名翻转。如 xxxx.bz2 翻转成 2zb.xxxx。
② 获取 codecs 集合中最接近 2zb.xxxx 的值。此方法有返回值同样是个 SortMap 对象。
在这里对返回的 SortMap 对象进行第二次筛选。
编码解码器 CompressionCodec
刚刚在介绍压缩解压工程类 CompressionCodeFactory.class 的时候，我们多次提到了压缩解压器 CompressionCodecclass，并且我们在上文中还提到了它其中的一个用于获取文件扩展名的方法 getDefaultExtension()。
压缩解压工程类 CompressionCodeFactory.class 使用的是抽象工厂的设计模式。它是一个接口，制定了一系列方法，用于创建特定压缩解压算法。下面我们来看下比较重要的几个方法：
1. createOutputStream() 方法对数据流进行压缩。
图 12. 代码示例
图 12. 代码示例
此方法提供了方法重载。
① 基于流的压缩处理；
② 基于压缩机 Compress.class 的压缩处理
2. createInputStream() 方法对数据流进行解压。
图 13. 代码示例
图 13. 代码示例
这里的解压方法同样提供了方法重载。
① 基于流的解压处理；
② 基于解压机 Decompressor.class 的解压处理；
关于压缩/解压流与压缩/解压机会在下面的文章中我们会详细讲解。此处暂作了解。
3. getCompressorType() 返回需要的编码器的类型。
getDefaultExtension() 获取对应文件扩展名的方法。前文已提到过，不再敖述。
压缩机 Compressor 和解压机 Decompressor
前面在编码解码器部分的 createInputStream() 和 createInputStream() 方法中我们提到过 Compressor.class 和 Decompressor.class 对象。在 Hadoop 的实现中，数据编码器和解码器被抽象成了两个接口：
1. org.apache.hadoop.io.compress.Compressor;
2. org.apache.hadoop.io.compress.Decompressor;
它们规定了一系列的方法，所以在 Hadoop 内部的编码/解码算法实现都需要实现对应的接口。在实际的数据压缩与解压缩过程，Hadoop 为用户提供了统一的 I/O 流处理模式。
我们看一下压缩机 Compressor.class，代码如下：
图 14. 代码示例
图 14. 代码示例
① setInput() 方法接收数据到内部缓冲区，可以多次调用；
② needsInput() 方法用于检查缓冲区是否已满。如果是 false 则说明当前的缓冲区已满；
③ getBytesRead() 输入未压缩字节的总数；
④ getBytesWritten() 输出压缩字节的总数；
⑤ finish() 方法结束数据输入的过程；
⑥ finished() 方法用于检查是否已经读取完所有的等待压缩的数据。如果返回 false，表明压缩器中还有未读取的压缩数据，可以继续通过 compress() 方法读取；
⑦ compress() 方法获取压缩后的数据，释放缓冲区空间；
⑧ reset() 方法用于重置压缩器，以处理新的输入数据集合；
⑨ end() 方法用于关闭解压缩器并放弃所有未处理的输入；
⑩ reinit() 方法更进一步允许使用 Hadoop 的配置系统，重置并重新配置压缩器；
为了提高压缩效率，并不是每次用户调用 setInput() 方法，压缩机就会立即工作，所以，为了通知压缩机所有数据已经写入，必须使用 finish() 方法。finish() 调用结束后，压缩机缓冲区中保持的已经压缩的数据，可以继续通过 compress() 方法获得。至于要判断压缩机中是否还有未读取的压缩数据，则需要利用 finished() 方法来判断。
压缩流 CompressionOutputStream 和解压缩流 CompressionInputStream
前文编码解码器部分提到过 createInputStream() 方法返回 CompressionOutputStream 对象，createInputStream() 方法返回 CompressionInputStream 对象。这两个类分别继承自 java.io.OutputStream 和 java.io.InputStream。从而我们不难理解，这两个对象的作用了吧。
    我们来看下 CompressionInputStream.class 的代码：
图 15. 代码示例
图 15. 代码示例
可以看到 CompressionOutputStream 实现了 OutputStream 的 close() 方法和 flush() 方法，但用于输出数据的 write() 方法以及用于结束压缩过程并将输入写到底层流的 finish() 方法和重置压缩状态的 resetState() 方法还是抽象方法，需要 CompressionOutputStream 的子类实现。
Hadoop 压缩框架中为我们提供了一个实现了 CompressionOutputStream 类通用的子类 CompressorStream.class。
图 16. 代码示例
图 16. 代码示例
CompressorStream.class 提供了三个不同的构造函数，CompressorStream 需要的底层输出流 out 和压缩时使用的压缩器，都作为参数传入构造函数。另一个参数是 CompressorStream 工作时使用的缓冲区 buffer 的大小，构造时会利用这个参数分配该缓冲区。第一个可以手动设置缓冲区大小，第二个默认 512，第三个没有缓冲区且不可使用压缩器。
图 17. 代码示例
图 17. 代码示例
在 write()、compress()、finish() 以及 resetState() 方法中，我们发现了压缩机 Compressor 的身影，前面文章我们已经介绍过压缩机的的实现过程，通过调用 setInput() 方法将待压缩数据填充到内部缓冲区，然后调用 needsInput() 方法检查缓冲区是否已满，如果缓冲区已满，将调用 compress() 方法对数据进行压缩。流程如下图所示：
图 18. 调用流程图
图 18. 调用流程图
结束语
本文深入到 Hadoop 平台压缩框架内部，对其核心代码以及各压缩格式的效率进行对比分析，以帮助读者在使用 Hadoop 平台时，可以通过对数据进行压缩处理来提高数据处理效率。当再次面临海量数据处理时， Hadoop 平台的压缩机制可以让我们事半功倍。
相关主题
Hadoop 在线 API
《Hadoop 技术内幕深入解析 HADOOP COMMON 和 HDFS 架构设计与实现原理》
developerWorks 开源技术主题：查找丰富的操作信息、工具和项目更新，帮助您掌握开源技术并将其用于 IBM 产品。<img src ="http://www.blogjava.net/xzclog/aggbug/432817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-09-14 17:35 <a href="http://www.blogjava.net/xzclog/archive/2017/09/14/432817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hadoop YARN最近几个新特性</title><link>http://www.blogjava.net/xzclog/archive/2017/09/07/432802.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 07 Sep 2017 03:37:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/09/07/432802.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432802.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/09/07/432802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432802.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432802.html</trackback:ping><description><![CDATA[ 本文介绍Hadoop YARN最近版本中增加的几个非常有用的特性，包括：

 

（1）ResourceManager HA

在apache hadoop 2.4或者CDH5.0.0版本之后，增加了ResourceManger HA特性，支持基于Zookeeper的热主备切换，具体配置参数可以参考Cloudera的文档：ResourceManager HA配置。

需要注意的是，ResourceManager HA只完成了第一个阶段的设计，即备ResourceManager启动后，会杀死之前正在运行的Application，然后从共享存储系统中读取这些Application的元数据信息，并重新提交这些Application。启动ApplicationMaster后，剩下的容错功能就交给ApplicationMaster实现了，比如MapReduce的ApplicationMaster会不断地将完成的任务信息写到HDFS上，这样，当它重启时，可以重新读取这些日志，进而只需重新运行那些未完成的任务。ResourceManager HA第二个阶段的任务是，备ResourceManager接管主ResourceManager后，无需杀死那些正在运行的Application，让他们像任何事情没有发生一样运行下去。

（2） 磁盘容错

在apache hadoop 2.4或者CDH5.0.0版本之后，增加了几个对多磁盘非常友好地参数，这些参数允许YARN更好地使用NodeManager上的多块磁盘，相关jira为：YARN-1781，主要新增了三个参数：

yarn.nodemanager.disk-health-checker.min-healthy-disks：NodeManager上最少保证健康磁盘比例，当健康磁盘比例低于该值时，NodeManager不会再接收和启动新的Container，默认值是0.25，表示25%；

yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage：一块磁盘的最高使用率，当一块磁盘的使用率超过该值时，则认为该盘为坏盘，不再使用该盘，默认是100，表示100%，可以适当调低；

yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb：一块磁盘最少保证剩余空间大小，当某块磁盘剩余空间低于该值时，将不再使用该盘，默认是0，表示0MB。

（3）资源调度器

Fair Scheduler：Fair Scheduler增加了一个非常有用的新特性，允许用户在线将一个应用程序从一个队列转移到另外一个队列，比如将一个重要作业从一个低优先级队列转移到高优先级队列，操作命令是：bin/yarn application -movetoqueue appID -queue targetQueueName，相关jira为：YARN-1721。

Capacity Scheduler：Capacity Scheduler中资源抢占功能经过了充分的测试，可以使用了。

原创文章，转载请注明： 转载自董的博客

本文链接地址: http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-recently-new-features/<img src ="http://www.blogjava.net/xzclog/aggbug/432802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-09-07 11:37 <a href="http://www.blogjava.net/xzclog/archive/2017/09/07/432802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apreduce on yarn简单内存分配解释</title><link>http://www.blogjava.net/xzclog/archive/2017/08/30/432783.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 30 Aug 2017 13:05:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/08/30/432783.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432783.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/08/30/432783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432783.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432783.html</trackback:ping><description><![CDATA[ 关于mapreduce程序运行在yarn上时内存的分配一直是一个让我蒙圈的事情，单独查任何一个资料都不能很好的理解透彻。于是，最近查了大量的资料，综合各种解释，终于理解到了一个比较清晰的程度，在这里将理解的东西做一个简单的记录，以备忘却。
首先，先将关于mapreduce和yarn关于内存分配的参数粘贴上:
yarn.scheduler.minimum-allocation-mb
yarn.scheduler.maximum-allocation-mb
yarn.nodemanager.resource.memory-mb
yarn.nodemanager.vmem-pmem-ratio
yarn.scheduler.increment-allocation-mb
mapreduce.map.memory.mb
mapreduce.reduce.memory.mb
mapreduce.map.java.opts
mapreduce.reduce.java.opts
个人认为，针对mapreduce任务，这些参数只有放在一起学习才能真正理解，如果单独考虑，理解不清晰。下面开始详细讲解。
一、理解参数yarn.nodemanager.resource.memory-mb,yarn.nodemanager.vmem-pmem-ratio
yarn.nodemanager.resource.memory-mb很简单，就是你的这台服务器节点上准备分给yarn的内存;
yarn.nodemanager.vmem-pmem-ratio网上解释都是"每使用1MB物理内存，最多可用的虚拟内存数，默认2.1"，但是目前我还是不太理解其作用是什么，有知道的朋友希望能详细解释下。
二、理解参数yarn.scheduler.minimum-allocation-mb和yarn.scheduler.maximum-allocation-mb
都知道，在yarn上运行程序时每个task都是在独立的Container中运行的，单个Container可以申请的最小和最大内存的限制就是这两个参数，注意，并不是这两个参数决定单个Container申请内存的大小，而仅仅是限制的一个范围。
三、理解yarn的内存规整化因子和内存规整化算法
先不说和哪个参数有关，单纯理解这一概念。举例:
假如规整化因子b=512M，上述讲的参数yarn.scheduler.minimum-allocation-mb为1024，yarn.scheduler.maximum-allocation-mb为8096，然后我打算给单个map任务申请内存资源(mapreduce.map.memory.mb):
申请的资源为a=1000M时，实际得到的Container内存大小为1024M(小于yarn.scheduler.minimum-allocation-mb的话自动设置为yarn.scheduler.minimum-allocation-mb);
申请的资源为a=1500M时，实际得到的Container内存大小为1536M，计算公式为:ceiling(a/b)*b，即ceiling(a/b)=ceiling(1500/512)=3,3*512=1536。此处假如b=1024，则Container实际内存大小为2048M
也就是说Container实际内存大小最小为yarn.scheduler.minimum-allocation-mb值，然后增加时的最小增加量为规整化因子b，最大不超过yarn.scheduler.maximum-allocation-mb
四、理解mapreduce.map.memory.mb、mapreduce.reduce.memory.mb
"三"中提到的"打算给单个map任务申请内存资源"也就是a,其实就是指的"mapreduce.map.memory.mb"或"mapreduce.reduce.memory.mb"，注意其值不要超过yarn.scheduler.maximum-allocation-mb
五、理解mapreduce.map.java.opts、mapreduce.reduce.java.opts
以map任务为例，Container其实就是在执行一个脚本文件，而脚本文件中，会执行一个 Java 的子进程，这个子进程就是真正的 Map Task，mapreduce.map.java.opts 其实就是启动 JVM 虚拟机时，传递给虚拟机的启动参数，而默认值 -Xmx200m 表示这个 Java 程序可以使用的最大堆内存数，一旦超过这个大小，JVM 就会抛出 Out of Memory 异常，并终止进程。而 mapreduce.map.memory.mb 设置的是 Container 的内存上限，这个参数由 NodeManager 读取并进行控制，当 Container 的内存大小超过了这个参数值，NodeManager 会负责 kill 掉 Container。在后面分析 yarn.nodemanager.vmem-pmem-ratio 这个参数的时候，会讲解 NodeManager 监控 Container 内存（包括虚拟内存和物理内存）及 kill 掉 Container 的过程。
也就是说，mapreduce.map.java.opts一定要小于mapreduce.map.memory.mb
mapreduce.reduce.java.opts同mapreduce.map.java.opts一样的道理。
六、理解规整化因子指的是哪个参数
"三"中提到的规整化因子也就是b，具体指的是哪个参数和yarn使用的调度器有关，一共有三种调度器:capacity scheduler（默认调度器）、fair scheduler和fifo scheduler
当使用capacity scheduler或者fifo scheduler时，规整化因子指的就是参数yarn.scheduler.minimum-allocation-mb，不能单独配置，即yarn.scheduler.increment-allocation-mb无作用;
当使用fair scheduler时，规整化因子指的是参数yarn.scheduler.increment-allocation-mb
至此，关于yarn和mapreduce的任务内存配置问题讲完了，这也是我目前理解的层次。<img src ="http://www.blogjava.net/xzclog/aggbug/432783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-08-30 21:05 <a href="http://www.blogjava.net/xzclog/archive/2017/08/30/432783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hadoop-2.4.1学习之HDFS文件权限和ACL </title><link>http://www.blogjava.net/xzclog/archive/2017/07/28/432700.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Fri, 28 Jul 2017 02:55:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/07/28/432700.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432700.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/07/28/432700.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432700.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432700.html</trackback:ping><description><![CDATA[<div><div id="article_content"  tracking-ad"="" data-mod="popu_307" data-dsm="post"> <p>之前在论坛看到一个关于HDFS权限的问题，当时无法回答该问题。无法回答并不意味着对HDFS权限一无所知，而是不能准确完整的阐述HDFS权限，因此决定系统地学习HDFS文件权限。HDFS的文件和目录权限模型共享了POSIX（Portable  Operating System  Interface，可移植操作系统接口）模型的很多部分，比如每个文件和目录与一个拥有者和组相关联，文件或者目录对于拥有者、组内的其它用户和组外的其它用户有不同的权限等。与POSIX模型不同的是，HDFS中的文件没有可执行文件的概念，因而也没有setuid和setgid，虽然目录依然保留着可执行目录的概念（x），但对于目录也没有setuid和setgid。粘贴位（sticky  bit）可以用在目录上，用于阻止除超级用户，目录或文件的拥有者外的任何删除或移动目录中的文件，文件上的粘贴位不起作用。</p> <p>&nbsp; &nbsp;  &nbsp;&nbsp;当创建文件或目录时，拥有者为运行客户端进程的用户，组为父目录所属的组。每个访问HDFS的客户端进程有一个由用户姓名和组列表两部分组的成标识，无论何时HDFS必须对由客户端进程访问的文件或目录进行权限检查，规则如下：</p> <p>&nbsp;</p> <ul> <li>如果进程的用户名匹配文件或目录的拥有者，那么测试拥有者权限 </li><li>否则如果文件或目录所属的组匹配组列表中任何组，那么测试组权限 </li><li>否则测试其它权限</li></ul> <p>&nbsp;</p> <p>&nbsp; &nbsp; &nbsp;&nbsp;如果权限检查失败，则客户端操作失败。</p> <p>&nbsp; &nbsp;  &nbsp;&nbsp;从hadoop-0.22开始，hadoop支持两种不同的操作模式以确定用户，分别为simple和kerberos具体使用哪个方式由参数hadoop.security.authentication设置，该参数位于core-site.xml文件中，默认值为simple。在simple模式下，客户端进程的身份由主机的操作系统确定，比如在类Unix系统中，用户名为命令whoami的输出。在kerberos模式下，客户端进程的身份由Kerberos凭证确定，比如在一个Kerberized环境中，用户可能使用kinit工具得到了一个Kerberos  ticket-granting-ticket(TGT)且使用klist确定当前的principal。当映射一个Kerberosprincipal到HDFS的用户名时，除了最主要的部分外其余部分都被丢弃，比如一个principal为todd/foobar@CORP.COMPANY.COM，将映射为HDFS上的todd。无论哪种操作模式，对于HDFS来说用户标识机制都是外部的，HDFS本身没有创建用户标，建立组或者处理用户凭证的规定。</p> <p>&nbsp; &nbsp;  &nbsp;&nbsp;上面讨论了确定用户的两种模式，即simple和kerberos，下面学习如何确定用户组。用户组是通过由参数hadoop.security.group.mapping设置的组映射服务确定的，默认实现是org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback，该实现首先确定Java本地接口（JNI）是否可用，如果JNI可用，该实现将使用hadoop中的API为用户解析用户组列表。如果JNI不可用，那么使用ShellBasedUnixGroupsMapping，该实现将使用Linux/Unix中的bash  &#8211;cgroups命令为用户解析用户组列表。其它实现还有LdapGroupsMapping，通过直接连接LDAP服务器来解析用户组列表。对HDFS来说，用户到组的映射是在NameNode上执行的，因而NameNode的主机系统配置决定了用户的组映射。HDFS将文件或目录的用户和组存储为字符串，并且不像Linux/Unix那样可以将用户和组转换为数字。</p> <p>&nbsp; &nbsp;  &nbsp;&nbsp;每个针对文件或者目录的操作都将全路径名称传递到NameNode，然后对该路径的每次操作都将应用权限检查。客户端隐含地关联用户身份到NameNode的连接，减少改变现存客户端API的需要。总是存在这么一种情景，当在一个文件上的操作成功后，当重复该操作时可能失败，因为该文件或者路径中的某些目录已经不再存在。例如，当客户端第一次开始读取一个文件时，它向NameNode发出的第一个请求来发现该文件第一个块的位置，第二个寻找其他块的请求可能失败。另一方面，对于已经知道文件块的客户端来说，删除文件不会取消访问。通过添加权限，客户端对文件的访问在请求之间可能撤回，对于已经知道文件块的客户端来说，改变权限不会取消客户端的访问。</p> <p>&nbsp; &nbsp;  &nbsp;&nbsp;HDFS中超级用户与通常熟悉的Linux或Unix中的root用户不同，HDFS的超级用户是与NameNode进程有相同标示的用户，更简单易懂些，启动NameNode的用户就为超级用户。对于谁是超级用户没有固定的定义，当NameNode启动后，该进程的标示决定了谁是超级用户。HDFS的超级用户不必是NameNode主机的超级用户，也需用所有的集群使用相同的超级用户，出于实验目的在个人工作站上运行HDFS的人自然而然的称为超级用户而不需要任何配置。另外参数dfs.permissions.superusergroup设置了超级用户，该组中的所有用户也为超级用户。超级用户在HDFS中可以执行任何操作而针对超级用户的权限检查永远不会失败。</p> <p>&nbsp; &nbsp; &nbsp;&nbsp;HDFS也提供了对POSIX  ACL（访问控制列表）支持来为特定的用户或者用户组提供更加细粒度的文件权限。ACL是不同于用户和组的自然组织层次的有用的权限控制方式，ACL可以为特定的用户和组设置不同的权限，而不仅仅是文件的拥有者和文件所属的组。默认情况下，HDFS禁用ACL，因此NameNode禁止ACL的创建，为了启用ACL，需要在hdfs-site.xml中将参数dfs.namenode.acls.enabled设置为true。</p> <p>&nbsp; &nbsp; &nbsp;&nbsp;访问控制列表由一组ACL项组成，每个ACL项命名了特定的用户或组，并为其授予或拒绝读，写和执行的权限，例如：</p> <p>&nbsp;</p><pre name="code" snippet_file_name="blog_20141102_1_3046190" code_snippet_id="505068">user::rw- user:bruce:rwx                  #effective:r-- group::r-x                      #effective:r-- group:sales:rwx                 #effective:r-- mask::r-- other::r-- </pre> <p>&nbsp;</p> <p>&nbsp; &nbsp;  &nbsp;&nbsp;每个ACL项由类型，可选的名称和权限字符串组成，它们之间使用冒号（:）。在上面的例子中文件的拥有者具有读写权限，文件所属的组具有读和执行的权限，其他用户具有读权限，这些设置与将文件设置为654等价（6表示拥有者的读写权限，5表示组的读和执行权限，4表示其他用户的读权限）。除此之外，还有两个扩展的ACL项，分别为用户bruce和组sales，并都授予了读写和执行的权限。mask项是一个特殊的项，用于过滤授予所有命名用户，命名组及未命名组的权限，即过滤除文件拥有者和其他用户(other)之外的任何ACL项。在该例子中，mask值有读权限，则bruce用户、sales组和文件所属的组只具有读权限。每个ACL必须有mask项，如果用户在设置ACL时没有使用mask项，一个mask项被自动加入到ACL中，该mask项是通过计算所有被mask过滤项的权限与（&amp;运算）得出的。对拥有ACL的文件执行chmod实际改变的是mask项的权限，因为mask项扮演的是过滤器的角色，这将有效地约束所有扩展项的权限，而不是仅改变组的权限而可能漏掉其它扩展项的权限。</p> <p>&nbsp; &nbsp;  &nbsp;&nbsp;访问控制列表和默认访问控制列表存在着不同，前者定义了在执行权限检查实施的规则，后者定义了新文件或者子目录创建时自动接收的ACL项，例如：</p><pre name="code" snippet_file_name="blog_20141102_2_3588045" code_snippet_id="505068">user::rwx group::r-x other::r-x default:user::rwx default:user:bruce:rwx          #effective:r-x default:group::r-x default:group:sales:rwx         #effective:r-x default:mask::r-x default:other::r-x </pre> <p>&nbsp; &nbsp;  &nbsp;&nbsp;只有目录可能拥有默认访问控制列表，当创建新文件或者子目录时，自动拷贝父辈的默认访问控制列表到自己的访问控制列表中，新的子目录也拷贝父辈默认的访问控制列表到自己的默认访问控制列表中。这样，当创建子目录时默认ACL将沿着文件系统树被任意深层次地拷贝。在新的子ACL中，准确的权限由模式参数过滤。默认的umask为022，通常新目录权限为755，新文件权限为644。模式参数为未命名用户（文件的拥有者），mask及其他用户过滤拷贝的权限值。在上面的例子中，创建权限为755的子目录时，模式对最终结果没有影响，但是如果创建权限为644的文件时，模式过滤器导致新文件的ACL中文件拥有者的权限为读写，mask的权限为读以及其他用户权限为读。mask的权限意味着用户bruce和组sales只有读权限。拷贝ACL发生在文件或子目录的创建时，后面如果修改父辈的默认ACL将不再影响已存在子类的ACL。</p> <p>&nbsp; &nbsp;  &nbsp;&nbsp;默认ACL必须包含所有最小要求的ACL项，包括文件拥有者项，文件所属的组项和其它用户项。如果用户没有在默认ACL中配置上述三项中的任何一个，那么该项将通过从访问ACL拷贝对应的权限来自动插入，或者如果没有访问ACL则自动插入权限位。默认ACL也必须拥有mask，如果mask没有被指定，通过计算所有被mask过滤项的权限与（&amp;运算）自动插入mask。当一个文件拥有ACL时，权限检查的算法变为：</p> <p>&nbsp;</p> <ul> <li>如果用户名匹配文件的拥有者，则测试拥有者权限 </li><li>否则，如果用户名匹配命名用户项中的用户名，则测试由mask权限过滤后的该项的权限 </li><li>否则，如果文件所属的组匹配组列表中的任何组，并且如果这些被mask过滤的权限具有访问权限，那么使用这么权限 </li><li>否则，如果存在命名组项匹配组列表中的成员，并且如果这些被mask过滤的权限具有访问权限，那么使用这么权限 </li><li>否则，如果文件所属的组或者任何命名组项匹配组列表中的成员，但不具备访问权限，那么访问被拒绝 </li><li>否则测试文件的其他用户权限</li></ul> <p>&nbsp;</p> <p>&nbsp; &nbsp;  &nbsp;&nbsp;最佳实践时基于传统的权限位设置大部分权限要求，然后定义少量带有特殊规则的ACL增加权限位。相比较只是用权限位的文件，使用ACL的文件会在NameNode中产生额外的内存消耗。</p> <p>&nbsp; &nbsp; &nbsp;&nbsp;上面学习了HDFS中的文件权限和访问控制列表，最后学习一下如何针对权限和ACL进行配置，下表列出了其中的重要参数：</p> <table cellspacing="0" cellpadding="0" width="800" border="1"> <tbody> <tr> <td valign="top"> <p align="center"><strong>参数名</strong></p></td> <td valign="top" width="100"> <p align="center"><strong>位置</strong></p></td> <td valign="top"> <p align="center"><strong>用途</strong></p></td></tr> <tr> <td valign="top"> <p>dfs.permissions.enabled</p></td> <td valign="top"> <p>hdfs-site.xml</p></td> <td valign="top"> <p>默认值为true，即启用权限检查。如果为 false，则禁用权限检查。</p></td></tr> <tr> <td valign="top"> <p>hadoop.http.staticuser.user</p></td> <td valign="top"> <p>core-site.xml</p></td> <td valign="top"> <p>默认值为dr.who，查看web UI的用户</p></td></tr> <tr> <td valign="top"> <p>dfs.permissions.superusergroup</p></td> <td valign="top"> <p>hdfs-site.xml</p></td> <td valign="top"> <p>超级用户的组名称，默认为supergroup</p></td></tr> <tr> <td valign="top"> <p>&lt;fs.permissions.umask-mode</p></td> <td valign="top"> <p>core-site.xml</p></td> <td valign="top"> <p>创建文件和目录时使用的umask，默认值为八进制022，每位数字对应了拥有者，组和其他用户。该值既可以使用八进制数字，如022，也可以使用符号，如u=rwx,g=r-x,o=r-x(对应022)</p></td></tr> <tr> <td valign="top"> <p>dfs.cluster.administrators</p></td> <td valign="top"> <p>hdfs-site.xml</p></td> <td valign="top"> <p>被指定为ACL的集群管理员</p></td></tr> <tr> <td valign="top"> <p>dfs.namenode.acls.enabled</p></td> <td valign="top"> <p>hdfs-site.xml</p></td> <td valign="top"> <p>默认值为false，禁用ACL，设置为true则启用ACL。当ACL被禁用时，NameNode拒绝设置或者获取ACL的请求</p></td></tr></tbody></table></div></div><img src ="http://www.blogjava.net/xzclog/aggbug/432700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-07-28 10:55 <a href="http://www.blogjava.net/xzclog/archive/2017/07/28/432700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hadoop之回收站 </title><link>http://www.blogjava.net/xzclog/archive/2017/05/12/432522.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Fri, 12 May 2017 03:20:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/05/12/432522.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432522.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/05/12/432522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432522.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432522.html</trackback:ping><description><![CDATA[<div><p><strong>一、回收站简介：</strong></p><p>&nbsp;&nbsp;&nbsp; 在HDFS里，删除文件时，不会真正的删除，其实是放入回收站/trash，回收站里的文件可以快速恢复。</p><p>&nbsp;&nbsp;&nbsp; 可以设置一个时间阀值，当回收站里文件的存放时间超过这个阀值或是回收站被清空时，文件才会被彻底删除，并且释放占用的数据块。</p><p><strong>二、实例：</strong></p><p>&nbsp;&nbsp;&nbsp; Hadoop的回收站trash功能默认是关闭的，所以需要在core-site.xml中手动开启。</p><p>1、修改core-site.xml，增加：</p><div><div><a title="复制代码" href="http://www.cnblogs.com/Richardzhu/p/3652228.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div><pre><span style="color: #808080;">&lt;</span>property<span style="color: #808080;">&gt;</span>  <span style="color: #808080;">&lt;</span>name<span style="color: #808080;">&gt;</span>fs.trash.interval<span style="color: #808080;">&lt;/</span>name<span style="color: #808080;">&gt;</span>  <span style="color: #808080;">&lt;</span>value<span style="color: #808080;">&gt;</span><span style="color: #800000; font-weight: bold;">1440</span><span style="color: #808080;">&lt;/</span>value<span style="color: #808080;">&gt;</span>  <span style="color: #808080;">&lt;</span>description<span style="color: #808080;">&gt;</span><span style="color: #0000ff;">Number</span> <span style="color: #0000ff;">of</span> minutes <span style="color: #808080;">between</span><span style="color: #000000;"> trash checkpoints.  </span><span style="color: #0000ff;">If</span> zero, the trash feature <span style="color: #0000ff;">is</span><span style="color: #000000;"> disabled.  </span><span style="color: #808080;">&lt;/</span>description<span style="color: #808080;">&gt;</span>  <span style="color: #808080;">&lt;/</span>property<span style="color: #808080;">&gt;</span></pre><div><a title="复制代码" href="http://www.cnblogs.com/Richardzhu/p/3652228.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div></div><p>默认是0，单位是分钟，这里设置为1天。<br />删除数据rm后，会将数据move到当前文件夹下的.Trash目录。</p><p>2、测试</p><p>1）、新建目录input</p><div><pre>hadoop<span style="color: #808080;">/</span>bin<span style="color: #808080;">/</span>hadoop fs <span style="color: #808080;">-</span>mkdir input</pre></div><p>2）、上传文件</p><div><pre>root<span style="color: #008000;">@master</span>:<span style="color: #808080;">/</span>data<span style="color: #808080;">/</span>soft# hadoop<span style="color: #808080;">/</span>bin<span style="color: #808080;">/</span>hadoop fs <span style="color: #808080;">-</span>copyFromLocal <span style="color: #808080;">/</span>data<span style="color: #808080;">/</span>soft<span style="color: #808080;">/</span>file0<span style="color: #808080;">*</span> input</pre></div><p>3）、删除目录input</p><div><pre><span style="color: #ff0000;">[</span><span style="color: #ff0000;">root@master data</span><span style="color: #ff0000;">]</span># hadoop fs <span style="color: #808080;">-</span><span style="color: #000000;">rmr input  Moved </span><span style="color: #0000ff;">to</span> trash: hdfs:<span style="color: #808080;">//</span>master:<span style="color: #800000; font-weight: bold;">9000</span><span style="color: #808080;">/</span><span style="color: #ff00ff;">user</span><span style="color: #808080;">/</span>root<span style="color: #808080;">/</span>input</pre></div><p>4）、查看当前目录</p><div><pre><span style="color: #ff0000;">[</span><span style="color: #ff0000;">root@master data</span><span style="color: #ff0000;">]</span># hadoop fs <span style="color: #808080;">-</span><span style="color: #000000;">ls  Found </span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;"> items  drwxr</span><span style="color: #808080;">-</span>xr<span style="color: #808080;">-</span>x <span style="color: #808080;">-</span> root supergroup <span style="color: #800000; font-weight: bold;">0</span> <span style="color: #800000; font-weight: bold;">2011</span><span style="color: #808080;">-</span><span style="color: #800000; font-weight: bold;">02</span><span style="color: #808080;">-</span><span style="color: #800000; font-weight: bold;">12</span> <span style="color: #800000; font-weight: bold;">22</span>:<span style="color: #800000; font-weight: bold;">17</span> <span style="color: #808080;">/</span><span style="color: #ff00ff;">user</span><span style="color: #808080;">/</span>root<span style="color: #808080;">/</span>.Trash</pre></div><p>发现input删除了，多了一个目录.Trash<br />5）、恢复刚刚删除的目录</p><div><pre><span style="color: #ff0000;">[</span><span style="color: #ff0000;">root@master data</span><span style="color: #ff0000;">]</span># hadoop fs <span style="color: #808080;">-</span>mv <span style="color: #808080;">/</span><span style="color: #ff00ff;">user</span><span style="color: #808080;">/</span>root<span style="color: #808080;">/</span>.Trash<span style="color: #808080;">/</span><span style="color: #0000ff;">Current</span><span style="color: #808080;">/</span><span style="color: #ff00ff;">user</span><span style="color: #808080;">/</span>root<span style="color: #808080;">/</span>input <span style="color: #808080;">/</span><span style="color: #ff00ff;">user</span><span style="color: #808080;">/</span>root<span style="color: #808080;">/</span>input</pre></div><p>6）、查看恢复的数据</p><div><pre><span style="color: #ff0000;">[</span><span style="color: #ff0000;">root@master data</span><span style="color: #ff0000;">]</span># hadoop fs <span style="color: #808080;">-</span><span style="color: #000000;">ls input  Found </span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;"> items  </span><span style="color: #808080;">-</span>rw<span style="color: #808080;">-</span>r<span style="color: #008080;">--</span><span style="color: #008080;">r-- 3 root supergroup 22 2011-02-12 17:40 /user/root/input/file01 </span> <span style="color: #808080;">-</span>rw<span style="color: #808080;">-</span>r<span style="color: #008080;">--</span><span style="color: #008080;">r-- 3 root supergroup 28 2011-02-12 17:40 /user/root/input/file02</span></pre></div><p>7）、删除.Trash目录(清理垃圾)</p><div><pre><span style="color: #ff0000;">[</span><span style="color: #ff0000;">root@master data</span><span style="color: #ff0000;">]</span># hadoop fs <span style="color: #808080;">-</span><span style="color: #000000;">rmr .Trash  Deleted hdfs:</span><span style="color: #808080;">//</span>master:<span style="color: #800000; font-weight: bold;">9000</span><span style="color: #808080;">/</span><span style="color: #ff00ff;">user</span><span style="color: #808080;">/</span>root<span style="color: #808080;">/</span>.Trash</pre></div></div><img src ="http://www.blogjava.net/xzclog/aggbug/432522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-05-12 11:20 <a href="http://www.blogjava.net/xzclog/archive/2017/05/12/432522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>kafka学习笔记：知识点整理 </title><link>http://www.blogjava.net/xzclog/archive/2017/04/28/432486.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Fri, 28 Apr 2017 02:37:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/04/28/432486.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432486.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/04/28/432486.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432486.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432486.html</trackback:ping><description><![CDATA[转自:<a href="http://www.cnblogs.com/cyfonly/p/5954614.html">http://www.cnblogs.com/cyfonly/p/5954614.html<br /><div><div id="cnblogs_post_body"><h2><span style="color: #ff0000; font-family: verdana, geneva; font-size: 18px; background-color: #ffffff;"><strong>一、为什么需要消息系统</strong></span></h2><div><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div><pre><span style="font-family: verdana, geneva;"><strong>1.解耦： </strong>　　允许你独立的扩展或修改两边的处理过程，只要确保它们遵守同样的接口约束。 <strong>2.冗余：</strong> 　　消息队列把数据进行持久化直到它们已经被完全处理，通过这一方式规避了数据丢失风险。许多消息队列所采用的"插入-获取-删除"范式中，在把一个消息从队列中删除之前，需要你的处理系统明确的指出该消息已经被处理完毕，从而确保你的数据被安全的保存直到你使用完毕。 <strong>3.扩展性：</strong> 　　因为消息队列解耦了你的处理过程，所以增大消息入队和处理的频率是很容易的，只要另外增加处理过程即可。 <strong>4.灵活性 &amp; 峰值处理能力：</strong> 　　在访问量剧增的情况下，应用仍然需要继续发挥作用，但是这样的突发流量并不常见。如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力，而不会因为突发的超负荷的请求而完全崩溃。 <strong>5.可恢复性：</strong> 　　系统的一部分组件失效时，不会影响到整个系统。消息队列降低了进程间的耦合度，所以即使一个处理消息的进程挂掉，加入队列中的消息仍然可以在系统恢复后被处理。 <strong>6.顺序保证：</strong> 　　在大多使用场景下，数据处理的顺序都很重要。大部分消息队列本来就是排序的，并且能保证数据会按照特定的顺序来处理。（Kafka 保证一个 Partition 内的消息的有序性） <strong>7.缓冲：</strong> 　　有助于控制和优化数据流经过系统的速度，解决生产消息和消费消息的处理速度不一致的情况。 <strong>8.异步通信：</strong> 　　很多时候，用户不想也不需要立即处理消息。消息队列提供了异步处理机制，允许用户把一个消息放入队列，但并不立即处理它。想向队列中放入多少消息就放多少，然后在需要的时候再去处理它们。</span></pre><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div></div><p>&nbsp;</p><h2><span style="color: #ff0000; font-family: verdana, geneva; font-size: 18px; background-color: #ffffff;"><strong>二、kafka 架构</strong></span></h2><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>2.1 拓扑结构</strong></span></h3><p><span style="font-family: verdana, geneva;">如下图：</span></p><p><span style="font-family: verdana, geneva;"><img style="margin-right: auto; margin-left: auto; display: block;" alt="" src="http://images2015.cnblogs.com/blog/897247/201610/897247-20161012133845281-1066342716.png" /></span></p><p><span style="font-family: verdana, geneva;">图.1</span></p><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>2.2 相关概念</strong></span></h3><p><span style="font-family: verdana, geneva;">如图.1中，kafka 相关名词解释如下：</span></p><div><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div><pre><span style="font-family: verdana, geneva;"><strong>1.producer：</strong> 　　消息生产者，发布消息到 kafka 集群的终端或服务。 <strong>2.broker：</strong> 　　kafka 集群中包含的服务器。 <strong>3.topic：</strong> 　　每条发布到 kafka 集群的消息属于的类别，即 kafka 是面向 topic 的。 <strong>4.partition：</strong> 　　partition 是物理上的概念，每个 topic 包含一个或多个 partition。kafka 分配的单位是 partition。 <strong>5.consumer：</strong> 　　从 kafka 集群中消费消息的终端或服务。 <strong>6.Consumer group：</strong> 　　high-level consumer API 中，每个 consumer 都属于一个 consumer group，每条消息只能被 consumer group 中的一个 Consumer 消费，但可以被多个 consumer group 消费。 <strong>7.replica：</strong> 　　partition 的副本，保障 partition 的高可用。 <strong>8.leader：</strong> 　　replica 中的一个角色， producer 和 consumer 只跟 leader 交互。 <strong>9.follower：</strong> 　　replica 中的一个角色，从 leader 中复制数据。 <strong>10.controller：</strong> 　　kafka 集群中的其中一个服务器，用来进行 leader election 以及 各种 failover。 <strong>12.zookeeper：</strong> 　　kafka 通过 zookeeper 来存储集群的 meta 信息。</span></pre><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div></div><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>2.3 zookeeper 节点</strong></span></h3><p><span style="font-family: verdana, geneva;">kafka 在 zookeeper 中的存储结构如下图所示：</span></p><p><span style="font-family: verdana, geneva;">&nbsp;<img style="margin-right: auto; margin-left: auto; display: block;" alt="" src="http://images2015.cnblogs.com/blog/897247/201610/897247-20161012133618468-2107696384.png" /></span></p><p><span style="font-family: verdana, geneva;">图.2</span></p><p>&nbsp;</p><h2><span style="color: #ff0000; font-family: verdana, geneva; font-size: 18px; background-color: #ffffff;"><strong>三、producer 发布消息</strong></span></h2><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>3.1 写入方式</strong></span></h3><p><span style="font-family: verdana, geneva;">producer 采用 push 模式将消息发布到 broker，每条消息都被 append 到 patition 中，属于顺序写磁盘（顺序写磁盘效率比随机写内存要高，保障 kafka 吞吐率）。</span></p><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>3.2 消息路由</strong></span></h3><p><span style="font-family: verdana, geneva;">producer 发送消息到 broker 时，会根据分区算法选择将其存储到哪一个 partition。其路由机制为：</span></p><div><pre><span style="font-family: verdana, geneva;">1. 指定了 patition，则直接使用； 2. 未指定 patition 但指定 key，通过对 key 的 value 进行hash 选出一个 patition 3. patition 和 key 都未指定，使用轮询选出一个 patition。</span></pre></div><p><span style="font-family: verdana, geneva;">&nbsp;附上 java 客户端分区源码，一目了然：</span></p><div><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div><pre><span style="font-family: verdana, geneva;">//创建消息实例 public ProducerRecord(String topic, Integer partition, Long timestamp, K key, V value) {      if (topic == null)           throw new IllegalArgumentException("Topic cannot be null");      if (timestamp != null &amp;&amp; timestamp &lt; 0)           throw new IllegalArgumentException("Invalid timestamp " + timestamp);      this.topic = topic;      this.partition = partition;      this.key = key;      this.value = value;      this.timestamp = timestamp; }  //计算 patition，如果指定了 patition 则直接使用，否则使用 key 计算 private int partition(ProducerRecord&lt;K, V&gt; record, byte[] serializedKey , byte[] serializedValue, Cluster cluster) {      Integer partition = record.partition();      if (partition != null) {           List&lt;PartitionInfo&gt; partitions = cluster.partitionsForTopic(record.topic());           int lastPartition = partitions.size() - 1;           if (partition &lt; 0 || partition &gt; lastPartition) {                throw new IllegalArgumentException(String.format("Invalid partition given with record: %d is not in the range [0...%d].", partition, lastPartition));           }           return partition;      }      return this.partitioner.partition(record.topic(), record.key(), serializedKey, record.value(), serializedValue, cluster); }  // 使用 key 选取 patition public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {      List&lt;PartitionInfo&gt; partitions = cluster.partitionsForTopic(topic);      int numPartitions = partitions.size();      if (keyBytes == null) {           int nextValue = counter.getAndIncrement();           List&lt;PartitionInfo&gt; availablePartitions = cluster.availablePartitionsForTopic(topic);           if (availablePartitions.size() &gt; 0) {                int part = DefaultPartitioner.toPositive(nextValue) % availablePartitions.size();                return availablePartitions.get(part).partition();           } else {                return DefaultPartitioner.toPositive(nextValue) % numPartitions;           }      } else {           //对 keyBytes 进行 hash 选出一个 patition           return DefaultPartitioner.toPositive(Utils.murmur2(keyBytes)) % numPartitions;      } }</span></pre><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div></div><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>3.3 写入流程</strong></span></h3><p><span style="font-family: verdana, geneva;">&nbsp;producer 写入消息序列图如下所示：</span></p><p><span style="font-family: verdana, geneva;"><img style="margin-right: auto; margin-left: auto; display: block;" alt="" src="http://images2015.cnblogs.com/blog/897247/201610/897247-20161012131406546-202763949.png" /></span></p><p><span style="font-family: verdana, geneva;">图.3</span></p><p><span style="font-family: verdana, geneva;">流程说明：</span></p><div><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div><pre><span style="font-family: verdana, geneva;">1. producer 先从 zookeeper 的 "/brokers/.../state" 节点找到该 partition 的 leader 2. producer 将消息发送给该 leader 3. leader 将消息写入本地 log 4. followers 从 leader pull 消息，写入本地 log 后 leader 发送 ACK 5. leader 收到所有 ISR 中的 replica 的 ACK 后，增加 HW（high watermark，最后 commit 的 offset） 并向 producer 发送 ACK</span></pre><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div></div><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>3.4 producer delivery guarantee</strong></span></h3><p><span style="font-family: verdana, geneva;">&nbsp;一般情况下存在三种情况：</span></p><div><pre><span style="font-family: verdana, geneva;">1. At most once 消息可能会丢，但绝不会重复传输 2. At least one 消息绝不会丢，但可能会重复传输 3. Exactly once 每条消息肯定会被传输一次且仅传输一次</span></pre></div><p><span style="font-family: verdana, geneva;">当 producer 向 broker 发送消息时，一旦这条消息被 commit，由于 replication 的存在，它就不会丢。但是如果 producer 发送数据给 broker 后，遇到网络问题而造成通信中断，那 Producer 就无法判断该条消息是否已经 commit。虽然 Kafka 无法确定网络故障期间发生了什么，但是 producer 可以生成一种类似于主键的东西，发生故障时幂等性的重试多次，这样就做到了 Exactly once，但目前还并未实现。所以目前默认情况下一条消息从 producer 到 broker 是确保了 At least once，可通过设置 producer 异步发送实现At most once。</span></p><p>&nbsp;</p><h2><span style="color: #ff0000; font-family: verdana, geneva; font-size: 18px; background-color: #ffffff;"><strong>四、broker 保存消息</strong></span></h2><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>4.1 存储方式</strong></span></h3><p><span style="font-family: verdana, geneva;">物理上把 topic 分成一个或多个 patition（对应 server.properties 中的 num.partitions=3 配置），每个 patition 物理上对应一个文件夹（该文件夹存储该 patition 的所有消息和索引文件），如下：</span></p><p><span style="font-family: verdana, geneva;">&nbsp;<img style="margin-right: auto; margin-left: auto; display: block;" alt="" src="http://images2015.cnblogs.com/blog/897247/201610/897247-20161012105133296-413851676.png" /></span></p><p><span style="font-family: verdana, geneva;">图.4</span></p><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>4.2 存储策略</strong></span></h3><p><span style="font-family: verdana, geneva;">无论消息是否被消费，kafka 都会保留所有消息。有两种策略可以删除旧数据：</span></p><div><pre><span style="font-family: verdana, geneva;">1. 基于时间：log.retention.hours=168 2. 基于大小：log.retention.bytes=1073741824</span></pre></div><p><span style="font-family: verdana, geneva;">需要注意的是，因为Kafka读取特定消息的时间复杂度为O(1)，即与文件大小无关，所以这里删除过期文件与提高 Kafka 性能无关。</span></p><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>4.3 topic 创建与删除</strong></span></h3><h4><span style="color: #000000; font-family: verdana, geneva; font-size: 14px;"><strong>4.3.1 创建 topic</strong></span></h4><p><span style="font-family: verdana, geneva;">创建 topic 的序列图如下所示：</span></p><p><span style="font-family: verdana, geneva;"><img style="margin-right: auto; margin-left: auto; display: block;" alt="" src="http://images2015.cnblogs.com/blog/897247/201610/897247-20161012161552718-1963426687.png" /></span></p><p><span style="font-family: verdana, geneva;">图.5</span></p><p><span style="font-family: verdana, geneva;">流程说明：</span></p><div><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div><pre><span style="font-family: verdana, geneva;">1. controller 在 ZooKeeper 的 /brokers/topics 节点上注册 watcher，当 topic 被创建，则 controller 会通过 watch 得到该 topic 的 partition/replica 分配。 2. controller从 /brokers/ids 读取当前所有可用的 broker 列表，对于 set_p 中的每一个 partition： 	2.1 从分配给该 partition 的所有 replica（称为AR）中任选一个可用的 broker 作为新的 leader，并将AR设置为新的 ISR 	2.2 将新的 leader 和 ISR 写入 /brokers/topics/[topic]/partitions/[partition]/state 3. controller 通过 RPC 向相关的 broker 发送 LeaderAndISRRequest。</span></pre><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div></div><h4><span style="color: #000000; font-family: verdana, geneva; font-size: 14px;"><strong>4.3.2 删除 topic</strong></span></h4><p><span style="font-family: verdana, geneva;">删除 topic 的序列图如下所示：</span></p><p><span style="font-family: verdana, geneva;"><img style="margin-right: auto; margin-left: auto; display: block;" alt="" src="http://images2015.cnblogs.com/blog/897247/201610/897247-20161012162436140-850153613.png" /></span></p><p><span style="font-family: verdana, geneva;">图.6</span></p><p><span style="font-family: verdana, geneva;">流程说明：</span></p><div><pre><span style="font-family: verdana, geneva;">1. controller 在 zooKeeper 的 /brokers/topics 节点上注册 watcher，当 topic 被删除，则 controller 会通过 watch 得到该 topic 的 partition/replica 分配。 2. 若 delete.topic.enable=false，结束；否则 controller 注册在 /admin/delete_topics 上的 watch 被 fire，controller 通过回调向对应的 broker 发送 StopReplicaRequest。</span></pre></div><p>&nbsp;</p><h2><span style="color: #ff0000; font-family: verdana, geneva; font-size: 18px; background-color: #ffffff;"><strong>五、kafka HA</strong></span></h2><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>5.1 replication</strong></span></h3><p><span style="font-family: verdana, geneva;">如图.1所示，同一个 partition 可能会有多个 replica（对应 server.properties 配置中的 default.replication.factor=N）。没有 replica 的情况下，一旦 broker 宕机，其上所有 patition 的数据都不可被消费，同时 producer 也不能再将数据存于其上的 patition。引入replication 之后，同一个 partition 可能会有多个 replica，而这时需要在这些 replica 之间选出一个 leader，producer 和 consumer 只与这个 leader 交互，其它 replica 作为 follower 从 leader 中复制数据。</span></p><p><span style="font-family: verdana, geneva;">Kafka 分配 Replica 的算法如下：</span></p><div><pre><span style="font-family: verdana, geneva;">1. 将所有 broker（假设共 n 个 broker）和待分配的 partition 排序 2. 将第 i 个 partition 分配到第（i mod n）个 broker 上 3. 将第 i 个 partition 的第 j 个 replica 分配到第（(i + j) mode n）个 broker上</span></pre></div><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>5.2 leader failover</strong></span></h3><p><span style="font-family: verdana, geneva;">当 partition 对应的 leader 宕机时，需要从 follower 中选举出新 leader。在选举新leader时，一个基本的原则是，新的 leader 必须拥有旧 leader commit 过的所有消息。</span></p><p><span style="font-family: verdana, geneva;">kafka 在 zookeeper 中（/brokers/.../state）动态维护了一个 ISR（in-sync replicas），由3.3节的写入流程可知 ISR 里面的所有 replica 都跟上了 leader，只有 ISR 里面的成员才能选为 leader。对于 f+1 个 replica，一个 partition 可以在容忍 f 个 replica 失效的情况下保证消息不丢失。</span></p><p><span style="font-family: verdana, geneva;">当所有 replica 都不工作时，有两种可行的方案：</span></p><div><pre><span style="font-family: verdana, geneva;">1. 等待 ISR 中的任一个 replica 活过来，并选它作为 leader。可保障数据不丢失，但时间可能相对较长。 2. 选择第一个活过来的 replica（不一定是 ISR 成员）作为 leader。无法保障数据不丢失，但相对不可用时间较短。</span></pre></div><p><span style="font-family: verdana, geneva;">kafka 0.8.* 使用第二种方式。</span></p><p><span style="font-family: verdana, geneva;">kafka 通过 Controller 来选举 leader，流程请参考5.3节。</span></p><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>5.3 broker failover</strong></span></h3><p><span style="font-family: verdana, geneva;">kafka broker failover 序列图如下所示：</span></p><p><span style="font-family: verdana, geneva;"><img style="margin-right: auto; margin-left: auto; display: block;" alt="" src="http://images2015.cnblogs.com/blog/897247/201610/897247-20161012143318812-1534130173.png" /></span></p><p><span style="font-family: verdana, geneva;">图.7</span></p><p><span style="font-family: verdana, geneva;">流程说明：&nbsp;</span></p><div><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div><pre><span style="font-family: verdana, geneva;">1. controller 在 zookeeper 的 /brokers/ids/[brokerId] 节点注册 Watcher，当 broker 宕机时 zookeeper 会 fire watch 2. controller 从 /brokers/ids 节点读取可用broker 3. controller决定set_p，该集合包含宕机 broker 上的所有 partition 4. 对 set_p 中的每一个 partition     4.1 从/brokers/topics/[topic]/partitions/[partition]/state 节点读取 ISR     4.2 决定新 leader（如4.3节所描述）     4.3 将新 leader、ISR、controller_epoch 和 leader_epoch 等信息写入 state 节点 5. 通过 RPC 向相关 broker 发送 leaderAndISRRequest 命令</span></pre><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div></div><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>5.4 controller failover</strong></span></h3><p><span style="font-family: verdana, geneva;">&nbsp;当 controller 宕机时会触发 controller failover。每个 broker 都会在 zookeeper 的 "/controller" 节点注册 watcher，当 controller 宕机时 zookeeper 中的临时节点消失，所有存活的 broker 收到 fire 的通知，每个 broker 都尝试创建新的 controller path，只有一个竞选成功并当选为 controller。</span></p><p><span style="font-family: verdana, geneva;">当新的 controller 当选时，会触发 KafkaController.onControllerFailover 方法，在该方法中完成如下操作：</span></p><div><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div><pre><span style="font-family: verdana, geneva;">1. 读取并增加 Controller Epoch。 2. 在 reassignedPartitions Patch(/admin/reassign_partitions) 上注册 watcher。 3. 在 preferredReplicaElection Path(/admin/preferred_replica_election) 上注册 watcher。 4. 通过 partitionStateMachine 在 broker Topics Patch(/brokers/topics) 上注册 watcher。 5. 若 delete.topic.enable=true（默认值是 false），则 partitionStateMachine 在 Delete Topic Patch(/admin/delete_topics) 上注册 watcher。 6. 通过 replicaStateMachine在 Broker Ids Patch(/brokers/ids)上注册Watch。 7. 初始化 ControllerContext 对象，设置当前所有 topic，&#8220;活&#8221;着的 broker 列表，所有 partition 的 leader 及 ISR等。 8. 启动 replicaStateMachine 和 partitionStateMachine。 9. 将 brokerState 状态设置为 RunningAsController。 10. 将每个 partition 的 Leadership 信息发送给所有&#8220;活&#8221;着的 broker。 11. 若 auto.leader.rebalance.enable=true（默认值是true），则启动 partition-rebalance 线程。 12. 若 delete.topic.enable=true 且Delete Topic Patch(/admin/delete_topics)中有值，则删除相应的Topic。</span></pre><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div></div><p>&nbsp;</p><h2><span style="color: #ff0000; font-family: verdana, geneva; font-size: 18px; background-color: #ffffff;"><strong>6. consumer 消费消息</strong></span></h2><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>6.1 consumer API</strong></span></h3><p><span style="font-family: verdana, geneva;">kafka 提供了两套 consumer API：</span></p><div><pre><span style="font-family: verdana, geneva;">1. The high-level Consumer API 2. The SimpleConsumer API</span></pre></div><p><span style="font-family: verdana, geneva;">&nbsp;其中 high-level consumer API 提供了一个从 kafka 消费数据的高层抽象，而 SimpleConsumer API 则需要开发人员更多地关注细节。</span></p><h4><span style="font-family: verdana, geneva;"><strong>6.1.1&nbsp;The high-level consumer API</strong></span></h4><p><span style="font-family: verdana, geneva;">high-level consumer API 提供了 consumer group 的语义，一个消息只能被 group 内的一个 consumer 所消费，且&nbsp;consumer 消费消息时不关注 offset，最后一个 offset 由 zookeeper 保存。</span></p><p><span style="font-family: verdana, geneva;">使用 high-level consumer API 可以是多线程的应用，应当注意：</span></p><div><pre><span style="font-family: verdana, geneva;">1. 如果消费线程大于 patition 数量，则有些线程将收不到消息 2. 如果 patition 数量大于线程数，则有些线程多收到多个 patition 的消息 3. 如果一个线程消费多个 patition，则无法保证你收到的消息的顺序，而一个 patition 内的消息是有序的</span></pre></div><h4><span style="font-family: verdana, geneva;"><strong>6.1.2 The SimpleConsumer API</strong></span></h4><p><span style="font-family: verdana, geneva;">如果你想要对 patition 有更多的控制权，那就应该使用 SimpleConsumer API，比如：</span></p><div><pre><span style="font-family: verdana, geneva;">1. 多次读取一个消息 2. 只消费一个 patition 中的部分消息 3. 使用事务来保证一个消息仅被消费一次</span></pre></div><p><span style="font-family: verdana, geneva;">&nbsp;但是使用此 API 时，partition、offset、broker、leader 等对你不再透明，需要自己去管理。你需要做大量的额外工作：</span></p><div><pre><span style="font-family: verdana, geneva;">1. 必须在应用程序中跟踪 offset，从而确定下一条应该消费哪条消息 2. 应用程序需要通过程序获知每个 Partition 的 leader 是谁 3. 需要处理 leader 的变更</span></pre></div><p><span style="font-family: verdana, geneva;">&nbsp;使用 SimpleConsumer API 的一般流程如下：</span></p><div><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div><pre><span style="font-family: verdana, geneva;">1. 查找到一个&#8220;活着&#8221;的 broker，并且找出每个 partition 的 leader 2. 找出每个 partition 的 follower 3. 定义好请求，该请求应该能描述应用程序需要哪些数据 4. fetch 数据 5. 识别 leader 的变化，并对之作出必要的响应</span></pre><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div></div><blockquote><p><span style="color: #000000; font-family: verdana, geneva;">以下针对 high-level Consumer API 进行说明。</span></p></blockquote><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>6.2 consumer group</strong></span></h3><p><span style="font-family: verdana, geneva;">如 2.2 节所说， kafka 的分配单位是 patition。每个 consumer 都属于一个 group，一个 partition 只能被同一个 group 内的一个 consumer 所消费（也就保障了一个消息只能被 group 内的一个 consuemr 所消费），但是多个 group 可以同时消费这个 partition。</span></p><p><span style="font-family: verdana, geneva;">kafka 的设计目标之一就是同时实现离线处理和实时处理，根据这一特性，可以使用 spark/Storm 这些实时处理系统对消息在线处理，同时使用 Hadoop 批处理系统进行离线处理，还可以将数据备份到另一个数据中心，只需要保证这三者属于不同的 consumer group。如下图所示：</span></p><p><span style="font-family: verdana, geneva;">&nbsp;<img width="486" height="447" style="margin-right: auto; margin-left: auto; display: block;" alt="" src="http://images2015.cnblogs.com/blog/897247/201610/897247-20161012104850453-563375248.png" /></span></p><p><span style="font-family: verdana, geneva;">图.8</span></p><h2><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>6.3 消费方式</strong></span></h2><p><span style="font-family: verdana, geneva;">consumer 采用 pull 模式从 broker 中读取数据。</span></p><p><span style="font-family: verdana, geneva;">push 模式很难适应消费速率不同的消费者，因为消息发送速率是由 broker 决定的。它的目标是尽可能以最快速度传递消息，但是这样很容易造成 consumer 来不及处理消息，典型的表现就是拒绝服务以及网络拥塞。而 pull 模式则可以根据 consumer 的消费能力以适当的速率消费消息。</span></p><p><span style="font-family: verdana, geneva;">对于 Kafka 而言，pull 模式更合适，它可简化 broker 的设计，consumer 可自主控制消费消息的速率，同时 consumer 可以自己控制消费方式&#8212;&#8212;即可批量消费也可逐条消费，同时还能选择不同的提交方式从而实现不同的传输语义。</span></p><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>6.4 consumer&nbsp;delivery guarantee</strong></span></h3><p><span style="font-family: verdana, geneva;">如果将 consumer 设置为 autocommit，consumer 一旦读到数据立即自动 commit。如果只讨论这一读取消息的过程，那 Kafka 确保了 Exactly once。</span></p><p><span style="font-family: verdana, geneva;">但实际使用中应用程序并非在 consumer 读取完数据就结束了，而是要进行进一步处理，而数据处理与 commit 的顺序在很大程度上决定了consumer delivery guarantee：</span></p><div><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div><pre><span style="font-family: verdana, geneva;"><strong>1.读完消息先 commit 再处理消息。</strong>     这种模式下，如果 consumer 在 commit 后还没来得及处理消息就 crash 了，下次重新开始工作后就无法读到刚刚已提交而未处理的消息，这就对应于 At most once <strong>2.读完消息先处理再 commit。</strong>     这种模式下，如果在处理完消息之后 commit 之前 consumer crash 了，下次重新开始工作时还会处理刚刚未 commit 的消息，实际上该消息已经被处理过了。这就对应于 At least once。 <strong>3.如果一定要做到 Exactly once，就需要协调 offset 和实际操作的输出。</strong>     精典的做法是引入两阶段提交。如果能让 offset 和操作输入存在同一个地方，会更简洁和通用。这种方式可能更好，因为许多输出系统可能不支持两阶段提交。比如，consumer 拿到数据后可能把数据放到 HDFS，如果把最新的 offset 和数据本身一起写到 HDFS，那就可以保证数据的输出和 offset 的更新要么都完成，要么都不完成，间接实现 Exactly once。（目前就 high-level API而言，offset 是存于Zookeeper 中的，无法存于HDFS，而SimpleConsuemr API的 offset 是由自己去维护的，可以将之存于 HDFS 中）</span></pre><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div></div><p><span style="font-family: verdana, geneva;">总之，Kafka 默认保证 At least once，并且允许通过设置 producer 异步提交来实现 At most once（见文章《<span style="text-decoration: underline;"><a href="http://kane-xie.iteye.com/blog/2225085" target="_blank">kafka consumer防止数据丢失</a></span>》）。而 Exactly once 要求与外部存储系统协作，幸运的是 kafka 提供的 offset 可以非常直接非常容易得使用这种方式。</span></p><p><span style="font-family: verdana, geneva;">更多关于 kafka 传输语义的信息请参考《<span style="text-decoration: underline;"><a href="http://kafka.apache.org/documentation.html#semantics" target="_blank">Message Delivery Semantics</a></span>》。</span></p><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong><strong>6.5 consumer rebalance</strong></strong></span></h3><p><span style="font-family: verdana, geneva;">当有 consumer 加入或退出、以及 partition 的改变（如 broker 加入或退出）时会触发 rebalance。consumer rebalance算法如下：</span></p><div><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div><pre><span style="font-family: verdana, geneva;">1. 将目标 topic 下的所有 partirtion 排序，存于PT 2. 对某 consumer group 下所有 consumer 排序，存于 CG，第 i 个consumer 记为 Ci 3. N=size(PT)/size(CG)，向上取整 4. 解除 Ci 对原来分配的 partition 的消费权（i从0开始） 5. 将第i*N到（i+1）*N-1个 partition 分配给 Ci</span></pre><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div></div><p><span style="font-family: verdana, geneva;">在 0.8.*版本，每个 consumer 都只负责调整自己所消费的 partition，为了保证整个consumer group 的一致性，当一个 consumer 触发了 rebalance 时，该 consumer group 内的其它所有其它 consumer 也应该同时触发 rebalance。这会导致以下几个问题：</span></p><div><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div><pre><span style="font-family: verdana, geneva;"><strong>1.Herd effect</strong> 　　任何 broker 或者 consumer 的增减都会触发所有的 consumer 的 rebalance <strong>2.Split Brain</strong> 　　每个 consumer 分别单独通过 zookeeper 判断哪些 broker 和 consumer 宕机了，那么不同 consumer 在同一时刻从 zookeeper 看到的 view 就可能不一样，这是由 zookeeper 的特性决定的，这就会造成不正确的 reblance 尝试。 <strong>3. 调整结果不可控</strong> 　　所有的 consumer 都并不知道其它 consumer 的 rebalance 是否成功，这可能会导致 kafka 工作在一个不正确的状态。</span></pre><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div></div><p><span style="font-family: verdana, geneva;">基于以上问题，kafka 设计者考虑在0.9.*版本开始使用中心 coordinator 来控制 consumer rebalance，然后又从简便性和验证要求两方面考虑，计划在 consumer 客户端实现分配方案。（见文章《<span style="text-decoration: underline;"><a href="https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Detailed+Consumer+Coordinator+Design#KafkaDetailedConsumerCoordinatorDesign-WARN:Thisisanobsoletedesign.Thedesignthat'simplementedinKafka0.9.0isdescribedinthiswiki." target="_blank">Kafka Detailed Consumer Coordinator Design</a></span>》和《<span style="text-decoration: underline;"><a href="https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Client-side+Assignment+Proposal" target="_blank">Kafka Client-side Assignment Proposal</a></span>》），此处不再赘述。</span></p><p>&nbsp;</p><h2><span style="color: #ff0000; font-family: verdana, geneva; font-size: 18px; background-color: #ffffff;"><strong>七、注意事项</strong></span></h2><h3><span style="color: #ff0000; font-family: verdana, geneva; font-size: 16px;"><strong>7.1 producer 无法发送消息的问题</strong></span></h3><p><span style="font-family: verdana, geneva;">最开始在本机搭建了kafka伪集群，本地 producer 客户端成功发布消息至 broker。随后在服务器上搭建了 kafka 集群，在本机连接该集群，producer 却无法发布消息到 broker（奇怪也没有抛错）。最开始怀疑是 iptables 没开放，于是开放端口，结果还不行（又开始是代码问题、版本问题等等，倒腾了很久）。最后没办法，一项一项查看 server.properties 配置，发现以下两个配置：</span></p><div><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div><pre><span style="font-family: verdana, geneva;"># The address the socket server listens on. It will get the value returned from  # java.net.InetAddress.getCanonicalHostName() if not configured. #   FORMAT: #     listeners = security_protocol://host_name:port #   EXAMPLE: #     listeners = PLAINTEXT://your.host.name:9092 listeners=PLAINTEXT://:9092</span></pre><p><span style="font-family: verdana, geneva;">　# Hostname and port the broker will advertise to producers and consumers. If not set,&nbsp;</span><br /><span style="font-family: verdana, geneva;">　# it uses the value for "listeners" if configured. Otherwise, it will use the value</span><br /><span style="font-family: verdana, geneva;">　# returned from java.net.InetAddress.getCanonicalHostName().</span><br /><span style="font-family: verdana, geneva;">　#advertised.listeners=PLAINTEXT://your.host.name:9092</span></p><div><a title="复制代码" href="http://www.cnblogs.com/cyfonly/p/5954614.html"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></div></div><p><span style="font-family: verdana, geneva;">以上说的就是&nbsp;advertised.listeners 是 broker 给 producer 和 consumer 连接使用的，如果没有设置，就使用&nbsp;listeners，而如果 host_name 没有设置的话，就使用&nbsp;java.net.InetAddress.getCanonicalHostName() 方法返回的主机名。</span></p><p><span style="font-family: verdana, geneva;">修改方法：</span></p><div><pre><span style="font-family: verdana, geneva;">1. listeners=PLAINTEXT://121.10.26.XXX:9092 2. advertised.listeners=PLAINTEXT://121.10.26.XXX:9092</span></pre></div><p><span style="font-family: verdana, geneva;">修改后重启服务，正常工作。关于更多 kafka 配置说明，见文章《<span style="text-decoration: underline;"><a href="http://blog.csdn.net/louisliaoxh/article/details/51516084" target="_blank">Kafka学习整理三(borker(0.9.0及0.10.0)配置)</a></span>》。</span></p><p>&nbsp;</p><h2><span style="color: #ff0000; font-family: verdana, geneva; font-size: 18px; background-color: #ffffff;"><strong>八、参考文章</strong></span></h2><p><span style="font-family: verdana, geneva;">1. 《<a href="http://www.infoq.com/cn/articles/kafka-analysis-part-1/" target="_blank">Kafka剖析（一）：Kafka背景及架构介绍</a>》</span></p><p><span style="font-family: verdana, geneva;">2. 《<a href="http://www.infoq.com/cn/articles/kafka-analysis-part-2/" target="_blank">Kafka设计解析（二）：Kafka High Availability （上）</a>》</span></p><p><span style="font-family: verdana, geneva;">3. 《<a href="http://www.infoq.com/cn/articles/kafka-analysis-part-3/" target="_blank">Kafka设计解析（二）：Kafka High Availability （下）</a>》</span></p><p><span style="font-family: verdana, geneva;">4. 《<a href="http://www.infoq.com/cn/articles/kafka-analysis-part-4/" target="_blank">Kafka设计解析（四）：Kafka Consumer解析</a>》</span></p><p><span style="font-family: verdana, geneva;">5. 《<a href="http://www.infoq.com/cn/articles/kafka-analysis-part-5" target="_blank">Kafka设计解析（五）：Kafka Benchmark</a>》</span></p><p><span style="font-family: verdana, geneva;">6. 《<a href="http://blog.csdn.net/louisliaoxh/article/details/51516084" target="_blank">Kafka学习整理三(borker(0.9.0及0.10.0)配置)</a>》</span></p><p><span style="font-family: verdana, geneva;">7. 《<a href="https://cwiki.apache.org/confluence/display/KAFKA/Consumer+Group+Example" target="_blank">Using the High Level Consumer</a>》</span></p><p><span style="font-family: verdana, geneva;">8. 《<a href="https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+SimpleConsumer+Example" target="_blank">Using SimpleConsumer</a>》</span></p><p><span style="font-family: verdana, geneva;">9. 《<a href="https://cwiki.apache.org/confluence/display/KAFKA/Consumer+Client+Re-Design" target="_blank">Consumer Client Re-Design</a>》</span></p><p><span style="font-family: verdana, geneva;">10. 《<a href="http://kafka.apache.org/documentation.html#semantics" target="_blank">Message Delivery Semantics</a>》</span></p><p><span style="font-family: verdana, geneva;">11. 《<a href="https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Detailed+Consumer+Coordinator+Design#KafkaDetailedConsumerCoordinatorDesign-WARN:Thisisanobsoletedesign.Thedesignthat'simplementedinKafka0.9.0isdescribedinthiswiki." target="_blank">Kafka Detailed Consumer Coordinator Design</a>》</span></p><p><span style="font-family: verdana, geneva;">12. 《<a href="https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Client-side+Assignment+Proposal" target="_blank">Kafka Client-side Assignment Proposal</a>》</span></p><p><span style="font-family: verdana, geneva;">13. 《<a href="http://www.infoq.com/cn/articles/technology-comparison-of-kafka-and-distributedlog?utm_campaign=rightbar_v2&amp;utm_source=infoq&amp;utm_medium=articles_link&amp;utm_content=link_text" target="_blank">Kafka和DistributedLog技术对比</a>》</span></p><p><span style="font-family: verdana, geneva;">14. 《<a href="http://orchome.com/6" target="_blank">kafka安装和启动</a>》</span></p><p><span style="font-family: verdana, geneva;">15. 《<a href="http://kane-xie.iteye.com/blog/2225085" target="_blank">kafka consumer防止数据丢失</a>》</span></p><p><span style="font-family: verdana, geneva;">&nbsp;&nbsp;</span></p><p>&nbsp;</p></div><div id="MySignature" style="display: block;"><div>作者：<a href="http://www.cnblogs.com/cyfonly/" target="_blank">cyfonly</a></div><div>出处：<a href="http://www.cnblogs.com/cyfonly/" target="_blank">http://www.cnblogs.com/cyfonly/</a></div><div>本文版权归作者和博客园共有，欢迎转载，未经同意须保留此段声明，且在文章页面明显位置给出原文连接。欢迎指正与交流。</div></div></div></a><img src ="http://www.blogjava.net/xzclog/aggbug/432486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-04-28 10:37 <a href="http://www.blogjava.net/xzclog/archive/2017/04/28/432486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kerberos简介</title><link>http://www.blogjava.net/xzclog/archive/2017/04/25/432480.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Tue, 25 Apr 2017 07:56:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/04/25/432480.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432480.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/04/25/432480.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432480.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432480.html</trackback:ping><description><![CDATA[<div><h1><span style="line-height: 1.5; font-size: 2em;">1.&nbsp; Kerberos简介</span></h1><h2>1.1. 功能</h2><ol><li><p><span style="font-size: 18px;">一个安全认证协议</span></p></li><li><p><span style="font-size: 18px;">用tickets验证</span></p></li><li><p><span style="font-size: 18px;">避免本地保存密码和在互联网上传输密码</span></p></li><li><p><span style="font-size: 18px;">包含一个可信任的第三方</span></p></li><li><p><span style="font-size: 18px;">使用对称加密</span></p></li><li><p><span style="font-size: 18px;">客户端与服务器（非KDC）之间能够相互验证</span></p></li></ol><p>Kerberos只提供一种功能&#8212;&#8212;在网络上安全的完成用户的身份验证。它并不提供授权功能或者审计功能。</p><h2>1.2. 概念</h2><p>首次请求，三次通信方</p><ul><li>the Authentication Server</li><li>the Ticket Granting Server</li><li>the Service or host machine that you&#8217;re wanting access to.</li></ul><p align="center"><img width="786" height="590" alt="" src="http://images.cnitblog.com/i/440394/201405/161359440784098.jpg" />&nbsp;</p><p align="center">图 1&#8209;1 角色</p><p>其他知识点</p><ul><li>每次通信，消息包含两部分，一部分可解码，一部分不可解码</li><li>服务端不会直接有KDC通信</li><li>KDC保存所有机器的账户名和密码</li><li>KDC本身具有一个密码</li></ul><h1>2.&nbsp; 3次通信</h1><p>&nbsp;<img style="margin-right: auto; margin-left: auto; display: block;" alt="" src="http://images.cnitblog.com/i/440394/201405/161403404066531.png" /></p><p>　　我们这里已获取服务器中的一张表（数据）的服务以为，为一个http服务。</p><h2>2.1. 你和验证服务</h2><p>　　如果想要获取http服务，你首先要向KDC表名你自己的身份。这个过程可以在你的程序启动时进行。Kerberos可以通过kinit获取。介绍自己通过未加密的信息发送至KDC获取Ticket Granting Ticket (TGT)。</p><p>（1）信息包含</p><ul><li>你的用户名/ID</li><li>你的IP地址</li><li>TGT的有效时间</li></ul><p>　　Authentication Server收到你的请求后，会去数据库中验证，你是否存在。注意，仅仅是验证是否存在，不会验证对错。</p><p>　　如果存在，Authentication Server会产生一个随机的Session key(可以是一个64位的字符串)。这个key用于你和Ticket Granting Server (TGS)之间通信。</p><p>（2）回送信息</p><p>　　Authentication Server同样会发送两部分信息给你，一部分信息为TGT，通过KDC自己的密码进行加密，包含：</p><ul><li>你的name/ID</li><li>TGS的name/ID</li><li>时间戳</li><li>你的IP地址</li><li>TGT的生命周期</li><li><span style="color: #00ff00;"><strong>TGS session key</strong></span></li></ul><p>另外一部分通过你的密码进行加密，包含的信息有</p><ul><li>TGS的name/ID</li><li>时间戳</li><li>生命周期</li><li><span style="color: #00ff00;"><strong>TGS session key</strong></span></li></ul><p align="center">&nbsp;<img width="835" height="630" alt="" src="http://images.cnitblog.com/i/440394/201405/161407343596805.png" /></p><p align="center">图 2&#8209;1 第一次通信</p><p>　　如果你的密码是正确的，你就能解密第二部分信息，获取到TGS session key。如果，密码不正确，无法解密，则认证失败。第一部分信息TGT，你是无法解密的，但需要展示缓存起来。</p><h2>2.2. 你和TGS</h2><p>如果第一部分你已经成功，你已经拥有无法解密的TGT和一个TGS Session Key。</p><p>（1）&nbsp;&nbsp;&nbsp; 请求信息</p><p>　a) &nbsp;通过TGS Session Key加密的<strong>认证器</strong>部分：</p><ul><li>你的name/ID</li><li>时间戳</li></ul><p>b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 明文传输部分：</p><ul><li>请求的Http服务名（就是请求信息）</li><li>HTTP Service的Ticket生命周期</li></ul><p>c)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TGT部分</p><p>　　Ticket Granting Server收到信息后，首先检查数据库中是否包含有你请求的Http服务名。如果无，直接返回错误信息。</p><p>　　如果存在，则通过KDC的密码解密TGT，这个时候。我们就能获取到TGS Session key。然后，通过TGS Session key去解密你传输的第一部分认证器，获取到你的用户名和时间戳。</p><p><strong>TGS再进行验证：</strong></p><ol><li>对比TGT中的用户名与认证器中的用户名</li><li>比较时间戳（网上有说认证器中的时间错和TGT中的时间错，个人觉得应该是认证器中的时间戳和系统的时间戳），不能超过一定范围</li><li>检查是否过期</li><li>检查IP地址是否一致</li><li>检查认证器是否已在TGS缓存中（避免应答攻击）</li><li><strong>可以在这部分添加权限认证服务</strong></li></ol><p>　　TGS随机产生一个<strong><span style="color: #ff0000;">Http Service Session Key</span></strong>, 同时准备Http Service Ticket(ST)。</p><p>（2）&nbsp;&nbsp;&nbsp; 回答信息</p><p>　　a)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过Http服务的密码进行加密的信息（ST）：</p><ul><li>你的name/ID</li><li>Http服务name/ID</li><li>你的IP地址</li><li>时间戳</li><li>ST的生命周期</li><li><span style="color: #ff0000;"><strong>Http Service Session Key</strong></span></li></ul><p>　　b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过<span style="color: #00ff00;"><strong>TGS Session Key</strong></span>加密的信息</p><ul><li>Http服务name/ID</li><li>时间戳</li><li>ST的生命周期</li><li><span style="color: #ff0000;"><strong>Http Service Session Key</strong></span></li></ul><p>　　你收到信息后，通过<span style="color: #00ff00;"><strong>TGS Session Key</strong></span>解密，获取到了<span style="color: #ff0000;"><strong>Http Service Session Key</strong></span>，但是你无法解密ST。</p><p>&nbsp;<img width="934" height="687" alt="" src="http://images.cnitblog.com/i/440394/201405/161411563901158.png" /></p><p align="center">图 2&#8209;2 第二次通信</p><h2>2.3. 你和Http服务</h2><p>　　在前面两步成功后，以后每次获取Http服务，在Ticket没有过期，或者无更新的情况下，都可直接进行这一步。省略前面两个步骤。</p><p>（1）&nbsp;&nbsp;&nbsp; 请求信息</p><p>　　a)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过<strong>Http Service Session Key</strong><strong>，</strong>加密部分</p><ul><li>你的name/ID</li><li>时间戳</li></ul><p>　　b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ST</p><p>　　　Http服务端通过自己的密码解压ST（KDC是用Http服务的密码加密的），这样就能够获取到<strong>Http Service Session Key</strong>，解密第一部分。</p><p><strong>服务端解密好ST后，进行检查</strong></p><ol><li>对比ST中的用户名（KDC给的）与认证器中的用户名</li><li>比较时间戳（网上有说认证器中的时间错和TGT中的时间错，个人觉得应该是认证器中的时间戳和系统的时间戳），不能超过一定范围</li><li>检查是否过期</li><li>检查IP地址是否一致</li><li>检查认证器是否已在HTTP服务端的缓存中（避免应答攻击）</li></ol><p>（2）&nbsp;&nbsp;&nbsp; 应答信息</p><p>a)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过<span style="color: #ff0000;"><strong>Http Service Session Key</strong></span>加密的信息</p><ul><li>Http服务name/ID</li><li>时间戳</li></ul><p>&nbsp;<img width="827" height="437" alt="" src="http://images.cnitblog.com/i/440394/201405/161413397653706.png" /></p><p align="center">图 2&#8209;3 第三次通信</p><p>　　你在通过缓存的<span style="color: #ff0000;"><strong>Http Service Session Key</strong></span>解密这部分信息，然后验证是否是你想要的服务器发送给你的信息。完成你的服务器的验证。</p><p>至此，整个过程全部完成。</p></div><img src ="http://www.blogjava.net/xzclog/aggbug/432480.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-04-25 15:56 <a href="http://www.blogjava.net/xzclog/archive/2017/04/25/432480.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解析Cloudera Manager内部结构、功能包括配置文件、目录位置等</title><link>http://www.blogjava.net/xzclog/archive/2017/04/13/432449.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 13 Apr 2017 06:36:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/04/13/432449.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432449.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/04/13/432449.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432449.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432449.html</trackback:ping><description><![CDATA[<div><strong>问题导读<br />1.CM的安装目录在什么位置？</strong><strong><br /></strong><br /><strong>2.hadoop配置文件在什么位置？</strong><br /><strong><br /></strong><br /><strong>3.Cloudera manager运行所需要的信息存在什么位置？</strong><br /><br /><strong>4.CM结构和功能是什么？</strong><br /><br /><img width="500" height="35" id="aimg_kV7jy" alt="" src="http://www.aboutyun.com/static/image/hrline/4.gif" border="0" lazyloadthumb="1" file="static/image/hrline/4.gif" lazyloaded="true" _load="1" /><br /><br /><br /><strong>1. 相关目录</strong><ul><li>/var/log/cloudera-scm-installer : 安装日志目录。</li><li>/var/log/* : 相关日志文件（相关服务的及CM的）。</li><li>/usr/share/cmf/ : 程序安装目录。</li><li>/usr/lib64/cmf/ : Agent程序代码。</li><li>/var/lib/cloudera-scm-server-db/data : 内嵌数据库目录。</li><li>/usr/bin/postgres : 内嵌数据库程序。</li><li>/etc/cloudera-scm-agent/ : agent的配置目录。</li><li>/etc/cloudera-scm-server/ : server的配置目录。</li><li>/opt/cloudera/parcels/ : Hadoop相关服务安装目录。</li><li>/opt/cloudera/parcel-repo/ : 下载的服务软件包数据，数据格式为parcels。</li><li>/opt/cloudera/parcel-cache/ : 下载的服务软件包缓存数据。</li><li>/etc/hadoop/* : 客户端配置文件目录。<br /></li></ul><br /><strong>2. 配置</strong><ul><li><div align="left">Hadoop配置文件</div><div align="left">配置文件放置于/var/run/cloudera-scm-agent/process/目录下。如：/var/run/cloudera-scm-agent/process/193-hdfs-NAMENODE/core-site.xml。这些配置文件是通过Cloudera Manager启动相应服务（如HDFS）时生成的，内容从数据库中获得（即通过界面配置的参数）。</div><blockquote><div align="left">在CM界面上更改配置是不会立即反映到配置文件中，这些信息会存储于数据库中，等下次重启服务时才会生成配置文件。且每次启动时都会产生新的配置文件。</div></blockquote><div align="left">CM Server主要数据库为scm基中放置配置的数据表为configs。里面包含了服务的配置信息，每一次配置的更改会把当前页面的所有配置内容添加到数据库中，以此保存配置修改历史。</div><blockquote><div align="left">scm数据库被配置成只能从localhost访问，如果需要从外部连接此数据库，修改vim /var/lib/cloudera-scm-server-db/data/pg_hba.conf文件,之后重启数据库。运行数据库的用户为cloudera-scm。</div></blockquote><br /></li></ul><br /><ul><li><div align="left">查看配置内容</div><br /><ul type="1"><li>直接查询scm数据库的configs数据表的内容。</li><li>访问REST API： http://hostname:7180/api/v4/cm/deployment，返回JSON格式部署配置信息。<br /></li></ul></li></ul><br /><br /><ul><li><div align="left">配置生成方式</div><div align="left">CM为每个服务进程生成独立的配置目录（文件）。所有配置统一在服务端查询数据库生成（因为scm数据库只能在localhost下访问）生成配置文件，再由agent通过网络下载包含配置文件的zip包到本地解压到指定的目录。</div><br /></li></ul><br /><ul><li><div align="left">配置修改</div><div align="left">CM对于需要修改的配置预先定义，对于没有预先定义的配置,则通过在高级配置项中使用xml配置片段的方式进行配置。而对于/etc/hadoop/下的配置文件是客户端的配置，可以在CM通过部署客户端生成客户端配置。</div><br /></li></ul><strong>3. 数据库</strong><div align="left">Cloudera manager主要的数据库为scm,存储Cloudera manager运行所需要的信息：配置，主机，用户等。</div><br /><strong>4. CM结构</strong><div align="left">CM分为Server与Agent两部分及数据库（自带更改过的嵌入Postgresql）。它主要做三件事件：</div><ul type="1"><li>管理监控集群主机。</li><li>统一管理配置。</li><li>管理维护Hadoop平台系统。<br /></li></ul><div align="left">实现采用C/S结构，Agent为客户端负责执行服务端发来的命令，执行方式一般为使用python调用相应的服务shell脚本。Server端为Java REST服务，提供REST API，Web管理端通过REST API调用Server端功能，Web界面使用富客户端技术（Knockout）。</div><ul type="1"><li>Server端主体使用Java实现。</li><li>Agent端主体使用Python, 服务的启动通过调用相应的shell脚本进行启动，如果启动失败会重复4次调用启动脚本。</li><li>Agent与Server保持心跳，使用Thrift RPC框架。<br /></li></ul><br /><br /><strong>5. 升级</strong><div align="left">在CM中可以通过界面向导升级相关服务。升级过程为三步：</div><ul type="1"><li>下载服务软件包。</li><li>把所下载的服务软件包分发到集群中受管的机器上。</li><li>安装服务软件包，使用软链接的方式把服务程序目录链接到新安装的软件包目录上。<br /></li></ul><br /><br /><strong>6. 卸载</strong><div align="left">sudo /usr/share/cmf/uninstall-scm-express.sh, 然后删除/var/lib/cloudera-scm-server-db/目录，不然下次安装可能不成功。</div><br /><br /><strong>7. 开启postgresql远程访问</strong><div align="left">CM内嵌数据库被配置成只能从localhost访问，如果需要从外部查看数据，数据修改vim /var/lib/cloudera-scm-server-db/data/pg_hba.conf文件,之后重启数据库。运行数据库的用户为cloudera-scm。</div></div><img src ="http://www.blogjava.net/xzclog/aggbug/432449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-04-13 14:36 <a href="http://www.blogjava.net/xzclog/archive/2017/04/13/432449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hbase 修复 hbase hbck </title><link>http://www.blogjava.net/xzclog/archive/2017/04/11/432444.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Tue, 11 Apr 2017 08:01:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/04/11/432444.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432444.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/04/11/432444.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432444.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432444.html</trackback:ping><description><![CDATA[<div><div bg_plain"=""><ol><li><span>新版本的&nbsp;hbck&nbsp;可以修复各种错误，修复选项是：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>（1）-fix，向下兼容用，被-fixAssignments替代&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（2）-fixAssignments，用于修复region&nbsp;assignments错误&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（3）-fixMeta，用于修复meta表的问题，前提是HDFS上面的region&nbsp;info信息有并且正确。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（4）-fixHdfsHoles，修复region&nbsp;holes（空洞，某个区间没有region）问题&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（5）-fixHdfsOrphans，修复Orphan&nbsp;region（hdfs上面没有.regioninfo的region）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（6）-fixHdfsOverlaps，修复region&nbsp;overlaps（区间重叠）问题&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（7）-fixVersionFile，修复缺失hbase.version文件的问题&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（8）-maxMerge&nbsp;&lt;n&gt;&nbsp;（n默认是5），当region有重叠是，需要合并region，一次合并的region数最大不超过这个值。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（9）-sidelineBigOverlaps&nbsp;，当修复region&nbsp;overlaps问题时，允许跟其他region重叠次数最多的一些region不参与（修复后，可以把没有参与的数据通过bulk&nbsp;load加载到相应的region）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（10）-maxOverlapsToSideline&nbsp;&lt;n&gt;&nbsp;（n默认是2），当修复region&nbsp;overlaps问题时，一组里最多允许多少个region不参与&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>由于选项较多，所以有两个简写的选项&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（11）&nbsp;-repair，相当于-fixAssignments&nbsp;-fixMeta&nbsp;-fixHdfsHoles&nbsp;-fixHdfsOrphans&nbsp;-fixHdfsOverlaps&nbsp;-fixVersionFile&nbsp;-sidelineBigOverlaps&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（12）-repairHoles，相当于-fixAssignments&nbsp;-fixMeta&nbsp;-fixHdfsHoles&nbsp;-fixHdfsOrphans&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>新版本的&nbsp;hbck&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（1）缺失hbase.version文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;加上选项&nbsp;-fixVersionFile&nbsp;解决&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（2）如果一个region即不在META表中，又不在hdfs上面，但是在regionserver的online&nbsp;region集合中&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;加上选项&nbsp;-fixAssignments&nbsp;解决&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（3）如果一个region在META表中，并且在regionserver的online&nbsp;region集合中，但是在hdfs上面没有&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;加上选项&nbsp;-fixAssignments&nbsp;-fixMeta&nbsp;解决，（&nbsp;-fixAssignments告诉regionserver&nbsp;close&nbsp;region），（&nbsp;-fixMeta删除META表中region的记录）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（4）如果一个region在META表中没有记录，没有被regionserver服务，但是在hdfs上面有&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>加上选项&nbsp;-fixMeta&nbsp;-fixAssignments&nbsp;解决，（&nbsp;-fixAssignments&nbsp;用于assign&nbsp;region），（&nbsp;-fixMeta用于在META表中添加region的记录）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（5）如果一个region在META表中没有记录，在hdfs上面有，被regionserver服务了&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>加上选项&nbsp;-fixMeta&nbsp;解决，在META表中添加这个region的记录，先undeploy&nbsp;region，后assign&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（6）如果一个region在META表中有记录，但是在hdfs上面没有，并且没有被regionserver服务&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>加上选项&nbsp;-fixMeta&nbsp;解决，删除META表中的记录&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（7）如果一个region在META表中有记录，在hdfs上面也有，table不是disabled的，但是这个region没有被服务&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>加上选项&nbsp;-fixAssignments&nbsp;解决，assign这个region&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（8）如果一个region在META表中有记录，在hdfs上面也有，table是disabled的，但是这个region被某个regionserver服务了&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>加上选项&nbsp;-fixAssignments&nbsp;解决，undeploy这个region&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（9）如果一个region在META表中有记录，在hdfs上面也有，table不是disabled的，但是这个region被多个regionserver服务了&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>加上选项&nbsp;-fixAssignments&nbsp;解决，通知所有regionserver&nbsp;close&nbsp;region，然后assign&nbsp;region&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（10）如果一个region在META表中，在hdfs上面也有，也应该被服务，但是META表中记录的regionserver和实际所在的regionserver不相符&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>加上选项&nbsp;-fixAssignments&nbsp;解决&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（11）region&nbsp;holes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>需要加上&nbsp;-fixHdfsHoles&nbsp;，创建一个新的空region，填补空洞，但是不assign&nbsp;这个&nbsp;region，也不在META表中添加这个region的相关信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（12）region在hdfs上面没有.regioninfo文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>-fixHdfsOrphans&nbsp;解决&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（13）region&nbsp;overlaps&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>需要加上&nbsp;-fixHdfsOverlaps&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>说明：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（1）修复region&nbsp;holes时，-fixHdfsHoles&nbsp;选项只是创建了一个新的空region，填补上了这个区间，还需要加上-fixAssignments&nbsp;-fixMeta&nbsp;来解决问题，（&nbsp;-fixAssignments&nbsp;用于assign&nbsp;region），（&nbsp;-fixMeta用于在META表中添加region的记录），所以有了组合拳&nbsp;-repairHoles&nbsp;修复region&nbsp;holes，相当于-fixAssignments&nbsp;-fixMeta&nbsp;-fixHdfsHoles&nbsp;-fixHdfsOrphans&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（2）&nbsp;-fixAssignments，用于修复region没有assign、不应该assign、assign了多次的问题&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（3）-fixMeta，如果hdfs上面没有，那么从META表中删除相应的记录，如果hdfs上面有，在META表中添加上相应的记录信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>（4）-repair&nbsp;打开所有的修复选项，相当于-fixAssignments&nbsp;-fixMeta&nbsp;-fixHdfsHoles&nbsp;-fixHdfsOrphans&nbsp;-fixHdfsOverlaps&nbsp;-fixVersionFile&nbsp;-sidelineBigOverlaps&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>新版本的hbck从（1）hdfs目录（2）META（3）RegionServer这三处获得region的Table和Region的相关信息，根据这些信息判断并repair&nbsp;&nbsp;&nbsp;&nbsp;</li></ol></div><pre style="display: none;" name="code" snippet_file_name="blog_20161214_1_8111817" code_snippet_id="2049415">新版本的 hbck 可以修复各种错误，修复选项是：    （1）-fix，向下兼容用，被-fixAssignments替代    （2）-fixAssignments，用于修复region assignments错误    （3）-fixMeta，用于修复meta表的问题，前提是HDFS上面的region info信息有并且正确。    （4）-fixHdfsHoles，修复region holes（空洞，某个区间没有region）问题    （5）-fixHdfsOrphans，修复Orphan region（hdfs上面没有.regioninfo的region）    （6）-fixHdfsOverlaps，修复region overlaps（区间重叠）问题    （7）-fixVersionFile，修复缺失hbase.version文件的问题    （8）-maxMerge &lt;n&gt; （n默认是5），当region有重叠是，需要合并region，一次合并的region数最大不超过这个值。    （9）-sidelineBigOverlaps ，当修复region overlaps问题时，允许跟其他region重叠次数最多的一些region不参与（修复后，可以把没有参与的数据通过bulk load加载到相应的region）    （10）-maxOverlapsToSideline &lt;n&gt; （n默认是2），当修复region overlaps问题时，一组里最多允许多少个region不参与    由于选项较多，所以有两个简写的选项    （11） -repair，相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps    （12）-repairHoles，相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans                新版本的 hbck    （1）缺失hbase.version文件     加上选项 -fixVersionFile 解决    （2）如果一个region即不在META表中，又不在hdfs上面，但是在regionserver的online region集合中     加上选项 -fixAssignments 解决    （3）如果一个region在META表中，并且在regionserver的online region集合中，但是在hdfs上面没有     加上选项 -fixAssignments -fixMeta 解决，（ -fixAssignments告诉regionserver close region），（ -fixMeta删除META表中region的记录）    （4）如果一个region在META表中没有记录，没有被regionserver服务，但是在hdfs上面有    加上选项 -fixMeta -fixAssignments 解决，（ -fixAssignments 用于assign region），（ -fixMeta用于在META表中添加region的记录）    （5）如果一个region在META表中没有记录，在hdfs上面有，被regionserver服务了    加上选项 -fixMeta 解决，在META表中添加这个region的记录，先undeploy region，后assign    （6）如果一个region在META表中有记录，但是在hdfs上面没有，并且没有被regionserver服务    加上选项 -fixMeta 解决，删除META表中的记录    （7）如果一个region在META表中有记录，在hdfs上面也有，table不是disabled的，但是这个region没有被服务    加上选项 -fixAssignments 解决，assign这个region    （8）如果一个region在META表中有记录，在hdfs上面也有，table是disabled的，但是这个region被某个regionserver服务了    加上选项 -fixAssignments 解决，undeploy这个region    （9）如果一个region在META表中有记录，在hdfs上面也有，table不是disabled的，但是这个region被多个regionserver服务了    加上选项 -fixAssignments 解决，通知所有regionserver close region，然后assign region    （10）如果一个region在META表中，在hdfs上面也有，也应该被服务，但是META表中记录的regionserver和实际所在的regionserver不相符    加上选项 -fixAssignments 解决        （11）region holes    需要加上 -fixHdfsHoles ，创建一个新的空region，填补空洞，但是不assign 这个 region，也不在META表中添加这个region的相关信息    （12）region在hdfs上面没有.regioninfo文件    -fixHdfsOrphans 解决    （13）region overlaps    需要加上 -fixHdfsOverlaps            说明：    （1）修复region holes时，-fixHdfsHoles 选项只是创建了一个新的空region，填补上了这个区间，还需要加上-fixAssignments -fixMeta 来解决问题，（ -fixAssignments 用于assign region），（ -fixMeta用于在META表中添加region的记录），所以有了组合拳 -repairHoles 修复region holes，相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans    （2） -fixAssignments，用于修复region没有assign、不应该assign、assign了多次的问题    （3）-fixMeta，如果hdfs上面没有，那么从META表中删除相应的记录，如果hdfs上面有，在META表中添加上相应的记录信息    （4）-repair 打开所有的修复选项，相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps        新版本的hbck从（1）hdfs目录（2）META（3）RegionServer这三处获得region的Table和Region的相关信息，根据这些信息判断并repair  </pre><br />示例： <p>&nbsp;</p><p>&nbsp;</p><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/liliwei0213/article/details/53639275#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/liliwei0213/article/details/53639275#">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/liliwei0213/article/details/53639275#">print</a></span><a title="?" href="http://blog.csdn.net/liliwei0213/article/details/53639275#">?</a><span data-mod="popu_167"><a title="在CODE上查看代码片" style="text-indent: 0px;" href="https://code.csdn.net/snippets/2049415" target="_blank"><img width="12" height="12" style="left: 2px; top: 1px; position: relative;" alt="在CODE上查看代码片" src="https://code.csdn.net/assets/CODE_ico.png" /></a></span><span data-mod="popu_170"><a title="派生到我的代码片" style="text-indent: 0px;" href="https://code.csdn.net/snippets/2049415/fork" target="_blank"><img width="12" height="12" style="left: 2px; top: 2px; position: relative;" alt="派生到我的代码片" src="https://code.csdn.net/assets/ico_fork.svg" /></a></span></div></div><ol><li><span>查看hbasemeta情况&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>hbase&nbsp;hbck&nbsp;&nbsp;&nbsp;&nbsp;</li><li>1.重新修复hbase&nbsp;meta表（根据hdfs上的regioninfo文件，生成meta表）&nbsp;&nbsp;&nbsp;&nbsp;</li><li>hbase&nbsp;hbck&nbsp;-fixMeta&nbsp;&nbsp;&nbsp;&nbsp;</li><li>2.重新将hbase&nbsp;meta表分给regionserver（根据meta表，将meta表上的region分给regionservere）&nbsp;&nbsp;&nbsp;&nbsp;</li><li>hbase&nbsp;hbck&nbsp;-fixAssignments&nbsp;&nbsp;&nbsp;&nbsp;</li></ol><div tracking-ad"="" data-mod="popu_249"><a href="http://blog.csdn.net/liliwei0213/article/details/53639275" target="_blank"><img src="http://static.blog.csdn.net/images/save_snippets.png"  alt="" /></a></div></div><pre style="display: none;" name="code" snippet_file_name="blog_20161214_2_9933151" code_snippet_id="2049415">查看hbasemeta情况   hbase hbck   1.重新修复hbase meta表（根据hdfs上的regioninfo文件，生成meta表）   hbase hbck -fixMeta   2.重新将hbase meta表分给regionserver（根据meta表，将meta表上的region分给regionservere）   hbase hbck -fixAssignments  </pre><p>&nbsp;</p><p><span style="font-family: Helvetica,Tahoma,Arial,sans-serif; font-size: 14px;"><br /></span></p><p>&nbsp;</p><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/liliwei0213/article/details/53639275#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/liliwei0213/article/details/53639275#">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/liliwei0213/article/details/53639275#">print</a></span><a title="?" href="http://blog.csdn.net/liliwei0213/article/details/53639275#">?</a><span data-mod="popu_167"><a title="在CODE上查看代码片" style="text-indent: 0px;" href="https://code.csdn.net/snippets/2049415" target="_blank"><img width="12" height="12" style="left: 2px; top: 1px; position: relative;" alt="在CODE上查看代码片" src="https://code.csdn.net/assets/CODE_ico.png" /></a></span><span data-mod="popu_170"><a title="派生到我的代码片" style="text-indent: 0px;" href="https://code.csdn.net/snippets/2049415/fork" target="_blank"><img width="12" height="12" style="left: 2px; top: 2px; position: relative;" alt="派生到我的代码片" src="https://code.csdn.net/assets/ico_fork.svg" /></a></span></div></div><ol><li><span>当出现漏洞&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>hbase&nbsp;hbck&nbsp;-fixHdfsHoles&nbsp;&nbsp;（新建一个region文件夹）&nbsp;&nbsp;&nbsp;&nbsp;</li><li>hbase&nbsp;hbck&nbsp;-fixMeta&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（根据regioninfo生成meta表）&nbsp;&nbsp;&nbsp;&nbsp;</li><li>hbase&nbsp;hbck&nbsp;-fixAssignments&nbsp;&nbsp;（分配region到regionserver上）&nbsp;&nbsp;</li></ol></div><pre style="display: none;" name="code" snippet_file_name="blog_20161214_3_3597649" code_snippet_id="2049415">当出现漏洞   hbase hbck -fixHdfsHoles  （新建一个region文件夹）   hbase hbck -fixMeta        （根据regioninfo生成meta表）   hbase hbck -fixAssignments  （分配region到regionserver上）</pre><br /><p><br /></p><p>&nbsp;</p><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/liliwei0213/article/details/53639275#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/liliwei0213/article/details/53639275#">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/liliwei0213/article/details/53639275#">print</a></span><a title="?" href="http://blog.csdn.net/liliwei0213/article/details/53639275#">?</a><span data-mod="popu_167"><a title="在CODE上查看代码片" style="text-indent: 0px;" href="https://code.csdn.net/snippets/2049415" target="_blank"><img width="12" height="12" style="left: 2px; top: 1px; position: relative;" alt="在CODE上查看代码片" src="https://code.csdn.net/assets/CODE_ico.png" /></a></span><span data-mod="popu_170"><a title="派生到我的代码片" style="text-indent: 0px;" href="https://code.csdn.net/snippets/2049415/fork" target="_blank"><img width="12" height="12" style="left: 2px; top: 2px; position: relative;" alt="派生到我的代码片" src="https://code.csdn.net/assets/ico_fork.svg" /></a></span></div></div><ol><li><span>一、故障原因&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>IP为10.191.135.3的服务器在2013年8月1日出现服务器重新启动的情况，导致此台服务器上的所有服务均停止。从而造成NTP服务停止。当NTP服务停止后，导致HBase集群中大部分机器时钟和主机时间不一致，造成regionserver服务中止。并在重新启动后，出现region的hole。需要对数据进行重新修复，以正常提供插入数据的服务。&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;</li><li>二、恢复方式&nbsp;&nbsp;&nbsp;&nbsp;</li><li>1、集群50个regionserver，宕掉服务41个，namenode所在机器10.191.135.3不明重启（原因查找中）导致本机上的namenode、zookeeper、时间同步服务器服务挂掉。&nbsp;&nbsp;&nbsp;&nbsp;</li><li>2、重启hbase服务时，没能成功stop剩余的9个regionserver服务，进行了人为kill进程，&nbsp;&nbsp;&nbsp;&nbsp;</li><li>3、在hdfs上移走了hlog（避免启动时split&nbsp;log花费过多时间影响服务），然后重启hbase。发现10.191.135.30机器上的时间与时间同步服务器10.191.135.3不同步。手工同步后重启成功。hbase可以正常提供查询服务。&nbsp;&nbsp;&nbsp;&nbsp;</li><li>4、运行mapreduce&nbsp;put数据。抛出异常，数据无法正常插入；&nbsp;&nbsp;&nbsp;&nbsp;</li><li>5、执行/opt/hbase/bin/hbase&nbsp;hbck&nbsp;-fixAssignments，尝试重新分配region。结果显示hbase有空洞，即region之间数据不连续了；&nbsp;&nbsp;&nbsp;&nbsp;</li><li>6、通过上述操作可以定位是在regionserver服务宕掉的后重启的过程中丢了数据。需要进行空洞修复。然而hbase&nbsp;hbck命令总是只显示三条空洞。&nbsp;&nbsp;&nbsp;&nbsp;</li><li>7、通过编写的regionTest.jar工具进行进一步检测出空洞所在的regionname然后停掉hbase，进而进行region合并修复空洞;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>8、合并的merge&nbsp;操作需要先去.META.表里读取该region的信息，由于.META.表也在regionserver宕机过程中受到损坏，所以部分region的.META.信息没有，merge操作时就抛出空指针异常。因此只能将hdfs这些region进行移除，然后通过regionTest.jar&nbsp;检测新的空洞所在的regionname，进行合并操作修复空洞；&nbsp;&nbsp;&nbsp;&nbsp;</li><li>9、关于region重叠，即regionname存在.META.表内，但是在hdfs上被错误的移出，并进行了region合并。这种情况下需要通过regionTest.jar检测重叠的regionname然后手动去.META.表删除，.META.表修改之后需要flush；&nbsp;&nbsp;&nbsp;&nbsp;</li><li>10、最后再次执行&nbsp;hbase&nbsp;hbck&nbsp;命令，hbase&nbsp;所有表status&nbsp;ok。&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;</li><li>三、相关命令及页面报错信息&nbsp;&nbsp;&nbsp;&nbsp;</li><li><span>1.手工同步时间命令&#8232;service&nbsp;ntpd&nbsp;stop&#8232;ntpdate&nbsp;-d&nbsp;192.168.1.20&#8232;service&nbsp;ntpd&nbsp;start&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;</li><li><span>2.org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException:&nbsp;Failed&nbsp;2&nbsp;actions:&nbsp;WrongRegionException:&nbsp;2&nbsp;times,&nbsp;servers&nbsp;with&nbsp;issues:&nbsp;datanode10:60020,&nbsp;&#8232;at&nbsp;org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatchCallback(HConnectionManager.java:1641)&#8232;at&nbsp;org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatch(HConnectionManager.java:1409)&#8232;at&nbsp;org.apache.hadoop.hbase.client.HTable.flushCommits(HTable.java:949)&#8232;at&nbsp;org.apache.hadoop.hbase.client.HTable.doPut(HTable.java:826)&#8232;at&nbsp;org.apache.hadoop.hbase.client.HTable.put(HTable.java:801)&#8232;at&nbsp;org.apache.hadoop.hbase.mapreduce.TableOutputFormat$TableRecordWriter.write(TableOutputFormat.java:123)&#8232;at&nbsp;org.apache.hadoop.hbase.mapreduce.TableOutputFormat$TableRecordWriter.write(TableOutputFormat.java:84)&#8232;at&nbsp;org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.write(MapTask.java:533)&#8232;at&nbsp;org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:88)&#8232;at&nbsp;o&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;</li><li><span>3.13/08/01&nbsp;18:30:02&nbsp;DEBUG&nbsp;util.HBaseFsck:&nbsp;There&nbsp;are&nbsp;22093&nbsp;region&nbsp;info&nbsp;entries&#8232;ERROR:&nbsp;There&nbsp;is&nbsp;a&nbsp;hole&nbsp;in&nbsp;the&nbsp;region&nbsp;chain&nbsp;between&nbsp;+8615923208069cmnet201303072132166264580&nbsp;and&nbsp;+861592321.&nbsp;&nbsp;You&nbsp;need&nbsp;to&nbsp;create&nbsp;a&nbsp;new&nbsp;.regioninfo&nbsp;and&nbsp;region&nbsp;dir&nbsp;in&nbsp;hdfs&nbsp;to&nbsp;plug&nbsp;the&nbsp;hole.&#8232;ERROR:&nbsp;There&nbsp;is&nbsp;a&nbsp;hole&nbsp;in&nbsp;the&nbsp;region&nbsp;chain&nbsp;between&nbsp;+8618375993383cmwap20130512235639430&nbsp;and&nbsp;+8618375998629cmnet201305040821436779670.&nbsp;&nbsp;You&nbsp;need&nbsp;to&nbsp;create&nbsp;a&nbsp;new&nbsp;.regioninfo&nbsp;and&nbsp;region&nbsp;dir&nbsp;in&nbsp;hdfs&nbsp;to&nbsp;plug&nbsp;the&nbsp;hole.&#8232;ERROR:&nbsp;There&nbsp;is&nbsp;a&nbsp;hole&nbsp;in&nbsp;the&nbsp;region&nbsp;chain&nbsp;between&nbsp;+8618725888080cmnet201212271719506311400&nbsp;and&nbsp;+8618725889786cmnet201302131646431671140.&nbsp;&nbsp;You&nbsp;need&nbsp;to&nbsp;create&nbsp;a&nbsp;new&nbsp;.regioninfo&nbsp;and&nbsp;region&nbsp;dir&nbsp;in&nbsp;hdfs&nbsp;to&nbsp;plug&nbsp;the&nbsp;hole.&#8232;ERROR:&nbsp;Found&nbsp;inconsistency&nbsp;in&nbsp;table&nbsp;cqgprs&#8232;Summary:&#8232;&nbsp;&nbsp;-ROOT-&nbsp;is&nbsp;okay.&#8232;&nbsp;&nbsp;&nbsp;&nbsp;Number&nbsp;of&nbsp;regions:&nbsp;1&#8232;&nbsp;&nbsp;&nbsp;&nbsp;Deployed&nbsp;on:&nbsp;&nbsp;datanode14,60020,1375330955915&#8232;&nbsp;&nbsp;.META.&nbsp;is&nbsp;okay.&#8232;&nbsp;&nbsp;&nbsp;&nbsp;Number&nbsp;of&nbsp;regions:&nbsp;1&#8232;&nbsp;&nbsp;&nbsp;&nbsp;Deployed&nbsp;on:&nbsp;&nbsp;datanode21,60020,1375330955825&#8232;&nbsp;&nbsp;cqgprs&nbsp;is&nbsp;okay.&#8232;&nbsp;&nbsp;&nbsp;&nbsp;Number&nbsp;of&nbsp;regions:&nbsp;22057&#8232;&nbsp;&nbsp;&nbsp;&nbsp;Deployed&nbsp;on:&nbsp;&nbsp;datanode1,60020,1375330955761&nbsp;datanode10,60020,1375330955748&nbsp;datanode11,60020,1375330955736&nbsp;datanode12,60020,1375330955993&nbsp;datanode13,60020,1375330955951&nbsp;datanode14,60020,1375330955915&nbsp;datanode15,60020,1375330955882&nbsp;datanode16,60020,1375330955892&nbsp;datanode17,60020,1375330955864&nbsp;datanode18,60020,1375330955703&nbsp;datanode19,60020,1375330955910&nbsp;datanode2,60020,1375330955751&nbsp;datanode20,60020,1375330955849&nbsp;datanode21,60020,1375330955825&nbsp;datanode22,60020,1375334479752&nbsp;datanode23,60020,1375330955835&nbsp;datanode24,60020,1375330955932&nbsp;datanode25,60020,1375330955856&nbsp;datanode26,60020,1375330955807&nbsp;datanode27,60020,1375330955882&nbsp;datanode28,60020,1375330955785&nbsp;datanode29,60020,1375330955799&nbsp;datanode3,60020,1375330955778&nbsp;datanode30,60020,1375330955748&nbsp;datanode31,60020,1375330955877&nbsp;datanode32,60020,1375330955763&nbsp;datanode33,60020,1375330955755&nbsp;datanode34,60020,1375330955713&nbsp;datanode35,60020,1375330955768&nbsp;datanode36,60020,1375330955896&nbsp;datanode37,60020,1375330955884&nbsp;datanode38,60020,1375330955918&nbsp;datanode39,60020,1375330955881&nbsp;datanode4,60020,1375330955826&nbsp;datanode40,60020,1375330955770&nbsp;datanode41,60020,1375330955824&nbsp;datanode42,60020,1375449245386&nbsp;datanode43,60020,1375330955880&nbsp;datanode44,60020,1375330955902&nbsp;datanode45,60020,1375330955881&nbsp;datanode46,60020,1375330955841&nbsp;datanode47,60020,1375330955790&nbsp;datanode48,60020,1375330955848&nbsp;datanode49,60020,1375330955849&nbsp;datanode5,60020,1375330955880&nbsp;datanode50,60020,1375330955802&nbsp;datanode6,60020,1375330955753&nbsp;datanode7,60020,1375330955890&nbsp;datanode8,60020,1375330955967&nbsp;datanode9,60020,1375330955948&#8232;&nbsp;&nbsp;test1&nbsp;is&nbsp;okay.&#8232;&nbsp;&nbsp;&nbsp;&nbsp;Number&nbsp;of&nbsp;regions:&nbsp;1&#8232;&nbsp;&nbsp;&nbsp;&nbsp;Deployed&nbsp;on:&nbsp;&nbsp;datanode43,60020,1375330955880&#8232;&nbsp;&nbsp;test2&nbsp;is&nbsp;okay.&#8232;&nbsp;&nbsp;&nbsp;&nbsp;Number&nbsp;of&nbsp;regions:&nbsp;1&#8232;&nbsp;&nbsp;&nbsp;&nbsp;Deployed&nbsp;on:&nbsp;&nbsp;datanode21,60020,1375330955825&#8232;35&nbsp;inconsistencies&nbsp;detected.&#8232;Status:&nbsp;INCONSISTENT&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;</li><li>4.hadoop&nbsp;jar&nbsp;regionTest.jar&nbsp;com.region.RegionReaderMain&nbsp;/hbase/cqgprs&nbsp;检测cqgprs表里的空洞所在的regionname。&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;</li><li><span>5.==================================&#8232;first&nbsp;endKey&nbsp;=&nbsp;+8615808059207cmnet201307102326567966800&#8232;second&nbsp;startKey&nbsp;=&nbsp;+8615808058578cmnet201212251545557984830&#8232;&#8232;first&nbsp;regionNmae&nbsp;=&nbsp;cqgprs,+8615808058578cmnet201212251545557984830,1375241186209.0f8266ad7ac45be1fa7233e8ea7aeef9.&#8232;second&nbsp;regionNmae&nbsp;=&nbsp;cqgprs,+8615808058578cmnet201212251545557984830,1362778571889.3552d3db8166f421047525d6be39c22e.&#8232;==================================&#8232;first&nbsp;endKey&nbsp;=&nbsp;+8615808060140cmnet201303051801355846850&#8232;second&nbsp;startKey&nbsp;=&nbsp;+8615808059207cmnet201307102326567966800&#8232;&#8232;first&nbsp;regionNmae&nbsp;=&nbsp;cqgprs,+8615808058578cmnet201212251545557984830,1362778571889.3552d3db8166f421047525d6be39c22e.&#8232;second&nbsp;regionNmae&nbsp;=&nbsp;cqgprs,+8615808059207cmnet201307102326567966800,1375241186209.09d489d3df513bc79bab09cec36d2bb4.&#8232;==================================&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;</li><li><span>6.Usage:&nbsp;bin/hbase&nbsp;org.apache.hadoop.hbase.util.Merge&nbsp;[-Dfs.default.name=hdfs://nn:port]&nbsp;&lt;table-name&gt;&nbsp;&lt;region-1&gt;&nbsp;&lt;region-2&gt;&#8232;&#8232;./hbase&nbsp;org.apache.hadoop.hbase.util.Merge&nbsp;-Dfs.defaultFS=hdfs://bdpha&nbsp;cqgprs&nbsp;cqgprs,+8615213741567cmnet201305251243290802280,1369877465524.3c13b460fae388b1b1a70650b66c5039.&nbsp;cqgprs,+8615213745577cmnet201302141725552206710,1369534940433.5de80f59071555029ac42287033a4863.&nbsp;&amp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;</li><li><span>7.13/08/01&nbsp;22:24:02&nbsp;WARN&nbsp;util.HBaseFsck:&nbsp;Naming&nbsp;new&nbsp;problem&nbsp;group:&nbsp;+8618225125357cmnet201212290358070667800&#8232;ERROR:&nbsp;(regions&nbsp;cqgprs,+8618225123516cmnet201304131404096748520,1375363774655.b3cf5cc752f4427a4e699270dff9839e.&nbsp;and&nbsp;cqgprs,+8618225125357cmnet201212290358070667800,1364421610707.7f7038bfbe2c0df0998a529686a3e1aa.)&nbsp;There&nbsp;is&nbsp;an&nbsp;overlap&nbsp;in&nbsp;the&nbsp;region&nbsp;chain.&#8232;13/08/01&nbsp;22:24:02&nbsp;WARN&nbsp;util.HBaseFsck:&nbsp;reached&nbsp;end&nbsp;of&nbsp;problem&nbsp;group:&nbsp;+8618225127504cmnet201302182135452100210&#8232;13/08/01&nbsp;22:24:02&nbsp;WARN&nbsp;util.HBaseFsck:&nbsp;Naming&nbsp;new&nbsp;problem&nbsp;group:&nbsp;+8618285642723cmnet201302031921019768070&#8232;ERROR:&nbsp;(regions&nbsp;cqgprs,+8618285277826cmnet201306170027424674330,1375363962312.9d1e93b22cec90fd75361fa65b1d20d2.&nbsp;and&nbsp;cqgprs,+8618285642723cmnet201302031921019768070,1360873307626.f631cd8c6acc5e711e651d13536abe94.)&nbsp;There&nbsp;is&nbsp;an&nbsp;overlap&nbsp;in&nbsp;the&nbsp;region&nbsp;chain.&#8232;13/08/01&nbsp;22:24:02&nbsp;WARN&nbsp;util.HBaseFsck:&nbsp;reached&nbsp;end&nbsp;of&nbsp;problem&nbsp;group:&nbsp;+8618286275556cmnet201212270713444340110&#8232;13/08/01&nbsp;22:24:02&nbsp;WARN&nbsp;util.HBaseFsck:&nbsp;Naming&nbsp;new&nbsp;problem&nbsp;group:&nbsp;+8618323968833cmnet201306010239025175240&#8232;ERROR:&nbsp;(regions&nbsp;cqgprs,+8618323967956cmnet201306091923411365860,1375364143678.665dba6a14ebc9971422b39e079b00ae.&nbsp;and&nbsp;cqgprs,+8618323968833cmnet201306010239025175240,1372821719159.6d2fecc1b3f9049bbca83d84231eb365.)&nbsp;There&nbsp;is&nbsp;an&nbsp;overlap&nbsp;in&nbsp;the&nbsp;region&nbsp;chain.&#8232;13/08/01&nbsp;22:24:02&nbsp;WARN&nbsp;util.HBaseFsck:&nbsp;reached&nbsp;end&nbsp;of&nbsp;problem&nbsp;group:&nbsp;+8618323992353cmnet201306012336364819810&#8232;ERROR:&nbsp;There&nbsp;is&nbsp;a&nbsp;hole&nbsp;in&nbsp;the&nbsp;region&nbsp;chain&nbsp;between&nbsp;+8618375993383cmwap20130512235639430&nbsp;and&nbsp;+8618375998629cmnet201305040821436779670.&nbsp;&nbsp;You&nbsp;need&nbsp;to&nbsp;create&nbsp;a&nbsp;new&nbsp;.regioninfo&nbsp;and&nbsp;region&nbsp;dir&nbsp;in&nbsp;hdfs&nbsp;to&nbsp;plug&nbsp;the&nbsp;hole.&#8232;13/08/01&nbsp;22:24:02&nbsp;WARN&nbsp;util.HBaseFsck:&nbsp;Naming&nbsp;new&nbsp;problem&nbsp;group:&nbsp;+8618723686187cmnet201301191433522129820&#8232;ERROR:&nbsp;(regions&nbsp;cqgprs,+8618723683087cmnet201301300708363045080,1375364411992.4ee5787217c1da4895d95b3b92b8e3a2.&nbsp;and&nbsp;cqgprs,+8618723686187cmnet201301191433522129820,1362003066106.70b48899cc753a0036f11bb27d2194f9.)&nbsp;There&nbsp;is&nbsp;an&nbsp;overlap&nbsp;in&nbsp;the&nbsp;region&nbsp;chain.&#8232;13/08/01&nbsp;22:24:02&nbsp;WARN&nbsp;util.HBaseFsck:&nbsp;reached&nbsp;end&nbsp;of&nbsp;problem&nbsp;group:&nbsp;+8618723689138cmnet201301051742388948390&#8232;13/08/01&nbsp;22:24:02&nbsp;WARN&nbsp;util.HBaseFsck:&nbsp;Naming&nbsp;new&nbsp;problem&nbsp;group:&nbsp;+8618723711808cmnet201301031139206225900&#8232;ERROR:&nbsp;(regions&nbsp;cqgprs,+8618723710003cmnet201301250809235976320,1375364586329.40eed10648c9a43e3d5ce64e9d63fe00.&nbsp;and&nbsp;cqgprs,+8618723711808cmnet201301031139206225900,1361216401798.ebc442e02f5e784bce373538e06dd232.)&nbsp;There&nbsp;is&nbsp;an&nbsp;overlap&nbsp;in&nbsp;the&nbsp;region&nbsp;chain.&#8232;13/08/01&nbsp;22:24:02&nbsp;WARN&nbsp;util.HBaseFsck:&nbsp;reached&nbsp;end&nbsp;of&nbsp;problem&nbsp;group:&nbsp;+8618723714626cmnet201302122009459491970&#8232;ERROR:&nbsp;There&nbsp;is&nbsp;a&nbsp;hole&nbsp;in&nbsp;the&nbsp;region&nbsp;chain&nbsp;between&nbsp;+8618725888080cmnet201212271719506311400&nbsp;and&nbsp;+8618725889786cmnet201302131646431671140.&nbsp;&nbsp;You&nbsp;need&nbsp;to&nbsp;create&nbsp;a&nbsp;new&nbsp;.regioninfo&nbsp;and&nbsp;region&nbsp;dir&nbsp;in&nbsp;hdfs&nbsp;to&nbsp;plug&nbsp;the&nbsp;hole.&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;</li><li>8.&nbsp;&nbsp;delete&nbsp;'.META.','regionname','info:serverstartcode'&nbsp;&nbsp;&nbsp;&nbsp;</li><li>delete&nbsp;'.META.','regionname','info:regionserver'&nbsp;&nbsp;&nbsp;&nbsp;</li><li>delete&nbsp;'.META.','regionname','info:regioninfo'&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li><span>9.&nbsp;flush&nbsp;'.META.'&#8232;major_compact&nbsp;'.META.' &nbsp;&nbsp;</span></li></ol></div></div><img src ="http://www.blogjava.net/xzclog/aggbug/432444.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-04-11 16:01 <a href="http://www.blogjava.net/xzclog/archive/2017/04/11/432444.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cloudera Manager分析 </title><link>http://www.blogjava.net/xzclog/archive/2015/12/25/428828.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Fri, 25 Dec 2015 09:28:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/12/25/428828.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/428828.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/12/25/428828.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/428828.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/428828.html</trackback:ping><description><![CDATA[<div><h1><a name="t0"></a>Cloudera Manager分析</h1><h2><a name="t1"></a><a name="user-content-%E7%9B%AE%E5%BD%95" href="https://github.com/zouhc/MyHadoop/blob/master/doc/Cloudera%20Manager%E5%88%86%E6%9E%90.md#%E7%9B%AE%E5%BD%95" target="_blank"></a>目录</h2><p><a href="https://github.com/zouhc/MyHadoop/blob/master/doc/Cloudera%20Manager%E5%88%86%E6%9E%90.md#1" target="_blank">1. 相关目录</a></p><p><a href="https://github.com/zouhc/MyHadoop/blob/master/doc/Cloudera%20Manager%E5%88%86%E6%9E%90.md#2" target="_blank">2. 配置</a></p><p><a href="https://github.com/zouhc/MyHadoop/blob/master/doc/Cloudera%20Manager%E5%88%86%E6%9E%90.md#3" target="_blank">3. 数据库</a></p><p><a href="https://github.com/zouhc/MyHadoop/blob/master/doc/Cloudera%20Manager%E5%88%86%E6%9E%90.md#4" target="_blank">4. CM结构</a></p><p><a href="https://github.com/zouhc/MyHadoop/blob/master/doc/Cloudera%20Manager%E5%88%86%E6%9E%90.md#5" target="_blank">5. 升级</a></p><p><a href="https://github.com/zouhc/MyHadoop/blob/master/doc/Cloudera%20Manager%E5%88%86%E6%9E%90.md#6" target="_blank">6. 卸载</a></p><p><a href="https://github.com/zouhc/MyHadoop/blob/master/doc/Cloudera%20Manager%E5%88%86%E6%9E%90.md#7" target="_blank">7. 开启postgresql远程访问</a></p><h3><a name="t2"></a><a name="user-content-1-%E7%9B%B8%E5%85%B3%E7%9B%AE%E5%BD%95" href="https://github.com/zouhc/MyHadoop/blob/master/doc/Cloudera%20Manager%E5%88%86%E6%9E%90.md#1-%E7%9B%B8%E5%85%B3%E7%9B%AE%E5%BD%95" target="_blank"></a><a name="user-content-1" target="_blank">1.  相关目录</a> </h3><ul><li><code>/var/log/cloudera-scm-installer</code> : 安装日志目录。</li><li><code>/var/log/*</code> : 相关日志文件（相关服务的及CM的）。</li><li><code>/usr/share/cmf/</code> : 程序安装目录。</li><li><code>/usr/lib64/cmf/</code> : Agent程序代码。</li><li><code>/var/lib/cloudera-scm-server-db/data</code> : 内嵌数据库目录。</li><li><code>/usr/bin/postgres</code> : 内嵌数据库程序。</li><li><code>/etc/cloudera-scm-agent/</code> : agent的配置目录。</li><li><code>/etc/cloudera-scm-server/</code> : server的配置目录。</li><li><code>/opt/cloudera/parcels/</code> : Hadoop相关服务安装目录。</li><li><code>/opt/cloudera/parcel-repo/</code> : 下载的服务软件包数据，数据格式为parcels。</li><li><code>/opt/cloudera/parcel-cache/</code> : 下载的服务软件包缓存数据。</li><li><code>/etc/hadoop/*</code> : 客户端配置文件目录。</li></ul><h3><a name="t3"></a><a name="user-content-2-%E9%85%8D%E7%BD%AE" href="https://github.com/zouhc/MyHadoop/blob/master/doc/Cloudera%20Manager%E5%88%86%E6%9E%90.md#2-%E9%85%8D%E7%BD%AE" target="_blank"></a><a name="user-content-2" target="_blank">2.  配置</a> </h3><ul><li><p>Hadoop配置文件</p><p>配置文件放置于<code>/var/run/cloudera-scm-agent/process/</code>目录下。如：<code>/var/run/cloudera-scm-agent/process/193-hdfs-NAMENODE/core-site.xml</code>。这些配置文件是通过Cloudera Manager启动相应服务（如HDFS）时生成的，内容从数据库中获得（即通过界面配置的参数）。</p><blockquote><p>在CM界面上更改配置是不会立即反映到配置文件中，这些信息会存储于数据库中，等下次重启服务时才会生成配置文件。且每次启动时都会产生新的配置文件。</p></blockquote><p>CM Server主要数据库为scm基中放置配置的数据表为<code>configs</code>。里面包含了服务的配置信息，每一次配置的更改会把当前页面的所有配置内容添加到数据库中，以此保存配置修改历史。</p><blockquote><p>scm数据库被配置成只能从localhost访问，如果需要从外部连接此数据库，修改<code>vim /var/lib/cloudera-scm-server-db/data/pg_hba.conf</code>文件,之后重启数据库。运行数据库的用户为cloudera-scm。</p></blockquote></li><li><p>查看配置内容</p><ol><li>直接查询scm数据库的configs数据表的内容。</li><li>访问REST API： <code>http://hostname:7180/api/v4/cm/deployment</code>，返回JSON格式部署配置信息。</li></ol></li><li><p>配置生成方式</p><p>CM为每个服务进程生成独立的配置目录（文件）。所有配置统一在服务端查询数据库生成（因为scm数据库只能在localhost下访问）生成配置文件，再由agent通过网络下载包含配置文件的zip包到本地解压到指定的目录。</p></li><li><p>配置修改</p><p>CM对于需要修改的配置预先定义，对于没有预先定义的配置,则通过在高级配置项中使用xml配置片段的方式进行配置。而对于/etc/hadoop/下的配置文件是客户端的配置，可以在CM通过部署客户端生成客户端配置。</p></li></ul><h3><a name="t4"></a><a name="user-content-3-%E6%95%B0%E6%8D%AE%E5%BA%93" href="https://github.com/zouhc/MyHadoop/blob/master/doc/Cloudera%20Manager%E5%88%86%E6%9E%90.md#3-%E6%95%B0%E6%8D%AE%E5%BA%93" target="_blank"></a><a name="user-content-3" target="_blank">3.  数据库</a> </h3><p>Cloudera manager主要的数据库为scm,存储Cloudera manager运行所需要的信息：配置，主机，用户等。</p><h3><a name="t5"></a><a name="user-content-4-cm%E7%BB%93%E6%9E%84" href="https://github.com/zouhc/MyHadoop/blob/master/doc/Cloudera%20Manager%E5%88%86%E6%9E%90.md#4-cm%E7%BB%93%E6%9E%84" target="_blank"></a><a name="user-content-4" target="_blank">4. CM结构</a> </h3><p>CM分为Server与Agent两部分及数据库（自带更改过的嵌入Postgresql）。它主要做三件事件：</p><ol><li>管理监控集群主机。</li><li>统一管理配置。</li><li>管理维护Hadoop平台系统。</li></ol><p>实现采用C/S结构，Agent为客户端负责执行服务端发来的命令，执行方式一般为使用python调用相应的服务shell脚本。Server端为Java REST服务，提供REST API，Web管理端通过REST API调用Server端功能，Web界面使用富客户端技术（Knockout）。</p><ol><li>Server端主体使用Java实现。<br /></li><li>Agent端主体使用Python, 服务的启动通过调用相应的shell脚本进行启动，如果启动失败会重复4次调用启动脚本。</li><li>Agent与Server保持心跳，使用Thrift RPC框架。</li></ol><h3><a name="t6"></a><a name="user-content-5-%E5%8D%87%E7%BA%A7" href="https://github.com/zouhc/MyHadoop/blob/master/doc/Cloudera%20Manager%E5%88%86%E6%9E%90.md#5-%E5%8D%87%E7%BA%A7" target="_blank"></a><a name="user-content-5" target="_blank">5.  升级</a> </h3><p>在CM中可以通过界面向导升级相关服务。升级过程为三步：</p><ol><li>下载服务软件包。</li><li>把所下载的服务软件包分发到集群中受管的机器上。</li><li>安装服务软件包，使用软链接的方式把服务程序目录链接到新安装的软件包目录上。</li></ol><h3><a name="t7"></a><a name="user-content-6-%E5%8D%B8%E8%BD%BD" href="https://github.com/zouhc/MyHadoop/blob/master/doc/Cloudera%20Manager%E5%88%86%E6%9E%90.md#6-%E5%8D%B8%E8%BD%BD" target="_blank"></a><a name="user-content-6" target="_blank">6.  卸载</a> </h3><p><code>sudo /usr/share/cmf/uninstall-scm-express.sh</code>, 然后删除<code>/var/lib/cloudera-scm-server-db/</code>目录，不然下次安装可能不成功。</p><h3><a name="t8"></a><a name="user-content-7-%E5%BC%80%E5%90%AFpostgresql%E8%BF%9C%E7%A8%8B%E8%AE%BF%E9%97%AE" href="https://github.com/zouhc/MyHadoop/blob/master/doc/Cloudera%20Manager%E5%88%86%E6%9E%90.md#7-%E5%BC%80%E5%90%AFpostgresql%E8%BF%9C%E7%A8%8B%E8%AE%BF%E9%97%AE" target="_blank"></a><a name="user-content-7" target="_blank">7.  开启postgresql远程访问</a> </h3><p>CM内嵌数据库被配置成只能从localhost访问，如果需要从外部查看数据，数据修改<code>vim /var/lib/cloudera-scm-server-db/data/pg_hba.conf</code>文件,之后重启数据库。运行数据库的用户为cloudera-scm。</p></div><img src ="http://www.blogjava.net/xzclog/aggbug/428828.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-12-25 17:28 <a href="http://www.blogjava.net/xzclog/archive/2015/12/25/428828.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hbase meta表修复</title><link>http://www.blogjava.net/xzclog/archive/2015/11/19/428291.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 19 Nov 2015 10:08:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/11/19/428291.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/428291.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/11/19/428291.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/428291.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/428291.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: meta表修复一Java代码&nbsp;&nbsp;查看hbasemeta情况&nbsp;&nbsp;hbase&nbsp;hbck&nbsp;&nbsp;1.重新修复hbase&nbsp;meta表（根据hdfs上的regioninfo文件，生成meta表）&nbsp;&nbsp;hbase&nbsp;hbck&nbsp;-fixMeta&nbsp;&nbsp;2.重新将hbase&nbsp;m...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2015/11/19/428291.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/428291.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-11-19 18:08 <a href="http://www.blogjava.net/xzclog/archive/2015/11/19/428291.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用dmidecode - 查看硬件信息</title><link>http://www.blogjava.net/xzclog/archive/2015/09/10/427239.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 10 Sep 2015 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/09/10/427239.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/427239.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/09/10/427239.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/427239.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/427239.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: DMI&nbsp;，即Desktop Management Interface。也有被称为SMBIOS，即System Management BIOS。常用参数较低版本的dmidecode命令不支持参数，因此要看信息的话，要用more/less/grep来配合才能更好些。较高版本的dmidecode命令有如下参数：-h 查看帮助信息。-q&nbsp; 不显示未知设备。-t type&nbsp;&n...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2015/09/10/427239.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/427239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-09-10 11:24 <a href="http://www.blogjava.net/xzclog/archive/2015/09/10/427239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入分析Parquet列式存储格式</title><link>http://www.blogjava.net/xzclog/archive/2015/09/09/427221.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 09 Sep 2015 07:11:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/09/09/427221.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/427221.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/09/09/427221.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/427221.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/427221.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Parquet是面向分析型业务的列式存储格式，由Twitter和Cloudera合作开发，2015年5月从Apache的孵化器里毕业成为Apache顶级项目，最新的版本是1.8.0。列式存储列式存储和行式存储相比有哪些优势呢？可以跳过不符合条件的数据，只读取需要的数据，降低IO数据量。压缩编码可以降低磁盘存储空间。由于同一列的数据类型是一样的，可以使用更高效的压缩编码（例如Run Length E...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2015/09/09/427221.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/427221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-09-09 15:11 <a href="http://www.blogjava.net/xzclog/archive/2015/09/09/427221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浅析Hadoop文件格式</title><link>http://www.blogjava.net/xzclog/archive/2015/09/09/427211.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 09 Sep 2015 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/09/09/427211.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/427211.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/09/09/427211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/427211.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/427211.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自：http://www.infoq.com/cn/articles/hadoop-file-format/Hadoop 作为MR 的开源实现，一直以动态运行解析文件格式并获得比MPP数据库快上几倍的装载速度为优势。不过，MPP数据库社区也一直批评Hadoop由于文件格式并非为特定目的而建，因此序列化和反序列化的成本过高[7]。本文介绍Hadoop目前已有的几种文件格式，分析其特点、开销及使用场...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2015/09/09/427211.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/427211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-09-09 11:54 <a href="http://www.blogjava.net/xzclog/archive/2015/09/09/427211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hadoop深入研究:(八)——codec</title><link>http://www.blogjava.net/xzclog/archive/2015/09/09/427212.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 09 Sep 2015 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/09/09/427212.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/427212.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/09/09/427212.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/427212.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/427212.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自：http://blog.csdn.net/lastsweetop/article/details/9173061转载请注明出处：http://blog.csdn.net/lastsweetop/article/details/9173061所有源码在github上，https://github.com/lastsweetop/styhadoop简介codec其实就是coder和decoder...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2015/09/09/427212.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/427212.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-09-09 11:54 <a href="http://www.blogjava.net/xzclog/archive/2015/09/09/427212.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hadoop对于压缩文件的支持</title><link>http://www.blogjava.net/xzclog/archive/2015/09/09/427209.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 09 Sep 2015 03:21:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/09/09/427209.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/427209.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/09/09/427209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/427209.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/427209.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: hadoop对于压缩格式的是透明识别,我们的MapReduce任务的执行是透明的，hadoop能够自动为我们 将压缩的文件解压，而不用我们去关心。如果我们压缩的文件有相应压缩格式的扩展名（比如lzo，gz，bzip2等），hadoop就会根据扩展名去选择解码器解压。hadoop对每个压缩格式的支持,详细见下表：压缩格式工具算法文件扩展名多文件可分割性DEFLATE无DEFLATE.deflate不...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2015/09/09/427209.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/427209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-09-09 11:21 <a href="http://www.blogjava.net/xzclog/archive/2015/09/09/427209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hadoop集群上使用Lzo压缩</title><link>http://www.blogjava.net/xzclog/archive/2015/09/09/427208.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 09 Sep 2015 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/09/09/427208.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/427208.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/09/09/427208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/427208.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/427208.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #373737; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; font-weight: 300; line-height: 24px; background-color: #ffffff; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">自从Hadoop集群搭建以来，我们一直使用的是Gzip进行压缩</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">当时，我对gzip压缩过的文件和原始的log文件分别跑MapReduce测试，最终执行速度基本差不多</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">而且Hadoop原生支持Gzip解压，所以，当时就直接采用了Gzip压缩的方式</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">关于Lzo压缩，twitter有一篇文章，介绍的比较详细，见<a href="http://hadoop%20at%20twitter%20%28part%201%29:%20Splittable%20LZO%20Compression/" target="_blank" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #1982d1; text-decoration: none; ">这里</a>：</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">Lzo压缩相比Gzip压缩，有如下特点：</p><ol style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 2.5em; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; list-style-type: decimal; list-style-position: initial; list-style-image: initial; "><li style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">压缩解压的速度很快</li><li style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">Lzo压缩是基于Block分块的，这样，一个大的文件（在Hadoop上可能会占用多个Block块），就可以由多个MapReduce并行来进行处理</li></ol><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">虽然Lzo的压缩比没有Gzip高，不过由于其前2个特性，在Hadoop上使用Lzo还是能整体提升集群的性能的</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">我测试了12个log文件，总大小为8.4G，以下是Gzip和Lzo压缩的结果：</p><ol style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 2.5em; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; list-style-type: decimal; list-style-position: initial; list-style-image: initial; "><li style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">Gzip压缩，耗时480s，Gunzip解压，耗时180s，压缩后大小为2.5G</li><li style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">Lzo压缩，耗时160s，Lzop解压，耗时110s，压缩后大小为4G</li></ol><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">以下为在Hadoop集群上使用Lzo的步骤：</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">1. 在集群的所有节点上安装Lzo库，可从<a href="http://www.oberhumer.com/opensource/lzo/download/lzo-2.04.tar.gz" target="_blank" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #1982d1; text-decoration: none; ">这里</a>下载</p><blockquote style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: Georgia, 'Bitstream Charter', serif; font-size: 15px; font-style: italic; margin-top: 0px; margin-right: 3em; margin-bottom: 0px; margin-left: 3em; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; quotes: ''; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">cd /opt/ysz/src/lzo-2.04</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">./configure &#8211;enable-shared</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">make</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">make install</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">#编辑/etc/ld.so.conf，加入/usr/local/lib/后，执行/sbin/ldconfig</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">或者cp /usr/local/lib/liblzo2.* /usr/lib64/</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">#如果没有这一步，最终会导致以下错误：</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">lzo.LzoCompressor: java.lang.UnsatisfiedLinkError: Cannot load liblzo2.so.2 (liblzo2.so.2: cannot open shared object file: No such file or directory)!</p></blockquote><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">2. 编译安装Hadoop Lzo本地库以及Jar包，从<a href="https://github.com/kevinweil/hadoop-lzo" target="_blank" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #1982d1; text-decoration: none; ">这里</a>下载</p><blockquote style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: Georgia, 'Bitstream Charter', serif; font-size: 15px; font-style: italic; margin-top: 0px; margin-right: 3em; margin-bottom: 0px; margin-left: 3em; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; quotes: ''; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&nbsp;&nbsp; &nbsp;export CFLAGS=-m64</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&nbsp;&nbsp; &nbsp;export CXXFLAGS=-m64</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&nbsp;&nbsp; &nbsp;ant compile-native tar</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&nbsp;&nbsp; &nbsp;#将本地库以及Jar包拷贝到hadoop对应的目录下，并分发到各节点上</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&nbsp;&nbsp; &nbsp;cp lib/native/Linux-amd64-64/* /opt/sohuhadoop/hadoop/lib/native/Linux-amd64-64/</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&nbsp;&nbsp; &nbsp;cp hadoop-lzo-0.4.10.jar /opt/sohuhadoop/hadoop/lib/</p></blockquote><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">3. 设置Hadoop，启用Lzo压缩</p><blockquote style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: Georgia, 'Bitstream Charter', serif; font-size: 15px; font-style: italic; margin-top: 0px; margin-right: 3em; margin-bottom: 0px; margin-left: 3em; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; quotes: ''; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">vi core-site.xml</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;property&gt; &nbsp; &nbsp;&nbsp;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;name&gt;io.compression.codecs&lt;/name&gt; &nbsp; &nbsp;&nbsp;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;value&gt;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&lt;/value&gt;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;/property&gt;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;property&gt; &nbsp; &nbsp;&nbsp;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;name&gt;io.compression.codec.lzo.class&lt;/name&gt; &nbsp; &nbsp;&nbsp;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;value&gt;com.hadoop.compression.lzo.LzoCodec&lt;/value&gt;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;/property&gt;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&nbsp;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">vi mapred-site.xml</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;property&gt;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;name&gt;mapred.compress.map.output&lt;/name&gt; &nbsp; &nbsp;&nbsp;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;value&gt;true&lt;/value&gt; &nbsp;&nbsp;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;/property&gt; &nbsp;&nbsp;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;property&gt; &nbsp; &nbsp;&nbsp;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;name&gt;mapred.map.output.compression.codec&lt;/name&gt; &nbsp; &nbsp; &nbsp;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;value&gt;com.hadoop.compression.lzo.LzoCodec&lt;/value&gt; &nbsp;&nbsp;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&lt;/property&gt;</p></blockquote><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">4. 安装lzop，从<a href="http://www.lzop.org/" target="_blank" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #1982d1; text-decoration: none; ">这里</a>下载</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">&nbsp;</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">下面就是使用lzop压缩log文件，并上传到Hadoop上，执行MapReduce操作，测试的Hadoop是由3个节点组成集群</p><blockquote style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: Georgia, 'Bitstream Charter', serif; font-size: 15px; font-style: italic; margin-top: 0px; margin-right: 3em; margin-bottom: 0px; margin-left: 3em; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; quotes: ''; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">lzop -v 2011041309.log</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">hadoop fs -put *.lzo /user/pvlog</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">#给Lzo文件建立Index</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">hadoop jar /opt/sohuhadoop/hadoop/lib/hadoop-lzo-0.4.10.jar com.hadoop.compression.lzo.LzoIndexer /user/pvlog/</p></blockquote><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">写一个简单的MapReduce来测试，需要指定InputForamt为Lzo格式，否则对单个Lzo文件仍不能进行Map的并行处理</p><blockquote style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: Georgia, 'Bitstream Charter', serif; font-size: 15px; font-style: italic; margin-top: 0px; margin-right: 3em; margin-bottom: 0px; margin-left: 3em; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; quotes: ''; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">job.setInputFormatClass(com.hadoop.mapreduce.LzoTextInputFormat.class);</p></blockquote><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">可以通过下面的代码来设置Reduce的数目：</p><blockquote style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: Georgia, 'Bitstream Charter', serif; font-size: 15px; font-style: italic; margin-top: 0px; margin-right: 3em; margin-bottom: 0px; margin-left: 3em; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; quotes: ''; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">job.setNumReduceTasks(8);</p></blockquote><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">最终，12个文件被切分成了36个Map任务来并行处理，执行时间为52s，如下图：</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; "><img alt="" height="185" src="http://www.tech126.com/wp-content/uploads/LzoMap.JPG" width="575" style="margin-top: 0.4em; max-width: 100%; " /></p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">我们配置Hadoop默认的Block大小是128M，如果我们想切分成更多的Map任务，可以通过设置其最大的SplitSize来完成：</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">FileInputFormat.setMaxInputSplitSize(job, 64 *1024 * 1024);</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">最终，12个文件被切分成了72个Map来处理，但处理时间反而长了，为59s，如下图：</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; "><img alt="" height="182" src="http://www.tech126.com/wp-content/uploads/MaxSplitSizeMap.JPG" width="572" style="margin-top: 0.4em; max-width: 100%; " /></p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">而对于Gzip压缩的文件，即使我们设置了setMaxInputSplitSize，最终的Map数仍然是输入文件的数目12，执行时间为78s，如下图：</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; "><img alt="" height="183" src="http://www.tech126.com/wp-content/uploads/GzipMap(1).jpg" width="576" style="margin-top: 0.4em; max-width: 100%; " /></p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">从以上的简单测试可以看出，使用Lzo压缩，性能确实比Gzip压缩要好不少</p></span><img src ="http://www.blogjava.net/xzclog/aggbug/427208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-09-09 11:19 <a href="http://www.blogjava.net/xzclog/archive/2015/09/09/427208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hive优化方式和使用技巧</title><link>http://www.blogjava.net/xzclog/archive/2015/08/06/426640.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 06 Aug 2015 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/08/06/426640.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/426640.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/08/06/426640.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/426640.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/426640.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 部分内容出处：http://www.atatech.org/article/detail/5617/0http://www.atatech.org/article/detail/4392/515&nbsp;一．UDFS函数介绍1. 基本UDF（1）SHOWFUNCTIONS：这个用来熟悉未知函数。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DESCRIBE FUNCTION&lt;...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2015/08/06/426640.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/426640.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-08-06 17:36 <a href="http://www.blogjava.net/xzclog/archive/2015/08/06/426640.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hive/Beeline 使用笔记</title><link>http://www.blogjava.net/xzclog/archive/2015/06/13/425669.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Sat, 13 Jun 2015 08:48:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/06/13/425669.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/425669.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/06/13/425669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/425669.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/425669.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #2f2f2f; font-family: Georgia, 'Times New Roman', Times, 'Songti SC', SimSun, serif; font-size: 18px; font-weight: 100; line-height: 30px; background-color: #ffffff; "><h3 style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 30px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Georgia, 'Times New Roman', Times, Kai, 'Kaiti SC', KaiTi, BiauKai, 楷体, 楷体_GB2312, serif; font-weight: 700; line-height: 35px; text-rendering: optimizelegibility; "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 30px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #ff0000; ">Hive:</span></h3><h3 style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 30px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Georgia, 'Times New Roman', Times, Kai, 'Kaiti SC', KaiTi, BiauKai, 楷体, 楷体_GB2312, serif; font-weight: 700; line-height: 35px; text-rendering: optimizelegibility; ">利用squirrel-sql 连接hive</h3><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">add driver -&gt; name&amp;example url(jdbc:hive2://xxx:10000)-&gt;extra class path -&gt;Add</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">{hive/lib/hive-common-*.jar</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">hive/lib/hive-contrib-*.jar</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">hive/lib/hive-jdbc-*.jar</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">hive/lib/libthrift-*.jar</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">hive/lib/hive-service-*.jar</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">hive/lib/httpclient-*.jar</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">hive/lib/httpcore-*.jar</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">hadoop/share/hadoop/common/hadoop-common--*.jar</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">hadoop/share/hadoop/common/lib/common-configuration-*.jar</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">hadoop/share/hadoop/common/lib/log4j-*.jar</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">hadoop/share/hadoop/common/lib/slf4j-api-*.jar</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">hadoop/share/hadoop/common/lib/slf4j-log4j-*.jar}</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">-&gt;List Drivers(wait ..then class name will auto set org.apache.hive.jdbc/HiveDriver)-&gt;OK-&gt;Add aliases -&gt;chose the hive driver-&gt;done</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">&nbsp;</p><h3 style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 30px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Georgia, 'Times New Roman', Times, Kai, 'Kaiti SC', KaiTi, BiauKai, 楷体, 楷体_GB2312, serif; font-weight: 700; line-height: 35px; text-rendering: optimizelegibility; "><strong style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 30px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-weight: bold; ">Hive数据迁移</strong></h3><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">1.导出表</p><blockquote style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 4px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 20px; padding-right: 20px; padding-bottom: 20px; padding-left: 20px; border-left-color: #999999; position: relative; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; line-height: 30px; word-break: break-word; background-color: #f6f6f6; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 30px; text-align: justify; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; "><code class="bash plain" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 4px; padding-bottom: 2px; padding-left: 4px; color: #dd6751; background-color: #fbedeb; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; white-space: pre; ">EXPORT TABLE &lt;table_name&gt; TO </code><code class="bash string" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 4px; padding-bottom: 2px; padding-left: 4px; color: #dd6751; background-color: #fbedeb; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; white-space: pre; ">'path/to/hdfs'</code><code class="bash plain" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 4px; padding-bottom: 2px; padding-left: 4px; color: #dd6751; background-color: #fbedeb; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; white-space: pre; ">;</code></p></blockquote><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">2.复制数据到另一个hdfs</p><blockquote style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 4px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 20px; padding-right: 20px; padding-bottom: 20px; padding-left: 20px; border-left-color: #999999; position: relative; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; line-height: 30px; word-break: break-word; background-color: #f6f6f6; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 30px; text-align: justify; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; ">hadoop distcp hdfs:<code class="bash plain" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 4px; padding-bottom: 2px; padding-left: 4px; color: #dd6751; background-color: #fbedeb; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; white-space: pre; ">//</code><code class="bash plain" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 4px; padding-bottom: 2px; padding-left: 4px; color: #dd6751; background-color: #fbedeb; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; white-space: pre; ">:8020</code><code class="bash plain" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 4px; padding-bottom: 2px; padding-left: 4px; color: #dd6751; background-color: #fbedeb; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; white-space: pre; ">/path/to/hdfs</code>&nbsp;<code class="bash plain" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 4px; padding-bottom: 2px; padding-left: 4px; color: #dd6751; background-color: #fbedeb; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; white-space: pre; ">hdfs:</code><code class="bash plain" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 4px; padding-bottom: 2px; padding-left: 4px; color: #dd6751; background-color: #fbedeb; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; white-space: pre; ">///path/to/hdfs</code></p></blockquote><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">3.导入表</p><blockquote style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 4px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 20px; padding-right: 20px; padding-bottom: 20px; padding-left: 20px; border-left-color: #999999; position: relative; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; line-height: 30px; word-break: break-word; background-color: #f6f6f6; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 30px; text-align: justify; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; "><code class="bash plain" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 4px; padding-bottom: 2px; padding-left: 4px; color: #dd6751; background-color: #fbedeb; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; white-space: pre; ">IMPORT TABLE &lt;table_name&gt; FROM </code><code class="bash string" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 4px; padding-bottom: 2px; padding-left: 4px; color: #dd6751; background-color: #fbedeb; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; white-space: pre; ">'path/to/another/hdfs'</code><code class="bash plain" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 4px; padding-bottom: 2px; padding-left: 4px; color: #dd6751; background-color: #fbedeb; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; white-space: pre; ">;</code></p></blockquote><h3 style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 30px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Georgia, 'Times New Roman', Times, Kai, 'Kaiti SC', KaiTi, BiauKai, 楷体, 楷体_GB2312, serif; font-weight: 700; line-height: 35px; text-rendering: optimizelegibility; "><strong style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 30px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-weight: bold; ">Hive 输出查询结果到文件</strong></h3><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">输出到本地文件：</p><blockquote style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 4px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 20px; padding-right: 20px; padding-bottom: 20px; padding-left: 20px; border-left-color: #999999; position: relative; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; line-height: 30px; word-break: break-word; background-color: #f6f6f6; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 30px; text-align: justify; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; ">insert overwrite local directory './test-04'<br />row format delimited<br />FIELDS TERMINATED BY '\t'<br />COLLECTION ITEMS TERMINATED BY ','<br />MAP KEYS TERMINATED BY ':'<br />select * from src;</p></blockquote><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">输出到hdfs：</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">输出到hdfs好像不支持 row format，只能另辟蹊径了</p><blockquote style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 4px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 20px; padding-right: 20px; padding-bottom: 20px; padding-left: 20px; border-left-color: #999999; position: relative; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; line-height: 30px; word-break: break-word; background-color: #f6f6f6; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 30px; text-align: justify; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; ">INSERT OVERWRITE DIRECTORY '/outputable.txt'<br />select concat(col1, ',', col2, ',', col3) from myoutputtable;</p></blockquote><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">当然默认的分隔符是\001</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">若要直接对文件进行操作课直接用stdin的形式</p><blockquote style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 4px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 20px; padding-right: 20px; padding-bottom: 20px; padding-left: 20px; border-left-color: #999999; position: relative; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; line-height: 30px; word-break: break-word; background-color: #f6f6f6; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 30px; text-align: justify; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; ">eg. hadoop fs -cat ../000000_0 |python doSomeThing.py</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 60px; line-height: 30px; text-align: justify; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #999999; ">#!/usr/bin/env python</span></p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 60px; line-height: 30px; text-align: justify; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #999999; ">import sys</span></p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 60px; line-height: 30px; text-align: justify; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #999999; ">for line in sys.stdin:</span></p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 60px; line-height: 30px; text-align: justify; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #999999; ">&nbsp; &nbsp; (a,b,c)=line.strip().split('\001')</span></p></blockquote><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">&nbsp;</p><h3 style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 30px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Georgia, 'Times New Roman', Times, Kai, 'Kaiti SC', KaiTi, BiauKai, 楷体, 楷体_GB2312, serif; font-weight: 700; line-height: 35px; text-rendering: optimizelegibility; "><strong style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 30px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-weight: bold; ">Hive 语法：</strong></h3><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">hive好像不支持select dicstinct col1 as col1&nbsp;from table group by&nbsp;col1</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">需要用grouping sets</p><blockquote style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 4px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 20px; padding-right: 20px; padding-bottom: 20px; padding-left: 20px; border-left-color: #999999; position: relative; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; line-height: 30px; word-break: break-word; background-color: #f6f6f6; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 30px; text-align: justify; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; ">select col1 as col1&nbsp;from table group by&nbsp;col1 grouping sets((col1))</p></blockquote><h3 style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 30px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Georgia, 'Times New Roman', Times, Kai, 'Kaiti SC', KaiTi, BiauKai, 楷体, 楷体_GB2312, serif; font-weight: 700; line-height: 35px; text-rendering: optimizelegibility; "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 30px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #ff0000; ">Beeline:</span></h3><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">文档：<a href="https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #555555; text-decoration: none; ">https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients</a></p><h3 style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 30px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Georgia, 'Times New Roman', Times, Kai, 'Kaiti SC', KaiTi, BiauKai, 楷体, 楷体_GB2312, serif; font-weight: 700; line-height: 35px; text-rendering: optimizelegibility; ">利用jdbc连接hive：</h3><blockquote style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 4px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 20px; padding-right: 20px; padding-bottom: 20px; padding-left: 20px; border-left-color: #999999; position: relative; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; line-height: 30px; word-break: break-word; background-color: #f6f6f6; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 30px; text-align: justify; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; ">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'</p></blockquote><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: justify; ">beeline利用jdbc连接hive若需要执行多条命令使用</p><blockquote style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 4px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 20px; padding-right: 20px; padding-bottom: 20px; padding-left: 20px; border-left-color: #999999; position: relative; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; line-height: 30px; word-break: break-word; background-color: #f6f6f6; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 18px; vertical-align: baseline; margin-top: 0px; margin-right: 0px; margin-bottom: 25px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 30px; text-align: justify; font-family: Georgia, 'Times New Roman', Times, STFangsong, KaiTi, serif; ">hive2 -e "xxx" -e "yyy" &nbsp;-e...</p></blockquote></span><img src ="http://www.blogjava.net/xzclog/aggbug/425669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-06-13 16:48 <a href="http://www.blogjava.net/xzclog/archive/2015/06/13/425669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HBase 常用Shell命令</title><link>http://www.blogjava.net/xzclog/archive/2015/04/28/424724.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Tue, 28 Apr 2015 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/04/28/424724.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/424724.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/04/28/424724.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/424724.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/424724.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 两个月前使用过hbase，现在最基本的命令都淡忘了，留一个备查~进入hbase shell console$HBASE_HOME/bin/hbase shell如果有kerberos认证，需要事先使用相应的keytab进行一下认证（使用kinit命令），认证成功之后再使用hbase shell进入可以使用whoami命令可查看当前用户hbase(main)&gt; whoami表的管理1）查看有哪...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2015/04/28/424724.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/424724.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-04-28 11:48 <a href="http://www.blogjava.net/xzclog/archive/2015/04/28/424724.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hive-学习笔记</title><link>http://www.blogjava.net/xzclog/archive/2015/02/13/422912.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Fri, 13 Feb 2015 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/02/13/422912.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/422912.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/02/13/422912.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/422912.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/422912.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; ">1.hive模糊搜索表<br />&nbsp; show tables like '*name*';<br /><br />2.查看表结构信息<br />&nbsp; desc formatted table_name;<br />&nbsp; desc table_name;<br /><br />3.查看分区信息<br />&nbsp; show partitions table_name;<br /><br />4.根据分区查询数据<br />&nbsp; select table_coulm from table_name where partition_name = '2014-02-25';<br /><br />5.查看hdfs文件信息<br />&nbsp; dfs -ls /user/hive/warehouse/table02;<br /><br />6.从文件加载数据进表(OVERWRITE覆盖,追加不需要OVERWRITE关键字)<br />&nbsp; LOAD DATA LOCAL INPATH 'dim_csl_rule_config.txt' OVERWRITE into table dim.dim_csl_rule_config;<br />&nbsp; --从查询语句给table插入数据<br />&nbsp; INSERT OVERWRITE TABLE test_h02_click_log PARTITION(dt) select *&nbsp;<br />&nbsp; from stage.s_h02_click_log where dt='2014-01-22' limit 100;<br /><br />7.导出数据到文件<br />&nbsp; insert overwrite directory '/tmp/csl_rule_cfg' select a.* from dim.dim_csl_rule_config a;<br />&nbsp; hive -e "select day_id,pv,uv,ip_count,click_next_count,second_bounce_rate,return_visit,pg_type from tmp.tmp_h02_click_log_baitiao_ag_sum where day_id in ('2014-03-06','2014-03-07','2014-03-08','2014-03-09','2014-03-10');"&gt; /home/jrjt/testan/baitiao.dat;<br /><br />8.自定义udf函数<br />&nbsp; 1.继承UDF类<br />&nbsp; 2.重写evaluate方法<br />&nbsp; 3.把项目打成jar包<br />&nbsp; 4.hive中执行命令add jar /home/jrjt/dwetl/PUB/UDF/udf/GetProperty.jar;<br />&nbsp; 5.创建函数create temporary function get_pro as 'jd.Get_Property'//jd.jd.Get_Property为类路径;<br />&nbsp;<br />9.查询显示列名 及 行转列显示&nbsp;<br />&nbsp; set hive.cli.print.header=true; // 打印列名<br />&nbsp; set hive.cli.print.row.to.vertical=true; // 开启行转列功能, 前提必须开启打印列名功能<br />&nbsp; set hive.cli.print.row.to.vertical.num=1; // 设置每行显示的列数<br /><br />10.查看表文件大小,下载文件到某个目录,显示多少行到某个文件<br />&nbsp;&nbsp; dfs -du hdfs://BJYZH3-HD-JRJT-4137.jd.com:54310/user/jrjt/warehouse/stage.db/s_h02_click_log;<br />&nbsp;&nbsp; dfs -get /user/jrjt/warehouse/ods.db/o_h02_click_log_i_new/dt=2014-01-21/000212_0 /home/jrjt/testan/;<br />&nbsp;&nbsp; head -n 1000 文件名 &gt; 文件名<br /><br />11.杀死某个任务&nbsp; 不在hive shell中执行<br />&nbsp;&nbsp; hadoop job -kill job_201403041453_58315<br />&nbsp;<br />12.hive-wui路径<br />&nbsp;&nbsp; http://172.17.41.38/jobtracker.jsp<br /><br />13.删除分区<br />&nbsp;&nbsp; alter table tmp_h02_click_log_baitiao drop partition(dt='2014-03-01');<br />&nbsp;&nbsp; alter table d_h02_click_log_basic_d_fact drop partition(dt='2014-01-17');<br />&nbsp; &nbsp;<br /><br />14.hive命令行操作<br />&nbsp;&nbsp; 执行一个查询,在终端上显示mapreduce的进度，执行完毕后，最后把查询结果输出到终端上，接着hive进程退出，不会进入交互模式。<br />&nbsp;&nbsp; hive -e 'select table_cloum from table'<br />&nbsp;&nbsp; -S，终端上的输出不会有mapreduce的进度，执行完毕，只会把查询结果输出到终端上。这个静音模式很实用，,通过第三方程序调用，第三方程序通过hive的标准输出获取结果集。<br />&nbsp;&nbsp; hive -S -e 'select table_cloum from table'<br />&nbsp;&nbsp; 执行sql文件<br />&nbsp;&nbsp; hive -f hive_sql.sql<br /><br />&nbsp;15.hive上操作hadoop文件基本命令<br />&nbsp;&nbsp;&nbsp; 查看文件大小<br />&nbsp;&nbsp;&nbsp; dfs -du /user/jrjt/warehouse/tmp.db/tmp_h02_click_log/dt=2014-02-15;<br />&nbsp;&nbsp;&nbsp; 删除文件<br />&nbsp;&nbsp;&nbsp; dfs -rm /user/jrjt/warehouse/tmp.db/tmp_h02_click_log/dt=2014-02-15;<br /><br />&nbsp;16.插入数据sql、导出数据sql<br />&nbsp;&nbsp; &nbsp;1.insert 语法格式为：<br />&nbsp;&nbsp; &nbsp;基本的插入语法：<br />&nbsp;&nbsp; &nbsp;INSERT OVERWRITE TABLE tablename [PARTITON(partcol1=val1,partclo2=val2)]select_statement FROM from_statement<br />&nbsp;&nbsp; &nbsp;insert overwrite table test_insert select * from test_table;<br /><br />&nbsp;&nbsp; &nbsp;对多个表进行插入操作：<br />&nbsp;&nbsp; &nbsp;FROM fromstatte<br />&nbsp;&nbsp; &nbsp;INSERT OVERWRITE TABLE tablename1 [PARTITON(partcol1=val1,partclo2=val2)]select_statement1<br />&nbsp;&nbsp; &nbsp;INSERT OVERWRITE TABLE tablename2 [PARTITON(partcol1=val1,partclo2=val2)]select_statement2<br /><br />&nbsp;&nbsp; &nbsp;from test_table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;insert overwrite table test_insert1&nbsp;<br />&nbsp;&nbsp; &nbsp;select key<br />&nbsp;&nbsp; &nbsp;insert overwrite table test_insert2<br />&nbsp;&nbsp; &nbsp;select value;<br /><br />&nbsp;&nbsp; &nbsp;insert的时候，from子句即可以放在select 子句后面，也可以放在 insert子句前面。<br />&nbsp;&nbsp; &nbsp;hive不支持用insert语句一条一条的进行插入操作，也不支持update操作。数据是以load的方式加载到建立好的表中。数据一旦导入就不可以修改。<br /><br />&nbsp;&nbsp; &nbsp;2.通过查询将数据保存到filesystem<br />&nbsp;&nbsp; &nbsp;INSERT OVERWRITE [LOCAL] DIRECTORY directory SELECT.... FROM .....<br /><br />&nbsp;&nbsp; &nbsp;导入数据到本地目录：<br />&nbsp;&nbsp; &nbsp;insert overwrite local directory '/home/zhangxin/hive' select * from test_insert1;<br />&nbsp;&nbsp; &nbsp;产生的文件会覆盖指定目录中的其他文件，即将目录中已经存在的文件进行删除。<br /><br />&nbsp;&nbsp; &nbsp;导出数据到HDFS中：<br />&nbsp;&nbsp; &nbsp;insert overwrite directory '/user/zhangxin/export_test' select value from test_table;<br /><br />&nbsp;&nbsp; &nbsp;同一个查询结果可以同时插入到多个表或者多个目录中：<br />&nbsp;&nbsp; &nbsp;from test_insert1<br />&nbsp;&nbsp; &nbsp;insert overwrite local directory '/home/zhangxin/hive' select *&nbsp;<br />&nbsp;&nbsp; &nbsp;insert overwrite directory '/user/zhangxin/export_test' select value;<br /><br />&nbsp;17.mapjoin的使用 应用场景：1.关联操作中有一张表非常小 2.不等值的链接操作<br />&nbsp;&nbsp;&nbsp; select /*+ mapjoin(A)*/ f.a,f.b from A t join B f&nbsp; on ( f.a=t.a and f.ftime=20110802)&nbsp;<br /><br />&nbsp;18.perl启动任务<br />&nbsp;&nbsp; perl /home/jrjt/dwetl/APP/APP/A_H02_CLICK_LOG_CREDIT_USER/bin/a_h02_click_log_credit_user.pl&nbsp;<br />&nbsp;&nbsp; APP_A_H02_CLICK_LOG_CREDIT_USER_20140215.dir &gt;&amp; /home/jrjt/dwetl/LOG/APP/20140306/a_h02_click_log_credit_user.pl.4.log<br /><br />&nbsp;19.查看perl进程<br />&nbsp;&nbsp; ps -ef|grep perl<br /><br />&nbsp;20.hive命令移动表数据到另外一张表目录下并添加分区<br />&nbsp;&nbsp; dfs -cp /user/jrjt/warehouse/tmp.db/tmp_h02_click_log/dt=2014-02-18 /user/jrjt/warehouse/ods.db/o_h02_click_log/;<br />&nbsp;&nbsp; dfs -cp /user/jrjt/warehouse/tmp.db/tmp_h02_click_log_baitiao/* /user/jrjt/warehouse/dw.db/d_h02_click_log_baitiao_basic_d_fact/;--复制所有分区数据<br />&nbsp;&nbsp; alter table d_h02_click_log_baitiao_basic_d_fact add partition(dt='2014-03-11') location '/user/jrjt/warehouse/dw.db/d_h02_click_log_baitiao_basic_d_fact/dt=2014-03-11';<br />&nbsp;&nbsp;<br />&nbsp;21.导出白条数据<br />&nbsp;&nbsp;&nbsp; hive -e "select day_id,pv,uv,ip_count,click_next_count,second_bounce_rate,return_visit,pg_type from tmp.tmp_h02_click_log_baitiao_ag_sum where day_id like '2014-03%';"&gt; /home/jrjt/testan/baitiao.xlsx;<br />&nbsp; &nbsp;<br />&nbsp;22.hive修改表名<br />&nbsp;&nbsp;&nbsp; ALTER TABLE o_h02_click_log_i RENAME TO o_h02_click_log_i_bk;<br />&nbsp;&nbsp;<br />&nbsp;23.hive复制表结构<br />&nbsp;&nbsp; CREATE TABLE d_h02_click_log_baitiao_ag_sum LIKE tmp.tmp_h02_click_log_baitiao_ag_sum;<br /><br /><br />&nbsp;24.hive官网网址<br />&nbsp;&nbsp; https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-InstallationandConfiguration<br />&nbsp;&nbsp; http://www.360doc.com/content/12/0111/11/7362_178698714.shtml<br />&nbsp;25.hive添加字段<br />&nbsp;&nbsp; alter table tmp_h02_click_log_baitiao_ag_sum add columns(current_session_timelenth_count bigint comment '页面停留总时长');<br />&nbsp;&nbsp; ALTER TABLE tmp_h02_click_log_baitiao CHANGE current_session_timelenth current_session_timelenth bigint comment '当前会话停留时间';<br />&nbsp; &nbsp;<br />&nbsp;26.hive开启简单模式不启用mr<br />&nbsp;&nbsp; set hive.fetch.task.conversion=more;<br />&nbsp;27.以json格式输出执行语句会读取的input table和input partition信息<br />&nbsp;&nbsp; Explain dependency query &nbsp;</span><img src ="http://www.blogjava.net/xzclog/aggbug/422912.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-02-13 15:20 <a href="http://www.blogjava.net/xzclog/archive/2015/02/13/422912.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> hive表信息查询：查看表结构、表操作等</title><link>http://www.blogjava.net/xzclog/archive/2015/02/13/422911.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Fri, 13 Feb 2015 07:19:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/02/13/422911.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/422911.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/02/13/422911.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/422911.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/422911.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; "><p>转自：http://www.aboutyun.com/forum.php?mod=viewthread&amp;tid=8590&amp;highlight=hive</p><p><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">问题导读：</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; "><span style="color: #ff0000; word-wrap: break-word; ">1.如何查看hive表结构？</span></span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; "><span style="color: #ff0000; word-wrap: break-word; ">2.如何查看表结构信息？</span></span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; "><span style="color: #ff0000; word-wrap: break-word; ">3.如何查看分区信息？</span></span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; "><span style="color: #ff0000; word-wrap: break-word; ">4.哪个命令可以模糊搜索表</span></span><br /></p><p><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; "><br /></span></p><p><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">1.hive模糊搜索表</span></p><p><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; "><span style="color: #ff0000; word-wrap: break-word; "><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;show tables like '*name*';</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">2.查看表结构信息</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;desc formatted table_name;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;desc table_name;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">3.查看分区信息</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;show partitions table_name;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">4.根据分区查询数据</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;select table_coulm from table_name where partition_name = '2014-02-25';</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">5.查看hdfs文件信息</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;dfs -ls /user/hive/warehouse/table02;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">6.从文件加载数据进表(OVERWRITE覆盖,追加不需要OVERWRITE关键字)</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;LOAD DATA LOCAL INPATH 'dim_csl_rule_config.txt' OVERWRITE into table dim.dim_csl_rule_config;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;--从查询语句给table插入数据</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;INSERT OVERWRITE TABLE test_h02_click_log PARTITION(dt) select *&nbsp;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;from stage.s_h02_click_log where dt='2014-01-22' limit 100;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">7.导出数据到文件</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;insert overwrite directory '/tmp/csl_rule_cfg' select a.* from dim.dim_csl_rule_config a;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;hive -e "select day_id,pv,uv,ip_count,click_next_count,second_bounce_rate,return_visit,pg_type from tmp.tmp_h02_click_log_baitiao_ag_sum where day_id in ('2014-03-06','2014-03-07','2014-03-08','2014-03-09','2014-03-10');"&gt; /home/jrjt/testan/baitiao.dat;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">8.自定义udf函数</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;1.继承UDF类</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;2.重写evaluate方法</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;3.把项目打成jar包</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;4.hive中执行命令add jar /home/jrjt/dwetl/PUB/UDF/udf/GetProperty.jar;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;5.创建函数create temporary function get_pro as 'jd.Get_Property'//jd.jd.Get_Property为类路径;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">9.查询显示列名 及 行转列显示&nbsp;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;set hive.cli.print.header=true; // 打印列名</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;set hive.cli.print.row.to.vertical=true; // 开启行转列功能, 前提必须开启打印列名功能</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;set hive.cli.print.row.to.vertical.num=1; // 设置每行显示的列数</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">10.查看表文件大小,下载文件到某个目录,显示多少行到某个文件</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;dfs -du hdfs://BJYZH3-HD-JRJT-4137.jd.com:54310/user/jrjt/warehouse/stage.db/s_h02_click_log;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;dfs -get /user/jrjt/warehouse/ods.db/o_h02_click_log_i_new/dt=2014-01-21/000212_0 /home/jrjt/testan/;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;head -n 1000 文件名 &gt; 文件名</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">11.杀死某个任务&nbsp;&nbsp;不在hive shell中执行</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;hadoop job -kill job_201403041453_58315</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">12.hive-wui路径</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;</span><a target="_blank" href="http://172.17.41.38/jobtracker.jsp" style="color: #336699; text-decoration: none; word-wrap: break-word; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">http://172.17.41.38/jobtracker.jsp</a><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">13.删除分区</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;alter table tmp_h02_click_log_baitiao drop partition(dt='2014-03-01');</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;alter table d_h02_click_log_basic_d_fact drop partition(dt='2014-01-17');</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">14.hive命令行操作</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;执行一个查询,在终端上显示mapreduce的进度，执行完毕后，最后把查询结果输出到终端上，接着hive进程退出，不会进入交互模式。</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;hive -e 'select table_cloum from table'</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;-S，终端上的输出不会有mapreduce的进度，执行完毕，只会把查询结果输出到终端上。这个静音模式很实用，,通过第三方程序调用，第三方程序通过hive的标准输出获取结果集。</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;hive -S -e 'select table_cloum from table'</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;执行sql文件</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;hive -f hive_sql.sql</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">15.hive上操作hadoop文件基本命令</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; 查看文件大小</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; dfs -du /user/jrjt/warehouse/tmp.db/tmp_h02_click_log/dt=2014-02-15;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; 删除文件</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; dfs -rm /user/jrjt/warehouse/tmp.db/tmp_h02_click_log/dt=2014-02-15;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">16.插入数据sql、导出数据sql</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; 1.insert 语法格式为：</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; 基本的插入语法：</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; INSERT OVERWRITE TABLE tablename [PARTITON(partcol1=val1,partclo2=val2)]select_statement FROM from_statement</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; insert overwrite table test_insert select * from test_table;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; 对多个表进行插入操作：</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; FROM fromstatte</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; INSERT OVERWRITE TABLE tablename1 [PARTITON(partcol1=val1,partclo2=val2)]select_statement1</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; INSERT OVERWRITE TABLE tablename2 [PARTITON(partcol1=val1,partclo2=val2)]select_statement2</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; from test_table&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; insert overwrite table test_insert1&nbsp;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; select key</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; insert overwrite table test_insert2</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; select value;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; insert的时候，from子句即可以放在select 子句后面，也可以放在 insert子句前面。</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; hive不支持用insert语句一条一条的进行插入操作，也不支持update操作。数据是以load的方式加载到建立好的表中。数据一旦导入就不可以修改。</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; 2.通过查询将数据保存到filesystem</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; INSERT OVERWRITE [LOCAL] DIRECTORY directory SELECT.... FROM .....</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; 导入数据到本地目录：</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; insert overwrite local directory '/home/zhangxin/hive' select * from test_insert1;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; 产生的文件会覆盖指定目录中的其他文件，即将目录中已经存在的文件进行删除。</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; 导出数据到HDFS中：</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; insert overwrite directory '/user/zhangxin/export_test' select value from test_table;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; 同一个查询结果可以同时插入到多个表或者多个目录中：</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; from test_insert1</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; insert overwrite local directory '/home/zhangxin/hive' select *&nbsp;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; insert overwrite directory '/user/zhangxin/export_test' select value;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">17.mapjoin的使用 应用场景：1.关联操作中有一张表非常小 2.不等值的链接操作</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; select /*+ mapjoin(A)*/ f.a,f.b from A t join B f&nbsp;&nbsp;on ( f.a=t.a and f.ftime=20110802)&nbsp;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">18.perl启动任务</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;perl /home/jrjt/dwetl/APP/APP/A_H02_CLICK_LOG_CREDIT_USER/bin/a_h02_click_log_credit_user.pl&nbsp;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;APP_A_H02_CLICK_LOG_CREDIT_USER_20140215.dir &gt;&amp; /home/jrjt/dwetl/LOG/APP/20140306/a_h02_click_log_credit_user.pl.4.log</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">19.查看perl进程</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;ps -ef|grep perl</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">20.hive命令移动表数据到另外一张表目录下并添加分区</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;dfs -cp /user/jrjt/warehouse/tmp.db/tmp_h02_click_log/dt=2014-02-18 /user/jrjt/warehouse/ods.db/o_h02_click_log/;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;dfs -cp /user/jrjt/warehouse/tmp.db/tmp_h02_click_log_baitiao/* /user/jrjt/warehouse/dw.db/d_h02_click_log_baitiao_basic_d_fact/;--复制所有分区数据</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;alter table d_h02_click_log_baitiao_basic_d_fact add partition(dt='2014-03-11') location '/user/jrjt/warehouse/dw.db/d_h02_click_log_baitiao_basic_d_fact/dt=2014-03-11';</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">21.导出白条数据</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; hive -e "select day_id,pv,uv,ip_count,click_next_count,second_bounce_rate,return_visit,pg_type from tmp.tmp_h02_click_log_baitiao_ag_sum where day_id like '2014-03%';"&gt; /home/jrjt/testan/baitiao.xlsx;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">22.hive修改表名</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp; ALTER TABLE o_h02_click_log_i RENAME TO o_h02_click_log_i_bk;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">23.hive复制表结构</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;CREATE TABLE d_h02_click_log_baitiao_ag_sum LIKE tmp.tmp_h02_click_log_baitiao_ag_sum;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">24.hive官网网址</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;</span><a target="_blank" href="https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-InstallationandConfiguration" style="color: #336699; text-decoration: none; word-wrap: break-word; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">https://cwiki.apache.org/conflue ... ionandConfiguration</a><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;</span><a target="_blank" href="http://www.360doc.com/content/12/0111/11/7362_178698714.shtml" style="color: #336699; text-decoration: none; word-wrap: break-word; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">http://www.360doc.com/content/12/0111/11/7362_178698714.shtml</a><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">25.hive添加字段</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;alter table tmp_h02_click_log_baitiao_ag_sum add columns(current_session_timelenth_count bigint comment '页面停留总时长');</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;ALTER TABLE tmp_h02_click_log_baitiao CHANGE current_session_timelenth current_session_timelenth bigint comment '当前会话停留时间';</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">26.hive开启简单模式不启用mr</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;set hive.fetch.task.conversion=more;</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">27.以json格式输出执行语句会读取的input table和input partition信息</span><br style="word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; " /><span style="color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;Explain dependency query &nbsp;</span></span></span></p></span><img src ="http://www.blogjava.net/xzclog/aggbug/422911.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-02-13 15:19 <a href="http://www.blogjava.net/xzclog/archive/2015/02/13/422911.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hive函数参考手册</title><link>http://www.blogjava.net/xzclog/archive/2015/01/06/422085.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Tue, 06 Jan 2015 09:01:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/01/06/422085.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/422085.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/01/06/422085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/422085.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/422085.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文见：https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF1.内置运算符1.1关系运算符运算符类型说明A = B所有原始类型如果A与B相等,返回TRUE,否则返回FALSEA == B无失败，因为无效的语法。 SQL使用&#8221;=&#8221;，不使用&#8221;==&#8221;。A &lt;&gt; B...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2015/01/06/422085.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/422085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-01-06 17:01 <a href="http://www.blogjava.net/xzclog/archive/2015/01/06/422085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>