hello world!!!!!

写下自己的一些心得,写下自己问题的方式,写下程序之路的艰辛,希望能够有朝一日成为大牛。
posts - 75, comments - 12, trackbacks - 0, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

2012年1月17日

/Files/chenli0513/1249564182_21200268.rar摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:当价格不变时,集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18个月翻两倍以上。这一定律揭示了信息技术进步的速度

posted @ 2012-01-17 11:29 陈力 阅读(12) 评论(0) 编辑

2012年1月15日

lee1@ubuntu:/home/app/hadoop-0.20.203.0$ sudo bin/hadoop namenode -format
12/01/15 04:58:28 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = ubuntu/127.0.1.1
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 0.20.203.0
STARTUP_MSG:   build = http://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20-security-203 -r 1099333; compiled by 'oom' on Wed May  4 07:57:50 PDT 2011
************************************************************/
12/01/15 04:58:29 INFO util.GSet: VM type       = 32-bit
12/01/15 04:58:29 INFO util.GSet: 2% max memory = 19.33375 MB
12/01/15 04:58:29 INFO util.GSet: capacity      = 2^22 = 4194304 entries
12/01/15 04:58:29 INFO util.GSet: recommended=4194304, actual=4194304
12/01/15 04:58:30 INFO namenode.FSNamesystem: fsOwner=root
12/01/15 04:58:30 INFO namenode.FSNamesystem: supergroup=supergroup
12/01/15 04:58:30 INFO namenode.FSNamesystem: isPermissionEnabled=true
12/01/15 04:58:30 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
12/01/15 04:58:30 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
12/01/15 04:58:30 INFO namenode.NameNode: Caching file names occuring more than 10 times
12/01/15 04:58:30 INFO common.Storage: Image file of size 110 saved in 0 seconds.
12/01/15 04:58:31 INFO common.Storage: Storage directory /tmp/hadoop-root/dfs/name has been successfully formatted.
12/01/15 04:58:31 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.1.1
************************************************************/

posted @ 2012-01-15 21:44 陈力 阅读(16) 评论(0) 编辑

2012年1月11日


Your identification has been saved in /home/chenli0513/.ssh/id_dsa.
Your public key has been saved in /home/chenli0513/.ssh/id_dsa.pub.
The key fingerprint is:
eb:f3:63:93:0e:8b:73:25:ad:37:84:00:0f:a0:0d:1c chenli0513@ubuntu
The key's randomart image is:
+--[ DSA 1024]----+
|oEo.             |
| =  o            |
|. .  +           |
|      o          |
|       .So       |
|        o.+      |
|        o= .     |
|      .o+oB      |
|      .oo*o+     |
+-----------------+

 

 

chenli0513@ubuntu:/home$ mv hadoop-0.20.203.0rc1.tar.gz /home/app
mv: cannot stat `hadoop-0.20.203.0rc1.tar.gz': No such file or directory
chenli0513@ubuntu:/home$ sudo mv hadoop-0.20.203.0rc1.tar.gz /home/app
[sudo] password for chenli0513:
mv: cannot stat `hadoop-0.20.203.0rc1.tar.gz': No such file or directory
chenli0513@ubuntu:/home$ cd home
-bash: cd: home: No such file or directory
chenli0513@ubuntu:/home$ cd chenli0513
chenli0513@ubuntu:~$ sudo mv hadoop-0.20.203.0rc1.tar.gz /home/app
chenli0513@ubuntu:~$
 

posted @ 2012-01-11 01:06 陈力 阅读(8) 评论(0) 编辑

2012年1月10日

一:zookeeper如何分配region的问题

二:hive 在hbase里存储的mapreduce过程

三:hbase存储结构(不同数据类型)

四:数据的牵移与备份

posted @ 2012-01-10 20:27 陈力 阅读(13) 评论(0) 编辑

转载于:http://www.javabloger.com/article/apache-hadoop-hive-hbase-integration.html

 

Hive入门3–Hive与HBase的整合
Apache Hive入门2
Apache Hive入门1

开场白:
Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive_hbase-handler.jar工具类 (Hive Storage Handlers), 大致意思如图所示:
hive-hbase

口水:
 对 hive_hbase-handler.jar 这个东东还有点兴趣,有空来磋磨一下。

一、2个注意事项:
1、需要的软件有 Hadoop、Hive、Hbase、Zookeeper,Hive与HBase的整合对Hive的版本有要求,所以不要下载.0.6.0以前的老版本,Hive.0.6.0的版本才支持与HBase对接,因此在Hive的lib目录下可以看见多了hive_hbase-handler.jar这个jar包,他是Hive扩展存储的Handler ,HBase 建议使用 0.20.6的版本,这次我没有启动HDFS的集群环境,本次所有测试环境都在一台机器上。
    
2、运行Hive时,也许会出现如下错误,表示你的JVM分配的空间不够,错误信息如下:
Invalid maximum heap size: -Xmx4096m
The specified size exceeds the maximum representable size.
Could not create the Java virtual machine.

解决方法:
/work/hive/bin/ext# vim util/execHiveCmd.sh 文件中第33行
修改,
HADOOP_HEAPSIZE=4096

HADOOP_HEAPSIZE=256

另外,在 /etc/profile/ 加入 export $HIVE_HOME=/work/hive

二、启动运行环境
1启动Hive
hive –auxpath /work/hive/lib/hive_hbase-handler.jar,/work/hive/lib/hbase-0.20.3.jar,/work/hive/lib/zookeeper-3.2.2.jar -hiveconf hbase.master=127.0.0.1:60000
加载 Hive需要的工具类,并且指向HBase的master服务器地址,我的HBase master服务器和Hive运行在同一台机器,所以我指向本地。

2启动HBase
/work/hbase/bin/hbase master start

3启动Zookeeper
/work/zookeeper/bin/zkServer.sh start

三、执行
在Hive中创建一张表,相互关联的表
CREATE TABLE hbase_table_1(key int, value string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val") TBLPROPERTIES ("hbase.table.name" = "xyz");

在运行一个在Hive中建表语句,并且将数据导入
建表
    CREATE TABLE pokes (foo INT, bar STRING);
数据导入
    LOAD DATA LOCAL INPATH '/work/hive/examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

在Hive与HBase关联的表中 插入一条数据
    INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=98;
运行成功后,如图所示:
hive

插入数据时采用了MapReduce的策略算法,并且同时向HBase写入,如图所示:
Map-Reduce Job for INSERT

在HBase shell中运行 scan 'xyz' 和describe "xyz" 命令,查看表结构,运行结果如图所示:
hive

xyz是通过Hive在Hbase中创建的表,刚刚在Hive的建表语句中指定了映射的属性 "hbase.columns.mapping" = ":key,cf1:val"  和 在HBase中建表的名称 "hbase.table.name" = "xyz"

在hbase在运行put命令,插入一条记录
    put 'xyz','10001','cf1:val','www.javabloger.com'

在hive上运行查询语句,看看刚刚在hbase中插入的数据有没有同步过来,
    select * from hbase_table_1 WHERE key=10001;
如图所示:
hive

最终的效果
    以上整合过程和操作步骤已经执行完毕,现在Hive中添加记录HBase中有记录添加,同样你在HBase中添加记录Hive中也会添加, 表示Hive与HBase整合成功,对海量级别的数据我们是不是可以在HBase写入,在Hive中查询 喃?因为HBase 不支持复杂的查询,但是HBase可以作为基于 key 获取一行或多行数据,或者扫描数据区间,以及过滤操作。而复杂的查询可以让Hive来完成,一个作为存储的入口(HBase),一个作为查询的入口(Hive)。如下图示。
    hive mapreduce
    
    呵呵,见笑了,以上只是我面片的观点。

先这样,稍后我将继续更新,感谢你的阅读

posted @ 2012-01-10 17:16 陈力 阅读(7) 评论(0) 编辑

转载 http://www.javabloger.com/article/hadoop-mapreduce-hbase.html

 

我的废话:
本文提供代码示例,但是不讲述mapreduce对HBase代码层面的细节,主要讲述我片面的理解和体会。

最近看见Medialets(Ref)在网站架构中提到对MapReduce使用的经验分享,采用HDFS作为MapReduce分布式计算的基础环境,基于Python的MapReduce框架计算具体的内容,将计算的结果写入MongoDB中存储,对外宣称每秒1可以处理百万级的业务事件,可见MapReduce的运用场景在越来越多的丰富起来,说明除了Google和Yahoo这样的超大型互联网公司以外,更多的中小门户都对MapReduce和Hadoop开始产生兴趣,使用Hadoop的Mapreduce分布式计算的场景将和我们越来越近。

Hadoop Map/Reduce的框架的确简单易懂,基于他开发的应用程序能够运行在上千个机器组成的大型集群上,或者说MapReduce是一种“蛮力”计算,在一定程度上机器数量越多,得到的效果越显著,而且MapReduce提供了一种可靠容错的方式可并行处理上T级别的数据集。
在现实场景中执行一个Map/Reduce作业(job)会把Input的数据分为多个数据块(就像下面图中左边的黄色小块),MapperTask以分布式并行的方式处理这些输入的数据。mapreduce框架会对map的输出先排序, 再map把计算结果输入给reduce最终对计算结果合并输出。
hadoop-hbase

集群环境中的mapreduce计算节点失效转发、 分布式存储,工作调度,容错处理,网络通信,负载均衡 等问题不用开发者去考虑,MapReduce框架和MapReduce运行环境早就为此做出的考虑,如下图所示 在集群环境中有一个master负责调度构成一个作业的所有任务,大量的任务存在master的Task Queue里面,将这些任务分配在不同的slave上,master监控它们的执行 如果任务执行失败,由master指派slave(work)重新执行任务,如图所示:
hadoop-task

通常作业的输入和输出都会被存储在文件系统HDFS中,也就是说,通常MapReduce框架和分布式文件系统是运行在一组相同的节点上的,允许在那些已经存好数据的节点上高效地调度任务,这可以使整个集群的网络带宽被非常高效地利用。MapReduce框架由一个单独的JobTracker(master)和很多个TaskTracker(slave)集群节点一个共同组成。

在MapReduce客户端的代码需要指明输入/输出的位置(文件路径/DB/NOSQL),客户端再加上作业的参数,就构成了作业配置(job configuration),客户端代码需要定义map和reduce方法通过实现合适的抽象类,并在实现的方法中编写你的业务逻辑,在客户端程序中还要定义你的map/reduce输入和输出的类型,当Hadoop的 job client提交作业(jar包/class/可执行程序等)和配置信息给JobTracker,后者负责分发这些软件和配置信息给slave、调度任务并监控它们的执行,同时提供状态和诊断信息给job-client。至于客户端job提交后的工作流程就是hadoop的事情了,分为4个过程,输入| 切分、排序、洗牌,合并 | 输出 ,输出的结果是有序的,因为mapreduce框架是天然排序的。如图所示:
hadoop

MapReduce把数据集的操作分散到网络节点上,每个节点会周期性的把执行状态报告回,当某个节点连接或者计算超时达到一定次数,主节点记录下这个节点状态为死亡状态,并且分配给这个节点的任务发到别的节点上运行,例如Apache的Hive就是一个MapReduce框架的实现,Hive可以将SQL语句转换为 MapReduce任务把执行的SQL分散到每台机器上运行,最后返回计算结果。

我写了一个代码示例,这个示例通过mapreduce框架从文件夹中读取数据,进过格式化、对内容的加工,再写入HBase的的程序。当输入后根据输入的条件和状态产生多个Mapper(maptask)处理输入的内容,mapper先是从目录中读取所有文件信息,然后加工进行格式化,这一切都处理完成之后,将计算的结果交给Reducer去执行,Reducer根据客户端定义的输入类型做出对应的操作,将最终的结果存入HBase中。

示例例说明:
有一个 input  的输入目录,里面有3个文件 1.txt/2.txt/3.txt,需要在HBase中建立一张 tab1表,f1 是列名称,然后运行代码示例,最后在Hbase查看到3个txt中的数据全部写入hbase中。运行的过程中可以在eclipse的控制台上看见,先读取/格式化数据,最后写入hbase中的效果,如图所示:
hadoop-hbase

Reduce的计算结果,如图:
http://mlqgow.bay.livefilestore.com/y1pPT7XKNAdmNWwJiFBWiGlFVRlEgk59NRXi8U8elxJO3wDjZrKFKiWSDO4gMpMN60fh_tfJ-LjdOMP_5ynngzwM-s1Jh8mWVo-/hbase-mapreduce-2.png?psid=1

代码示例下载地址:http://javabloger-mini-books.googlecode.com/files/txt-to-hbase.rar

通过这个例子可以假定一种场景,例如百度文库,每时每刻都有成千上万的人向百度的服务器上传文件,需要做到在最短的时间内对不同格式的文档进行处理、格式化,最终保存起来。前端服务器拿到用户上传的文档后,就像这个例子中x:\input下的3个文件,对于百度文库的运行场景来说也许是3w个,将大量的文档全部扔给mapreduce,mapreduce把需要解析、排版、格式化的文档交给每个分布的hadoop节点,将计算压力分布在多个CPU上进行计算,因为多人力量大的原因很快将能把3w个文档处理完毕,并且保存数据库/NOSQL,用户可以立刻在线阅读到刚刚上传的文档。

离线的场景中通过mapreduce写入HBase还可以采用另外一种方式,先将文档扔给mapreduce,然后通过HFileOutputFormat输出HBase的数据文件,最后通过Hbase 工具将数据文件导入到HBase中,对于海量数据的迁移可以考虑这样的方式,在这种方案的基础上HBase官方提供了importtsv 工具 可以参考HBase的官方文档(Ref)。

我的废话:
最近有一个项目需要对 国内最大的网络设备供应商  提供方案实施,该项目主要针对android平台上的联系人功能进行扩展,比如2个客户端都安装这个联系人软件可以发送免费短信,类似现在的飞信、kiki,该产品还会向中国以外的市场推广,一旦二期上线用户的数量级将达到上千万,很可能产生大量的离线消息,打算采用HBase对用户的离线消息进行存储,在这点上不折不扣的向FaceBook学习了一把。

 

posted @ 2012-01-10 17:10 陈力 阅读(6) 评论(0) 编辑

 


 



1. database replication, log replication等, 如bdb的数据复制就是使用paxos兼容的算法。Paxos最大的用途就是保持多个节点数据的一致性。

2. naming service, 如大型系统内部通常存在多个接口服务相互调用。
1) 通常的实现是将服务的ip/hostname写死在配置中,当service发生故障时候,通过手工更改配置文件或者修改DNS指向的方法来解决。缺点是可维护性差,内部的单元越多,故障率越大。
2) LVS双机冗余的方式,缺点是所有单元需要双倍的资源投入。
通过Paxos算法来管理所有的naming服务,则可保证high available分配可用的service给client。象ZooKeeper还提供watch功能,即watch的对象发生了改变会自动发notification, 这样所有的client就可以使用一致的,高可用的接口。

3.config配置管理
1) 通常手工修改配置文件的方法,这样容易出错,也需要人工干预才能生效,所以节点的状态无法同时达到一致。
2) 大规模的应用都会实现自己的配置服务,比如用http web服务来实现配置中心化。它的缺点是更新后所有client无法立即得知,各节点加载的顺序无法保证,造成系统中的配置不是同一状态。

4.membership用户角色/access control list, 比如在权限设置中,用户一旦设置某项权限比如由管理员变成普通身份,这时应在所有的服务器上所有远程CDN立即生效,否则就会导致不能接受的后果。

5. 号码分配。通常简单的解决方法是用数据库自增ID, 这导致数据库切分困难,或程序生成GUID, 这通常导致ID过长。更优雅的做法是利用paxos算法在多台replicas之间选择一个作为master, 通过master来分配号码。当master发生故障时,再用paxos选择另外一个master。

posted @ 2012-01-10 15:48 陈力 阅读(10) 评论(0) 编辑

摘要: In a typical Hadoop MapReduce job, input files are read from HDFS. Data are usually compressed to reduce the file sizes. After decompression, serialized bytes are transformed into Java objects before being passed to a user-defined map() function. Conversely, output records are serialized, compressed阅读全文

posted @ 2012-01-10 11:39 陈力 阅读(15) 评论(0) 编辑

2012年1月9日

2.选择安装 openjdk-6-jdk(.........)

apt-get install openjdk-6-jdk

3.文件都装那里去了呢?

搜寻了一下发现文件安装在 :/usr/lib/jvm/java-6-sun-1.6.0.03 下了。

/usr/lib/jvm/java-6-sun 是/usr/lib/jvm/java-6-sun-1.6.0.03 的符号链接

4.设置JAVA_HOME变量

编辑/etc/profile文件,添加如下内容:

  1. JAVA_HOME=/usr/lib/jvm/java-6-sun    (............)
  2. export JAVA_HOME 
注意,保存后重新登录,这个环境变量就生效了。

5、测试

我们可以象下面这样写一个超简单的 helloworld 程序文件: HelloWorld.java

//文件名:HelloWorld.java
public class HelloWorld
{
   public static void main(String[] args)
    {
      System.out.println("HelloWorld!");
    }
}

在你的 HelloWorld.java 目录下依次执行:

sudo /usr/jdk1.6.0_21/bin/javac HelloWorld.java(...........)

java HelloWorld

posted @ 2012-01-09 18:07 陈力 阅读(5) 评论(0) 编辑

一直在找这个sun-java6-jdk 这个安装文件,

从外国一位网友的以reply post 里面发现了一个回答

 

looks like oracle just changed the package names to get ride of 'sun' from the name

原来是oracle 收购sun后,做的一个去sun化(去蒋化)的一个举措。

 

。。。。。华丽的分割线。 我总是做很多猜想,往往答案与我预想的差不多。

 

 

posted @ 2012-01-09 16:49 陈力 阅读(8) 评论(0) 编辑