• [大数据] Hive调优:基于MR的map和reduce数量控制与调优
    1.概述主要对基于MR的map数和reduce数测试与调优 2.数据准备(1)表信息本次测试的表和sql都是使用的TPC-DSMR的表文件存储格式为text。使用text文件格式的原因:能够更直观的来分析生成map数和reduce数的原因表名是否压缩总数占用空间文件数date_dim否730499.8 M1item否4800012.9 M1store否11830.5 K1store_sales否230396418723109G8000store_sales_compress是23039641872825.3 G3515 store_sales事实大表的数据块分布单个文件占用空间380-400M400M以上文件数792773 store_sales的表结构:   (2)SQL语句测试SQL为SQL2 CPU密集型 3.map数的控制3.1 map数控制测试Hive中来控制map数量的参数不是Hive本身的参数,而是MapReduce的参数,但是可以通过在Hive中使用set的形式来使用。影响map个数的hive参数如下表:参数默认值说明mapreduce.input.fileinputformat.split.maxsize256000000每个Map的最大输入mapreduce.input.fileinputformat.split.minsize1每个Map的最小输入mapred.map.task2Task数量hive.input.formatorg.apache.hadoop.hive.ql.io. CombineHiveInputFormat输出格式dfs.block.size134217728默认的block块大小 说明:dfs.block.size参数不能通过Hive的set语句来设置,只能通过修改HDFS的参数来设置。 (1)HiveInputFormat当输入类型为HiveInputFormat时,map数量由以下参数控制,且剩余的小文件不会合并:参数默认值说明mapreduce.input.fileinputformat.split.minsize1每个Map的最小输入mapred.map.task2Task数量dfs.block.size134217728默认的block块大小 文件的分割大小满足下面的公式:splitSize= max{ mapreduce.input.fileinputformat.split.minsize ,min{ dfs.block.size , 表大小 / mapred.map.task } } 测试1:mapred.map.tasks=2;mapreduce.input.fileinputformat.split.minsize=1;共有29930个map数根据公式可以计算出来,文件分割大小为dfs.block.size的值,128M。store_sales表总共有8000个文件,数据量分布在380-410M之间。例子:一个400M的文件,理论上根据128M分割,会分割成4个文件。(128M,128M,128M,16M)一个380M的文件,理论上根据128M分割,会分割成3个文件。(128M,128M,124M)所以map数应该在3*8000 ~ 4*8000之间。结果值29930满足上述公式。 测试2:mapred.map.tasks=2;mapreduce.input.fileinputformat.split.minsize=256000000;共有16000个map数根据公式可以计算出来,文件分割大小为mapreduce.input.fileinputformat.split.minsize的值,244M。每个文件都被分成两个文件,所以map数为16000。 测试3:mapred.map.tasks=2;mapreduce.input.fileinputformat.split.minsize= 512000000;总共有8000个map数根据公式可以计算出来,文件分割大小为mapreduce.input.fileinputformat.split.minsize的值,488M。每个文件都被分成一个文件,所以map数为8000。 测试4:mapred.map.tasks=2;mapreduce.input.fileinputformat.split.minsize= 1024000000;总共有8000个map数根据公式可以计算出来,文件分割大小为mapreduce.input.fileinputformat.split.minsize的值,488M。每个文件都被分成一个文件,所以map数为8000。 (2)CombineHiveInputFormat当输入类型为CombineHiveInputFormat时,map数量由以下参数控制,剩余的小文件会合并:参数默认值说明mapreduce.input.fileinputformat.split.maxsize256000000每个Map的最大输入 测试1:mapreduce.input.fileinputformat.split.maxsize=256000000;总共有12001个map数由于CombineHiveInputFormat,会对小文件进行合并,所以需要根据数据的总量去计算map数,3000 * 1024 / 12000≈256000000 测试2:mapreduce.input.fileinputformat.split.maxsize=128000000;总共有24001个map数 测试3:mapreduce.input.fileinputformat.split.maxsize=512000000;总共有6001个map数 测试4:mapreduce.input.fileinputformat.split.maxsize=1024000000;总共有3001个map数 (3)Text格式文件压缩压缩相关参数参数默认值说明io.compression.codecsorg.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.SnappyCodecHive配置可用的压缩算法hive.exec.compress.outputfalse开启压缩mapreduce.output.fileoutputformat.compress.codecorg.apache.hadoop.io.compress.DefaultCodec使用的压缩算法 测试使用store_sales_compress表,Text格式,压缩格式为DefaultCodec,DefaultCodec不支持文件切分,每个文件大小分布在280M~340M之间表名是否压缩总数占用空间文件数store_sales_compress是23039641872825.3 G3515 测试1:mapreduce.input.fileinputformat.split.maxsize=512000000;总共有3515个map数 测试2:mapreduce.input.fileinputformat.split.maxsize=256000000;总共有3515个map数因为文件存储使用了DefaultCodec压缩,且DefaultCodec压缩不支持文件切分,所以我们设置参数为256000000时没有生效。 测试3:mapreduce.input.fileinputformat.split.maxsize=128000000;总共有3515个map数原因同测试2 3.2 map数控制结果(1)HiveInputFormatmapreduce.input.fileinputformat.split.minsize值Map数129930    25600000016000512000000800010240000008000 (2)CombineHiveInputFormatmapreduce.input.fileinputformat.split. maxsize值Map数25600000012001    12800000024001512000000600110240000003001 (3)Text格式文件压缩mapreduce.input.fileinputformat.split. maxsiz值Map数5120000003515       25600000035151280000003515 4.reduce数的控制影响reduce个数的参数参数默认值说明mapred.reduce.tasks-1指定reduce的个数hive.exec.reducers.bytes.per.reducer67108864每个reduce的数据处理量hive.exec.reducers.max1009reduce的最大个数 reduce的个数满足下面的公式:reduce=min(hive.exec.reducers.max, map input数据大小/hive.exec.reducers.bytes.per.reducer) reduce的个数控制相对于map就要简单很多,并且可以精确地来控制reduce的个数。以下是执行命令时候的信息: (1)mapred.reduce.tasks可以通过修改mapred.reduce.tasks的值来精确控制reduce的个数。默认情况下不设置,除非对于某个特定的SQL语句可以单独设置,但是功能上没有hive.exec.reducers.max来的方便。其中,每个reduce处理的数据为(总数据量 /设置的reduce个数)。测试1:set mapred.reduce.tasks=200; 总共有200个reduce,从上述的1009个变成200个。 (2)hive.exec.reducers.bytes.per.reducer测试1:set hive.exec.reducers.bytes.per.reducer = 67108864;共有1009个reduce数根据公式可以计算出:3109 * 1024 / (67108864/ 1024 /1024 ) = 49744 > 1009,所以reduce个数为1009 测试2:set hive.exec.reducers.bytes.per.reducer = 4096000000;共有816个reduce数根据公式可以计算出:3109 * 1024 / (4096000000 / 1024 /1024 ) = 815 < 1009 ,根据结果需要取815值。算出来的值也基本等于上面的816 5.调优流程(1)map基于MR,先判断文件是否压缩,且压缩文件是否支持切分,再判断是hive.input.format的实现类。然后使用相对应的参数进行map数调优。 (2)reduce需要根据集群的资源以及map端实际的输出数据量来设置reduce数。 6.总结推荐使用(1)mapl  当使用压缩时,如果压缩文件不可切分,那么久不能通过修改参数来改动map数。所以在选择压缩算法时,需要考虑该压缩算法是否支持文件切分。l  在MR作为引擎的情况下,推荐使用CombineHiveInputFormat,而不是HiveInputFormatl  需要通过测试来得到性能好的map数。不是越多越好,也不是越少越好 (2)reducel  推荐reduce数为集群能启动的最大container数的80%,或者小于这个数。l  mapred.reduce.tasks这个参数一般不推荐使用。
  • [问题求助] 【鲲鹏服务器产品】【编译Apache大数据组件】hive、spark组件编译
    【功能模块】希望能在鲲鹏云上搭建一套  自建的Hadoop 大数据集群【操作步骤&问题现象】spark编译指南【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 【云小课】EI第17课 大数据融合分析:GaussDB(DWS)轻松导入MRS-Hive数据源
    大数据融合分析时代,GaussDB(DWS)如需访问MRS数据源,该如何实现?本期云小课带您开启MRS数据源之门,通过远程读取MRS集群Hive上的ORC数据表完成数据导入DWS。准备环境需确保MRS和DWS集群在同一个区域、可用区、同一VPC子网内,确保集群网络互通。基本流程1、创建MRS分析集群(选择Hive组件)。2、通过将本地txt数据文件上传至OBS桶,再通过OBS桶导入Hive,并由txt存储表导入ORC存储表。3、创建MRS数据源连接。4、创建外部服务器。5、创建外表。6、通过外表导入DWS本地表。创建MRS分析集群登录华为云控制台,选择“EI企业智能 > MapReduce服务”,单击“购买集群”,选择“自定义购买”,填写软件配置参数,单击“下一步”。表1 软件配置参数项取值区域华北-北京四集群名称MRS01集群版本MRS 3.0.5集群类型分析集群填写硬件配置参数,单击“下一步”。表1 硬件配置参数项取值计费模式按需计费可用区可用区2虚拟私有云vpc-01子网subnet-01安全组自动创建弹性公网IP10.x.x.x企业项目defaultMaster节点打开“集群高可用”分析Core节点3分析Task节点0填写高级配置参数,单击“立即购买”,等待约15分钟,集群创建成功。表1 高级配置参数项取值标签test01委托保持默认即可告警保持默认即可规则名称保持默认即可主题名称保持默认即可Kerberos认证默认打开用户名admin密码设置密码,例如:Huawei@12345。该密码用于登录集群管理页面。确认密码再次输入设置admin用户密码登录方式密码用户名root密码设置密码,例如:Huawei_12345。该密码用于远程登录ECS机器。确认密码再次输入设置的root用户密码通信安全授权勾选“确认授权”准备MRS的ORC表数据源本地PC新建一个product_info.txt,并拷贝以下数据,保存到本地。100,XHDK-A-1293-#fJ3,2017-09-01,A,2017 Autumn New Shirt Women,red,M,328,2017-09-04,715,good 205,KDKE-B-9947-#kL5,2017-09-01,A,2017 Autumn New Knitwear Women,pink,L,584,2017-09-05,406,very good! 300,JODL-X-1937-#pV7,2017-09-01,A,2017 autumn new T-shirt men,red,XL,1245,2017-09-03,502,Bad. 310,QQPX-R-3956-#aD8,2017-09-02,B,2017 autumn new jacket women,red,L,411,2017-09-05,436,It's really super nice 150,ABEF-C-1820-#mC6,2017-09-03,B,2017 Autumn New Jeans Women,blue,M,1223,2017-09-06,1200,The seller's packaging is exquisite 200,BCQP-E-2365-#qE4,2017-09-04,B,2017 autumn new casual pants men,black,L,997,2017-09-10,301,The clothes are of good quality. 250,EABE-D-1476-#oB1,2017-09-10,A,2017 autumn new dress women,black,S,841,2017-09-15,299,Follow the store for a long time. 108,CDXK-F-1527-#pL2,2017-09-11,A,2017 autumn new dress women,red,M,85,2017-09-14,22,It's really amazing to buy 450,MMCE-H-4728-#nP9,2017-09-11,A,2017 autumn new jacket women,white,M,114,2017-09-14,22,Open the package and the clothes have no odor 260,OCDA-G-2817-#bD3,2017-09-12,B,2017 autumn new woolen coat women,red,L,2004,2017-09-15,826,Very favorite clothes 980,ZKDS-J-5490-#cW4,2017-09-13,B,2017 Autumn New Women's Cotton Clothing,red,M,112,2017-09-16,219,The clothes are small 98,FKQB-I-2564-#dA5,2017-09-15,B,2017 autumn new shoes men,green,M,4345,2017-09-18,5473,The clothes are thick and it's better this winter. 150,DMQY-K-6579-#eS6,2017-09-21,A,2017 autumn new underwear men,yellow,37,2840,2017-09-25,5831,This price is very cost effective 200,GKLW-l-2897-#wQ7,2017-09-22,A,2017 Autumn New Jeans Men,blue,39,5879,2017-09-25,7200,The clothes are very comfortable to wear 300,HWEC-L-2531-#xP8,2017-09-23,A,2017 autumn new shoes women,brown,M,403,2017-09-26,607,good 100,IQPD-M-3214-#yQ1,2017-09-24,B,2017 Autumn New Wide Leg Pants Women,black,M,3045,2017-09-27,5021,very good. 350,LPEC-N-4572-#zX2,2017-09-25,B,2017 Autumn New Underwear Women,red,M,239,2017-09-28,407,The seller's service is very good 110,NQAB-O-3768-#sM3,2017-09-26,B,2017 autumn new underwear women,red,S,6089,2017-09-29,7021,The color is very good 210,HWNB-P-7879-#tN4,2017-09-27,B,2017 autumn new underwear women,red,L,3201,2017-09-30,4059,I like it very much and the quality is good. 230,JKHU-Q-8865-#uO5,2017-09-29,C,2017 Autumn New Clothes with Chiffon Shirt,black,M,2056,2017-10-02,3842,very good登录OBS控制台,单击“创建桶”,填写以下参数,单击“立即创建”。表1 桶参数参数项取值区域华北-北京四数据冗余存储策略单AZ存储桶mrs-datasource存储类别标准存储桶策略私有默认加密关闭归档数据直读关闭企业项目default标签-等待桶创建好,单击桶名称,选择“对象 > 上传对象”,将product_info.txt上传至OBS桶。切换回MRS控制台,单击创建好的MRS集群名称,进入“概览”,单击“IAM用户同步”所在行的“单击同步”,等待约5分钟同步完成。回到MRS集群页面,单击“节点管理”,单击任意一台master节点,进入该节点页面,切换到“弹性公网IP”,单击“绑定弹性公网IP”,勾选已有弹性IP并单击“确定”,如果没有,请创建。记录此公网IP。确认主master节点。使用SSH工具以root用户登录以上节点,root密码为Huawei_12345,切换到omm用户。su - omm执行以下命令查询主master节点,回显信息中“HAActive”参数值为“active”的节点为主master节点。sh ${BIGDATA_HOME}/om-0.0.1/sbin/status-oms.sh使用root用户登录主master节点,切换到omm用户,并进入Hive客户端所在目录。su - ommcd /opt/client在Hive上创建存储类型为TEXTFILE的表product_info。在/opt/client路径下,导入环境变量。source bigdata_env登录Hive客户端。beeline依次执行以下SQL语句创建demo数据库及表product_info。CREATE DATABASE demo;USE demo;DROP TABLE product_info; CREATE TABLE product_info ( product_price int not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt int , product_comment_time date , product_comment_num int , product_comment_content varchar(200) ) row format delimited fields terminated by ',' stored as TEXTFILE将product_info.txt数据文件导入Hive。切回到MRS集群,单击“文件管理”,单击“导入数据”。OBS路径:选择上面创建好的OBS桶名,找到product_info.txt文件,单击“是”。HDFS路径:选择/user/hive/warehouse/demo.db/product_info/,单击“是”。单击“确定”,等待导入成功,此时product_info的表数据已导入成功。创建ORC表,并将数据导入ORC表。执行以下SQL语句创建ORC表。DROP TABLE product_info_orc; CREATE TABLE product_info_orc ( product_price int not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt int , product_comment_time date , product_comment_num int , product_comment_content varchar(200) ) row format delimited fields terminated by ',' stored as orc;将product_info表的数据插入到Hive ORC表product_info_orc中。insert into product_info_orc select * from product_info;查询ORC表数据导入成功。select * from product_info_orc;创建MRS数据源连接登录DWS管理控制台,单击已创建好的DWS集群,确保DWS集群与MRS在同一个区域、可用分区,并且在同一VPC子网下。切换到“MRS数据源”,单击“创建MRS数据源连接”。选择前序步骤创建名为的“MRS01”数据源,用户名:admin,密码:Huawei@12345,单击“确定”,创建成功。创建外部服务器使用Data Studio连接已创建好的DWS集群。新建一个具有创建数据库权限的用户dbuser:CREATE USER dbuser WITH CREATEDB PASSWORD "Bigdata@123";切换为新建的dbuser用户:SET ROLE dbuser PASSWORD "Bigdata@123";创建新的mydatabase数据库:CREATE DATABASE mydatabase;执行以下步骤切换为连接新建的mydatabase数据库。在Data Studio客户端的“对象浏览器”窗口,右键单击数据库连接名称,在弹出菜单中单击“刷新”,刷新后就可以看到新建的数据库。右键单击“mydatabase”数据库名称,在弹出菜单中单击“打开连接”。右键单击“mydatabase”数据库名称,在弹出菜单中单击“打开新的终端”,即可打开连接到指定数据库的SQL命令窗口,后面的步骤,请全部在该命令窗口中执行。为dbuser用户授予创建外部服务器的权限:GRANT ALL ON FOREIGN DATA WRAPPER hdfs_fdw TO dbuser;其中FOREIGN DATA WRAPPER的名字只能是hdfs_fdw,dbuser为创建SERVER的用户名。执行以下命令赋予用户使用外表的权限。ALTER USER dbuser USEFT;切换回Postgres系统数据库,查询创建MRS数据源后系统自动创建的外部服务器。SELECT * FROM pg_foreign_server;返回结果如: srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions --------------------------------------------------+----------+--------+---------+------------+--------+--------------------------------------------------------------------------------------------------------------------- gsmpp_server | 10 | 13673 | | | | gsmpp_errorinfo_server | 10 | 13678 | | | | hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca | 16476 | 13685 | | | | {"address=192.168.1.245:9820,192.168.1.218:9820",hdfscfgpath=/MRS/8f79ada0-d998-4026-9020-80d6de2692ca,type=hdfs} (3 rows)切换到mydatabase数据库,并切换到dbuser用户。SET ROLE dbuser PASSWORD "Bigdata@123";创建外部服务器。SERVER名字、地址、配置路径保持与8一致即可。CREATE SERVER hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca FOREIGN DATA WRAPPER HDFS_FDW OPTIONS ( address '192.168.1.245:9820,192.168.1.218:9820', //MRS管理面的Master主备节点的内网IP,可与DWS通讯。 hdfscfgpath '/MRS/8f79ada0-d998-4026-9020-80d6de2692ca', type 'hdfs' );查看外部服务器。SELECT * FROM pg_foreign_server WHERE srvname='hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca';返回结果如下所示,表示已经创建成功: srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions --------------------------------------------------+----------+--------+---------+------------+--------+--------------------------------------------------------------------------------------------------------------------- hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca | 16476 | 13685 | | | | {"address=192.168.1.245:9820,192.168.1.218:29820",hdfscfgpath=/MRS/8f79ada0-d998-4026-9020-80d6de2692ca,type=hdfs} (1 row)创建外表获取Hive的product_info_orc的文件路径。登录MRS管理控制台。选择“集群列表 > 现有集群”,单击要查看的集群名称,进入集群基本信息页面。单击“文件管理”,选择“HDFS文件列表”。进入您要导入到GaussDB(DWS)集群的数据的存储目录,并记录其路径。创建外表。 SERVER名字填写创建的外部服务器名称,foldername填写查到的路径。DROP FOREIGN TABLE IF EXISTS foreign_product_info; CREATE FOREIGN TABLE foreign_product_info ( product_price integer not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) SERVER hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca OPTIONS ( format 'orc', encoding 'utf8', foldername '/user/hive/warehouse/demo.db/product_info_orc/' ) DISTRIBUTE BY ROUNDROBIN;执行数据导入创建本地目标表。DROP TABLE IF EXISTS product_info; CREATE TABLE product_info ( product_price integer not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) with ( orientation = column, compression=middle ) DISTRIBUTE BY HASH (product_id);从外表导入目标表。INSERT INTO product_info SELECT * FROM foreign_product_info;查询导入结果。SELECT * FROM product_info;
  • [存储] Hive分布式数据仓库(2)
    在Hive流行之前,企业大多采用传统的并行数据仓库架构。传统的数据仓库一般采用国外知名厂商的大型服务器和成熟的解决方案,不仅价格昂贵且可拓展性较差,而且平台工具与其他厂商难以适配,用户操作体验也比较差、开发效率不高,当数据量达到TB级别后基本无法得到很好的性能。而且,传统数据仓库基本只擅长处理结构化或半结构化数据,对于非结构化数据的处理并不能很好地支持。Hive的出现,为企业提供了更加廉价且优质的解决方案。Hive的主要组件包括UI组件、Driver组件(Complier、Optimizer和Executor)、Metastore组件、JDBC/ODBC、Thrift Server和Hive Web Interface(HWI)等,接下来分别对这几个组件进行介绍。(1) Drvier组件: 该组件是Hive的核心组件,该组件包括Complier(编译器)、Optimizer(优化器)和Executor(执行器),它们的作用是对Hive SQL语句进行解析、编译优化、生成执行计划,然后调用底层MR计算框架。(2) MetaStore组件: 该组件是Hive用来负责管理元数据的组件。Hive的元数据存储在关系型数据库中,其支持的关系型数据库有Derby和Mysql,其中Derby是Hive默认情况下使用的数据库,它内嵌在Hive中,但是该数据库只支持单会话,在生产中并不适用,在我们日常的开发中,需要支持多会话,因此采用Mysql作为元数据库,Hive内部对Mysql提供了很好的支持。(3) Thrift Server:该组件提供JDBC和ODBC接入的能力,用来进行可扩展且跨语言的服务开发。Hive集成了该服务,能让不同的编程语言调用Hive的接口。(4) Web Interface:该组件是Hive客户端提供的一种通过网页方式访问Hive所提供的服务。
  • [存储] Hive分布式数据仓库(1)
           Hive 是基于Hadoop构建的一套数据仓库分析系统,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用。       Hive十分适合对数据仓库进行统计分析,Hive支持了绝大多数的语句如DDL、DML以及常见的聚合函数、连接查询、条件查询。它还提供了一系列的方法,进行数据提取转化加载,用来存储、查询和分析存储在Hadoop中的大规模数据集,并支持UDF(User-Defined Function)、UDAF(User-Defnes AggregateFunction)和UDTF(User-Defined Table-Generating Function),也可以实现对map和reduce函数的定制,为数据操作提供了良好的伸缩性和可扩展性。       Hive不适合用于联机(online)事务处理,也不提供实时查询功能。它最适合应用在基于大量不可变数据的批处理作业。Hive的特点包括:可伸缩(在Hadoop的集群上动态添加设备)、可扩展、容错、输入格式的松散耦合。
  • [赋能学习] 华为FusionInsight MRS实战 - 使用Flink SQL-Client连接hive
    # 华为FusionInsight MRS实战 - 使用Flink SQL-Client连接hive ## 介绍 在之前的文章我们了解到如何使用华为Flink Server界面通过Flink SQL将数据写入hive。详细内容请参考如下连接。 [《华为FusionInsight MRS实战 - FlinkSQL从kafka写入hive》](https://bbs.huaweicloud.com/forum/thread-173950-1-1.html) 本文介绍如何使用Flink SQL-Client方式连接hive,并写入数据 ## 前提条件 首先需要了解以下三点内容。 1. 如何配置Flink客户端。 参考:[《华为FusionInsight MRS Flink客户端配置》](https://bbs.huaweicloud.com/forum/thread-175741-1-1.html) 2. 如何配置Flink SQL Client。参考:[《华为FusionInsight MRS Flink SQL-Client客户端配置》](https://bbs.huaweicloud.com/forum/thread-176103-1-1.html) 3. 如何使用Flink SQL Client。参考:[《华为FusionInsight MRS实战 - Flink增强特性之可视化开发平台FlinkSever开发学习》](https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=161992) ## 操作步骤 - 因为将写入hive表,需要开启flink的checkpoint功能,需要手动在客户端配置文件`/opt/92_client/hadoopclient/Flink/flink/conf/flink-conf.yaml`添加如下内容 ``` execution.checkpointing.interval: 15000 state.backend: filesystem state.checkpoints.dir: hdfs:///flink/checkpoints ``` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/171617y4tipaigstnm40ed.png) - 使用命令启动flink session `./bin/yarn-session.sh -t conf/` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/1716407ygz4jqwrht0e2yr.png) - 使用命令登录flink sql client客户端 `./sql-client.sh embedded -d ./../conf/sql-client-defaults.yaml` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/171703rb0g7ubwmktrijim.png) - 创建hive目的表 ``` use catalog myhive; SET table.sql-dialect=hive; CREATE TABLE IF NOT EXISTS hive_dialect_tbl ( `id` int , `name` string , `age` int ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; ``` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/171725huxpkl8tox1vr5rp.png) - 创建数据源表 ``` SET table.sql-dialect=default; CREATE TABLE datagen ( `id` int , `name` string , `age` int ) WITH ( 'connector' = 'datagen', 'rows-per-second'='1' ); ``` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/171748mqgnv8bmklpxwtj6.png) - 在sql client创建数据写入 `INSERT INTO hive_dialect_tbl SELECT * FROM datagen;` - sql client端查看结果 ``` set execution.result-mode=tableau; select * from hive_dialect_tbl; ``` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/1718141uwhoepoiaiqwjlf.png) - hive端查看数据 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/171833rwiosqejcgoo8udt.png)
  • [赋能学习] 华为FusionInsight MRS实战 - FlinkSQL从kafka写入hive
    # 华为FusionInsight MRS实战 - FlinkSQL从kafka写入hive ## 背景说明 随着流计算的发展,挑战不再仅限于数据量和计算量,业务变得越来越复杂,开发者可能是资深的大数据从业者、初学 Java 的爱好者,或是不懂代码的数据分析者。如何提高开发者的效率,降低流计算的门槛,对推广实时计算非常重要。 SQL 是数据处理中使用最广泛的语言,它允许用户简明扼要地展示其业务逻辑。Flink 作为流批一体的计算引擎,致力于提供一套 SQL 支持全部应用场景,Flink SQL 的实现也完全遵循 ANSI SQL 标准。之前,用户可能需要编写上百行业务代码,使用 SQL 后,可能只需要几行 SQL 就可以轻松搞定。 本文介绍如何使用华为FusionInsight MRS FlinkServer服务进行界面化的FlinkSQL编辑,从而处理复杂的嵌套Json格式 ## Kafka样例数据 模拟物联网场景的数据 ``` {"device":"Demo1","signal":"60","life":"24","times":"2021-12-20 15:46:37"} {"device":"Demo2","signal":"78","life":"20","times":"2021-12-20 15:46:37"} {"device":"Demo3","signal":"41","life":"6","times":"2021-12-20 15:46:38"} {"device":"Demo4","signal":"71","life":"29","times":"2021-12-20 15:46:38"} {"device":"Demo5","signal":"38","life":"19","times":"2021-12-20 15:46:38"} {"device":"Demo6","signal":"98","life":"10","times":"2021-12-20 15:46:38"} {"device":"Demo7","signal":"80","life":"19","times":"2021-12-20 15:46:38"} {"device":"Demo8","signal":"55","life":"27","times":"2021-12-20 15:46:38"} {"device":"Demo9","signal":"93","life":"13","times":"2021-12-20 15:46:38"} {"device":"Demo10","signal":"46","life":"2","times":"2021-12-20 15:46:38"} {"device":"Demo11","signal":"94","life":"28","times":"2021-12-20 15:46:38"} {"device":"Demo12","signal":"24","life":"26","times":"2021-12-20 15:46:38"} {"device":"Demo13","signal":"64","life":"3","times":"2021-12-20 15:46:38"} {"device":"Demo14","signal":"97","life":"22","times":"2021-12-20 15:46:38"} {"device":"Demo15","signal":"82","life":"13","times":"2021-12-20 15:46:38"} {"device":"Demo16","signal":"2","life":"2","times":"2021-12-20 15:46:38"} {"device":"Demo17","signal":"19","life":"22","times":"2021-12-20 15:46:38"} {"device":"Demo18","signal":"51","life":"22","times":"2021-12-20 15:46:38"} {"device":"Demo19","signal":"1","life":"20","times":"2021-12-20 15:46:38"} {"device":"Demo20","signal":"41","life":"24","times":"2021-12-20 15:46:38"} ``` ## 使用华为MRS Flinkserver对接Hive ### 前提条件 - 集群已安装HDFS、Yarn、Kafka、Flink和Hive等服务。 - 包含Hive服务的客户端已安装,安装路径如:/opt/client。 - Flink支持1.12.2及以上版本,Hive支持3.1.0及以上版本。 - 参考基于用户和角色的鉴权创建一个具有“FlinkServer管理操作权限”的用户用于访问Flink WebUI的用户。 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/20/1736360gbj0jcxg8s5b01r.png) - 参考创建集群连接中的“说明”获取访问Flink WebUI用户的客户端配置文件及用户凭据。 ### 操作步骤 以映射表类型为Kafka对接Hive流程为例。 1. 使用flink_admin访问Flink WebUI,请参考访问Flink WebUI。 2. 新建集群连接,如:flink_hive。 a. 选择“系统管理 > 集群连接管理”,进入集群连接管理页面。 b. 单击“创集集群连接”,在弹出的页面中参考表1填写信息,单击“测试”,测试连接成功后单击“确定”,完成集群连接创建。 表1 创建集群连接信息 | 参数名称 | 参数描述 | 取值样例 | | ---- | ---- | ---- | |集群连接名称|集群连接的名称,只能包含英文字母、数字和下划线,且不能多于100个字符。|flink_hive| |描述|集群连接名称描述信息。|-| |版本|选择集群版本。|MRS 3| |是否安全版本|是,安全集群选择是。需要输入访问用户名和上传用户凭证; 否,非安全集群选择否。|是| |访问用户名|访问用户需要包含访问集群中服务所需要的最小权限。只能包含英文字母、数字和下划线,且不能多于100个字符。“是否安全版本”选择“是”时存在此参数。|flink_admin| |客户端配置文件|集群客户端配置文件,格式为tar。|-| |用户凭据|FusionInsight Manager中用户的认证凭据,格式为tar。“是否安全版本”选择“是”时存在此参数。输入访问用户名后才可上传文件。|flink_admin的用户凭| ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/20/173701okrumrzvi0plfwut.png) ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/20/173725okb4gjbtuycxpgt0.png) 3. 新建Flink SQL流作业,如:kafka_to_hive。 在作业开发界面进行作业开发,输入如下语句,可以单击上方“语义校验”对输入内容校验。 ``` CREATE TABLE test_kafka ( device varchar, signal varchar, life varchar, times timestamp ) WITH ( 'properties.bootstrap.servers' = '172.16.9.116:21007', 'format' = 'json', 'topic' = 'example-metric1', 'connector' = 'kafka', 'scan.startup.mode' = 'latest-offset', 'properties.sasl.kerberos.service.name' = 'kafka', 'properties.security.protocol' = 'SASL_PLAINTEXT', 'properties.kerberos.domain.name' = 'hadoop.hadoop.com' ); CREATE CATALOG myhive WITH ( 'type' = 'hive', 'hive-version' = '3.1.0', 'default-database' = 'default', 'cluster.name' = 'flink_hive' ); use catalog myhive; set table.sql-dialect = hive;create table test_avro_signal_table_orc ( device STRING, signal STRING, life STRING, ts timestamp ) PARTITIONED BY (dy STRING, ho STRING, mi STRING) stored as orc TBLPROPERTIES ( 'partition.time-extractor.timestamp-pattern' = '$dy $ho:$mi:00', 'sink.partition-commit.trigger' = 'process-time', 'sink.partition-commit.delay' = '0S', 'sink.partition-commit.policy.kind' = 'metastore,success-file' ); INSERT into test_avro_signal_table_orc SELECT device, signal, life, times, DATE_FORMAT(times, 'yyyy-MM-dd'), DATE_FORMAT(times, 'HH'), DATE_FORMAT(times, 'mm') FROM default_catalog.default_database.test_kafka; ``` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/20/1737526tbsjqu5lhyh0qpm.png) 注意:作业SQL开发完成后,请勾选“运行参数”中的“开启CheckPoint”,“时间间隔(ms)”可设置为“60000”,“模式”可使用默认值。 4. 启动任务 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/20/173831ksr246oxpzfdjojy.png) 5. 启动kafka生产者插入样例数据 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/20/173856n53f2m49esjuttwn.png) 6. 查看hive数据 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/20/173926jzcxzw96afacb6tg.png)
  • [行业动态] Hive 核心知识点灵魂 16 问
    本文目录No1. 请谈一下 Hive 的特点No2. Hive 底层与数据库交互原理?No3. Hive 的 HSQL 转换为 MapReduce 的过程?No4. Hive 的两张表关联,使用 MapReduce 怎么实现?No5. 请说明 hive 中 Sort By,Order By,Cluster By,Distrbute By 各代表什么意思?No6. 写出 hive 中 split、coalesce 及 collect_list 函数的用法(可举例)?No7. Hive 有哪些方式保存元数据,各有哪些特点?No.8 内部表和外部表的区别,以及各自的使用场景No9. Hive 中的压缩格式 TextFile、SequenceFile、RCfile 、ORCfile 各有什么区别 ?TextFileSequenceFileRCFileORCFileNo10. 所有的 Hive 任务都会有 MapReduce 的执行吗?No11. Hive 的函数:UDF、UDAF、UDTF 的区别?No12. 说说对 Hive 桶表的理解?No13. Hive 表关联查询,如何解决数据倾斜的问题?No14. 了解过 Hive 的哪些窗口函数No.15 小文件是如何产生的,解决方案No.16 Tez 引擎优点1. 请谈一下 Hive 的特点        hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 sql 查询功能,可以将 sql 语句转换为MapReduce 任务进行运行。        其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce 应用,十分适合数据仓库的统计分析,但是 Hive 不支持实时查询。        2. Hive 底层与数据库交互原理?        由于 Hive 的元数据可能要面临不断地更新、修改和读取操作,所以它显然不适合使用 Hadoop 文件系统进行存储。        目前 Hive 将元数据存储在 RDBMS 中,比如存储在 MySQL、Derby 中。元数据信息包括:存在的表、表的列、权限和更多的其他信息。3. Hive 的 HSQL 转换为 MapReduce 的过程?        HiveSQL -> AST(抽象语法树) -> QB(查询块) -> OperatorTree(操作树)-> 优化后的操作树 -> mapreduce 任务树 -> 优化后的 mapreduce 任务树        过程描述如下:        SQL Parser:Antlr 定义 SQL 的语法规则,完成 SQL 词法,语法解析,将 SQL 转化为抽象语法树 AST Tree;        Semantic Analyzer:遍历 AST Tree,抽象出查询的基本组成单元 QueryBlock;        Logical plan:遍历 QueryBlock,翻译为执行操作树 OperatorTree;        Logical plan optimizer: 逻辑层优化器进行 OperatorTree 变换,合并不必要的 ReduceSinkOperator,减少 shuffle 数据量;        Physical plan:遍历 OperatorTree,翻译为 MapReduce 任务;        Logical plan optimizer:物理层优化器进行 MapReduce 任务的变换,生成最终的执行计划;4. Hive 的两张表关联,使用 MapReduce 怎么实现?        如果其中有一张表为小表,直接使用 map 端 join 的方式(map 端加载小表)进行聚合。        如果两张都是大表,例如分别是客户表和订单表 。那么采用联合 key,联合 key 的第一个组成部分是 join on 中的公共字段,第二部分是一个 flag,0 代表表 A,1 代表表 B,由此让 Reduce 区分客户信息和订单信息;在 Mapper 中同时处理两张表的信息,将 join on 公共字段相同的数据划分到同一个分区中,进而传递到一个 Reduce 中,然后在 Reduce 中实现聚合。5. 请说明 hive 中 Sort By,Order By,Cluster By,Distrbute By 各代表什么意思?        order by:会对输入做全局排序,因此只有一个 reducer(多个 reducer 无法保证全局有序)。只有一个 reducer,会导致当输入规模较大时,需要较长的计算时间 。        sort by:分区内有序,不是全局排序,其在数据进入 reducer 前完成排序        distribute by:按照指定的字段对数据进行划分输出到不同的 reduce 中 ,结合 sory by 使用        cluster by:当Distribute by和Sorts by字段相同时,可以使用Cluster by方式。Cluster by除了具有Distribute by的功能外还兼具Sort by的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC。6. 写出 hive 中 split、coalesce 及 collect_list 函数的用法(可举例)?        split 将字符串转化为数组,即:split('a,b,c,d' , ',') ==> ["a","b","c","d"]        coalesce(T v1, T v2, …) 返回参数中的第一个非空值;如果所有值都为 NULL,那么返回 NULL。        collect_list 列出该字段所有的值,不去重 => select collect_list(id) from table7. Hive 有哪些方式保存元数据,各有哪些特点?        Hive 支持三种不同的元存储服务器,分别为:内嵌式元存储服务器、本地元存储服务器、远程元存储服务器,每种存储方式使用不同的配置参数 。        内嵌式元存储主要用于单元测试,在该模式下每次只有一个进程可以连接到元存储,Derby 是内嵌式元存储的默认数据库 。        在本地模式下,每个 Hive 客户端都会打开到数据存储的连接并在该连接上请求 SQL 查询 。        在远程模式下,所有的 Hive 客户端都将打开一个到元数据服务器的连接,该服务器依次查询元数据,元数据服务器和客户端之间使用 Thrift 协议通信 。8. 内部表和外部表的区别,以及各自的使用场景内部表        如果 Hive 中没有特别指定,则默认创建的表都是管理表,也称内部表。由Hive负责管理表中的数据,管理表不共享数据。删除管理表时,会删除管理表中的数据和元数据信息 。外部表        当一份数据需要被共享时,可以创建一个外部表指向这份数据 。        删除该表并不会删除掉原始数据,删除的是表的元数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据 。当表结构或者分区数发生变化时,需要进行一步修复的操作。9. Hive 中的压缩格式 TextFile、SequenceFile、RCfile 、ORCfile 各有什么区别 ?TextFile        默认格式,存储方式为行存储,数据不做压缩,磁盘开销大,数据解析开销大。可结合 Gzip、Bzip2 使用(系统自动检查,执行查询时自动解压),但使用 这种方式,压缩后的文件不支持 split,Hive 不会对数据进行切分,从而无法对数据进行并行操作。并且在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,因此反序列化开销会比 SequenceFile 高几十倍 。SequenceFile         SequenceFile 是 Hadoop API 提供的一种二进制文件支持,存储方式为行存储,其具有使用方便、可分割、可压缩的特点。        SequenceFile 支持三种压缩选择:NONE,RECORD,BLOCK。Record 压缩率低,一般建议使用 BLOCK 压缩。        优势是文件和 hadoop api 中的 MapFile 是相互兼容的 。RCFile        存储方式:数据按行分块,每块按列存储。结合了行存储和列存储的优点:        首先,RCFile 保证同一行的数据位于同一节点,因此元组重构的开销很低 ;        其次,像列存储一样,RCFile 能够利用列维度的数据压缩,并且能跳过不必要的列读取;ORCFile        存储方式:数据按行分块 每块按照列存储。        压缩快、快速列存取。        效率比 rcfile 高,是 rcfile 的改良版本。总结:               相比 TEXTFILE 和 SEQUENCEFILE,RCFILE 由于列式存储方式,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应。                        数据仓库的特点是一次写入、多次读取,因此,整体来看,RCFILE 相比其余两种格式具有较明显的优势。10. 所有的 Hive 任务都会有 MapReduce 的执行吗?        不是,从 Hive0.10.0 版本开始,对于简单的不需要聚合的类似 SELECT from LIMIT n 语句,不需要起 MapReduce job,直接通过 Fetch task 获取数据。        11. Hive 的函数:UDF、UDAF、UDTF 的区别?        UDF:单行进入,单行输出        UDAF:多行进入,单行输出        UDTF:单行输入,多行输出12. 说说对 Hive 桶表的理解?        桶表是对数据进行哈希取值,然后放到不同文件中存储 。        数据加载到桶表时,会对字段取 hash 值,然后与桶的数量取模。把数据放到对应的文件中。物理上,每个桶就是表(或分区)目录里的一个文件,一个作业产生的桶(输出文件)和 reduce 任务个数相同 。        桶表专门用于抽样查询,是很专业性的,不是日常用来存储数据的表,需要抽样查询时,才创建和使用桶表。13. Hive 表关联查询,如何解决数据倾斜的问题?定位原因:        map 输出数据按 key Hash 的分配到 reduce 中,由于 key 分布不均匀、业务数据本身的特点、建表时考虑不周、某些 SQL 语句本身就有数据倾斜等原因造成的 reduce 上的数据量差异过大。如何避免:        对于 key 为空产生的数据倾斜,可以对其赋予一个随机值解决方案:(1)参数调节:        hive.map.aggr = true         hive.groupby.skewindata=true        有数据倾斜的时候进行负载均衡,当选项设定位 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中,Map 的输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;        第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce 中),最后完成最终的聚合操作(2)SQL语句调节:        ① 选用 join key 分布最均匀的表作为驱动表。做好列裁剪和 filter 操作,以达到两表做 join 的时候,数据量相对变小的效果。        ② 大小表 Join:使用 map join 让小的维度表(1000 条以下的记录条数)先进内存。在map 端完成 reduce。        ③ 大表 Join 大表:把空值的 key 变成一个字符串加上随机数,把倾斜的数据分到不同的 reduce 上,由于 null 值关联不上,处理后并不影响最终结果。        ④ count distinct 大量相同特殊值:count distinct 时,将值为空的情况单独处理,如果是计算 count distinct, 可以不用处理,直接过滤,在最后结果中加 1。如果还有其他计算,需要进行 group by,可以先将值为空的记录单独处理,再和其他计算结果进行 union。14. 了解过 Hive 的哪些窗口函数1)Rank        (1)RANK() 排序相同时会重复,总数不会变                 (2)DENSE_RANK() 排序相同时会重复,总数会减少                 (3)ROW_NUMBER() 会根据顺序计算2) OVER()        指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而 变化        (1)CURRENT ROW:当前行                 (2) n PRECEDING:往前 n 行数据                 (3) n FOLLOWING:往后 n 行数据              (4) UNBOUNDED :起 点 , UNBOUNDED PRECEDING 表 示 从 前 面 的 起 点 , UNBOUNDED FOLLOWING 表示到后面的终点               (5) LAG(col,n) :往前第 n 行数据                 (6) LEAD(col,n):往后第 n 行数据                 (7) NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从 1 开始,对于每一行,NTILE 返回此行所属的组的编号。注意:n 必须为 int 类型。15. 小文件是如何产生的,解决方案        定位原因:        (1)动态分区插入数据,产生大量的小文件,从而导致 map 数量剧增;        (2)reduce 数量越多,小文件也越多(reduce 的个数和输出文件是对应的)        (3)数据源本身就包含大量的小文件。        解决方案:        (1)在 Map 执行前合并小文件,减少 Map 数: CombineHiveInputFormat 具有对小文件 进行合并的功能(系统默认的格式)。HiveInputFormat 没有对小文件合并功能。        (2)merge        SET hive.merge.mapfiles = true;         -- 默认 true,在 map-only 任务结束时合并 小文件         SET hive.merge.mapredfiles = true;         -- 默认 false,在 map-reduce 任务结 束时合并小文件         SET hive.merge.size.per.task = 268435456;         -- 默认 256M         SET hive.merge.smallfiles.avgsize = 16777216;         -- 当输出文件的平均大小 小于 16m 该值时,启动一个独立的 map-reduce 任务进行文件 merge(3)开启 JVM 重用        set mapreduce.job.jvm.numtasks=1016. Tez 引擎优点        Tez 可以将多个有依赖的作业转换为一个作业,这样只需写一次 HDFS,且中间节点较少,从而大大提升作业的计算性能。        Mr/tez/spark 区别:        Mr 引擎:多 job 串联,基于磁盘,落盘的地方比较多。虽然慢,但一定能跑出结果。一般处理,周、月、年指标 。        Spark 引擎:虽然在 Shuffle 过程中也落盘,但是并不是所有算子都需要 Shuffle,尤其 是多算子过程,中间过程不落盘 DAG 有向无环图。兼顾了可靠性和效率。一般处理天指标。        Tez 引擎:完全基于内存。注意:如果数据量特别大,慎重使用。容易 OOM。一般用于快速出结果,数据量比较小的场景。文章转载自大数据梦想家公众号  https://mp.weixin.qq.com/s/nmJHXobhhNfk9YSDfHGE3g免责声明:转载文章版权归原作者所有。如涉及作品内容、版权等问题,请及时联系文章编辑!
  • [问题求助] 【MRS产品】【hive 功能】hive运行报错堆栈深度超过限制
    【功能模块】HIVE模块【操作步骤&问题现象】1、hive运行作业报错堆栈深度超过限制2、stack depth limit exceeded【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【MRS产品】【运行hive作业报错】
    【功能模块】    HIVE执行作业【操作步骤&问题现象】1、运行hive作业报错postgresql的堆栈深度超过限制2、报错内容显示max_stack_depth当前维1536k【截图信【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【hive和spark产品】【启动功能】hive 和 spark-sql启动时出错:/tmp is not a director
    【截图信息】
  • [问题求助] 按照鲲鹏hive编译文档编译失败,显示找不到jar包
    【功能模块】https://support.huaweicloud.com/prtg-apache-kunpengbds/kunpenghive_02_0008.html【操作步骤&问题现象】按照鲲鹏hive编译文档编译失败,显示找不到jar包【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【大数据产品】【hive】Apache hive 鲲鹏编译好的包有吗
    【功能模块】鲲鹏大数据【操作步骤&问题现象】【大数据产品】【hive】Apache  hive  鲲鹏编译好的包有吗 大数据 Apache hadoop   hdp   cdh区别,以及具体对应的编译部署指导   有包的话更好 ,另外   建议在鲲鹏上部署哪个好点
  • [问题求助] 【MRS】【hive client】在Python3.7下使用pyhive0.6.4,连接不报错,查询大量数据时报错
    【功能模块】MRS,hive client,pyhive0.6.4【操作步骤&问题现象】1、在Python3.7下安装pyhive0.6.4;2、连接不报错,查询大量数据时报错,截图如下:3、但是在Python3.6下,使用pyhive0.6.4又不会报错,请问这是为什么?【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [交流吐槽] 大数据hive sqoop 部分笔记
        sqoop job   工具:            sqoop  job工具可以用于创建保存经常使用的命令为一个任务,还可以用于实现定时调用任务,用于sqoop增量导入新数据。sqoop job   工具:       sqoop  job工具可以用于创建保存经常使用的命令为一个任务,还可以用于实现定时调用任务,用于sqoop增量导入新数据。 sqoop语法:$ sqoop job (generic-args) (job-args) [-- [subtool-name] (subtool-args)][  ]里面的是其它sqoop工具  两个()指的是本节介绍的参数和参数内容sqoop job的使用参数:Argument                                                                                                             Description--create <job-id>Define a new saved job with the specified job-id (name). A second Sqoop command-line, separated by a -- should be specified; this defines the saved job.--delete <job-id>Delete a saved job.--exec <job-id>Given a job defined with --create, run the saved job.运行任务时,可以使用--形式的参数覆盖之前创建时设置的参数--show <job-id>Show the parameters for a saved job.--listList all saved jobs创建自动增量导入任务:自动导入tbltest表格任务:​sqoop job  --create dbFood_tbltest  -- import  --connect jdbc:mysql://192.168.56.101:3306/dbFood  --username root --password root --table tbltest  --hive-import  --hive-table tbltest --null-string '\\N' --null-non-string '\\N'  --incremental append  --check-column id  --last-value 3 ​指令执行: sqoop job --exec dbFood_tbltest删除任务:sqoop job --delete dbFood_tbltest查看任务表:sqoop job --list 设置免密码:注意默认的情况下是要求输入数据库密码的,可以通过配置conf/sqoop-site.xml 指定sqoop.metastore.client.record.password为true避免配置为: <property>     <name>sqoop.metastore.client.record.password</name>     <value>true<value>     <description>If true, allow saved passwords in the metastore.     </description> </property> 2.hivesql sqoop部分笔记:15:381.sqoop抽取MySQL表格所有数据到hive表库:全量抽取数据:一:sqoop import --connect jdbc:mysql://192.168.56.101:3306/dbFood --username root --password root --table tblmovie --hive-import --fields-terminated-by ',' -m 1  二:sqoop import \ --connect jdbc:mysql://192.168.56.101:3306/dbFood \ --username root \ --password root \ --table tbltest \ --hive-import \ --hive-table tbltest \ -m 1(表后追加方式)增量sqoop抽取MySQL数据到hive表:(抽取id 大于0的数据):sqoop import \ --connect jdbc:mysql://192.168.56.101:3306/dbFood \ --username root \ --password root \ --table tblmovie \ --hive-import \ -m 1  \--hive-table tblmovie \ --incremental append \ --check-column id \ --last-value 0  (抽取id大于2 的数据):sqoop import \ --connect jdbc:mysql://192.168.56.101:3306/dbFood \ --username root \ --password root \ --table tbltest \ --hive-import \ -m 1  \--hive-table tbltest \ --incremental append \ --check-column id \ --last-value 2  (修改后面的id123456就行)(根据时间增量抽取):sqoop import \ --connect jdbc:mysql://192.168.56.101:3306/dbFood \ --username root \ --password root \ --table tbltest \ --hive-import \ -m 1  \--hive-table tbltest \ --incremental lastmodified \ --check-column recordetime \ --last-value "2021-10-31 15:15:15.0" 减量抽取数据:(用where设定条件)sqoop import \ --connect jdbc:mysql://192.168.56.101:3306/dbFood \ --username root \ --password root \ --table tbltest \ --hive-import \ -m 1  \ --incremental append \ --where "age>30" --check-column id \ --last-value 02.删除hive的表(删除hive表部分符合条件数据时,不能使用delete from 表名 的SQL语句):    删除表中数据,保留结构:    truncate table 表名;    删除整个表:    drop table 表名;    删除整个表,不准备恢复时:    drop table 表名 purge;     删除部分数据:3.hive 逗号分隔符建表:create table tblmovie( id int , movieadress string, picture string, moviename string, score double, numofevalus int, situation string, information string, ROE double, moviememo string, recodetime date ) ROW FORMAT DELIMITED FIELDS TERMINATED BY','; (无主键外键) 创建一张和MySQL表相同表数据类型的hive表:sqoop create-hive-table \ --connect jdbc:mysql://192.168.56.101:3306/dbFood \ --username root \ --password root \ --table tbltest \ --hive-table tbltest   4.查看表信息:desc 表名;desc formatted 表名;(查看更加详细)5.查看hive库:show databases;