什么是SparkSpark是一种基于内存的快速、通用、可扩展的大数据分析引擎发展历史2009年诞生,采用Scala编写2010年开源2013年6月成为Apache孵化项目2014年2月成为Apache顶级项目Spark特点快比MapReduce相比要快百倍以上,实现了DAG执行引擎,通过内存高效处理数据流易用Spark支持Java、Python、Scala、R等API,还支持超过80种高级算法,使用户可以快速构建不同的应用。还支持Python和Scala的交互式Shell。通用Spark提供了一套统一的解决方案。Spark可以用于批处理、交互式查询(SparkSQL)、实时处理(SpakrStreaming)、机器学习(SparkMLlib)、图计算(GraphX),这些不同类型的处理都可以无缝使用。兼容性Spark可以十分方便的与其他开源产品进行融合,比如:可以使用HAdoop的Yarn和Apache的Mesos作为资源管理和调度器,并且可处理所有支持Hadoop的数据,包括HDFS、HBase,这样可以使得已经使用过Hadoop集群的用户非常友好,不需要做任何的数据迁移就可以使用Spark强大的处理能力。Spark的内置模块SparkCore:实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。SparkCore中还包含了对弹性分布式数据集(ResilientDistributedDataSet,简称RDD)的API定义。SparkSQL:是Spark用来操作结构化数据的程序包。通过SparkSQL,我们可以使用SQL或者ApacheHive版本的SQL方言(HQL)来查询数据。SparkSQL支持多种数据源,比如Hive表、Parquet以及JSON等。SparkStreaming:是Spark提供的对实时数据进行流式计算的组件。提供了用来操作数据流的API,并且与SparkCore中的RDDAPI高度对应。SparkMLlib:提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。集群管理器:Spark设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。为了实现这样的要求,同时获得最大灵活性,Spark支持在各种集群管理器(ClusterManager)上运行,包括HadoopYARN、ApacheMesos,以及Spark自带的一个简易调度器,叫作独立调度器。
测试数据和表数据1Bob12002Black21003BigDataBoy5600表createtablehive_db(idint,namestring,moneyint)rowformatdelimitedfieldsterminatedby'\t';基本查询格式select...from...语法格式规范HQL语言大小写不敏感HQL可以写一行,也可以写多行关键字不能被缩写也不能分行各子句一般要分行写使用缩进和换行提高语句的可读性全表和特定列查询全表查询select*from表名;特定列查询select字段名,字段名from表名;列别名关键字asselect字段名as列别名,字段名as列别名from表名算数运算符运算符描述A+BA加BA-BA减BA*BA乘BA/BA除BA%BA对B取余数hive>select1+6;OK7Timetaken:0.117seconds,Fetched:1row(s)hive>select2&6;OK2Timetaken:0.144seconds,Fetched:1row(s)hive>select~6;OK-7Timetaken:0.153seconds,Fetched:1row(s)常用函数求行数count(*),count()还能进行其他的统计hive>selectcount(*)fromhive_db;(会跑一个MapReduce任务)QueryID=root_20200119201909_4eaa334c-5e26-46e4-8ff9-ef0e4a703394Totaljobs=1...Stage-Stage-1:Map:1Reduce:1CumulativeCPU:4.27secHDFSRead:6799HDFSWrite:2SUCCESSTotalMapReduceCPUTimeSpent:4seconds270msecOK4Timetaken:131.007seconds,Fetched:1row(s)最大值max()hive>selectmax(money)fromhive_db;QueryID=root_20200119202349_2d1c7587-554e-4089-8b99-b76cb08ddab1...Stage-Stage-1:Map:1Reduce:1CumulativeCPU:4.06secHDFSRead:6908HDFSWrite:5SUCCESSTotalMapReduceCPUTimeSpent:4seconds60msecOK5600Timetaken:125.705seconds,Fetched:1row(s)最小值min()hive>selectmin(money)fromhive_db;总和sum()hive>selectsum(money)fromhive_db;平均值avg()hive>selectavg(money)fromhive_db;比较运算(Between/In/IsNull)操作符支持的数据类型描述A=B基本数据类型如果A=B,返回True,反之返回FalseA<=>B基本数据类型A、B有一个为NULL,则返回NULL;A、B都为NULL,返回True;A=B,返回True,反之返回False;A<>B,A!=B基本数据类型A、B有一个为NULL,则返回NULL;如果A不等于B,则返回True,反之返回FalseA<B基本数据类型A、B有一个为NULL,则返回NULL;A小于B,返回True,反之返回FalseA<=B基本数据类型A、B有一个为NULL,则返回NULL;A小于等于B,返回True,反之返回FalseA>B基本数据类型A、B有一个为NULL,则返回NULL;A大于B,返回True,反之返回FalseA>=B基本数据类型A、B有一个为NULL,则返回NULL;A大于等于B,返回True,反之返回FalseA[NOT]BETWEENBANDC基本数据类型A、B、C任一为NULL,则结果为NULL;如果A的值在B、C之间,则返回True,反之返回False;加上NOT,则是相反的效果AISNULL所有数据类型如果A等于NULL,则返回TRUE,反之返回FALSEAISNOTNULL所有数据类型如果A不等于NULL,则返回TRUE,反之返回FALSEAIN(数值1,数值2)基本数据类型显示该字段等于IN()里数值的数据A[NOT]LIKEBSTRING类型B是SQL下简单的正则表达式,与A匹配,则返回True,反之返回False;使用NOT达到相反的效果ARLIKEB,AREGEXPBSTRING类型B是一个正则表达式,如果A与其匹配,则返回TRUE;反之返回FALSE。匹配使用的是JDK中的正则表达式接口实现的,因为正则也依据其中的规则。例如,正则表达式必须和整个字符串A相匹配,而不是只需与其字符串匹配。简单例子#工资在2000到6000之间的hive>select*fromhive_dbwheremoneybetween2000and6000;OK2Black21003BigDataBoy5600Timetaken:0.118seconds,Fetched:2row(s)#查询money为NULL的hive>select*fromhive_dbwheremoneyisnull;OKNULLNULLNULLTimetaken:0.227seconds,Fetched:1row(s)#查询money为2100和5600的数据hive>select*fromhive_dbwheremoneyin(2100,5600);OK2Black21003BigDataBoy5600Timetaken:0.21seconds,Fetched:2row(s)Like和RLikeLike使用的是SQL语法下的匹配%代表零个或多个字符(任意个字符)。_代表一个字符%o:匹配o开头的o%:匹配o结尾的%o%:匹配包含o的_2%:匹配开头第二位是2的__2_:匹配4位,但第3位是2的#匹配name字段带o的hive>select*fromhive_dbwherenamelike'%o%';OK1Bob12003BigDataBoy5600Timetaken:0.092seconds,Fetched:2row(s)RLike使用的Java下的正则表达式#匹配money中带有12的hive>select*fromhive_dbwheremoneyrlike'12';OK1Bob1200Timetaken:0.075seconds,Fetched:1row(s)逻辑运算符(And/Or/Not)操作符含义And并Or或Not否简单例子#查询money大于1000并name是Bob的hive>select*fromhive_dbwheremoney>1000andname='Bob';OK1Bob1200Timetaken:0.145seconds,Fetched:1row(s)limit语句limit子句用于限定返回的行数hive>select*fromhive_dblimit2;OK1Bob12002Black2100Timetaken:0.196seconds,Fetched:2row(s)where语句将不满足条件的过滤掉where子句紧随from子句#查询money大于2000的hive>select*fromhive_dbwheremoney>2000;OK2Black21003BigDataBoy5600Timetaken:0.172seconds,Fetched:2row(s)
数据导入Load方式向表中装载数据语法:loaddata[loacl]inpath'文件'[overwriter]intotable表名[partition(指定分区)]loaddata:加载数据[loacl]:本地加载,不写表示从HDFS上加载,注意从HDFS上加载的数据,原文件会被移动inpath‘文件’:文件路径[overwriter]:overwriter表示覆盖重写[partition(指定分区)]:如果是分区表需要指定分区则加上#从HDFS上导入追加loaddatainpath'/student.txt'intotablehive_db;#从HDFS上导入覆盖loaddatainpath'/student.txt'overwriteintotablehive_db;通过查询语句向表中插入数据(Insert)首先创建一张分区表createtabletest_p(idint,namestring)partitionedby(daystring)rowformatdelimitedfieldsterminatedby'\t';基本插入数据语法:insertintotable表名字段values(值,值)#它会提交一个MapReduce任务hive>insertintotabletest_ppartition(day="08")values(1,"tp");QueryID=root_20200108180532_9006dc63-78cd-4afc-9527-028387b366aaTotaljobs=3LaunchingJob1outof3Numberofreducetasksissetto0sincethere'snoreduceoperator.....Stage-Stage-1:Map:1CumulativeCPU:3.35secHDFSRead:3765HDFSWrite:79SUCCESSTotalMapReduceCPUTimeSpent:3seconds350msecOKTimetaken:84.034seconds基本模式插入(根据单张表查询结果)#语法insertinto|overwritertable指定表#结果插入的表select字段from表名;#查询的表#实例会跑一个MapReduce任务hive>insertintotabletest_ppartition(day="9")>select*fromhive_db;QueryID=root_20200109100135_356015e5-d696-43cd-a6af-68e29fa246e2Totaljobs=3LaunchingJob1outof3Numberofreducetasksissetto0sincethere'snoreduceoperator......TotalMapReduceCPUTimeSpent:2seconds350msecOKTimetaken:79.799seconds多插入模式(根据多张表查询结果)查询的结果字段需要与插入的字段对应,不能多也不能少#这个会提交一个MapReduce任务fromhive_dbinsertintotabletest_ppartition(day="15")select*insertintotabletest_ppartition(day="16")select*;创表时通过location指定加载数据的位置创建表createtablelo_db(idint,namestring)rowformatdelimitedfieldsterminatedby'\t'location'/hive';上传数据到/hive目录下[root@master~]#hadoopfs-putst.txt/hive查看表的数据hive>select*fromlo_db;OK4aa5bb6Timetaken:0.119seconds,Fetched:3row(s)使用import导入数据数据必须是export导出的(应为会有元数据)语法:importtable表名from路径;表可以不存在路径下使用export导出的所有数据hive>importtablestu1from'/export';Copyingdatafromhdfs://192.168.176.65:9000/export/dataCopyingfile:hdfs://192.168.176.65:9000/export/data/student.txtLoadingdatatotabletest.stu1OKTimetaken:0.62seconds数据导出使用insert导出数据语法insertoverwrite[local]directory'/root'-->导出的路径去掉loacl就是导出到HDFSrowformatdelimitedfieldsterminatedby'\t'-->导出的分隔符select*fromhive_db;-->需要导出的内容使用#执行HQL跑一个MR程序hive>insertoverwritelocaldirectory'/root/hive'>rowformatdelimitedfieldsterminatedby'\t'>select*fromhive_db;QueryID=root_20200115161857_48aa5b8a-1bd4-45b9-9642-9b7135bf9009Totaljobs=1...Copyingdatatolocaldirectory/root/hiveCopyingdatatolocaldirectory/root/hiveMapReduceJobsLaunched:Stage-Stage-1:Map:1CumulativeCPU:1.91secHDFSRead:3034HDFSWrite:21SUCCESSTotalMapReduceCPUTimeSpent:1seconds910msecOKTimetaken:77.28seconds#查看本地文件[root@masterhive]#pwd/root/hive[root@masterhive]#ll总用量4-rw-r--r--.1rootroot211月1516:20000000_0[root@masterhive]#cat000000_01Bob2Black3Jeck使用Hadoopshell命令下载数据hive>dfs-get/hive/st.txt/root/hive;使用Hiveshell命令导出格式bin/hive-e‘HQL语句或HQL文件’>导出的文件名[root@mastersrc]#hive-e'select*fromtest.hive_db'>/root/hive/a.txtLogginginitializedusingconfigurationinjar:file:/usr/local/src/hive/apache-hive-1.2.2-bin/lib/hive-common-1.2.2.jar!/hive-log4j.propertiesOKTimetaken:12.103seconds,Fetched:3row(s)#查看导出wenjian[root@masterhive]#cata.txt1Bob2Black3Jeck[root@masterhive]#pwd/root/hiveexport导出数据(不是很常用)格式:exporttable表名toHDFS路径;hive>exporttablehive_dbto'/export';Copyingdatafromfile:/usr/local/src/hive/tmpdir/hive/8edfc4e3-3832-43c1-9d4b-d863ef85d0eb/hive_2020-01-15_16-41-17_608_2632318306276412864-1/-local-10000/_metadataCopyingfile:file:/usr/local/src/hive/tmpdir/hive/8edfc4e3-3832-43c1-9d4b-d863ef85d0eb/hive_2020-01-15_16-41-17_608_2632318306276412864-1/-local-10000/_metadataCopyingdatafromhdfs://192.168.176.65:9000/user/hive/warehouse/test.db/hive_dbCopyingfile:hdfs://192.168.176.65:9000/user/hive/warehouse/test.db/hive_db/student.txtOKTimetaken:0.601seconds导出的信息结构export\|__metadata元数据文件|_data\|_导出的数据清空表数据只能清空内部表(管理表)数据,不能清空外部表数据truncatetable表名hive>truncatetablestu1;OK
何为下载中间件下载器中间件是Scrapy的请求/响应处理的类。这是一个轻量级的低级系统,用于全局更改Scrapy的请求和响应。使用要激活下载程序中间件组件,请将其添加到DOWNLOADER_MIDDLEWARES设置中,这是一个dict,其键为中间件类路径,其值为中间件顺序(权重)#Enableordisabledownloadermiddlewares#Seehttps://docs.scrapy.org/en/latest/topics/downloader-middleware.htmlDOWNLOADER_MIDDLEWARES={'lagouApp.middlewares.LagouappDownloaderMiddleware':543,}将该DOWNLOADER_MIDDLEWARES设置与DOWNLOADER_MIDDLEWARES_BASEScrapy中定义的设置合并(而不是被覆盖),然后按顺序进行排序,以获取启用的中间件的最终排序列表,请求会按照小到大执行,响应会按照大到小执行,其各个中间件权重大小的决定,可参照DOWNLOADER_MIDDLEWARES_BASE设置。如果要禁某个中间件把它设置为None就好。内置下载中间件CookiesMiddleware属于scrapy.downloadermiddlewares.cookies.CookiesMiddleware类使用此中间件,可以处理需要cookie的站点,例如使用会话的站点。它会跟踪Web服务器发送的cookie,并像网络浏览器一样,将其发送回后续请求(来自该蜘蛛)。注意meta.get(‘cookiejar’)不是“粘性”的您需要在后续请求中继续传递它defparse_page(self,response):#dosomeprocessingreturnscrapy.Request("https://bigdataboy.cn",meta={'cookiejar':response.meta['cookiejar']},callback=self.parse_other_page)相关设置COOKIES_ENABLED默认启用cookies#Disablecookies(enabledbydefault)是否启用cookies#COOKIES_ENABLED=TrueCOOKIES_DEBUG如果启用,Scrapy将记录请求中发送的所有cookie(即Cookie标头)和响应中接收的所有cookie(即Set-Cookie标头)。COOKIES_DEBUG=False开启效果2020-01-1420:20:26[scrapy.downloadermiddlewares.cookies]DEBUG:Receivedcookiesfrom:<200https://bigdataboy.cn>Set-Cookie:JSESSIONID=ABAAABAAAEEAAII73F8A39DC3BF1352400CBB34ABA2AB47;Path=/;HttpOnlySet-Cookie:SEARCH_ID=11c20adceed742cd9ed906fe2e0c47ad;Version=1;Max-Age=86400;Expires=Wed,15-Jan-202012:20:28GMT;Path=/Set-Cookie:user_trace_token=20200114202028-23b9b484-6bec-4761-a4ec-4a08c2bae9e9;Max-Age=31536000;Path=/;Domain=.lagou.com;2020-01-1420:20:26[scrapy.core.engine]DEBUG:Crawled(200)<GEThttps://bigdataboy.cn>(referer:None)UserAgentMiddleware属于scrapy.downloadermiddlewares.useragent.UserAgentMiddleware类允许蜘蛛覆盖默认用户代理的中间件。为了使Spider可以覆盖默认用户代理,user_agent必须设置其属性。DefaultHeadersMiddleware属于scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware类该中间件会把setting中指定的所有默认请求标头加入HttpProxyMiddleware属于scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware类该中间件通过设置Request.meta的proxy值来设置代理池和设置Request.headers里的认证头部(Proxy-Authorization)DownloadTimeoutMiddleware属于scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware类该中间件会获取DOWNLOAD_TIMEOUT的值给蜘蛛设置下载的超时时间。还可以给每个Request.meta设置download_timeout属性,单独设置超时时间。HttpAuthMiddleware属于scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware类该中间件使用基本访问身份验证(也称为HTTP身份验证)对从某些蜘蛛生成的所有请求进行身份验证。要启用某些蜘蛛网的HTTP身份验证,请设置这些蜘蛛网的http_user和http_pass属性。fromscrapy.spidersimportCrawlSpiderclassSomeIntranetSiteSpider(CrawlSpider):http_user='someuser'http_pass='somepass'name='bigdataboy.cn'#..restofthespidercodeomitted...HttpCacheMiddleware属于scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware类该中间件为所有HTTP请求和响应提供了低级缓存。它必须与缓存存储后端以及缓存策略结合使用HttpCompressionMiddleware属于scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware类该中间件允许从网站发送/接收压缩(gzip,deflate)流量。如果安装了brotlipy,此中间件还支持解码brotli压缩的响应。相关设置COMPRESSION_ENABLEDCOMPRESSION_ENABLED=TrueRedirectMiddleware属于scrapy.downloadermiddlewares.redirect.RedirectMiddleware类该中间件根据响应状态处理请求的重定向。可以在Request.meta的redirect_urls中找到请求通过的URL(在重定向时)。还可以在Request.meta的redirect_reasons中找到每个重定向的背后原因。例如:。[301,302,307,'metarefresh']相关设置REDIRECT_ENABLED#启用重定向中间件REDIRECT_ENABLED=TrueREDIRECT_MAX_TIMES#单个请求将遵循的最大重定向数。REDIRECT_MAX_TIMES=20RetryMiddleware属于scrapy.downloadermiddlewares.retry.RetryMiddleware类中间件,用于重试失败的请求,这些请求可能是由临时问题(例如连接超时或HTTP500错误)引起的。蜘蛛完成对所有常规(非失败)页面的爬网之后,将在抓取过程中收集失败的页面,并在最后进行重新请求。相关设置RETRY_ENABLED#启用“重试”中间件。RETRY_ENABLED=TrueRETRY_TIMES#除了首次下载外,最大重试次数。RETRY_TIMES=2RETRY_HTTP_CODES#重试哪个HTTP响应代码。RETRY_HTTP_CODES=[500,502,503,504,522,524,408,429]DownloaderStats属于scrapy.downloadermiddlewares.stats.DownloaderStats类中间件,用于存储通过它的所有请求,响应和异常的统计信息。要使用此中间件,必须启用该DOWNLOADER_STATS=True(默认开启)。AjaxCrawlMiddleware属于scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware类基于元片段html标签找到“AJAX可抓取”页面变体的中间件。有关更多信息,请参见https://developers.google.com/webmasters/ajax-crawling/docs/getting-started。
创建数据库数据库的创建#直接创建数据库默认在HDFS的/user/hive/warehouse里面createdatabasehive_db;#指定数据存放的位置路径会在HDFS上#注意路径最后要加上库名,不然HDFS上无法查看到创建的库文件createdatabasehive_dblocation'/hive/hive_db.db'#ifnotexists判断是否存在,为了避免报错createdatabaseifnotexistshive;数据库的查询显示数据库showdatabases;模糊查询showdatabaseslike'hiv*';查询数据库的信息hive>descdatabasehive_db;OKhive_dbhdfs://192.168.176.65:9000/hive/hive.dbrootUSERTimetaken:0.019seconds,Fetched:1row(s)#可加一个参数extended,查看详细信息#hive>descdatabaseextendedhive_db;数据库的修改说是修改,其实只能增加数据库的额外属性,只要数据库创建好,使用desc查询出来的都不能改#dbproperties()里的额外属性可以自己定义hive>alterdatabasehive_dbsetdbproperties('Ctime'='2020.6.16');OKTimetaken:0.132seconds#创建的额外属性必须加extended才能查询出来hive>descdatabaseextendedhive_db;OKhive_dbhdfs://192.168.176.65:9000/hive/hive.dbrootUSER{Ctime=2020.6.16}Timetaken:0.016seconds,Fetched:1row(s)数据库删除删除空的数据库dropdatabase数据库名;删除不为空的数据库(联动删除)(强制删除)dropdatabase数据库名cascade;表的操作创建表完整的创表语法格式CREATE[EXTERNAL]TABLE[IFNOTEXISTS]table_name[(col_namedata_type[COMMENTcol_comment],...)][COMMENTtable_comment][PARTITIONEDBY(col_namedata_type[COMMENTcol_comment],...)][CLUSTEREDBY(col_name,col_name,...)[SORTEDBY(col_name[ASC|DESC],...)]INTOnum_bucketsBUCKETS][ROWFORMATrow_format][STOREDASfile_format][LOCATIONhdfs_path]精简入门格式#指定创表表名CREATE[EXTERNAL]TABLE[IFNOTEXISTS]table_name#创字段[(col_namedata_type[COMMENTcol_comment],...)]#分隔符[ROWFORMATrow_format]字段说明CREATETABLE:创建一个指定名字的表,如果名相同,这会抛出一个异常[EXTERNAL]:可以创建一个外部表,在建表的同时指定一个实际的路径(LOCATION),Hive在创建内部表时,会将数据移动到Hive指定的路径,若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除数据的时候,内部表的元数据和数据会一起删除,而外部表只删除元数据,不删除数据。[COMMENT]:为表的字段添加注释[ROWFORMAT]:指定分隔符。比如rowformatdelimitedfieldsterminatedby"\t";修改表修改表名#格式altertable旧表名renameto新表名;hive>altertablehive_dbrenametotest_db;OKTimetaken:0.237seconds表的列操作修改列名只能一列一列的修改altertable表名changecolumn旧列名新列名新列类型;hive>altertabletest_dbchangecolumniddb_idint;OKTimetaken:0.239seconds添加、替换列名可以几列同时操作#添加列名altertable表名addcolumns(列名类型,列名类型);hive>altertabletest_dbaddcolumns(addrstring,ageint);OKTimetaken:0.211seconds#替换列名替换列名是把表原来的所有列都替换了留下替换语句指定的列名altertable表名replacecolumns(列名类型,列名类型)hive>altertabletest_dbreplacecolumns(idint,yearint);OKTimetaken:0.267seconds##查看表的结构只留下了替换语句的字段hive>desctest_db;OKidintyearintmouthstring#分区字段#PartitionInformation#col_namedata_typecommentmouthstringTimetaken:0.048seconds,Fetched:8row(s)增加、删除表的分区#增加表的分区altertable表名addpartition(指定分区字段)hive>altertabletest_dbaddpartition(mouth="04");OKTimetaken:0.225seconds#删除表的分区altertable表名droppartition(指定分区字段)hive>altertabletest_dbdroppartition(mouth="04");Droppedthepartitionmouth=04OKTimetaken:0.312seconds删除表语法:droptable表名hive>droptabletest_db;OKTimetaken:0.439seconds
说明分区表本质是HDFS上的文件夹,所以直接通过HDFS创建好文件,再使用Hadoop命令把数据上传到该目录,直接使用select*from表名查看,是没有数据的,因为文件夹里的数据与Hive的元数据没有关联起来。#直接创建目录直接上传分区然后查询没有表hive>dfs-mkdir/user/hive/warehouse/test.db/hive_db/mouth=01;hive>dfs-put/root/student.txt/user/hive/warehouse/test.db/hive_db/mouth=01;hive>select*fromhive_db;OKTimetaken:0.099seconds关联的第一种方式(最常用的)使用loaddatalocalinpath'文件'intotable分区表名partition(指定分区)hive>loaddatalocalinpath'/root/student.txt'intotablehive_dbpartition(mouth=01);Loadingdatatotabletest.hive_dbpartition(mouth=1)Partitiontest.hive_db{mouth=1}stats:[numFiles=1,numRows=0,totalSize=21,rawDataSize=0]OKTimetaken:0.553secondshive>select*fromhive_db;OK1Bob12Black13Jeck1Timetaken:0.136seconds,Fetched:3row(s)关联的第二种方式使用修复命令,修复分区表msckrepairtable分区表名;hive>msckrepairtablehive_db;OKPartitionsnotinmetastore:hive_db:mouth=01Repair:Addedpartitiontometastorehive_db:mouth=01Timetaken:0.211seconds,Fetched:2row(s)关联的第三种方式使用添加分区命令,添加一下分区语法:altertable分区表名addpartition(指定分区);hive>altertablehive_dbaddpartition(mouth="03");OKTimetaken:0.238secondshive>select*fromhive_dbwheremouth=03;OK1Bob32Black33Jeck3Timetaken:0.107seconds,Fetched:3row(s)
分区表说明分区表实际上就是对应一个HDFS文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过WHERE子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多.分区表的操作创建分区表语法partitionby(字段类型)#创分区表语句createtablehive_db(idint,namestring)partitionedby(mouthstring)rowformatdelimitedfieldsterminatedby'\t';#查看分区表格式,发现定义的分区也是一个字段hive>deschive_db;OKidintnamestringmouthstring#一个字段#PartitionInformation#col_namedata_typecommentmouthstringTimetaken:0.106seconds,Fetched:8row(s)添加分区一次添加一个分区hive>altertablehive_dbaddpartition(mouth="20200109");OKTimetaken:0.356seconds一次添加多个分区注意空格分隔hive>altertablehive_dbaddpartition(mouth="20200111")partition(mouth="20200110");OKTimetaken:0.356seconds删除分区一次删除一个分区hive>altertablehive_dbdroppartition(mouth="202001407");Droppedthepartitionmouth=202001407OKTimetaken:0.601seconds一次删除多个分区注意逗号分隔hive>altertablehive_dbdroppartition(mouth="20200110"),partition(mouth="20200111");Droppedthepartitionmouth=20200110Droppedthepartitionmouth=20200111OKTimetaken:0.371seconds加载数据到分区表#加载loaldatalocalinpath'/root/student.txt'intotablehive_dbpartitionh(mouth=20200107);#查看内容发现分区也显示出来了hive>select*fromhive_db;OK1Bob2020014072Black2020014073Jeck202001407Timetaken:0.103seconds,Fetched:3row(s)查看HDFS上的Hive分区表数据查看分区数据查询全部数据#会把多个分区数据一起查询出来hive>select*fromhive_db;OK1Bob2020014072Black2020014073Jeck2020014071Bob2020014082Black2020014083Jeck202001408Timetaken:0.116seconds,Fetched:6row(s)查询单个分区的数据hive>select*fromhive_dbwheremouth=202001407;OK1Bob2020014072Black2020014073Jeck202001407Timetaken:0.376seconds,Fetched:3row(s)二级分区表二级分区表就是在一级分区表的基础上,在加一个字段createtablestu(idint,namestring)partitionedby(mouthstring,daystring)rowformatdelimitedfieldsterminatedby'\t';导入数据到二级分区表语法loaddatalocalinpath'文件'intotablestupartition(mouth="01",day="07");partition()里面是对应的分区字段hive>loaddatalocalinpath'/root/student.txt'intotablestupartition(mouth="01",day="07");Loadingdatatotabletest.stupartition(mouth=01,day=07)Partitiontest.stu{mouth=01,day=07}stats:[numFiles=1,numRows=0,totalSize=21,rawDataSize=0]OKTimetaken:0.554seconds扩展三级分区、四级分区...都是一样的道理,但很没有必要
区别X外部表内部表(管理表)创表关键字需要加external不需要加表被删除时数据不会被删除数据会被删除创建表的区别在创建外部表时需要加external关键字createexternaltablestud(idint,namestring)rowformatdelimitedfieldsterminatedby'\t';表被删除时表被删除时外部表使用showtables;查询不到,但数据还在。如果再按照原来的表格式创建表,内容会自动加载到表里。内部表被删除时,数据会跟着被删除。使用场景当有一份数据,可能使用它来分析的不止一个部门,还会有许多地方共享这份数据,所以不能在我分析完删除时,把元数据也删除了外部表与内部表的相互转换内部表改为外部表:altertable表名settblproperties('EXTERNAL'='TRUE');外部表改为内部表:altertable表名settblproperties('EXTERNAL'='FLASE');注意后面的tblproperties('EXTERNAL'='布尔值');是一定的,引号是单引号,布尔值要大写查看表的详细信息查询语句descformatted表名hive>descformattedstud;OK#col_namedata_typecommentidintnamestring#DetailedTableInformationDatabase:defaul#该表所在的数据库Owner:root#该表的用户CreateTime:MonJan0611:37:37CST2020LastAccessTime:UNKNOWNProtectMode:NoneRetention:0Location:hdfs://192.168.176.65:9000/user/hive/warehouse/studTableType:MANAGED_TABLE#说明表示管理表(内部表)TableParameters:COLUMN_STATS_ACCURATEtruenumFiles1totalSize21transient_lastDdlTime1578281909#StorageInformationSerDeLibrary:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDeInputFormat:org.apache.hadoop.mapred.TextInputFormatOutputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormatCompressed:NoNumBuckets:-1BucketColumns:[]SortColumns:[]StorageDescParams:field.delim\tserialization.format\tTimetaken:0.104seconds,Fetched:31row(s)
组件介绍Hive开启了hiveserver2才能远程连接到Hivehiveserver2:可以理解为一个服务端beeline:可以理解为一个客户端#它们在Hive的bin/目录下[root@masterbin]#ll总用量32-rwxr-xr-x.1rootroot10314月12017beelinedrwxr-xr-x.3rootroot409612月2616:43ext-rwxr-xr-x.1rootroot78444月12017hive-rwxr-xr-x.1rootroot19001月82016hive-config.sh-rwxr-xr-x.1rootroot8851月82016hiveserver2-rwxr-xr-x.1rootroot8321月82016metatool-rwxr-xr-x.1rootroot8841月82016schematool小测试搭建的是Hadoop伪分布式进行测试开启两个窗口,一个运行hiveserver2,另一个运行beeline运行hiveserver2当做服务端下图这样挂住就算开启另一个窗口执行beeline当做客户端,当然客户端不一定是beeline,还能是其他的一些客户端,但连接的地址、用户名、密码是一个道理连接Hive,进行查询连接地址:!connectjdbc:hive2://master:10000拓展beeline的所有命令0:jdbc:hive2://master:10000>help!addlocaldriverjarAdddriverjarfileinthebeelineclientside.!addlocaldrivernameAdddrivernamethatneedstobesupportedinthebeelineclientside.!allExecutethespecifiedSQLagainstallthecurrentconnections!autocommitSetautocommitmodeonoroff!batchStartorexecuteabatchofstatements!briefSetverbosemodeoff!callExecuteacallablestatement!closeClosethecurrentconnectiontothedatabase!closeallCloseallcurrentopenconnections!columnsListallthecolumnsforthespecifiedtable!commitCommitthecurrenttransaction(ifautocommitisoff)!connectOpenanewconnectiontothedatabase.!dbinfoGivemetadatainformationaboutthedatabase!describeDescribeatable!dropallDropalltablesinthecurrentdatabase!exportedkeysListalltheexportedkeysforthespecifiedtable!goSelectthecurrentconnection!helpPrintasummaryofcommandusage!historyDisplaythecommandhistory!importedkeysListalltheimportedkeysforthespecifiedtable!indexesListalltheindexesforthespecifiedtable!isolationSetthetransactionisolationforthisconnection!listListthecurrentconnections!manualDisplaytheBeeLinemanual!metadataObtainmetadatainformation!nativesqlShowthenativeSQLforthespecifiedstatement!nullemptystringSettotruetogethistoricbehaviorofprintingnullasemptystring.Defaultisfalse.!outputformatSettheoutputformatfordisplayingresults(table,vertical,csv2,dsv,tsv2,xmlattrs,xmlelements,anddeprecatedformats(csv,tsv))!primarykeysListalltheprimarykeysforthespecifiedtable!proceduresListalltheprocedures!propertiesConnecttothedatabasespecifiedinthepropertiesfile(s)!quitExitstheprogram!reconnectReconnecttothedatabase!recordRecordalloutputtothespecifiedfile!rehashFetchtableandcolumnnamesforcommandcompletion!rollbackRollbackthecurrenttransaction(ifautocommitisoff)!runRunascriptfromthespecifiedfile!saveSavethecurrentvariabesandaliases!scanScanforinstalledJDBCdrivers!scriptStartsavingascripttoafile!setSetabeelinevariable!shExecuteashellcommand!sqlExecuteaSQLcommand!tablesListallthetablesinthedatabase!typeinfoDisplaythetypemapforthecurrentconnection!verboseSetverbosemodeonComments,bugreports,andpatchesgoto???0:jdbc:hive2://master:10000>
本文说明在安装单机版之前需要安装好Hadoop可参考这个安装伪分布式单机安装解压配置环境变量#解压[root@masterhbase]#tar-zxvfhbase-1.2.0-bin.tar.gz[root@masterhbase]#pwd/usr/local/src/hbase#配置环境变量[root@masterhbase]#vi~/.bash_profile#追加到环境变量后面#HbaseexportHBASE_HOME=/usr/local/src/hbase/hbase-1.2.0exportPATH=$PATH:$HBASER_HOME/bin:[root@masterhbase-1.2.0]#source~/.bash_profile修改Hbase配置文件进入Hbase的conf/目录下修改hbase-site.xml文件#配置Hbase的文件存储路径#路径可以是本地,或者HDFS上<property><name>hbase.rootdir</name><value>file:///usr/local/src/hbase/tmp</value></property>修改hbase-env.sh文件#修改第一处加入JAVA_HOME#Thejavaimplementationtouse.Java1.7+required.#exportJAVA_HOME=/usr/java/jdk1.6.0/exportJAVA_HOME=/usr/local/src/java/jdk1.8.0_221#修改第二处加入HBASE_CLASSPATH就是conf路径#ExtraJavaCLASSPATHelements.Optional.#exportHBASE_CLASSPATH=exportHBASE_CLASSPATH=/usr/local/src/hbase/hbase-1.2.0/conf#修改第三处禁止Hbase启动或者关闭Zookeeper#TellHBasewhetheritshouldmanageit'sowninstanceofZookeeperornot.#exportHBASE_MANAGES_ZK=trueexportHBASE_MANAG_ZK=flase#关闭文件,更新[root@masterconf]#sourcehbase-env.sh启动Hbase和测试进入Hbase的bin/目录启动Hbase[root@masterbin]#start-hbase.shstartingmaster,loggingto/usr/local/src/hbase/hbase-1.2.0/logs/hbase-root-master-master.outJavaHotSpot(TM)64-BitServerVMwarning:ignoringoptionPermSize=128m;supportwasremovedin8.0JavaHotSpot(TM)64-BitServerVMwarning:ignoringoptionMaxPermSize=128m;supportwasremovedin8.0JavaHotSpot(TM)64-BitServerVMwarning:ignoringoptionPermSize=128m;supportwasremovedin8.0JavaHotSpot(TM)64-BitServerVMwarning:ignoringoptionMaxPermSize=128m;supportwasremovedin8.0安装测试jps节点#出现HMaster即安装成功[root@masterbin]#jps16275HMaster进入网页端查看IP:16010Hbase高可用部署参考Hbase1.2.0高可用集群安装