hive数字货币价格预测
❶ 深入理解spark核心思想与源码分析 怎么样
SparkSQL主要的推动者是Databricks。提到SparkSQL不得不提的就是Shark。Shark可以理解为Spark社区这边搞的一个”HiveonSpark”,把Hive的物理执行计划使用Spark计算引擎去执行。这里面会有一些问题,Hive社区那边没有把物理执行计划到执行引擎这个步骤抽象出公共API,所以Spark社区这边要自己维护一个Hive的分支,而且Hive的设计和发展不太会考虑到如何优化Spark的Job。但是前面提到的HiveonSpark却是和Hive一起发布的,是由Hive社区控制的。所以后来Spark社区就停止了Shark的开发转向SparkSQL(“坑了”一部分当时信任Shark的人)。SparkSQL是把SQL解析成RDD的transformation和action,而且通过catalyst可以自由、灵活的选择最优执行方案。对数据库有深入研究的人就会知道,SQL执行计划的优化是一个非常重要的环节,SparkSQL在这方面的优势非常明显,提供了一个非常灵活、可扩展的架构。但是SparkSQL是基于内存的,元数据放在内存里面,不适合作为数据仓库的一部分来使用。所以有了SparkSQL的HiveContext,就是兼容Hive的SparkSQL。它支持HiveQL,HiveMetastore,HiveSerDesandHiveUDFs以及JDBCdriver。这样看起来很完美,但是实际上也有一些缺点:SparkSQL依赖于Hive的一个snapshot,所以它总是比Hive的发布晚一个版本,很多Hive新的feature和bugfix它就无法包括。而且目前看Spark社区在Spark的thriftserver方面的投入不是很大,所以感觉它不是特别想朝着这个方向发展。还有一个重要的缺点就是SparkSQL目前还不能通过分析SQL来预测这个查询需要多少资源从而申请对应的资源,所以在共享集群上无法高效地分配资源和调度任务。
❷ Hadoop,Hive,Spark 之间是什么关系
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。Hadoop也是apache开源大数据的一个生态圈总称,里面包含跟大数据开源框架的一些软件,包含hdfs,hive,zookeeper,hbase等等;Hadoop的框架最核心的设计就是:HDFS和MapRece。HDFS为海量的数据提供了存储,则MapRece为海量的数据提供了计算。
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapRece任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapRece统计,不必开发专门的MapRece应用,十分适合数据仓库的统计分析。
Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。
hadoop(hive)<-spark(扩展)
❸ 如何使用Spark SQL 的JDBC server
运行环境
集群环境:CDH5.3.0
具体JAR版本如下:
spark版本:1.2.0-cdh5.3.0
hive版本:0.13.1-cdh5.3.0
hadoop版本:2.5.0-cdh5.3.0
启动 JDBC server
cd /etc/spark/conf
ln -s /etc/hive/conf/hive-site.xml hive-site.xml
cd /opt/cloudera/parcels/CDH/lib/spark/
chmod- -R 777 logs/
cd /opt/cloudera/parcels/CDH/lib/spark/sbin
./start-thriftserver.sh --master yarn --hiveconf hive.server2.thrift.port=10008
Connecting to the JDBC server with Beeline
cd /opt/cloudera/parcels/CDH/lib/spark/bin
beeline -u jdbc:hive2://hadoop04:10000
[root@hadoop04 bin]# beeline -u jdbc:hive2://hadoop04:10000
scan complete in 2ms
Connecting to jdbc:hive2://hadoop04:10000
Connected to: Spark SQL (version 1.2.0)
❹ 全球有哪些企业公开持有数字货币
全球29家知名公司持有超过300亿美金的数字资产
最近出现了一种新趋势,因为许多知名公司决定利用比特币(BTC)进行储备,而不是持有传统持有的资产。在Microstrategy购买了价值2.5亿美元的BTC之后,这一趋势开始逐渐流行起来。不久之后,该公司继续购买了更多的比特币。经过几次购买,Microstrategy已将其持有量增加到70,470 BTC或供应量的.336%。收购Microstrategy之后,Square Inc.等企业就开始了收购。和Ruffer投资公司加入了比特币的购买趋势。
根据门户网站bitcointreasuries.org的数据,很多公司持有超过110万个比特币或价值超过300亿美元的加密资产。在十亿美元的Microstrategy公司在八月份购买了价值2.5亿美元的比特币之后,知名公司持有的大量比特币储备开始膨胀。现在有29家公司持有加密货币代替股票和现金等传统储备。
到目前为止,在网站bitcointreasuries.org上总共列出了29家公司,该网站将所有公司划分为三个不同的部分。公开交易,私人和类似ETF的持有人。
共有15家公开交易的公司,包括Microstrategy Inc.,Galaxy Digital Holdings,Square Inc.,Hut 8 Mining Corp,Voyager Digital LTD,Riot Blockchain,Inc.,Bit Digital,Inc.,Coin Citadel Inc.,Advanced Bitcoin Technologies AG,Digitalx,Hive区块链,Cypherpunk Holdings Inc.,Bigg Digital Assets Inc.,Argo Blockchain和Frmo Corp.这15家公开交易的公司的总市值约为100,003 BTC,持有比特币资金的私人公司部分包括四家私人公司,包括Mtgox kk,Block.one,Tezos Foundation和Stone Ridge Holdings Group。在所有四家公司的储备中,私人公司的总市值比上市公司多317,383 BTC。
bitcointreasuries.org列表的底部有九个类似于ETF的持有人,其基金包括Grayscale Bitcoin Trust,Coinshares,Ruffer Investment,3iq The Bitcoin Fund,Grayscale Digital Large Cap,Bitwise 10 Crypto Index Fund,WisdomTree Bitcoin,21shares AG ,以及ETC Group的比特币ETP。
其中包括加拿大餐馆连锁店Tahini's和加拿大图形软件公司Snappa。Tahini的餐饮连锁店透露,该公司将其所有现金储备都换成了BTC,而Snappa则表示,该公司将40%的现金储备用于比特币交易。加拿大上市公司Mogo也刚刚宣布将其储备的1.5%投资于比特币,并计划明年购买更多。当Tahini决定告诉其财务顾问之后,他将立即购买比特币时,他建议使用黄金。餐馆老板说,贵金属黄金已经成为可靠的避风港。
该公司在推特上写道: “我们看着我们的财务顾问,并告诉他,由于比特币,黄金将变成骗局。” 塔希尼补充说:“他笑了,居高临下地回到了6000年的论点上。”
❺ 为什么使用HiveHive提供了什么Hive支持哪些用户
为什么使用Hive?
为什么使用Hive?那么,在哪里使用Hive呢?在载入了60亿行(经度、维度、时间、数据值、高度)数据集到MySQL后,系统崩溃了,并经历过数据丢失。这可能部分是因为我们最初的策略是将所有的数据都存储到单一的一张表中了。后来,我们调整了策略通过数据集和参数进行分表,这有所帮助但也因此引入了额外的消耗,而这并非是我们愿意接受的。
相反,我们决定尝试使用Apache Hive技术。我们安装了Hive 0.5 + 20,使用CDHv3和Apache Hadoop(0 20 2 + 320)。CDHv3还包含有许多其他相关工具,包括Sqoop和Hue这些在我们的架构中都标识出来了,如图23-3底部所示。
我们使用Apache Sqoop转储数据到Hive中,然后通过写一个Apache OODT包装器,来使Hive按照空间/时间约束查询数据,然后将结果提供给RCMET和其他用户(图23-2中间部分显示)。RCMES集群的完整的架构如图23- 3所示。我们有5台机器,包括图中所示的一个主/从配置,通过一个运行GigE的私人网进行连接。
Hive提供了什么
Photobucket公司使用Hive的主要目标是为业务功能、系统性能和用户行为提供答案。为了满足这些需求,我们每晚都要通过Flume从数百台服务器上的MySQL数据库中转储来自Web服务器和自定义格式日志TB级别的数据。这些数据有助于支持整个公司许多组织,比如行政管理、广告、客户支持、产品开发和操作,等等。对于历史数据,我们保持所有MySQL在每月的第一天创建的所有的数据作为分区数据并保留30天以上的日志文件。Photobucket使用一个定制的ETL框架来将MySQL数据库中数据迁移到Hive中。使用Flume将日志文件数据写入到HDFS中并按照预定的Hive流程进行处理。
Hive支持的用户有哪些
行政管理依赖于使用Hadoop提供一般业务健康状况的报告。Hive允许我们解析结构化数据库数据和非结构化的点击流数据,以及业务所涉及的数据格式进行读取。
广告业务使用Hive筛选历史数据来对广告目标进行预测和定义配额。产品开发无疑是该组织中产生最大数量的特定的查询的用户了。对于任何用户群,时间间隔变化或随时间而变化。Hive是很重要的,因为它允许我们通过对在当前和历史数据中运行A / B测试来判断在一个快速变化的用户环境中新产品的相关特性。
在Photobucket公司中,为我们的用户提供一流的系统是最重要的目标。从操作的角度来看,Hive被用来汇总生成跨多个维度的数据。在公司里知道最流行的媒体、用户、参考域是非常重要的。控制费用对于任何组织都是重要的。一个用户可以快速消耗大量的系统资源,并显著增加每月的支出。Hive可以用于识别和分析出这样的恶意用户,以确定哪些是符合我们的服务条款,而哪些是不符合的。也可以使用Hive对一些操作运行A / B测试来定义新的硬件需求和生成ROI计算。Hive将用户从底层MapRece代码解放出来的能力意味着可以在几个小时或几天内就可以获得答案,而不是之前的数周。
Hive中的数据库
Hive中数据库的概念本质上仅仅是表的一个目录或者命名空间。然而,对于具有很多组和用户的大集群来说,这是非常有用的,因为这样可以避免表命名冲突。通常会使用数据库来将生产表组织成逻辑组。
如果用户没有显式指定数据库,那么将会使用默认的数据库default。
下面这个例子就展示了如何创建一个数据库:
hive> CREATE DATABASE financials;
如果数据库financials已经存在的话,那么将会抛出一个错误信息。使用如下语句可以避免在这种情况下抛出错误信息:
hive> CREATE DATABASE IF NOT EXISTS financials;
虽然通常情况下用户还是期望在同名数据库已经存在的情况下能够抛出警告信息的,但是IF NOT EXISTS这个子句对于那些在继续执行之前需要根据需要实时创建数据库的情况来说是非常有用的。
在所有的数据库相关的命令中,都可以使用SCHEMA这个关键字来替代关键字TABLE。
随时可以通过如下命令方式查看Hive中所包含的数据库:
hive> SHOW DATABASES;
default
financials
hive> CREATE DATABASE human_resources;
hive> SHOW DATABASES;
default
financials
human_resources
如果数据库非常多的话,那么可以使用正则表达式匹配来筛选出需要的数据库名,正则表达式这个概念,将会在第6.2.3节“Like和RLike”介绍。下面这个例子展示的是列举出所有以字母h开头,以其他字符结尾(即.*部分含义)的数据库名:
hive> SHOW DATABASES LIKE 'h.*';
human_resources
hive> ...
Hive会为每个数据库创建一个目录。数据库中的表将会以这个数据库目录的子目录形式存储。有一个例外就是default数据库中的表,因为这个数据库本身没有自己的目录。
数据库所在的目录位于属性hive.metastore.warehouse.dir所指定的顶层目录之后,这个配置项我们已经在前面的第2.5.1节“本地模式配置”和第2.5.2节“分布式模式和伪分布式模式配置”中进行了介绍。假设用户使用的是这个配置项默认的配置,也就是/user/hive/warehouse,那么当我们创建数据库financials时,Hive将会对应地创建一个目录/user/hive/warehouse/financials.db。这里请注意,数据库的文件目录名是以.db结尾的。
用户可以通过如下的命令来修改这个默认的位置:
hive> CREATE DATABASE financials
> LOCATION '/my/preferred/directory';
用户也可以为这个数据库增加一个描述信息,这样通过DESCRIBE DATABASE <database> 命令就可以查看到该信息。
hive> CREATE DATABASE financials
> COMMENT 'Holds all financial tables';
hive> DESCRIBE DATABASE financials;
financials Holds all financial tables
hdfs://master-server/user/hive/warehouse/financials.db
从上面的例子中,我们可以注意到,DESCRIEB DATABASE语句也会显示出这个数据库所在的文件目录位置路径。在这个例子中,URI格式是hdfs。如果安装的是MapR,那么这里就应该是maprfs。对于亚马逊弹性MapRece(EMR)集群,这里应该是hdfs,但是用户可以设置hive.metastore.warehouse.dir为亚马逊S3特定的格式(例如,属性值设置为s3n://bucketname...)。用户可以使用s3作为模式,但是如果使用新版的规则s3n会更好。
前面DESCRIBE DATABASE语句的输出中,我们使用了master-server来代表URI权限,也就是说应该是由文件系统的“主节点”(例如,HDFS中运行NameNode服务的那台服务器)的服务器名加上一个可选的端口号构成的(例如,服务器名:端口号这样的格式)。如果用户执行的是伪分布式模式,那么主节点服务器名称就应该是localhost。对于本地模式,这个路径应该是一个本地路径,例如file:///user/hive/warehouse/financials.db。
如果这部分信息省略了,那么Hive将会使用Hadoop配置文件中的配置项fs.default.name作为master-server所对应的服务器名和端口号,这个配置文件可以在$HADOOP_HOME/conf这个目录下找到。
需要明确的是,hdfs:///user/hive/warehouse/financials.db和hdfs://master-server/user/hive/
warehouse/financials.db是等价的,其中master-server是主节点的DNS名和可选的端口号。
为了保持完整性,当用户指定一个相对路径(例如,some/relative/path)时,对于HDFS和Hive,都会将这个相对路径放到分布式文件系统的指定根目录下(例如,hdfs:///user/<user-name>)。然而,如果用户是在本地模式下执行的话,那么当前的本地工作目录将是some/relative/path的父目录。
为了脚本的可移植性,通常会省略掉那个服务器和端口号信息,而只有在涉及到另一个分布式文件系统实例(包括S3存储)的时候才会指明该信息。
此外,用户还可以为数据库增加一些和其相关的键-值对属性信息,尽管目前仅有的功能就是提供了一种可以通过DESCRIBE DATABASE EXTENDED <database>语句显示出这些信息的方式:
hive> CREATE DATABASE financials
> WITH DBPROPERTIES ('creator' = 'Mark Moneybags', 'date' = '2012-01-02');
hive> DESCRIBE DATABASE financials;
financials hdfs://master-server/user/hive/warehouse/financials.db
hive> DESCRIBE DATABASE EXTENDED financials;
financials hdfs://master-server/user/hive/warehouse/financials.db
{date=2012-01-02, creator=Mark Moneybags);
USE命令用于将某个数据库设置为用户当前的工作数据库,和在文件系统中切换工作目录是一个概念:
hive> USE financials;
现在,使用像SHOW TABLES这样的命令就会显示当前这个数据库下所有的表。
不幸的是,并没有一个命令可以让用户查看当前所在的是哪个数据库!幸运的是,在Hive中是可以重复使用USE…命令的,这是因为在Hive中并没有嵌套数据库的概念。
可以回想下,在第2.7.2节“变量和属性”中提到过,可以通过设置一个属性值来在提示符里面显示当前所在的数据库(Hive v0.8.0版本以及之后的版本才支持此功能):
hive> set hive.cli.print.current.db=true;
hive (financials)> USE default;
hive (default)> set hive.cli.print.current.db=false;
hive> ...
最后,用户可以删除数据库:
hive> DROP DATABASE IF EXISTS financials;
IF EXISTS子句是可选的,如果加了这个子句,就可以避免因数据库finanacials不存在而抛出警告信息。
默认情况下,Hive是不允许用户删除一个包含有表的数据库的。用户要么先删除数据库中的表,然后再删除数据库;要么在删除命令的最后面加上关键字CASCADE,这样可以使Hive自行先删除数据库中的表:
hive> DROP DATABASE IF EXISTS financials CASCADE;
如果使用的是RESTRICT这个关键字而不是CASCADE这个关键字的话,那么就和默认情况一样,也就是,如果想删除数据库,那么必须先要删除掉该数据库中的所有表。
如果某个数据库被删除了,那么其对应的目录也同时会被删除。
❻ 虚拟货币、数字货币、加密货币、代币、通证有什么区别
一、定义不同:
1.虚拟货币:
虚拟货币为指非真实的货币。
2.数字货币:
数字货币为电子货币形式的替代货币。数字金币和密码货币都属于数字货币(DIGICCY)。
3.加密货币:
加密货币为一种使用密码学原理来确保交易安全及控制交易单位创造的交易媒介。
4.代币(通证):
一种形状及尺寸类似货币,但限制使用范围、不具通货效力的物品,其通证则为代币英文Token的谐音。
二、特点不同:
1.虚拟货币:
虚拟货币不是一般等价物,而是价值相对性的表现形式,或者说是表现符号;也可以说,虚拟货币是个性化货币。在另一种说法中,也可称为信息货币。
2.数字货币:
是一种不受管制的、数字化的货币,通常由开发者发行和管理,被特定虚拟社区的成员所接受和使用。
3.加密货币:
加密货币基于去中心化的共识机制 ,与依赖中心化监管体系的银行金融系统相对。
4.代币(通证):
通常需要以金钱换取,用在商店、游乐场、大众运输工具等地方,做为凭证以使用服务、换取物品等。
(6)hive数字货币价格预测扩展阅读
现阶段数字货币更像一种投资产品,因为缺乏强有力的担保机构维护其价格的稳定,其作为价值尺度的作用还未显现,无法充当支付手段。数字货币作为投资产品,其发展离不开交易平台、运营公司和投资。
数字货币是一把双刃剑,一方面,其所依托的区块链技术实现了去中心化,可以用于数字货币以外的其他领域,这也是比特币受到热捧的原因之一;另一方面,如果数字货币被作为一种货币受到公众的广泛使用,则会对货币政策有效性、金融基础设施、金融市场、金融稳定等方面产生巨大影响。
❼ 如何做Spark 版本兼容
SparkSQL主要的推动者是Databricks。
提到SparkSQL不得不提的就是Shark。
Shark可以理解为Spark社区这边搞的一个”HiveonSpark”,把Hive的物理执行计划使用Spark计算引擎去执行。
这里面会有一些问题,Hive社区那边没有把物理执行计划到执行引擎这个步骤抽象出公共API,所以Spark社区这边要自己维护一个Hive的分支,而且Hive的设计和发展不太会考虑到如何优化Spark的Job。
但是前面提到的HiveonSpark却是和Hive一起发布的,是由Hive社区控制的。
所以后来Spark社区就停止了Shark的开发转向SparkSQL(“坑了”一部分当时信任Shark的人)。
SparkSQL是把SQL解析成RDD的transformation和action,而且通过catalyst可以自由、灵活的选择最优执行方案。
对数据库有深入研究的人就会知道,SQL执行计划的优化是一个非常重要的环节,SparkSQL在这方面的优势非常明显,提供了一个非常灵活、可扩展的架构。
但是SparkSQL是基于内存的,元数据放在内存里面,不适合作为数据仓库的一部分来使用。
所以有了SparkSQL的HiveContext,就是兼容Hive的SparkSQL。
它支持HiveQL,HiveMetastore,HiveSerDesandHiveUDFs以及JDBCdriver。
这样看起来很完美,但是实际上也有一些缺点:SparkSQL依赖于Hive的一个snapshot,所以它总是比Hive的发布晚一个版本,很多Hive新的feature和bugfix它就无法包括。
而且目前看Spark社区在Spark的thriftserver方面的投入不是很大,所以感觉它不是特别想朝着这个方向发展。
还有一个重要的缺点就是SparkSQL目前还不能通过分析SQL来预测这个查询需要多少资源从而申请对应的资源,所以在共享集群上无法高效地分配资源和调度任务。
❽ 某电商双11数据分析与预测为什么会用到hive,可不可以直接用Hadoop
首先明确Hive和Hadoop两者的关系:
1、Hadoop是一种用于存储、读取以及处理海量数据的技术。你可以将他等价理解为个人PC的文件系统,只不过它能够承载远比一两块硬盘所能储存的多得多的数据;
2、Hive是一种构建在Hadoop之上的工具,它通过书写SQL语句的方式部分实现了Hadoop的功能,也就是说,所有Hive具备的能力,Hadoop都有,只不过Hive提供了一套描述工具,让你用可读性更强、更通用的方式描述你想解决的问题,然后由Hive将其转换成Hadoop的底层逻辑,最终解决问题。
所以,你问的问题也就不言自明了,当然可以直接基于Hadoop,使用Java、Python等语言直接编写MapRece的处理过程;但是,常规的数据分析如果使用Hive,可能只需要若干Select查询语句即可完成,若编写代码完成,可能需要安装配置本地IDE、完成相关代码库的依赖、MapRece完整逻辑的实现、任务的提交、计算结果的获取等等一系列庞杂的细节。两厢对比,我认为虽然理论上可以直接用Hadoop,但是在真实业务场景下,就是不能用的。
希望我说明白了~
❾ 如何升级hive schema version
为什么使用Hive?
为什么使用Hive?那么,在哪里使用Hive呢?在载入了60亿行(经度、维度、时间、数据值、高度)数据集到MySQL后,系统崩溃了,并经历过数据丢失。这可能部分是因为我们最初的策略是将所有的数据都存储到单一的一张表中了。后来,我们调整了策略通过数据集和参数进行分表,这有所帮助但也因此引入了额外的消耗,而这并非是我们愿意接受的。
相反,我们决定尝试使用Apache Hive技术。我们安装了Hive 0.5 + 20,使用CDHv3和Apache Hadoop(0 20 2 + 320)。CDHv3还包含有许多其他相关工具,包括Sqoop和Hue这些在我们的架构中都标识出来了,如图23-3底部所示。
我们使用Apache Sqoop转储数据到Hive中,然后通过写一个Apache OODT包装器,来使Hive按照空间/时间约束查询数据,然后将结果提供给RCMET和其他用户(图23-2中间部分显示)。RCMES集群的完整的架构如图23- 3所示。我们有5台机器,包括图中所示的一个主/从配置,通过一个运行GigE的私人网进行连接。
Hive提供了什么
Photobucket公司使用Hive的主要目标是为业务功能、系统性能和用户行为提供答案。为了满足这些需求,我们每晚都要通过Flume从数百台服务器上的MySQL数据库中转储来自Web服务器和自定义格式日志TB级别的数据。这些数据有助于支持整个公司许多组织,比如行政管理、广告、客户支持、产品开发和操作,等等。对于历史数据,我们保持所有MySQL在每月的第一天创建的所有的数据作为分区数据并保留30天以上的日志文件。Photobucket使用一个定制的ETL框架来将MySQL数据库中数据迁移到Hive中。使用Flume将日志文件数据写入到HDFS中并按照预定的Hive流程进行处理。
Hive支持的用户有哪些
行政管理依赖于使用Hadoop提供一般业务健康状况的报告。Hive允许我们解析结构化数据库数据和非结构化的点击流数据,以及业务所涉及的数据格式进行读取。
广告业务使用Hive筛选历史数据来对广告目标进行预测和定义配额。产品开发无疑是该组织中产生最大数量的特定的查询的用户了。对于任何用户群,时间间隔变化或随时间而变化。Hive是很重要的,因为它允许我们通过对在当前和历史数据中运行A / B测试来判断在一个快速变化的用户环境中新产品的相关特性。
在Photobucket公司中,为我们的用户提供一流的系统是最重要的目标。从操作的角度来看,Hive被用来汇总生成跨多个维度的数据。在公司里知道最流行的媒体、用户、参考域是非常重要的。控制费用对于任何组织都是重要的。一个用户可以快速消耗大量的系统资源,并显著增加每月的支出。Hive可以用于识别和分析出这样的恶意用户,以确定哪些是符合我们的服务条款,而哪些是不符合的。也可以使用Hive对一些操作运行A / B测试来定义新的硬件需求和生成ROI计算。Hive将用户从底层MapRece代码解放出来的能力意味着可以在几个小时或几天内就可以获得答案,而不是之前的数周。
Hive中的数据库
Hive中数据库的概念本质上仅仅是表的一个目录或者命名空间。然而,对于具有很多组和用户的大集群来说,这是非常有用的,因为这样可以避免表命名冲突。通常会使用数据库来将生产表组织成逻辑组。
如果用户没有显式指定数据库,那么将会使用默认的数据库default。
下面这个例子就展示了如何创建一个数据库:
hive> CREATE DATABASE financials;
如果数据库financials已经存在的话,那么将会抛出一个错误信息。使用如下语句可以避免在这种情况下抛出错误信息:
hive> CREATE DATABASE IF NOT EXISTS financials;
虽然通常情况下用户还是期望在同名数据库已经存在的情况下能够抛出警告信息的,但是IF NOT EXISTS这个子句对于那些在继续执行之前需要根据需要实时创建数据库的情况来说是非常有用的。
在所有的数据库相关的命令中,都可以使用SCHEMA这个关键字来替代关键字TABLE。
随时可以通过如下命令方式查看Hive中所包含的数据库:
hive> SHOW DATABASES;
default
financials
hive> CREATE DATABASE human_resources;
hive> SHOW DATABASES;
default
financials
human_resources
如果数据库非常多的话,那么可以使用正则表达式匹配来筛选出需要的数据库名,正则表达式这个概念,将会在第6.2.3节“Like和RLike”介绍。下面这个例子展示的是列举出所有以字母h开头,以其他字符结尾(即.*部分含义)的数据库名:
hive> SHOW DATABASES LIKE 'h.*';
human_resources
hive> ...
❿ hive 自定义函数需要哪些jar包
为什么使用Hive?为什么使用Hive?那么,在哪里使用Hive呢?在载入了60亿行(经度、维度、时间、数据值、高度)数据集到MySQL后,系统崩溃了,并经历过数据丢失。这可能部分是因为我们最初的策略是将所有的数据都存储到单一的一张表中了。后来,我们调整了策略通过数据集和参数进行分表,这有所帮助但也因此引入了额外的消耗,而这并非是我们愿意接受的。相反,我们决定尝试使用ApacheHive技术。我们安装了Hive0.5+20,使用CDHv3和ApacheHadoop(0202+320)。CDHv3还包含有许多其他相关工具,包括Sqoop和Hue这些在我们的架构中都标识出来了,如图23-3底部所示。我们使用ApacheSqoop转储数据到Hive中,然后通过写一个ApacheOODT包装器,来使Hive按照空间/时间约束查询数据,然后将结果提供给RCMET和其他用户(图23-2中间部分显示)。RCMES集群的完整的架构如图23-3所示。我们有5台机器,包括图中所示的一个主/从配置,通过一个运行GigE的私人网进行连接。Hive提供了什么Photobucket公司使用Hive的主要目标是为业务功能、系统性能和用户行为提供答案。为了满足这些需求,我们每晚都要通过Flume从数百台服务器上的MySQL数据库中转储来自Web服务器和自定义格式日志TB级别的数据。这些数据有助于支持整个公司许多组织,比如行政管理、广告、客户支持、产品开发和操作,等等。对于历史数据,我们保持所有MySQL在每月的第一天创建的所有的数据作为分区数据并保留30天以上的日志文件。Photobucket使用一个定制的ETL框架来将MySQL数据库中数据迁移到Hive中。使用Flume将日志文件数据写入到HDFS中并按照预定的Hive流程进行处理。Hive支持的用户有哪些行政管理依赖于使用Hadoop提供一般业务健康状况的报告。Hive允许我们解析结构化数据库数据和非结构化的点击流数据,以及业务所涉及的数据格式进行读取。广告业务使用Hive筛选历史数据来对广告目标进行预测和定义配额。产品开发无疑是该组织中产生最大数量的特定的查询的用户了。对于任何用户群,时间间隔变化或随时间而变化。Hive是很重要的,因为它允许我们通过对在当前和历史数据中运行A/B测试来判断在一个快速变化的用户环境中新产品的相关特性。在Photobucket公司中,为我们的用户提供一流的系统是最重要的目标。从操作的角度来看,Hive被用来汇总生成跨多个维度的数据。在公司里知道最流行的媒体、用户、参考域是非常重要的。控制费用对于任何组织都是重要的。一个用户可以快速消耗大量的系统资源,并显著增加每月的支出。Hive可以用于识别和分析出这样的恶意用户,以确定哪些是符合我们的服务条款,而哪些是不符合的。也可以使用Hive对一些操作运行A/B测试来定义新的硬件需求和生成ROI计算。Hive将用户从底层MapRece代码解放出来的能力意味着可以在几个小时或几天内就可以获得答案,而不是之前的数周。Hive中的数据库Hive中数据库的概念本质上仅仅是表的一个目录或者命名空间。然而,对于具有很多组和用户的大集群来说,这是非常有用的,因为这样可以避免表命名冲突。通常会使用数据库来将生产表组织成逻辑组。如果用户没有显式指定数据库,那么将会使用默认的数据库default。下面这个例子就展示了如何创建一个数据库:hive>CREATEDATABASEfinancials;如果数据库financials已经存在的话,那么将会抛出一个错误信息。使用如下语句可以避免在这种情况下抛出错误信息:hive>;虽然通常情况下用户还是期望在同名数据库已经存在的情况下能够抛出警告信息的,但是IFNOTEXISTS这个子句对于那些在继续执行之前需要根据需要实时创建数据库的情况来说是非常有用的。在所有的数据库相关的命令中,都可以使用SCHEMA这个关键字来替代关键字TABLE。随时可以通过如下命令方式查看Hive中所包含的数据库:hive>SHOWDATABASES;defaultfinancialshive>CREATEDATABASEhuman_resources;hive>SHOWDATABASES;defaultfinancialshuman_resources如果数据库非常多的话,那么可以使用正则表达式匹配来筛选出需要的数据库名,正则表达式这个概念,将会在第6.2.3节“Like和RLike”介绍。下面这个例子展示的是列举出所有以字母h开头,以其他字符结尾(即.*部分含义)的数据库名:hive>SHOWDATABASESLIKE'h.*';human_resourceshive>Hive会为每个数据库创建一个目录。数据库中的表将会以这个数据库目录的子目录形式存储。有一个例外就是default数据库中的表,因为这个数据库本身没有自己的目录。数据库所在的目录位于属性hive.metastore.warehouse.dir所指定的顶层目录之后,这个配置项我们已经在前面的第2.5.1节“本地模式配置”和第2.5.2节“分布式模式和伪分布式模式配置”中进行了介绍。假设用户使用的是这个配置项默认的配置,也就是/user/hive/warehouse,那么当我们创建数据库financials时,Hive将会对应地创建一个目录/user/hive/warehouse/financials.db。这里请注意,数据库的文件目录名是以.db结尾的。用户可以通过如下的命令来修改这个默认的位置:hive>CREATEDATABASEfinancials>LOCATION'/my/preferred/directory';用户也可以为这个数据库增加一个描述信息,这样通过DESCRIBEDATABASE命令就可以查看到该信息。hive>CREATEDATABASEfinancials>COMMENT'Holdsallfinancialtables';hive>DESCRIBEDATABASEfinancials;://master-server/user/hive/warehouse/financials.db从上面的例子中,我们可以注意到,DESCRIEBDATABASE语句也会显示出这个数据库所在的文件目录位置路径。在这个例子中,URI格式是hdfs。如果安装的是MapR,那么这里就应该是maprfs。对于亚马逊弹性MapRece(EMR)集群,这里应该是hdfs,但是用户可以设置hive.metastore.warehouse.dir为亚马逊S3特定的格式(例如,属性值设置为s3n://bucketname)。用户可以使用s3作为模式,但是如果使用新版的规则s3n会更好。前面DESCRIBEDATABASE语句的输出中,我们使用了master-server来代表URI权限,也就是说应该是由文件系统的“主节点”(例如,HDFS中运行NameNode服务的那台服务器)的服务器名加上一个可选的端口号构成的(例如,服务器名:端口号这样的格式)。如果用户执行的是伪分布式模式,那么主节点服务器名称就应该是localhost。对于本地模式,这个路径应该是一个本地路径,例如file:///user/hive/warehouse/financials.db。如果这部分信息省略了,那么Hive将会使用Hadoop配置文件中的配置项fs.default.name作为master-server所对应的服务器名和端口号,这个配置文件可以在$HADOOP_HOME/conf这个目录下找到。需要明确的是,hdfs:///user/hive/warehouse/financials.db和hdfs://master-server/user/hive/warehouse/financials.db是等价的,其中master-server是主节点的DNS名和可选的端口号。为了保持完整性,当用户指定一个相对路径(例如,some/relative/path)时,对于HDFS和Hive,都会将这个相对路径放到分布式文件系统的指定根目录下(例如,hdfs:///user/)。然而,如果用户是在本地模式下执行的话,那么当前的本地工作目录将是some/relative/path的父目录。为了脚本的可移植性,通常会省略掉那个服务器和端口号信息,而只有在涉及到另一个分布式文件系统实例(包括S3存储)的时候才会指明该信息。此外,用户还可以为数据库增加一些和其相关的键-值对属性信息,尽管目前仅有的功能就是提供了一种可以通过DESCRIBEDATABASEEXTENDED语句显示出这些信息的方式:hive>CREATEDATABASEfinancials>WITHDBPROPERTIES('creator'='MarkMoneybags','date'='2012-01-02');hive>DESCRIBEDATABASEfinancials;financialshdfs://master-server/user/hive/warehouse/financials.dbhive>;financialshdfs://master-server/user/hive/warehouse/financials.db{date=2012-01-02,creator=MarkMoneybags);USE命令用于将某个数据库设置为用户当前的工作数据库,和在文件系统中切换工作目录是一个概念:hive>USEfinancials;现在,使用像SHOWTABLES这样的命令就会显示当前这个数据库下所有的表。不幸的是,并没有一个命令可以让用户查看当前所在的是哪个数据库!幸运的是,在Hive中是可以重复使用USE…命令的,这是因为在Hive中并没有嵌套数据库的概念。可以回想下,在第2.7.2节“变量和属性”中提到过,可以通过设置一个属性值来在提示符里面显示当前所在的数据库(Hivev0.8.0版本以及之后的版本才支持此功能):hive>sethive.cli.print.current.db=true;hive(financials)>USEdefault;hive(default)>sethive.cli.print.current.db=false;hive>最后,用户可以删除数据库:hive>;IFEXISTS子句是可选的,如果加了这个子句,就可以避免因数据库finanacials不存在而抛出警告信息。默认情况下,Hive是不允许用户删除一个包含有表的数据库的。用户要么先删除数据库中的表,然后再删除数据库;要么在删除命令的最后面加上关键字CASCADE,这样可以使Hive自行先删除数据库中的表:hive>CASCADE;如果使用的是RESTRICT这个关键字而不是CASCADE这个关键字的话,那么就和默认情况一样,也就是,如果想删除数据库,那么必须先要删除掉该数据库中的所有表。如果某个数据库被删除了,那么其对应的目录也同时会被删除。