HADOOP与HIVE常规操作火龙果整理uml.org.cn火龙果整理uml.org.cnHADOOP简介Hadoop一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop是项目的总称,主要是由分布式存储(HDFS)、分布式计算(MapReduce)组成。Hadoop程序目前只能运行在Linux系统上,window上运行需要安装其他插件,安装过程见《hadoop安装说明.docx》。火龙果整理uml.org.cnHADOOP集群架构图火龙果整理uml.org.cnHADOOP集群架构图(续)文件写入:①Client向NameNode发起文件写入的请求。②NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。③Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。文件读取:①Client向NameNode发起文件读取的请求。②NameNode返回文件存储的DataNode的信息。③Client读取文件信息。火龙果整理uml.org.cnHADOOP集群架构图(续)NameNode记录着每个文件的元数据。每个文件在那个块中,每个数据节点包含哪些块。(不储存原始文件)DataNode是文件的工作者,它们存储文件并提供定位块的服务,并且定时向名称节点发送它们的存储块的列表。(储存原始文件)3.重要参数dfs.replication.min参数。最小为1,表示每个块在HDFS中的副本个数。火龙果整理uml.org.cnHADOOP常规命令(一)1、查看指定目录下内容hadoopdfs–ls[文件目录]eg:hadoopdfs–ls/user/wangkai.pt2、打开某个已存在文件hadoopdfs–cat[file_path]eg:hadoopdfs-cat/user/wangkai.pt/data.txt3、将本地文件存储至hadoophadoopfs–put[本地地址][hadoop目录]hadoopfs–put/home/t/file.txt/user/t(file.txt是文件名)4、将本地文件夹存储至hadoophadoopfs–put[本地目录][hadoop目录]hadoopfs–put/home/t/dir_name/user/t(dir_name是文件夹名)火龙果整理uml.org.cnHADOOP常规命令(二)5、将hadoop上某个文件down至本地已有目录下hadoopfs-get[文件目录][本地目录]eg:hadoopfs–get/user/t/ok.txt/home/t6、删除hadoop上指定文件hadoopfs–rm[文件地址]eg:hadoopfs–rm/user/t/ok.txt7、删除hadoop上指定文件夹(包含子目录等)hadoopfs–rm[目录地址]eg:hadoopfs–rmr/user/t8、在hadoop指定目录内创建新目录eg:hadoopfs–mkdir/user/t9、在hadoop指定目录下新建一个空文件使用touchz命令:eg:hadoopfs-touchz/user/new.txt10、将hadoop上某个文件重命名使用mv命令:eg:hadoopfs–mv/user/test.txt/user/ok.txt(将test.txt重命名为ok.txt)火龙果整理uml.org.cnHADOOP常规命令(三)11、将hadoop指定目录下所有内容保存为一个文件,同时down至本地eg:hadoopdfs–getmerge/user/home/t12、将正在运行的hadoop作业kill掉eg:hadoopjob–kill[job-id]火龙果整理uml.org.cnHADOOP实例—客户标签1.存放数据的位置hadoopfs-ls/lab_user/table2.练习目录hadoopfs–ls/lab_user/dfgx3.数据导出目录cd/data8/lab_user4.在hadoop平台从hive中导出数据hive-e'select*fromdpi_cdr_userurl_17wheredatelabel=20130722mdnin(18091185165,8618091185165)'/data8/lab_user/test/url_0726.txt5.用java来实现hadoop命令Hadoopjarhdfs.jarcom.lianxi.mkdir.MkdironHDFS火龙果整理uml.org.cnHIVE是什么?其实HIVE就是一个SQL解析引擎,它将SQL语句转译成M/RJOB然后在Hadoop执行,来达到快速开发的目的。拨开HIVE的神秘面纱之后来看它的表其实就是一个Hadoop的目录/文件(HIVE默认表存放路径一般都是在你工作目录的hive目录里面),按表名做文件夹分开,如果你有分区表的话,分区值是子文件夹,可以直接在其它的M/Rjob里直接应用这部分数据。火龙果整理uml.org.cnHIVE与传统数据库Hive为数据仓库设计,与传统数据库完全不同,只是采用了同样的Sql界面Hive数据库查询语言HQLSQL数据存储位置HDFSRawDevice或者LocalFS数据格式用户定义系统决定数据更新不支持支持索引无有执行MapRedcueExecutor执行延迟高低可扩展性高低数据规模大小火龙果整理uml.org.cn为什么选择HIVE简单selectword,count(*)from(selectexplode(split(sentence.''))wordfromarticle)tgroupbyword火龙果整理uml.org.cnHIVE架构火龙果整理uml.org.cn数据模型DatabaseTablePartitionFile火龙果整理uml.org.cn数据类型Primitiveint/bigint/smallint/tinyintbooleandouble/floatstringArray[1,2,3]Map1shuxue:80,yuwen:60–a.txt,hive:aint,bmapstring:intStruct没有精度/长度设定int4没有没有date/datetime类型火龙果整理uml.org.cnDDL—建表CREATE[EXTERNAL]TABLE[IFNOTEXISTS]table_name(col_namedata_type,...)[PARTITIONEDBY(col_namedata_type,...)][[ROWFORMATrow_format][STOREDASfile_format]][LOCATIONhdfs_path]火龙果整理uml.org.cnDDL—建表CTASCREATE[EXTERNAL]TABLE[IFNOTEXISTS]table_name(col_namedata_type,...)…ASSELECT…火龙果整理uml.org.cnDDL—建内部表实例CREATETABLEtmp_table#表名(titlestring,#字段名称字段类型minimum_biddouble,quantitybigint,have_invoicebigint)COMMENT'注释:XXX'#表注释PARTITIONEDBY(ptSTRING)#分区表字段(如果你文件非常之大的话,采用分区表可以快过滤出按分区字段划分的数据)ROWFORMATDELIMITEDFIELDSTERMINATEDBY'\001'#字段是用什么分割开的STOREDASSEQUENCEFILE;#用哪种方式存储数据,SEQUENCEFILE是hadoop自带的文件压缩格式---存储方式:TEXTFILE,SEQUENCEFILE,RCFILE一些相关命令SHOWTABLES;#查看所有的表SHOWTABLES'*TMP*';#支持模糊查询SHOWPARTITIONSTABLE;#查看表有哪些分区DESCRIBETABLE;#查看表结构火龙果整理uml.org.cnDDL—建外部表CREATEEXTERNALTABLEpage_view(viewTimeINT,useridBIGINT,page_urlSTRING,referrer_urlSTRING,ipSTRINGCOMMENT'IPAddressoftheUser',countrySTRINGCOMMENT'countryoforigination‘)COMMENT'Thisisthestagingpageviewtable'ROWFORMATDELIMITEDFIELDSTERMINATEDBY'44'LINESTERMINATEDBY'12'STOREDASTEXTFILELOCATION'/user/data/staging/page_view';火龙果整理uml.org.cnDMLInsertINSERTOVERWRITETABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)]select_statementFROMfrom_statementMultipleinsertFROMfrom_statementINSERTOVERWRITETABLEtablename1[PARTITION...)]select_statement1[INSERTOVERWRITETABLEtablename2[PARTITION...]select_statement2]...DynamicpartitioningINSERTOVERWRITETABLEtablenamePARTITION(partcol1[=val1],partcol2[=val2]...)select_statementFROMfrom_statement(HDFS)不支持UPDATE!火龙果整理uml.org.cnDMLAddPartitionsALTERTABLEtable_nameADDpartition_spec[LOCATION'location1']partition_spec[LOCATION'location2']...partition_spec::PARTITION(partition_col=partition_col_value,partition_col=partiton_col_value,...)用户可以用ALTERTABLEADDPARTITION来向一个表中增加分区。当分区名是字符串时加引号。ALTERTABLEpage_viewADDPARTITION(dt='2008-08-08',country='us')location'/path/to/us/part080808'PARTITION(dt='2008-08-09',country='us')location'/path/to/us/part080809';火龙果整理uml.org.cn查询selectSELECT[ALL|DISTINCT]select_expr,select_expr,...FROMtable_reference[WHEREwhere_condition][GROUPBYcol_list][CLUSTERBYcol_list|[DISTRIBUTEBYcol_list][SORTBYcol_list]|[ORDERBYcol_list]][LIMITnumber]火龙果整理uml.org.cn数据加载当数据被加载至表中时,不会对数据进行任何转换。Load操作只是将数据复制/