ivaneeo's blog

          自由的力量,自由的生活。

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

          #

               摘要: 環(huán)境準(zhǔn)備 需要環(huán)境: PC-1  Suse Linux 9             10.192.1.1 PC-2  Suse Linux 9        &n...  閱讀全文
          posted @ 2011-01-21 18:39 ivaneeo 閱讀(1028) | 評(píng)論 (0)編輯 收藏

               摘要: Hive HBase Integration Contents Hive HBase Integration Introduction Storage Handlers Usage Column Mapping Multiple Colu...  閱讀全文
          posted @ 2011-01-21 18:14 ivaneeo 閱讀(1651) | 評(píng)論 (0)編輯 收藏

          一、安裝準(zhǔn)備

          1、下載HBASE 0.20.5版本:http://www.apache.org/dist/hbase/hbase-0.20.5/

          2、JDK版本:jdk-6u20-linux-i586.bin

          3、操作系統(tǒng):Linux s132 2.6.9-78.8AXS2smp #1 SMP Tue Dec 16 02:42:55 EST 2008 x86_64 x86_64 x86_64 GNU/Linux

          4、默認(rèn)前提是安裝完hadoop 0.20.2版本:

              192.168.3.131 namenode

              192.168.3.132 datanode

              192.168.3.133 datanode

          二、操作步驟(默認(rèn)在namenode上進(jìn)行)

          1、拷貝以上文件到Linux的“/root”目錄下。同時(shí)新建目錄“/jz”。

          2、安裝JDK,此步省略...

          3、解壓hbase到/jz目錄下。tar -zxvf hbase-0.20.5.tar.gz -C /jz

          4、修改/jz/hbase-0.20.5/conf/hbase-env.sh文件。指定本地的JDK安裝路徑:

          export JAVA_HOME=/usr/java/jdk1.6.0_20
          5、修改/jz/hbase-0.20.5/conf/hbase-site.xml。內(nèi)容如下:
          <configuration>
          <property>
          <name>hbase.rootdir</name>
          <value>hdfs://m131:9000/hbase</value>
          </property>
          <property>
          <name>hbase.cluster.distributed</name>
          <value>true</value>
          </property>
          <property>
          <name>hbase.master.port</name>
          <value>60000</value>
          </property>
          <property>
          <name>hbase.zookeeper.quorum</name>
          <value>m131,s132,s133</value>
          </property>
          </configuration>
          6、修改/jz/hbase-0.20.5/conf/regionservers文件(同hadoop的slaves文件內(nèi)容相同),內(nèi)容如下:
          s132
          s133
          7、 將 “/jz/hbase-0.20.5” 目錄分別拷貝到192.168.3.132和192.168.3.133下。
          8、修改/etc/profile文件,在文件末尾加上環(huán)境變量:
          export HBASE_HOME=/jz/hbase-0.20.5
          export PATH=$PATH:$HBASE_HOME/bin
          將文件拷貝到192.168.3.132和192.168.3.133對(duì)應(yīng)的目錄下,分別在各個(gè)控制臺(tái)輸入:source /etc/profile,使之生效。
          9、修改/etc/hosts文件,如下:
          # Do not remove the following line, or various programs
          # that require network functionality will fail.
          127.0.0.1 localhost
          192.168.3.131 m131
          192.168.3.132 s132
          192.168.3.133 s133
          然后將文件拷貝到192.168.3.132和192.168.3.133對(duì)應(yīng)的目錄下
          三、啟動(dòng)HBase
          1、通過(guò)shell腳本啟動(dòng)hbase。
          sh /jz/hbase-0.20.5/bin/start-hbase.sh

          2、進(jìn)入/jz/hbase-0.20.5/bin目錄,執(zhí)行hbsae shell命令,進(jìn)入hbase控制臺(tái),顯示如下。

          [root@m131 conf]# hbase shell
          HBase Shell; enter 'help<RETURN>' for list of supported commands.
          Version: 0.20.5, r956266, Sat Jun 19 12:25:12 PDT 2010
          hbase(main):001:0> 
          3、在hbase控制臺(tái)輸入list命令,如果正常執(zhí)行,表示hbase啟動(dòng)成功。如下:2
          hbase(main):001:0> list
          0 row(s) in 0.0610 seconds
          hbase(main):002:0> 
          4、WEB查看hbase
          查看Master http://192.168.3.131:60010/master.jsp
          查看Region Server http://192.168.3.132:60030/regionserver.jsp
          查看ZK Tree http://192.168.3.131:60010/zk.jsp
           

          四、一些異常的和注意事項(xiàng)

          1、安裝hbase 0.20.5版本自帶了zookeeper-3.2.2,所以不需要單獨(dú)安裝zookeeper。

          2、hbase默認(rèn)通過(guò)zookeeper管理,配置項(xiàng)在/jz/hbase-0.20.5/conf/hbase-env.sh文件中:

          # Tell HBase whether it should manage it's own instance of Zookeeper or not.
          # export HBASE_MANAGES_ZK=true

          如果需要采用自帶安裝的zookeeper,可以將注釋取消,把true修改為false。否則啟動(dòng)hbase的時(shí)候?qū)?huì)提示地址被占用。不過(guò)不影響hbase正常使用。

          3、通過(guò)shell控制臺(tái)想hbase插入中文數(shù)據(jù)將會(huì)報(bào)錯(cuò),這是由于hbase中只是存放字節(jié),采用程序?qū)h字改為字節(jié)錄入即可。

          4、在hbase腳本中執(zhí)行shell命令,如果出現(xiàn)以下錯(cuò)誤,表示hbase中有節(jié)點(diǎn)不能正常運(yùn)行。

          NativeException: org.apache.hadoop.hbase.client.RetriesExhaustedException: Trying to contact region server 192.168.3.139:60020 for region .META.,,1, row '', but failed after 7 attempts.
          5、有疑問(wèn)或是寫(xiě)的不對(duì)的地方歡迎大家發(fā)郵件交流:dajuezhao@gmail.com
          posted @ 2011-01-21 18:13 ivaneeo 閱讀(2790) | 評(píng)論 (0)編輯 收藏

          轉(zhuǎn):http://www.tech126.com/hadoop-hbase/

          基于現(xiàn)有的Hadoop集群,來(lái)搭建Hbase的環(huán)境

          整個(gè)過(guò)程還是比較簡(jiǎn)單的

          1. 下載Hbase源碼,并解壓

          cp hbase-0.20.6.tar.gz /opt/hadoop/
          cd /opt/hadoop/
          tar zxvf hbase-0.20.6.tar.gz
          ln -s hbase-0.20.6 hbase

          2.修改hbase-env.sh,加入java環(huán)境,并修改log位置

          export JAVA_HOME=/opt/java/jdk
          export HBASE_LOG_DIR=/opt/log/hbase
          export HBASE_MANAGES_ZK=true

          3. 修改hbase-site.xml,配置hbase

          <property>
              <name>hbase.rootdir</name>
              <value>hdfs://zw-hadoop-master:9000/hbase</value>
              <description>The directory shared by region servers.</description>
          </property>
          <property>
                      <name>hbase.cluster.distributed</name>
                      <value>true</value>
                      <description>The mode the cluster will be in. Possible values are
                        false: standalone and pseudo-distributed setups with managed Zookeeper
                        true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)
                      </description>
              </property>
          <property>  
              <name>hbase.master</name>  
              <value>hdfs://zw-hadoop-master:60000</value>  
          </property> 
          <property>
              <name>hbase.zookeeper.quorum</name>        
              <value>zw-hadoop-slave225,zw-hadoop-slave226,zw-hadoop-slave227</value>
              <description>Comma separated list of servers in the ZooKeeper Quorum.      For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".      By default this is set to localhost for local and pseudo-distributed modes      of operation. For a fully-distributed setup, this should be set to a full      list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh      this is the list of servers which we will start/stop ZooKeeper on.      
              </description>
          </property>
          <property>
              <name>hbase.zookeeper.property.dataDir</name>
              <value>/opt/log/zookeeper</value>
              <description>Property from ZooKeeper's config zoo.cfg.
                  The directory where the snapshot is stored.
              </description>
          </property>

          幾個(gè)配置的說(shuō)明:

          • hbase.rootdir設(shè)置hbase在hdfs上的目錄,主機(jī)名為hdfs的namenode節(jié)點(diǎn)所在的主機(jī)
          • hbase.cluster.distributed設(shè)置為true,表明是完全分布式的hbase集群
          • hbase.master設(shè)置hbase的master主機(jī)名和端口
          • hbase.zookeeper.quorum設(shè)置zookeeper的主機(jī),官方推薦設(shè)置為3,5,7比較好

          4. 編輯regionservers文件,設(shè)置regionservers的服務(wù)器,和hadoop的slaves一樣即可

          5. 啟動(dòng)Hbase

          /opt/sohuhadoop/hbase/bin/start-hbase.sh 
          /opt/sohuhadoop/hbase/bin/stop-hbase.sh

          Hbase默認(rèn)只有一個(gè)Master,我們可以也啟動(dòng)多個(gè)Master:

          /opt/sohuhadoop/hbase/bin/hbase-daemon.sh start master

          不過(guò),其它的Master并不會(huì)工作,只有當(dāng)主Master down掉后

          其它的Master才會(huì)選擇接管Master的工作

          Hbase也有一個(gè)簡(jiǎn)單的web界面,來(lái)查看其狀態(tài)

          http://10.10.71.1:60010/master.jsp
          http://10.10.71.1:60030/regionserver.jsp

          http://10.10.71.1:60010/zk.jsp

            posted @ 2011-01-21 16:29 ivaneeo 閱讀(2029) | 評(píng)論 (0)編輯 收藏

            參考:http://developer.yahoo.com/hadoop/tutorial/module2.html

            Rebalancing Blocks

            如何添加新節(jié)點(diǎn)到集群:

            New nodes can be added to a cluster in a straightforward manner. On the new node, the same Hadoop version and configuration ( conf/hadoop-site.xml ) as on the rest of the cluster should be installed. Starting the DataNode daemon on the machine will cause it to contact the NameNode and join the cluster. (The new node should be added to the slaves file on the master server as well, to inform the master how to invoke script-based commands on the new node.)

            如何在新的節(jié)點(diǎn)上平衡數(shù)據(jù):

            But the new DataNode will have no data on board initially; it is therefore not alleviating space concerns on the existing nodes. New files will be stored on the new DataNode in addition to the existing ones, but for optimum usage, storage should be evenly balanced across all nodes.

            This can be achieved with the automatic balancer tool included with Hadoop. The Balancer class will intelligently balance blocks across the nodes to achieve an even distribution of blocks within a given threshold, expressed as a percentage. (The default is 10%.) Smaller percentages make nodes more evenly balanced, but may require more time to achieve this state. Perfect balancing (0%) is unlikely to actually be achieved.

            The balancer script can be run by starting bin/start-balancer.sh in the Hadoop directory. The script can be provided a balancing threshold percentage with the -threshold parameter;

            e.g., bin/start-balancer.sh -threshold 5 .

            The balancer will automatically terminate when it achieves its goal, or when an error occurs, or it cannot find more candidate blocks to move to achieve better balance. The balancer can always be terminated safely by the administrator by running bin/stop-balancer.sh .

            The balancing script can be run either when nobody else is using the cluster (e.g., overnight), but can also be run in an "online" fashion while many other jobs are on-going. To prevent the rebalancing process from consuming large amounts of bandwidth and significantly degrading the performance of other processes on the cluster, the dfs.balance.bandwidthPerSec configuration parameter can be used to limit the number of bytes/sec each node may devote to rebalancing its data store.

            Copying Large Sets of Files

            When migrating a large number of files from one location to another (either from one HDFS cluster to another, from S3 into HDFS or vice versa, etc), the task should be divided between multiple nodes to allow them all to share in the bandwidth required for the process. Hadoop includes a tool called distcp for this purpose.

            By invoking bin/hadoop distcp src dest , Hadoop will start a MapReduce task to distribute the burden of copying a large number of files from src to dest . These two parameters may specify a full URL for the the path to copy. e.g., "hdfs://SomeNameNode:9000/foo/bar/" and "hdfs://OtherNameNode:2000/baz/quux/"will copy the children of /foo/bar on one cluster to the directory tree rooted at /baz/quux on the other. The paths are assumed to be directories, and are copied recursively. S3 URLs can be specified withs3://bucket-name /key .

            Decommissioning Nodes

            如何從集群中刪除節(jié)點(diǎn):

            In addition to allowing nodes to be added to the cluster on the fly, nodes can also be removed from a cluster while it is running , without data loss. But if nodes are simply shut down "hard," data loss may occuras they may hold the sole copy of one or more file blocks.

            Nodes must be retired on a schedule that allows HDFS to ensure that no blocks are entirely replicated within the to-be-retired set of DataNodes.

            HDFS provides a decommissioning feature which ensures that this process is performed safely. To use it, follow the steps below:

            Step 1: Cluster configuration . If it is assumed that nodes may be retired in your cluster, then before it is started, an excludes file must be configured. Add a key named dfs.hosts.exclude to your conf/hadoop-site.xml file. The value associated with this key provides the full path to a file on the NameNode's local file system which contains a list of machines which are not permitted to connect to HDFS.

            Step 2: Determine hosts to decommission . Each machine to be decommissioned should be added to the file identified by dfs.hosts.exclude , one per line. This will prevent them from connecting to the NameNode.

            Step 3: Force configuration reload . Run the command bin/hadoop dfsadmin -refreshNodes . This will force the NameNode to reread its configuration, including the newly-updated excludes file. It will decommission the nodes over a period of time, allowing time for each node's blocks to be replicated onto machines which are scheduled to remain active.

            Step 4: Shutdown nodes . After the decommission process has completed, the decommissioned hardware can be safely shutdown for maintenance, etc. The bin/hadoop dfsadmin -report command will describe which nodes are connected to the cluster.

            Step 5: Edit excludes file again . Once the machines have been decommissioned, they can be removed from the excludes file. Running bin/hadoop dfsadmin -refreshNodes again will read the excludes file back into the NameNode, allowing the DataNodes to rejoin the cluster after maintenance has been completed, or additional capacity is needed in the cluster again, etc.

            Verifying File System Health

            After decommissioning nodes, restarting a cluster, or periodically during its lifetime, you may want to ensure that the file system is healthy--that files are not corrupted or under-replicated, and that blocks are not missing.

            Hadoop provides an fsck command to do exactly this. It can be launched at the command line like so:

              bin/hadoop fsck [path
            ] [options
            ]

            If run with no arguments, it will print usage information and exit. If run with the argument / , it will check the health of the entire file system and print a report. If provided with a path to a particular directory or file, it will only check files under that path. If an option argument is given but no path, it will start from the file system root (/ ). The options may include two different types of options:

            Action options specify what action should be taken when corrupted files are found. This can be -move , which moves corrupt files to /lost+found , or -delete , which deletes corrupted files.

            Information options specify how verbose the tool should be in its report. The -files option will list all files it checks as it encounters them. This information can be further expanded by adding the -blocks option, which prints the list of blocks for each file. Adding -locations to these two options will then print the addresses of the DataNodes holding these blocks. Still more information can be retrieved by adding -racksto the end of this list, which then prints the rack topology information for each location. (See the next subsection for more information on configuring network rack awareness.) Note that the later options do not imply the former; you must use them in conjunction with one another. Also, note that the Hadoop program uses -files in a "common argument parser" shared by the different commands such as dfsadmin , fsck ,dfs , etc. This means that if you omit a path argument to fsck, it will not receive the -files option that you intend. You can separate common options from fsck-specific options by using -- as an argument, like so:

              bin/hadoop fsck -- -files -blocks

            The -- is not required if you provide a path to start the check from, or if you specify another argument first such as -move .

            By default, fsck will not operate on files still open for write by another client. A list of such files can be produced with the -openforwrite option.

            posted @ 2011-01-21 14:18 ivaneeo 閱讀(1024) | 評(píng)論 (0)編輯 收藏

                 摘要: 一、分布式計(jì)算開(kāi)源框架Hadoop實(shí)踐 在SIP項(xiàng)目設(shè)計(jì)的過(guò)程中,對(duì)于它龐大的日志在開(kāi)始時(shí)就考慮使用任務(wù)分解的多線程處理模式來(lái)分析統(tǒng)計(jì),在我從前寫(xiě)的文章《Tiger Concurrent Practice --日志分析并行分解設(shè)計(jì)與實(shí)現(xiàn)》中有所提到。但是由于統(tǒng)計(jì)的內(nèi)容暫時(shí)還是十分簡(jiǎn)單,所以就采用Memcache作為計(jì)數(shù)器,結(jié)合MySQL就完成了訪問(wèn)控制以及統(tǒng)計(jì)的工作。然而未來(lái),對(duì)于海量日志分析的...  閱讀全文
            posted @ 2011-01-19 15:50 ivaneeo 閱讀(339) | 評(píng)論 (0)編輯 收藏

            引子

            作為企業(yè)架構(gòu)師,我的職業(yè)習(xí)慣之一,就是不斷的探求各種新的有前景的概念和思想,看其是否有潛力為我所服務(wù)的來(lái)自各行各業(yè)的企業(yè)客戶帶來(lái)價(jià)值。同樣出于對(duì)這種理念的追求,我對(duì)NoSQL領(lǐng)域的關(guān)注了也有一段時(shí)間了,甚至從這個(gè)術(shù)語(yǔ)產(chǎn)生(或者錯(cuò)誤的產(chǎn)生?)之前就開(kāi)始了。Google首先在這方面點(diǎn)了一把火,發(fā)布了論文Big Table架構(gòu),對(duì)關(guān)系數(shù)據(jù)庫(kù)是銀彈這種普遍的信念提出了質(zhì)疑,而Amazon關(guān)于Dynamo的論文則緊隨其后。 過(guò)去的一年中我們見(jiàn)證了NoSQL強(qiáng)勁的勢(shì)頭,在這一領(lǐng)域有多達(dá)25種產(chǎn)品/解決方案發(fā)布,并且NoSQL的觸角已經(jīng)伸向了業(yè)界的各個(gè)角落。在此前提下,我最近考慮深入這一領(lǐng)域,評(píng)估一下我的客戶究竟如何才能從這種NoSQL運(yùn)動(dòng)中獲益。不僅如此,我還想探究對(duì)于企業(yè)來(lái)說(shuō),是否是到了該認(rèn)真考慮采納NoSQL的合適時(shí)機(jī)了。

            什么是NoSQL——快速回顧

            像許多關(guān)注這一領(lǐng)域的人一樣,我不喜歡從本質(zhì)上將SQL與NoSQL這一術(shù)語(yǔ)對(duì)立起來(lái)。同時(shí)我對(duì)該術(shù)語(yǔ)現(xiàn)有的解釋"Not Only SQL"也不甚滿意。對(duì)我來(lái)說(shuō),我們這里所討論的并非是是否使用SQL。(相反的是,我們?nèi)匀豢梢赃x擇類(lèi)似SQL這樣的查詢接口(缺少對(duì)join等的支持)來(lái)與這些數(shù)據(jù)庫(kù)交互,使用現(xiàn)有的資源和技術(shù)來(lái)管理開(kāi)發(fā)伸縮性和可維護(hù)性。) 這一運(yùn)動(dòng)是要找到存儲(chǔ)和檢索數(shù)據(jù)的其他高效的途徑,而不是盲目地在任何情況下都把關(guān)系數(shù)據(jù)庫(kù)當(dāng)作萬(wàn)金油。因此,我認(rèn)為'Non Relational Database'(非關(guān)系型數(shù)據(jù)庫(kù))能夠更好的表達(dá)這一思想。

            無(wú)論采用哪個(gè)名字,“非關(guān)系型數(shù)據(jù)庫(kù)”這一范圍所傳達(dá)出來(lái)的“囊括所有”類(lèi)型的意味,使得這一概念比較模糊(并且它還是否定型的)。這又使得人們(特別是企業(yè)中的決策者)對(duì)于哪些是屬于這個(gè)范圍,哪些不是,更重要的是,對(duì)他們來(lái)說(shuō)這到底意味著什么,感到非常迷惑。

            為了解答這些疑問(wèn),我嘗試通過(guò)以下幾點(diǎn)特征的描述,來(lái)刻畫(huà)“非關(guān)系型數(shù)據(jù)庫(kù)”的內(nèi)在本質(zhì)。

            所謂“非關(guān)系型數(shù)據(jù)庫(kù)”指的是

            1. 使用松耦合類(lèi)型、可擴(kuò)展的數(shù)據(jù)模式來(lái)對(duì)數(shù)據(jù)進(jìn)行邏輯建模(Map,列,文檔,圖表等),而不是使用固定的關(guān)系模式元組來(lái)構(gòu)建數(shù)據(jù)模型。
            2. 以遵循于CAP定理(能保證在一致性,可用性和分區(qū)容忍性三者中中達(dá)到任意兩個(gè))的跨多節(jié)點(diǎn)數(shù)據(jù)分布模型而設(shè)計(jì),支持水平伸縮。這意味著對(duì)于多數(shù)據(jù)中心和動(dòng)態(tài)供應(yīng)(在生產(chǎn)集群中透明地加入/刪除節(jié)點(diǎn))的必要支持,也即彈性(Elasticity)。
            3. 擁有在磁盤(pán)或內(nèi)存中,或者在這兩者中都有的,對(duì)數(shù)據(jù)持久化的能力,有時(shí)候還可以使用可熱插拔的定制存儲(chǔ)。
            4. 支持多種的'Non-SQL'接口(通常多于一種)來(lái)進(jìn)行數(shù)據(jù)訪問(wèn)。

            圍繞著圖中四個(gè)特征的(數(shù)據(jù)持久性、邏輯數(shù)據(jù)模型、數(shù)據(jù)分布模型和接口)“非關(guān)系型數(shù)據(jù)庫(kù)”的各種變形,在最近的一些文章中有詳盡的描述,并且在因特網(wǎng)上有著廣泛的傳播。所以我就不做過(guò)多繁復(fù)的描述,而是通過(guò)一些例子對(duì)關(guān)鍵的方向進(jìn)行總結(jié),供快速參考:

            接口——REST (HBase,CouchDB,Riak等),MapReduce (HBase,CouchDB,MongoDB,Hypertable等),Get/Put (Voldemort,Scalaris等),Thrift (HBase,Hypertable,Cassandra等),語(yǔ)言特定的API(MongoDB)。

            邏輯數(shù)據(jù)模型——面向鍵值對(duì)的(Voldemort,Dynomite 等),面向Column Family的(BigTable,HBase,Hypertable 等),面向文檔的(Couch DB,MongoDB等),面向圖的(Neo4j, Infogrid等)

            數(shù)據(jù)分布模型——一致性和可用性(HBase,Hypertable, MongoDB等), 可用性和可分區(qū)性(Cassandra等)。一致性和可分區(qū)性的組合會(huì)導(dǎo)致一些非額定的節(jié)點(diǎn)產(chǎn)生可用性的損失。有趣的是目前還沒(méi)有一個(gè)“非關(guān)系型數(shù)據(jù)庫(kù)”支持這一組合。

            數(shù)據(jù)持久性——基于內(nèi)存的(如Redis,Scalaris, Terrastore),基于磁盤(pán)的(如MongoDB,Riak等),或內(nèi)存及磁盤(pán)二者的結(jié)合(如HBase,Hypertable,Cassandra)。存儲(chǔ)的類(lèi)型有助于我們辨別該解決方案適用于哪種類(lèi)型。然而,在大多數(shù)情況下人們發(fā)現(xiàn)基于組合方案的解決方案是最佳的選擇。既能通過(guò)內(nèi)存數(shù)據(jù)存儲(chǔ)支持高性能,又能在寫(xiě)入足夠多的數(shù)據(jù)后存儲(chǔ)到磁盤(pán)來(lái)保證持續(xù)性。

            如何將其與企業(yè)IT融合

            如今的企業(yè)中,并非所有用例都直觀地傾向于使用關(guān)系型數(shù)據(jù)庫(kù),或者都需要嚴(yán)格的ACID屬性(特別是一致性和隔離性)。在80年代及90年代,絕大部分存儲(chǔ)在企業(yè)數(shù)據(jù)庫(kù)里的數(shù)據(jù)都是結(jié)構(gòu)化的業(yè)務(wù)事務(wù)的“記錄”,必須用受控的方式來(lái)生成或訪問(wèn),而如今它已一去不復(fù)返了。無(wú)可爭(zhēng)辯的是,仍有這一類(lèi)型的數(shù)據(jù)在那里,并將繼續(xù)也應(yīng)該通過(guò)關(guān)系型數(shù)據(jù)庫(kù)來(lái)建模,存儲(chǔ)和訪問(wèn)。但對(duì)于過(guò)去15年以來(lái),隨著Web的發(fā)展,電子商務(wù)和社交計(jì)算的興起所引起的企業(yè)里不受控的非結(jié)構(gòu)化并且面向信息的數(shù)據(jù)大爆炸,該如何應(yīng)對(duì)呢?企業(yè)確實(shí)不需要關(guān)系型數(shù)據(jù)庫(kù)來(lái)管理這些數(shù)據(jù),因?yàn)殛P(guān)系型數(shù)據(jù)庫(kù)的特點(diǎn)決定了它不適用于這些數(shù)據(jù)的性質(zhì)和使用方式。

            上圖總結(jié)了現(xiàn)今以web為中心的企業(yè)中信息管理的新興模式。而“非關(guān)系型數(shù)據(jù)庫(kù)” 是處理這些趨勢(shì)的最佳選擇(較之關(guān)系型數(shù)據(jù)庫(kù)來(lái)說(shuō)),提供了對(duì)非結(jié)構(gòu)化數(shù)據(jù)的支持,擁有支持分區(qū)的水平伸縮性,支持高可用性等等。

            以下是支持這一觀點(diǎn)的一些實(shí)際應(yīng)用場(chǎng)景:

            日志挖掘——集群里的多個(gè)節(jié)點(diǎn)都會(huì)產(chǎn)生服務(wù)器日志、應(yīng)用程序日志和用戶活動(dòng)日志等。對(duì)于解決生產(chǎn)環(huán)境中的問(wèn)題,日志挖掘工具非常有用,它能訪問(wèn)跨服務(wù)器的日志記錄,將它們關(guān)聯(lián)起來(lái)并進(jìn)行分析。使用“非關(guān)系型數(shù)據(jù)庫(kù)”來(lái)定制這樣的解決方案將會(huì)非常容易。

            分析社交計(jì)算——許多企業(yè)如今都為用戶(內(nèi)部用戶、客戶和合作伙伴)提供通過(guò)消息論壇,博客等方式來(lái)進(jìn)行社交計(jì)算的能力。挖掘這些非結(jié)構(gòu)化的數(shù)據(jù)對(duì)于獲得用戶的喜好偏向以及進(jìn)一步提升服務(wù)有著至關(guān)重要的作用。使用“非關(guān)系型數(shù)據(jù)庫(kù)” 可以很好的解決這一需求。

            外部數(shù)據(jù)feed聚合——許多情況下企業(yè)需要消費(fèi)來(lái)自合作伙伴的數(shù)據(jù)。顯然,就算經(jīng)過(guò)了多輪的討論和協(xié)商,企業(yè)對(duì)于來(lái)自合作伙伴的數(shù)據(jù)的格式仍然沒(méi)有發(fā)言權(quán)。同時(shí),許多情況下,基于合作伙伴業(yè)務(wù)的變更,這些數(shù)據(jù)格式也頻繁的發(fā)生變化。通過(guò)“非關(guān)系型數(shù)據(jù)庫(kù)”來(lái)開(kāi)發(fā)或定制一個(gè)ETL解決方案能夠非常成功的解決這一問(wèn)題。

            高容量的EAI系統(tǒng)——許多企業(yè)的EAI系統(tǒng)都有高容量傳輸流(不管是基于產(chǎn)品的還是定制開(kāi)發(fā)的)。出于可靠性和審計(jì)的目的,這些通過(guò)EAI系統(tǒng)的消息流通常都需要持久化。對(duì)于這一場(chǎng)景,“非關(guān)系型數(shù)據(jù)庫(kù)” 再次體現(xiàn)出它十分適用于底層的數(shù)據(jù)存儲(chǔ),只要能給定環(huán)境中源系統(tǒng)和目標(biāo)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)更改和所需的容量。

            前端訂單處理系統(tǒng)——隨著電子商務(wù)的膨脹,通過(guò)不同渠道流經(jīng)零售商、銀行和保險(xiǎn)供應(yīng)商、娛樂(lè)服務(wù)供應(yīng)商、物流供應(yīng)商等等的訂單、應(yīng)用、服務(wù)請(qǐng)求的容量十分巨大。同時(shí),由于不同渠道的所關(guān)聯(lián)的行為模式的限制,每種情況下系統(tǒng)所使用的信息結(jié)構(gòu)都有所差異,需要加上不同的規(guī)則類(lèi)型。在此之上,絕大部分?jǐn)?shù)據(jù)不需要即時(shí)的處理和后端對(duì)帳。所需要的是,當(dāng)終端用戶想要從任何地方推送這些數(shù)據(jù)時(shí),這些請(qǐng)求都能夠被捕獲并且不會(huì)被打斷。隨后,通常會(huì)有一個(gè)對(duì)帳系統(tǒng)將其更新到真正的后端源系統(tǒng)并更新終端用戶的訂單狀態(tài)。這又是一個(gè)可以應(yīng)用“非關(guān)系型數(shù)據(jù)庫(kù)”的場(chǎng)景,可用于初期存儲(chǔ)終端用戶的輸入。這一場(chǎng)景是體現(xiàn)“非關(guān)系型數(shù)據(jù)庫(kù)”的應(yīng)用的極佳例子,它具有高容量,異構(gòu)的輸入數(shù)據(jù)類(lèi)型和對(duì)帳的"最終一致性"等等特點(diǎn)。

            企業(yè)內(nèi)容管理服務(wù)——出于各種各樣的目的,內(nèi)容管理在企業(yè)內(nèi)部得到了廣泛的應(yīng)用,橫跨多個(gè)不同的功能部門(mén)比如銷(xiāo)售、市場(chǎng)、零售和人力資源等。企業(yè)大多數(shù)時(shí)間所面臨的挑戰(zhàn)是用一個(gè)公共的內(nèi)容管理服務(wù)平臺(tái),將不同部門(mén)的需求整合到一起,而它們的元數(shù)據(jù)是各不相同的。這又是“非關(guān)系型數(shù)據(jù)庫(kù)”發(fā)揮作用的地方。

            合并和收購(gòu)——企業(yè)在合并與收購(gòu)中面臨巨大的挑戰(zhàn),因?yàn)樗麄冃枰獙⑦m應(yīng)于相同功能的系統(tǒng)整合起來(lái)。“非關(guān)系型數(shù)據(jù)庫(kù)” 可解決這一問(wèn)題,不管是快速地組成一個(gè)臨時(shí)的公共數(shù)據(jù)存儲(chǔ),或者是架構(gòu)一個(gè)未來(lái)的數(shù)據(jù)存儲(chǔ)來(lái)調(diào)和合并的公司之間現(xiàn)有公共應(yīng)用程序的結(jié)構(gòu)。

            但我們?nèi)绾尾拍軠?zhǔn)確的描述,相對(duì)于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),企業(yè)使用“非關(guān)系型數(shù)據(jù)庫(kù)”帶來(lái)的好處呢?下面是可通過(guò)非關(guān)系型數(shù)據(jù)庫(kù)的核心特點(diǎn)(正如上一節(jié)所討論的)而獲得的一些主要的好處,即企業(yè)的任何IT決策都會(huì)參考的核心參數(shù)——成本削減,更好的周轉(zhuǎn)時(shí)間和更優(yōu)良的質(zhì)量。

            業(yè)務(wù)靈活性——更短的周轉(zhuǎn)時(shí)間

            “非關(guān)系型數(shù)據(jù)庫(kù)”能夠以兩種基本的方式帶來(lái)業(yè)務(wù)靈活性。

            • 模式自由的邏輯數(shù)據(jù)模型有助于在為任何業(yè)務(wù)進(jìn)行調(diào)整時(shí)帶來(lái)更快的周轉(zhuǎn)時(shí)間,把對(duì)現(xiàn)有應(yīng)用和功能造成影響減到最少。在大多數(shù)情況下因任意的變更而給你帶來(lái)的遷移工作幾乎為零。
            • 水平伸縮性能夠在當(dāng)越來(lái)越多的用戶負(fù)載造成負(fù)載周期性變化,或者應(yīng)用突然變更的使用模式時(shí),提供堅(jiān)固的保障。面向水平伸縮性的架構(gòu)也是邁向基于SLA構(gòu)建(例如云)的第一步,這樣才能保證在不斷變化的使用情形下業(yè)務(wù)的延續(xù)性。

            更佳的終端用戶體驗(yàn)——更優(yōu)越的質(zhì)量

            在現(xiàn)今企業(yè)IT中,應(yīng)用的質(zhì)量主要由終端用戶的滿意度來(lái)決定。“非關(guān)系型數(shù)據(jù)庫(kù)”通過(guò)解決如下終端用戶的考慮因素,能夠達(dá)到同樣的效果,而這些因素也是最容易發(fā)生和最難以處理的。

            • “非關(guān)系型數(shù)據(jù)庫(kù)” 為提升應(yīng)用的性能帶來(lái)了極大的機(jī)會(huì)。分布式數(shù)據(jù)的核心概念是保證磁盤(pán)I/O(尋道速率)絕不能成為應(yīng)用性能的瓶頸。盡管性能更多的是由傳輸速率來(lái)決定。在此之上,絕大部分解決方案支持各種不同的新一代的高速計(jì)算的范式,比如MapReduce,排序列,Bloom Filter,僅可追加的B樹(shù),Memtable等。
            • 現(xiàn)今用戶滿意度的另一個(gè)重要的方面就是可靠性。終端用戶希望在想要訪問(wèn)應(yīng)用時(shí)就能訪問(wèn)到,并且至少是在當(dāng)他們分配到時(shí)間的時(shí)候能隨時(shí)執(zhí)行他們的任務(wù)。所以不可用的應(yīng)用需要不惜代價(jià)的避免。許多現(xiàn)代的“非關(guān)系型數(shù)據(jù)庫(kù)”都能適應(yīng)并支持這一類(lèi)有著嚴(yán)格和最終一致性的可用性的需求。

            更低的所有者總成本

            在如今的競(jìng)爭(zhēng)市場(chǎng)中,企業(yè)IT支出隨時(shí)都要仔細(xì)審查,以合理的成本獲取合理的質(zhì)量才值得贊許。在這一領(lǐng)域中“非關(guān)系型數(shù)據(jù)庫(kù)”在一定程度上勝于傳統(tǒng)的數(shù)據(jù)庫(kù),特別是當(dāng)存儲(chǔ)和處理的數(shù)據(jù)容量很大時(shí)。

            • 水平伸縮性的基本前提保證了它們可以運(yùn)行于廉價(jià)機(jī)器之上。這不僅削減了硬件資本的成本,同時(shí)還削減了諸如電力,維護(hù)等運(yùn)維成本。同時(shí)這還進(jìn)一步的為利用諸如云、虛擬數(shù)據(jù)中心等下一代低成本的基礎(chǔ)設(shè)施打下了基礎(chǔ)。
            • 從長(zhǎng)期來(lái)看,更少的維護(hù)能帶來(lái)更多的運(yùn)維成本優(yōu)勢(shì)。對(duì)于關(guān)系型數(shù)據(jù)庫(kù),這絕對(duì)是一個(gè)需要存儲(chǔ)大容量數(shù)據(jù)的場(chǎng)景。為大容量的數(shù)據(jù)調(diào)優(yōu)數(shù)據(jù)庫(kù)需要高超的技藝,也就意味著更高的成本。相較之下,“非關(guān)系型數(shù)據(jù)庫(kù)”始終提供快速和響應(yīng)的特點(diǎn),就算是在數(shù)據(jù)大幅上升的情況下。索引和緩存也以同樣的方式工作。開(kāi)發(fā)者不必過(guò)多擔(dān)心硬件、磁盤(pán)、重新索引及文件布局等,而是把更多的精力投入了應(yīng)用程序的開(kāi)發(fā)上。

            企業(yè)采用中所面臨的挑戰(zhàn)

            拋開(kāi)所有這些長(zhǎng)遠(yuǎn)的好處,在企業(yè)擁抱“非關(guān)系型數(shù)據(jù)庫(kù)”之前,當(dāng)然還需要經(jīng)歷各種各樣的挑戰(zhàn)。

            不考慮因現(xiàn)有思想的轉(zhuǎn)換和缺乏信心而產(chǎn)生的來(lái)自高層的阻力,目前我認(rèn)為的最主要的戰(zhàn)術(shù)性挑戰(zhàn)是:

            為“非關(guān)系型數(shù)據(jù)庫(kù)”認(rèn)定正確的應(yīng)用/使用場(chǎng)景

            盡管從理論上容易論證并非所有的企業(yè)數(shù)據(jù)都需要基于關(guān)系和ACID的系統(tǒng),然而由于關(guān)系型數(shù)據(jù)庫(kù)與企業(yè)數(shù)據(jù)間多年的綁定關(guān)系,要作出所有的數(shù)據(jù)可以通過(guò)非關(guān)系的解決方案而解耦的決定仍然有很多困難。許多時(shí)候IT經(jīng)理(以及其它對(duì)于應(yīng)用程序負(fù)有核心的底線責(zé)任的各級(jí)人員)不明白他們將會(huì)失去什么,這樣的擔(dān)憂對(duì)于從關(guān)系型數(shù)據(jù)庫(kù)轉(zhuǎn)變出來(lái)比較不利。企業(yè)IT最有價(jià)值的資產(chǎn)就是數(shù)據(jù)。因此,要作出決定使用一種不太明確或者未被廣泛采用的解決方案來(lái)管理同樣的數(shù)據(jù),這種能力不僅需要轉(zhuǎn)換思維方式,同時(shí)還需要來(lái)自高層的強(qiáng)大的支持(和推動(dòng))。

            我們?nèi)绾芜x擇最適合我們的產(chǎn)品/解決方案

            另一個(gè)重大的挑戰(zhàn)是找出合適的產(chǎn)品/工具來(lái)提供“非關(guān)系型數(shù)據(jù)庫(kù)”。正如前面所提到的那樣,現(xiàn)今業(yè)界里面有多于25種不同的產(chǎn)品和解決方案,它們?cè)谒膫€(gè)方面有著不同的特點(diǎn)。正因?yàn)槊總€(gè)產(chǎn)品在這四個(gè)方面特點(diǎn)各異,所以要選擇一個(gè)產(chǎn)品來(lái)應(yīng)對(duì)所有的需求顯得尤為困難。有的時(shí)候,可能在企業(yè)的不同部門(mén)使用到多種類(lèi)型的非關(guān)系型數(shù)據(jù)庫(kù),最后人們可能會(huì)完全出于對(duì)標(biāo)準(zhǔn)的需要而轉(zhuǎn)向關(guān)系型數(shù)據(jù)庫(kù)。

            如何獲得規(guī)模經(jīng)濟(jì)

            這一想法本質(zhì)上是從前一個(gè)問(wèn)題分支出來(lái)的。如果一個(gè)組織需要使用多個(gè)非關(guān)系型數(shù)據(jù)庫(kù)解決方案(由于單個(gè)方案的適用問(wèn)題),那么保證在技術(shù)(開(kāi)發(fā)者,管理者,支持人員),基礎(chǔ)設(shè)施(硬件成本,軟件許可成本,支持成本,咨詢成本),以及工件(公共組件和服務(wù))方面的規(guī)模經(jīng)濟(jì)就是一個(gè)大問(wèn)題。這一方面與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)解決方案比較起來(lái)確實(shí)更為嚴(yán)峻,因?yàn)榇蟛糠謺r(shí)間組織的數(shù)據(jù)存儲(chǔ)都是以共享服務(wù)的模式在運(yùn)行的。

            我們?nèi)绾伪WC解決方案的可移植性

            從“非關(guān)系型數(shù)據(jù)庫(kù)”的發(fā)展來(lái)看,我們可以很直觀地推測(cè)在未來(lái)的幾年中這一領(lǐng)域會(huì)有許多變化,比如供應(yīng)商的合并,功能的進(jìn)步以及標(biāo)準(zhǔn)化。所以對(duì)于企業(yè)來(lái)說(shuō)一個(gè)更好的策略是不要把寶押在某個(gè)特定的產(chǎn)品/解決方案上,以后才可以更靈活的轉(zhuǎn)換到一個(gè)更好的經(jīng)過(guò)考驗(yàn)的產(chǎn)品。 由于現(xiàn)在的非關(guān)系型產(chǎn)品/解決方案大部分是私有的,因此IT決策者在考慮嘗試“非關(guān)系型數(shù)據(jù)庫(kù)”之前,不得不認(rèn)真考慮可移植性這一重要的問(wèn)題。這純粹是出于保護(hù)現(xiàn)有投資的需要。

            我們?nèi)绾潍@得合適的產(chǎn)品支持類(lèi)型

            現(xiàn)在的“非關(guān)系型數(shù)據(jù)庫(kù)”能通過(guò)外部組織而提供支持方案的少之又少。就算有,也無(wú)法與Oracle,IBM或者微軟等相比。特別是在數(shù)據(jù)恢復(fù),備份和特定的數(shù)據(jù)恢復(fù)方面,由于許多“非關(guān)系型數(shù)據(jù)庫(kù)”在這些方面未能提供一個(gè)健壯而易于使用的機(jī)制,對(duì)于企業(yè)決策者來(lái)說(shuō),仍存在很大的問(wèn)題。

            我們?nèi)绾晤A(yù)算整體成本

            與重量級(jí)的關(guān)系型數(shù)據(jù)庫(kù)相比,“非關(guān)系型數(shù)據(jù)庫(kù)”通常在性能和伸縮性特征方面能提供的數(shù)據(jù)更少。我也沒(méi)有發(fā)現(xiàn)有TPC基準(zhǔn)程序方面和類(lèi)似的其它方面的數(shù)據(jù)。這將企業(yè)決策者置于了一個(gè)“沒(méi)有方向”的情況下,因?yàn)樗麄儾恢佬枰谟布④浖S可、基礎(chǔ)設(shè)施管理和支持等方面支出多大的費(fèi)用。要得出一個(gè)預(yù)算估計(jì),缺乏判斷的數(shù)據(jù)就成了一個(gè)主要的障礙。因此在項(xiàng)目啟動(dòng)階段,大部分情況下決策者還是會(huì)選擇基于熟悉的關(guān)系型數(shù)據(jù)庫(kù)的解決方案。

            有時(shí)候,就算可以得到這些數(shù)字,但也不足以用來(lái)形成TCO模型并與傳統(tǒng)的基于關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)和非關(guān)系型數(shù)據(jù)存儲(chǔ)進(jìn)行整體的成本分析(Capex+Opex)比較。通常情況下水平伸縮性所要求的大量的硬件機(jī)器(以及軟件許可成本,支持成本),如果與垂直伸縮性乍一比較,會(huì)讓人覺(jué)得戰(zhàn)戰(zhàn)兢兢,除非由此帶來(lái)的好處經(jīng)過(guò)基于TCO模型的全方位比較仍然被證明是可以持續(xù)的。

            關(guān)于如何采用NoSQL的兩點(diǎn)思考

            這是否意味著目前來(lái)看企業(yè)應(yīng)該對(duì)NoSQL運(yùn)動(dòng)持觀望的態(tài)度呢?并非如此。誠(chéng)然,“非關(guān)系型數(shù)據(jù)庫(kù)”對(duì)于廣泛的采用來(lái)說(shuō)還未到完全成熟的階段。但“非關(guān)系型數(shù)據(jù)庫(kù)”作為未來(lái)企業(yè)骨架的潛力仍不能忽視。特別是不遠(yuǎn)的將來(lái)企業(yè)將更多地處理大容量的半結(jié)構(gòu)化/非結(jié)構(gòu)化以及最終一致性的數(shù)據(jù),而不是相對(duì)而言小容量的,嚴(yán)格結(jié)構(gòu)化的遵循ACID的數(shù)據(jù)。 所以現(xiàn)在而言至關(guān)重要的是做企業(yè)的關(guān)鍵決策人的思想工作,讓他們明白企業(yè)的數(shù)據(jù)處理需要使用“非關(guān)系型數(shù)據(jù)庫(kù)”。在這一過(guò)程中,要采取一些漸進(jìn)的步驟把“非關(guān)系型數(shù)據(jù)庫(kù)”應(yīng)用到企業(yè)IT的一些關(guān)鍵的方面(技術(shù),人員和流程),并產(chǎn)生一定的價(jià)值。這樣,就可以用一種緩慢而穩(wěn)健的方式從整體上來(lái)解決我們之前所總結(jié)出來(lái)的一系列問(wèn)題。

            采用一個(gè)產(chǎn)品/解決方案

            如今市場(chǎng)上的選擇非常多樣化,可根據(jù)“非關(guān)系型數(shù)據(jù)庫(kù)”側(cè)重的面不同而進(jìn)行差異化的處理。與此同時(shí),企業(yè)應(yīng)用場(chǎng)景可能需要不同類(lèi)型的特點(diǎn)。然而以不同的解決方案來(lái)處理不同的應(yīng)用/使用場(chǎng)景從規(guī)模經(jīng)濟(jì)的角度出發(fā)對(duì)于企業(yè)是不適宜的。因此最好是根據(jù)目標(biāo)應(yīng)用的需要最終落實(shí)到某一個(gè)具體的產(chǎn)品/解決方案上。需要注意的是大多數(shù)的解決方案在特性上都會(huì)有一些折中,有些特性可能在其它的產(chǎn)品中可以獲得,有些可能只是在發(fā)展路線圖當(dāng)中暫時(shí)設(shè)定了一個(gè)位置。因?yàn)榇蟛糠值漠a(chǎn)品會(huì)在不久的將來(lái)不斷趨于成熟,因此可以通過(guò)不同配置來(lái)提供不同的解決方案。所以只要現(xiàn)有的解決方案能適合目前大部分的需要,不妨作為一個(gè)起點(diǎn)將其采納。

            選擇產(chǎn)品/解決方案的經(jīng)驗(yàn)法則

            • 支持所需要的邏輯數(shù)據(jù)模型應(yīng)當(dāng)被給予更高的權(quán)重。這將從實(shí)質(zhì)上決定該解決方案在當(dāng)前或未來(lái)能否靈活地適應(yīng)不同的業(yè)務(wù)需求。
            • 調(diào)查該產(chǎn)品所支持的物理數(shù)據(jù)模型的合適與否,據(jù)此對(duì)這一解決方案所需要的水平伸縮性、可靠性、一致性和分區(qū)性作出合理的評(píng)估。這同樣能表明備份和恢復(fù)機(jī)制的可能性。
            • 接口支持需要與企業(yè)標(biāo)準(zhǔn)的運(yùn)行環(huán)境對(duì)齊。由于這些產(chǎn)品支持多樣的接口,所以這一點(diǎn)可以得到很好的處理。
            • 只要產(chǎn)品支持水平伸縮性,對(duì)于持久化模型的選擇就不再重要了。

            這里有一份一系列“非關(guān)系型數(shù)據(jù)庫(kù)”的對(duì)照表。對(duì)于現(xiàn)在正認(rèn)真考慮采用的企業(yè)來(lái)說(shuō),這是一個(gè)不錯(cuò)的起點(diǎn)。為了更貼近企業(yè)本身的情況,從25+的集合中挑選出的子集所用到的的關(guān)鍵選擇標(biāo)準(zhǔn)是:

            1. 最重要的一點(diǎn)首先是企業(yè)應(yīng)用程序必須支持有一定復(fù)雜程度的數(shù)據(jù)結(jié)構(gòu)。否則的話,應(yīng)用程序管理復(fù)雜性的責(zé)任將變得非常大。我認(rèn)為比較合理的應(yīng)當(dāng)是介于純粹的鍵值對(duì)與關(guān)系型模式中間的一種方案。出于這方面的考慮像Vlodemort,Tokyo Cabinet等產(chǎn)品就排除在了我的列表之外。
            2. 第二點(diǎn)是以低成本的分片/分區(qū)為大容量數(shù)據(jù)提供水平支持。缺乏這樣的支持就使得解決方案與任何關(guān)系型數(shù)據(jù)庫(kù)無(wú)異了。因此像Neo4J(盡管他有豐富的基于圖的模型),Redis,CouchDB等此時(shí)此刻就被過(guò)濾出我的列表之外了。
            3. 最后一條評(píng)判標(biāo)準(zhǔn),在企業(yè)級(jí)推廣之前我會(huì)考慮一定程度的商業(yè)支持。否則的話,一旦出現(xiàn)生產(chǎn)環(huán)境的問(wèn)題,我該去找誰(shuí)呢?出于這一點(diǎn),我不得不將現(xiàn)在的一些明星產(chǎn)品排除在外,比如Cassandra(盡管有很大的可能不久的將來(lái)Rackspace或者Cloudera就會(huì)對(duì)其提供支持,因?yàn)樗呀?jīng)被用于一些生產(chǎn)環(huán)境里邊了,比如Twitter,Digg,F(xiàn)acebook)。

            有了這些過(guò)濾標(biāo)準(zhǔn),我可以精簡(jiǎn)這一列表,符合目前企業(yè)可用的產(chǎn)品有 MongoDB (下一版本就會(huì)提供shards支持),RiakHypertableHBase。下面這個(gè)表格中總結(jié)了這四個(gè)產(chǎn)品的主要特性。一個(gè)企業(yè)可以基于自己具體的實(shí)際情況從中作出選擇,找到最適合自己需要的特性。

            特性

            MongoDB

            Riak

            HyperTable

            HBase

            邏輯數(shù)據(jù)模型

            富文檔,并提供對(duì)內(nèi)嵌文檔的支持

            富文檔

            列家族(Column Family)

            列家族(Column Family)

            CAP支持

            CA

            AP

            CA

            CA

            動(dòng)態(tài)添加刪除節(jié)點(diǎn)

            支持(很快在下一發(fā)布中就會(huì)加入)

            支持

            支持

            支持

            多DC支持

            支持

            不支持

            支持

            支持

            接口

            多種特定語(yǔ)言API(Java,Python,Perl,C#等)

            HTTP之上的JSON

            REST,Thrift,Java

            C++,Thrift

            持久化模型

            磁盤(pán)

            磁盤(pán)

            內(nèi)存加磁盤(pán)(可調(diào)的)

            內(nèi)存加磁盤(pán)(可調(diào)的)

            相對(duì)性能

            更優(yōu)(C++編寫(xiě))

            最優(yōu)(Erlang編寫(xiě))

            更優(yōu)(C++編寫(xiě))

            優(yōu)(Java編寫(xiě))

            商業(yè)支持

            10gen.com

            Basho Technologies

            Hypertable Inc

            Cloudera

            數(shù)據(jù)訪問(wèn)抽象

            為數(shù)據(jù)訪問(wèn)創(chuàng)建一個(gè)單獨(dú)的抽象層對(duì)于“非關(guān)系型數(shù)據(jù)庫(kù)”來(lái)說(shuō)是必須的。它可以帶來(lái)多方面的好處。首先,應(yīng)用開(kāi)發(fā)者可以與底層解決方案的細(xì)節(jié)完全隔離開(kāi)來(lái)。這對(duì)于技術(shù)方面的伸縮性帶來(lái)了好處。同時(shí)未來(lái)如果需要更改底層的解決方案也很方便。這也以一個(gè)標(biāo)準(zhǔn)的方式滿足了多個(gè)應(yīng)用的要求(即去掉了Join,Group by等復(fù)雜特性的SQL)。

            為性能和伸縮性創(chuàng)建模型

            不管選擇怎樣的解決方案,使用標(biāo)準(zhǔn)技術(shù)(比如排隊(duì)網(wǎng)絡(luò)模型分層排隊(duì)網(wǎng)絡(luò)等)來(lái)對(duì)性能和伸縮性進(jìn)行建模都是高度推薦的。它能夠?yàn)榛镜姆?wù)器規(guī)劃、拓?fù)湟约罢w的軟件許可證成本,管理運(yùn)行等提供必要的數(shù)據(jù)。這將實(shí)質(zhì)上成為所有預(yù)算計(jì)劃的主要參考數(shù)據(jù),并對(duì)作出決策提供幫助。

            構(gòu)建顯式的冗余

            要防止數(shù)據(jù)丟失,除了將數(shù)據(jù)復(fù)制到備份服務(wù)器上,沒(méi)有其它的辦法了。盡管許多非關(guān)系型數(shù)據(jù)庫(kù)提供自動(dòng)復(fù)制功能,但仍然存在主節(jié)點(diǎn)單點(diǎn)失效的風(fēng)險(xiǎn)。因此最好是使用次節(jié)點(diǎn)備份,并準(zhǔn)備好用于數(shù)據(jù)恢復(fù)和自動(dòng)數(shù)據(jù)修復(fù)的腳本。出于這樣的目的,應(yīng)當(dāng)充分的了解目標(biāo)解決方案的物理數(shù)據(jù)模型,找出可能的恢復(fù)機(jī)制備選方案,基于企業(yè)的整體需求和實(shí)踐來(lái)對(duì)這些選項(xiàng)作出評(píng)估。

            構(gòu)建公共數(shù)據(jù)服務(wù)平臺(tái)

            就像公共共享服務(wù)的關(guān)系型數(shù)據(jù)庫(kù)一樣,也可以構(gòu)建非關(guān)系型數(shù)據(jù)庫(kù)的公共數(shù)據(jù)服務(wù)來(lái)促進(jìn)規(guī)模經(jīng)濟(jì)效應(yīng),滿足基礎(chǔ)設(shè)施和支持的需要。這對(duì)于未來(lái)進(jìn)一步演化和更改也有幫助。這可以作為愿望列表上的最終目標(biāo),通過(guò)中期或長(zhǎng)期的努力來(lái)達(dá)到這一成熟水平。然而,初始階段就設(shè)立這樣的遠(yuǎn)景有助于在整個(gè)過(guò)程中作出正確的決策。

            壯大企業(yè)的技術(shù)力量

            每個(gè)組織都有一部分人對(duì)于學(xué)習(xí)新生的和非傳統(tǒng)的事物充滿熱忱。成立這樣的小組,并挑選人員(全職的或兼職的),密切關(guān)注這方面的動(dòng)向,了解問(wèn)題和挑戰(zhàn),進(jìn)行前瞻性的思考,能夠?yàn)槭褂眠@些技術(shù)的項(xiàng)目提供方向和幫助。同時(shí),這個(gè)小組還可以為決策者澄清炒作的疑云,提供來(lái)自真實(shí)數(shù)據(jù)的觀點(diǎn)。

            建立與產(chǎn)品社區(qū)的關(guān)系

            選擇了產(chǎn)品之后,與產(chǎn)品社區(qū)建立起良好的關(guān)系對(duì)于雙方的成功都有極大的好處。許多非關(guān)系型數(shù)據(jù)庫(kù)目前都有十分活躍的社區(qū),非常愿意相互幫助。企業(yè)與社區(qū)之間的良好合作能給大家?guī)?lái)一個(gè)雙贏的局面。 如能提前對(duì)問(wèn)題和解決方案有了解,那么企業(yè)在對(duì)某些特性或版本作出決策時(shí)就能成竹在胸。反過(guò)來(lái),企業(yè)又能對(duì)產(chǎn)品特性的路線圖產(chǎn)生影響作用,這對(duì)他們自身和社區(qū)都是有利的。另一方面,社區(qū)也能從實(shí)際層次的問(wèn)題中得到反饋,從而豐富和完善產(chǎn)品。來(lái)自大型企業(yè)的成功案例同樣能讓他們處于領(lǐng)先。

            迭代前進(jìn)

            考慮到非關(guān)系型數(shù)據(jù)庫(kù)相對(duì)的成熟度,風(fēng)險(xiǎn)最小的采用策略就是遵循迭代開(kāi)發(fā)的方法論。構(gòu)建公共數(shù)據(jù)服務(wù)平臺(tái)和標(biāo)準(zhǔn)化數(shù)據(jù)訪問(wèn)抽象不可能是一蹴而就的。相反,通過(guò)迭代和面向重構(gòu)的方式能更好的達(dá)到目標(biāo)。運(yùn)用不太成熟的技術(shù)進(jìn)行轉(zhuǎn)型的過(guò)程,中途改變解決方案也不會(huì)太意外的。與此同時(shí),采用敏捷的方式來(lái)看待事物,能夠幫助建立起一個(gè)能從管理和實(shí)現(xiàn)兩方面不斷吸引改進(jìn)的開(kāi)放態(tài)度。

            然而,在這一問(wèn)題上實(shí)現(xiàn)迭代,非常重要的一點(diǎn)是定義一個(gè)決策條件矩陣。比如操作指南(和例子),來(lái)判斷一個(gè)應(yīng)用的對(duì)象模型是否適合關(guān)系型或非關(guān)系的范圍,對(duì)基礎(chǔ)設(shè)施規(guī)劃作出指導(dǎo),列出必需的測(cè)試用例等等。

            結(jié)束語(yǔ)

            企業(yè)的非關(guān)系型數(shù)據(jù)庫(kù)采用過(guò)程中最大的挑戰(zhàn)就是轉(zhuǎn)變決策者的思想觀念——讓他們相信并非所有的數(shù)據(jù)/對(duì)象都適合關(guān)系型數(shù)據(jù)庫(kù)。 最能證明這一點(diǎn)就是選擇合適的用例去嘗試非關(guān)系型數(shù)據(jù)庫(kù),進(jìn)而證實(shí)在合適的背景下,非關(guān)系型數(shù)據(jù)庫(kù)是比關(guān)系型數(shù)據(jù)庫(kù)更有效的解決方案。 找到一些“非關(guān)鍵業(yè)務(wù)”(但能立竿見(jiàn)影的)適合于非關(guān)系型數(shù)據(jù)庫(kù)的項(xiàng)目。這些項(xiàng)目的成功(甚至失敗)都能有助于觀念的改變。這也能有助于不斷學(xué)習(xí)如何才能以一種不同的方式來(lái)更好的采用非關(guān)系型數(shù)據(jù)庫(kù)。這些少兒學(xué)步般的嘗試所作出的努力與投入都是值得的,如果企業(yè)想要在將來(lái)使用“非關(guān)系型數(shù)據(jù)庫(kù)”來(lái)重塑其信息管理體系的話。

            關(guān)于作者

            Sourav Mazumder目前是InfoSys Technologies的首席技術(shù)架構(gòu)師。他在信息技術(shù)領(lǐng)域有14年以上的經(jīng)驗(yàn)。作為Infosys技術(shù)顧問(wèn)團(tuán)的主要成員,Sourav為Infosys在美國(guó)、歐洲、澳洲和日本的主要客戶,提供保險(xiǎn)、電信、銀行、零售、安全、交通以及建筑、工程、施工等多個(gè)行業(yè)的服務(wù)。 他曾參與Web項(xiàng)目的技術(shù)架構(gòu)和路線圖定義,SOA戰(zhàn)略實(shí)施,國(guó)際戰(zhàn)略定義,UI組件化,性能建模,伸縮性分析,非結(jié)構(gòu)化數(shù)據(jù)管理等等。Sourav參考的Infosys自身的核心銀行產(chǎn)品Finacle,也為他提供了豐富的產(chǎn)品開(kāi)發(fā)經(jīng)驗(yàn)。Sourav還曾參與開(kāi)發(fā)Infosys的J2EE可重用框架,和定義Infosys在架構(gòu)方面和開(kāi)發(fā)定制應(yīng)用方面的軟件工程方法。Sourav的經(jīng)歷還包括在保證架構(gòu)合規(guī)和開(kāi)發(fā)項(xiàng)目的治理方面的工作。

            Sourav是iCMG認(rèn)證的軟件架構(gòu)師,同時(shí)也是TOGAF 8認(rèn)證的執(zhí)行者。Sourav最近在LISA伯克利全球化會(huì)議上發(fā)表了演講。Sourav關(guān)于SOA的最新白皮書(shū)在社區(qū)里十分流行。

            Sourav目前關(guān)注NoSQL,Web 2.0,治理,性能建構(gòu)和全球化。


            感謝馬國(guó)耀對(duì)本文的審校。

            給InfoQ中文站投稿或者參與內(nèi)容翻譯工作,請(qǐng)郵件至editors@cn.infoq.com。也歡迎大家加入到InfoQ中文站用戶討論組中與我們的編輯和其他讀者朋友交流。

            posted @ 2011-01-19 15:49 ivaneeo 閱讀(233) | 評(píng)論 (0)編輯 收藏

            Install Oracle 64Bit On Ubuntu

            Creating A Listener For the New DB

            It's not a requirement to create a Listener before you create a database, but it's a good idea to do so. A Listener is a process which listens on a well-known port for requests from remote users seeking to connect to the Oracle database. Without one, therefore, you'd only ever be able to connect to the database whilst directly logged onto the server itself, which is obviously a bit of a show-stopper!

            To create a Listener, we use the Network Configuration Assistant. To invoke the Assistant, just issue the command netca (should be in path) as the oracle user in a new terminal session. Press "Next" to accept the defaults. After a bit you will get to "Finish" which is where you want to finish.

            netca

            Creating a Database

            First, find out the id of the oinstall group. You can find this from looking in System -> Admin -> Users and Groups -> Manage Groups. Alternatively, use:

            cat /etc/group | grep oinstall

            NB: The oinstall Group Id should be 1002 or similar. If the User/Group Applet is giving "0" then try double checking the Properties of the group. I've noticed that the Users/Groups Applet can be unreliable...

            Then, as root, perform the following command. (NB: This can't be performed by sudo, you must be root)

            echo "<dba_group_gid>" > /proc/sys/vm/hugetlb_shm_group

            This allows the oinstall group access to hugetlbpages. Without this you will get error "ORA-27125: unable to create shared memory segment" when setting up the database.

            Run the Database Configuration Assistant, or DBCA for short. You will need to be the Oracle user you set up earlier.

            dbca

            This is not a difficult thing to do: mostly, in our case, it involves clicking "Next" to walk through the wizard, accepting all defaults. You will be prompted when you actually need to enter something.

            Just be sure to specify the correct database name (it should match what is set as your ORACLE_SID, but with a proper domain extension. By default the ORACLE_SID is orcl10, and can be found out by running the oraenv command in the oracle bin directory...

            Use the password "oracle" for the password and write down the values it spits out at the end...!

            NB: If you get a "ORA-12547- Lost Contact" error, make sure you have libaio1installed (sudo apt-get install libaio1)...
            Well Done...!

            If it all went well you now have an Oracle Db on your machine. Pat yourself on the back for getting this far and sticking with it. You still have a way to go before its all installed but go and have some tea to celebrate...! And then go on to Part 2...
            Last Updated on Saturday, 16 January 2010 12:09

            posted @ 2011-01-13 16:51 ivaneeo 閱讀(475) | 評(píng)論 (0)編輯 收藏

            關(guān)于kindle你必須知道的幾點(diǎn):

            中文顯示

            Kindle 3的中文顯示基本上沒(méi)有問(wèn)題了,只有中文標(biāo)題會(huì)偶爾出現(xiàn)口字亂碼。豆瓣上有個(gè)小tip: kindle 3 不裝多看系統(tǒng)也可以看中文 ( http://www.douban.com/group/topic/14228764/ )在主頁(yè)輸入命令:

            ;debugOn
            ~changeLocale zh-CN
            ;debugOff

            (三行后都要回車(chē))就可以改成中文顯示,我已經(jīng)試驗(yàn)成功。txt要重存成UTF8

            免費(fèi)3G

            (詳見(jiàn):綁定Kindle 支持國(guó)內(nèi)上網(wǎng)

            文檔轉(zhuǎn)換:

            建議通過(guò)發(fā)送文檔(UTF-8編碼txt/html/doc/pdf/jpg等)到你的私人kindle郵箱 ***@free.kindle.com來(lái)直接轉(zhuǎn)換文檔,方便快捷還免費(fèi),只要打開(kāi)kindle的wifi功能并聯(lián)網(wǎng)就能在一分鐘內(nèi)同步。一旦發(fā)送成功,amazon會(huì)給你回復(fù)一封郵件(如下圖),告訴你文檔已經(jīng)傳輸成功,可以打開(kāi)kindle的wifi(發(fā)送到***@free.kindle.com的文檔),然后文檔會(huì)在兩分鐘內(nèi)同步到你的kindle。另外,回復(fù)的郵件里也給出了轉(zhuǎn)換后的azw格式文檔的下載地址,這樣你也可以先把文檔下載到電腦里,待會(huì)用數(shù)據(jù)線傳輸。更多介紹參考(英文) Sending Personal Documents to Kindle.

            UTF-8編碼:

            txt文檔最好用綠色小巧且免費(fèi)的notepad2轉(zhuǎn)換為UTF-8編碼(見(jiàn)下圖),doc沒(méi)有太大限制,docx格式目前還處于實(shí)驗(yàn)階段,有時(shí)轉(zhuǎn)換會(huì)出錯(cuò)。

            NOTEPAD2:

            下載地址:http://sourceforge.net/projects/notepad2/files/

            電池續(xù)航

            kindle如果不進(jìn)行翻頁(yè)和聯(lián)網(wǎng),停留在任何頁(yè)面都是根本不耗電的,所以Kindle沒(méi)有電源的開(kāi)關(guān)鍵;如果一直開(kāi)著wifi或3G,kindle的電池只能堅(jiān)持7天,如果關(guān)閉wifi,充完電后可以堅(jiān)持一個(gè)月,建議不用wifi的時(shí)候按menu鍵關(guān)閉wifi功能。

            收費(fèi)服務(wù):

            文檔發(fā)送到***@kindle.com 收費(fèi)(via Whispernet,但也不是很貴,50MB大小以下的單個(gè)文檔,美國(guó)境內(nèi)是$0.15美元每次,美國(guó)境外$ .99美元每次),并且需要kindle的3G功能。

            同步管理

            kindle.amazon.com , 在這里查看你已經(jīng)購(gòu)買(mǎi)的書(shū)籍或者郵件上傳的文檔,還可以查看你在kindle上添加的讀書(shū)筆記,可以與twitter/facebook帳號(hào)綁定。

            瀏覽器

            菜單路徑Menu–>Experimental–>Browser,這里還可以看到音樂(lè)播放的菜單

            音樂(lè)播放

            菜單路徑同上:Menu–>Experimental

            重裝系統(tǒng)

            不喜歡Kindle3的原裝系統(tǒng)?安裝國(guó)產(chǎn)Kindle系統(tǒng)”多看”吧。喜歡折騰的童鞋,可以參考這位童鞋的日志:Kindle 3折騰記. “多看的缺點(diǎn)就是還不如原版系統(tǒng)穩(wěn)定,但是亮點(diǎn)太多了,多支持了chm,epub等格式不說(shuō),光是對(duì)于pdf的優(yōu)化,就是個(gè)值得嘗試的理由。更不待說(shuō)它對(duì)于中文支持的大大改進(jìn)。” 鏈接: 多看 for Kindle2\Kindle3 軟件下載區(qū)

            支持格式

            郵件發(fā)送文檔支持的格式有:

          • Microsoft Word (.DOC)
          • HTML (.HTML, .HTM)
          • RTF (.RTF)
          • JPEG (.JPEG, .JPG)
          • GIF (.GIF)
          • PNG (.PNG)
          • BMP (.BMP)
          • PDF (.PDF): See below for details.
          • Microsoft Word (.DOCX) is supported in our experimental category.

            推薦書(shū)籍:

          • Kindle新書(shū)發(fā)現(xiàn)《Dirty Chinese》中文臟話集,很給力!點(diǎn)此購(gòu)買(mǎi) http://sinaurl.cn/h4XBGV
          • <孫子兵法>英文版(免費(fèi))

            應(yīng)用推薦:

          • 一款免費(fèi)推送RSS訂閱到kindle的在線應(yīng)用: http://www.kindlefeeder.com/
          • 本文中提到的某位童鞋的在線看漫畫(huà)網(wǎng)站: http://mo.pnuts.cc/
          • 現(xiàn)在亞馬遜的kindle網(wǎng)店里有免費(fèi)的掃雷和sudoku和填詞游戲:
          • posted @ 2011-01-12 11:11 ivaneeo 閱讀(2979) | 評(píng)論 (0)編輯 收藏

            開(kāi)場(chǎng)白:
            Hive與HBase的整合功能的實(shí)現(xiàn)是利用兩者本身對(duì)外的API接口互相進(jìn)行通信,相互通信主要是依靠hive_hbase-handler.jar工具類(lèi) (Hive Storage Handlers), 大致意思如圖所示:
            hive-hbase

            口水:
             對(duì) hive_hbase-handler.jar 這個(gè)東東還有點(diǎn)興趣,有空來(lái)磋磨一下。

            一、2個(gè)注意事項(xiàng):
            1、需要的軟件有 Hadoop、Hive、Hbase、Zookeeper,Hive與HBase的整合對(duì)Hive的版本有要求,所以不要下載.0.6.0以前的老版本,Hive.0.6.0的版本才支持與HBase對(duì)接,因此在Hive的lib目錄下可以看見(jiàn)多了hive_hbase-handler.jar這個(gè)jar包,他是Hive擴(kuò)展存儲(chǔ)的Handler ,HBase 建議使用 0.20.6的版本,這次我沒(méi)有啟動(dòng)HDFS的集群環(huán)境,本次所有測(cè)試環(huán)境都在一臺(tái)機(jī)器上。
                 
            2、運(yùn)行Hive時(shí),也許會(huì)出現(xiàn)如下錯(cuò)誤,表示你的JVM分配的空間不夠,錯(cuò)誤信息如下:
            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

            二、啟動(dòng)運(yùn)行環(huán)境
            1啟動(dòng)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需要的工具類(lèi),并且指向HBase的master服務(wù)器地址,我的HBase master服務(wù)器和Hive運(yùn)行在同一臺(tái)機(jī)器,所以我指向本地。

            2啟動(dòng)HBase
            /work/hbase/bin/hbase master start

            3啟動(dòng)Zookeeper
            /work/zookeeper/bin/zkServer.sh start

            三、執(zhí)行
            在Hive中創(chuàng)建一張表,相互關(guān)聯(lián)的表
            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");

            在運(yùn)行一個(gè)在Hive中建表語(yǔ)句,并且將數(shù)據(jù)導(dǎo)入
            建表
                CREATE TABLE pokes (foo INT, bar STRING);
            數(shù)據(jù)導(dǎo)入
                LOAD DATA LOCAL INPATH '/work/hive/examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

            在Hive與HBase關(guān)聯(lián)的表中 插入一條數(shù)據(jù)
                INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=98;
            運(yùn)行成功后,如圖所示:
            hive

            插入數(shù)據(jù)時(shí)采用了MapReduce的策略算法,并且同時(shí)向HBase寫(xiě)入,如圖所示:
            Map-Reduce Job for INSERT

            在HBase shell中運(yùn)行 scan 'xyz' 和describe "xyz" 命令,查看表結(jié)構(gòu),運(yùn)行結(jié)果如圖所示:
            hive

            xyz是通過(guò)Hive在Hbase中創(chuàng)建的表,剛剛在Hive的建表語(yǔ)句中指定了映射的屬性 "hbase.columns.mapping" = ":key,cf1:val"  和 在HBase中建表的名稱 "hbase.table.name" = "xyz"

            在hbase在運(yùn)行put命令,插入一條記錄
                put 'xyz','10001','cf1:val','www.javabloger.com'

            在hive上運(yùn)行查詢語(yǔ)句,看看剛剛在hbase中插入的數(shù)據(jù)有沒(méi)有同步過(guò)來(lái),
                select * from hbase_table_1 WHERE key=10001;
            如圖所示:
            hive

            最終的效果
                以上整合過(guò)程和操作步驟已經(jīng)執(zhí)行完畢,現(xiàn)在Hive中添加記錄HBase中有記錄添加,同樣你在HBase中添加記錄Hive中也會(huì)添加, 表示Hive與HBase整合成功,對(duì)海量級(jí)別的數(shù)據(jù)我們是不是可以在HBase寫(xiě)入,在Hive中查詢 喃?因?yàn)?span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">HBase 不支持復(fù)雜的查詢,但是HBase可以作為基于 key 獲取一行或多行數(shù)據(jù),或者掃描數(shù)據(jù)區(qū)間,以及過(guò)濾操作。而復(fù)雜的查詢可以讓Hive來(lái)完成,一個(gè)作為存儲(chǔ)的入口(HBase),一個(gè)作為查詢的入口(Hive)。如下圖示。
                hive mapreduce
                
                呵呵,見(jiàn)笑了,以上只是我面片的觀點(diǎn)。

            先這樣,稍后我將繼續(xù)更新,感謝你的閱讀。

             

            相關(guān)文章:
             Apache Hive入門(mén)2 
             Apache Hive入門(mén)1

             HBase入門(mén)篇4 
             HBase入門(mén)篇3 
             HBase入門(mén)篇2 
             HBase入門(mén)篇

            –end–

             

            豆瓣讀書(shū)  向你推薦有關(guān) HBase、 Hadoop、 Hive、 MapReduce、 云計(jì)算、 架構(gòu)設(shè)計(jì)、 類(lèi)別的圖書(shū)。

            posted @ 2011-01-10 15:22 ivaneeo 閱讀(4561) | 評(píng)論 (1)編輯 收藏

            僅列出標(biāo)題
            共67頁(yè): First 上一頁(yè) 16 17 18 19 20 21 22 23 24 下一頁(yè) Last 
            主站蜘蛛池模板: 靖远县| 特克斯县| 阿城市| 疏附县| 嘉义市| 伽师县| 松潘县| 江西省| 陆良县| 西乌| 金坛市| 吉首市| 大方县| 沙田区| 盘山县| 达拉特旗| 岱山县| 永安市| 凤阳县| 右玉县| 杂多县| 吉林省| 阿拉尔市| 晋城| 富民县| 怀宁县| 天柱县| 七台河市| 微博| 宁津县| 融水| 道真| 嘉兴市| 汉源县| 巴彦淖尔市| 阿图什市| 壶关县| 桃园市| 怀安县| 奉化市| 苏州市|