Hive内容分享(一)Hive介绍目录一、概述二、Hive优点与使用场景三、Hive架构四、Hive的工作原理五、安装五、Hive客户端六、实战操作一、概述Hive是基于Hadoop的一个数据仓库Data Aarehouse简称数仓、DW可以将结构化的数据文件映射为一张数据库表并提供类SQL查询功能。是用于存储、分析、报告的数据系统。在Hadoop生态系统中HDFS用于存储数据Yarn用于资源管理MapReduce用于数据处理而Hive是构建在Hadoop之上的数据仓库包括以下方面使用HQL作为查询接口使用HDFS存储使用MapReduce或其它计算框架计算执行程序运行在Yarn上。Hive的本质是将Hive SQL转化成MapReduce程序其灵活性和扩展性比较好支持UDF自定义存储格式等适合离线数据处理。Hive相关网站官网http://hive.apache.org文档https://cwiki.apache.org/confluence/display/Hive/GettingStartedhttps://cwiki.apache.org/confluence/display/Hive/Home下载http://archive.apache.org/dist/hiveGithub地址https://github.com/apache/hive二、Hive优点与使用场景1优点操作接口采用类SQL语法提供快速开发的能力(简单、容易上手)避免了去写MapReduce减少开发人员的学习成本统一的元数据管理可与impala/spark等共享元数据易扩展(HDFSMapReduce可以扩展集群规模支持自定义函数)数据的离线处理比如日志分析海量结构化数据离线分析。2使用场景Hive的执行延迟比较高因此hive常用于数据分析的对实时性要求 不高的场合Hive优势在于处理大数据对于处理小数据没有优势因为Hive的执 行延迟比较高。三、Hive架构由上图可知hadoop和mapreduce是hive架构的根基。Hive架构包括如下组件CLIcommand line interface、JDBC/ODBC、Thrift Server、WEB GUI、metastore和Driver(Complier、Optimizer和Executor)这些组件我可以分为两大类服务端组件和客户端组件。1服务端组件1、Driver组件该组件包括Complier、Optimizer和Executor它的作用是将我们写的HiveQL类SQL语句进行解析、编译优化生成执行计划然后调用底层的mapreduce计算框架。2、Metastore组件Metastore是元数据服务组件这个组件存储hive的元数据hive的元数据存储在关系数据库里hive支持的关系数据库有derby、mysql。元数据对于hive十分重要因此hive支持把metastore服务独立出来安装到远程的服务器集群里从而解耦hive服务和metastore服务保证hive运行的健壮性。3、Thrift服务Thrift是facebook开发的一个软件框架它用来进行可扩展且跨语言的服务的开发hive集成了该服务能让不同的编程语言调用hive的接口。2客户端组件1、CLIcommand line interface命令行接口。2、Thrift客户端上面的架构图里没有写上Thrift客户端但是hive架构的许多客户端接口是建立在Thrift客户端之上包括JDBC和ODBC接口。3、WEBGUIhive客户端提供了一种通过网页的方式访问hive所提供的服务。这个接口对应hive的hwi组件hive web interface使用前要启动hwi服务。3Metastore详解Hive的metastore组件是hive元数据集中存放地。Metastore组件包括两个部分metastore服务和后台数据的存储。后台数据存储的介质就是关系数据库例如hive默认的嵌入式磁盘数据库derby还有mysql数据库。Metastore服务是建立在后台数据存储介质之上并且可以和hive服务进行交互的服务组件默认情况下metastore服务和hive服务是安装在一起的运行在同一个进程当中。我也可以把metastore服务从hive服务里剥离出来metastore独立安装在一个集群里hive远程调用metastore服务这样我们可以把元数据这一层放到防火墙之后客户端访问hive服务就可以连接到元数据这一层从而提供了更好的管理性和安全保障。使用远程的metastore服务可以让metastore服务和hive服务运行在不同的进程里这样也保证了hive的稳定性提升了hive服务的效率。四、Hive的工作原理简单的将就是说sql或者HQLHive SQL会被Hive解释编译优化并生成查询计划一般情况而言查询计划会被转化为MapReduce任务进而执行。具体工作过程如下词法分析/语法分析使用antlr将SQL语句解析成抽象语法树AST语义分析从Megastore获取模式信息验证SQL语句中队表名列名以及数据类型的检查和隐式转换以及Hive提供的函数和用户自定义的函数UDF/UAF逻辑计划生成生成逻辑计划–算子树逻辑计划优化对算子树进行优化包括列剪枝分区剪枝谓词下推等物理计划生成将生成包含由MapReduce任务组成的DAGDirected acyclic graph有向无环图的物理计划物理计划执行将DAG发送到Hadoop集群进行执行最后把查询结果返回【温馨提示】新版本的Hive也支持使用Tez或Spark等作为执行引擎。五、安装1local模式内嵌derby内嵌derby数据库一个会话连接常用于简单测试derby是个in-memory的数据库。安装方法如下1、下载hive地址http://archive.apache.org/dist/hive$ cd /opt/bigdata/hadoop/software # 下载 $ wget http://archive.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz # 解压 $ tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/bigdata/hadoop/server/2、配置环境变量$ cd /opt/bigdata/hadoop/server/apache-hive-3.1.2-bin/conf/ # 把模板文件复制一份 $ cp hive-env.sh.template hive-env.sh在/etc/profile文件中追加如下内容export HIVE_HOME/opt/bigdata/hadoop/server/apache-hive-3.1.2-bin export PATH$HIVE_HOME/bin:$PATHsource 加载生效$ source /etc/profilehive-site.xml这个文件不存在创建文件内容如下# 创建在hdfs存储目录下面配置文件会用到 $ hadoop fs -mkdir -p /user/hive/warehouse # 切到hive conf目录 $ cd /opt/bigdata/hadoop/server/apache-hive-3.1.2-bin/confhive-site.xml?xml version1.0 encodingUTF-8 standaloneno? ?xml-stylesheet typetext/xsl hrefconfiguration.xsl? configuration property namejavax.jdo.option.ConnectionURL/name valuejdbc:derby:;databaseNamemetastore_db;createtrue/value /property property namejavax.jdo.option.ConnectionDriverName/name valueorg.apache.derby.jdbc.EmbeddedDriver/value /property property namehive.metastore.local/name valuetrue/value /property property namehive.metastore.schema.verification/name valuefalse/value /property !-- 数据在hdfs中的存储位置 -- property namehive.metastore.warehouse.dir/name value/user/hive/warehouse/value /property property namedatanucleus.schema.autoCreateAll/name valuetrue/value /property /configurationhive-env.sh #底部追加两行export HADOOP_HOME/opt/bigdata/hadoop/server/hadoop-3.3.1 export HIVE_CONF_DIR/opt/bigdata/hadoop/server/apache-hive-3.1.2-bin/conf export HIV_AUX_JARS_PATH/opt/bigdata/hadoop/server/apache-hive-3.1.2-bin/lib3、启动验证$ hive # 查看数据库 hive show databases; # 查看当前库默认是default库的表 hive show tables; # 查看当前库 hive select current_database();查看当前目录发现多了derby文件和一个metastore/_db目录【注意】使用derby存储方式时运行hive会在当前目录生成一个derby文件和一个metastore/_db目录。这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库否则会提示如下错误2单用户模式mysql该模式下就是客户端和服务端在一个节点上使用关系型数据库mysql、oracle等带jdbc驱动的数据库来对元数据进行存储。这里使用mysqlmysql可以在安装同一台机器上也可以在远程机器上。hive包上面已经下载了这里就不重复了。1、安装mysql数据库yum源安装$ yum -y install mysql-server # 启动数据库 $ systemctl start mysqld $ systemctl status mysqld # 开机自启动 $ systemctl enable mysqld连接mysql8.x授权无密码直接进入$ mysql # 创建可远程连接用户 CREATE USER root% IDENTIFIED BY 123456; # 修改用户密码 ALTER USER root% IDENTIFIED WITH mysql_native_password BY 123456; # 授权给用户 GRANT ALL PRIVILEGES ON *.* TO root% WITH GRANT OPTION; # 查看 select user,host from mysql.user; show grants for root%; # 权限撤回这里不执行了解即可 revoke all privileges on *.* from root%;通过密码登录mysql$ mysql -uroot -h 192.168.0.113 -p 输入密码1234562、解决Hive与Hadoop之间guava版本的差异$ cd /opt/bigdata/hadoop/server $ ls -l apache-hive-3.1.2-bin/lib/guava-*.jar $ ls -l hadoop-3.3.1/share/hadoop/common/lib/guava-*.jar # 删除hive中guava低版本 $ rm -f apache-hive-3.1.2-bin/lib/guava-*.jar # copy hadoop中的guava到hive $ cp hadoop-3.3.1/share/hadoop/common/lib/guava-*.jar apache-hive-3.1.2-bin/lib/ $ ls -l apache-hive-3.1.2-bin/lib/guava-*.jar3、下载对应版本的mysql驱动包# 查看mysql版本 $ mysql --version这里的mysql版本是8.0.26所以就得下载对应版本的驱动包官网下载地址https://dev.mysql.com/downloads/# 包放在这个目录下 $ cd /opt/bigdata/hadoop/software # 解压 $ unzip mysql-connector-java-8.0.26.zip把对应的驱动包copy到hive lib目录下$ cp mysql-connector-java-8.0.26/mysql-connector-java-8.0.26.jar ../server/apache-hive-3.1.2-bin/lib/4、配置$ cd /opt/bigdata/hadoop/server/apache-hive-3.1.2-bin/conf # 先备份一下 $ mv hive-site.xml local-derby-hive-site.xml # 复制一份 $ cp hive-default.xml.template hive-site.xmlhive-site.xml内容如下?xml version1.0? ?xml-stylesheet typetext/xsl hrefconfiguration.xsl? configuration !-- 配置hdfs存储目录 -- property namehive.metastore.warehouse.dir/name value/user/hive_remote/warehouse/value /property !-- 本地模式 -- property namehive.metastore.local/name valuetrue/value /property !-- 所连接的 MySQL 数据库的地址hive_local是数据库程序会自动创建自定义就行 -- property namejavax.jdo.option.ConnectionURL/name valuejdbc:mysql://hadoop-node1:3306/hive_local?createDatabaseIfNotExisttrueamp;useSSLfalseamp;serverTimezoneAsia/Shanghai/value /property !-- MySQL 驱动 -- property namejavax.jdo.option.ConnectionDriverName/name valuecom.mysql.jdbc.Driver/value /property !-- mysql连接用户 -- property namejavax.jdo.option.ConnectionUserName/name valueroot/value /property !-- mysql连接密码 -- property namejavax.jdo.option.ConnectionPassword/name value123456/value /property !--元数据是否校验-- property namehive.metastore.schema.verification/name valuefalse/value /property property namesystem:user.name/name valueroot/value descriptionuser name/description /property /configuration5、初始化元数据# 初始化--verbose查询详情可以不加 $ schematool -initSchema -dbType mysql --verbose出现上图Initialization script completed和schemaTool completed就初始化完成了。通过mysql 客户端工具取连接数据发现新增量了hive/_local这个库里有74张表。6、启动验证# 进入hive $ hive # 查看数据库 hive show databases; # 查看当前库默认是default库的表 hive show tables; # 查看当前库 hive select current_database();3多用户模式mysql该模式下就是客户端和服务端在不同的节点上因此需要单独启动metastore服务。该模式需要hive.metastore.local设置为false并将hive.metastore.uris设置为metastore服务器URI如有多个metastore服务器URI之间用逗号分隔。客户端hadoop-node2和服务端hadoop-node1分布在不同的节点上客户端通过远程的方式连接。客户端hadoop-node2节点操作基本和服务端差不多操作区别是他不需要初始化。在hadoop-node2部署客户端1、copy hive包到客户端hadoop-node2在hadoop-node1服务端执行$ cd /opt/bigdata/hadoop/server $ scp -r apache-hive-3.1.2-bin hadoop-node2:/opt/bigdata/hadoop/server/2、在客户端添加环境变量hadoop-node2在/etc/profile文件中追加如下内容export HIVE_HOME/opt/bigdata/hadoop/server/apache-hive-3.1.2-bin export PATH$HIVE_HOME/bin:$PATHsource 加载生效$ source /etc/profile3、配置hive-site.xmlhadoop-node2$ cd /opt/bigdata/hadoop/server/apache-hive-3.1.2-bin/conf/hive-site.xml内容如下?xml version1.0 encodingUTF-8 standaloneno? ?xml-stylesheet typetext/xsl hrefconfiguration.xsl? configuration property namehive.metastore.warehouse.dir/name value/user/hive/warehouse/value /property property namehive.metastore.local/name valuefalse/value /property property namehive.metastore.schema.verification/name valuefalse/value /property property namehive.metastore.uris/name valuethrift://hadoop-node1:9083/value /property /configuration4、服务端后台开启metastorehadoop-node1$ nohup hive --service metastore $ ss -atnlp|grep 90835、在客户端执行hive操作hadoop-node2# 这里使用新命令beeline跟hive命令差不多 $ hive $ show databases; $ show tables; $ create table users(id int,name string); $ insert into users values(1,zhangsan);通过上面数据的插入操作发现hive的操作最终会变成一个mapreduce任务在运行也正验证了之前所述。五、Hive客户端Hive发展至今总共历经了两代客户端工具第一代客户端deprecated不推荐使用$HIVE/_HOME/bin/hive是一个shellUtil。主要功能一是可用于以交互或批处理运行Hive查询二是用于Hive相关服务的启动比如metastore服务。第二代客户端recommend 推荐使用$HIVE/_HOME/bin/beeline是一个JDBC客户端是官方强烈推荐使用的Hive命令行工具和第一代客户端相比性能加强安全性提高。1Hive CLI1、查看帮助使用 hive -H 或者 hive --help 命令可以查看所有命令的帮助显示如下usage: hive -d,--define keyvalue Variable subsitution to apply to hive commands. e.g. -d AB or --define AB --定义用户自定义变量 --database databasename Specify the database to use -- 指定使用的数据库 -e quoted-query-string SQL from command line -- 执行指定的 SQL -f filename SQL from files --执行 SQL 脚本 -H,--help Print help information -- 打印帮助信息 --hiveconf propertyvalue Use value for given property --自定义配置 --hivevar keyvalue Variable subsitution to apply to hive --自定义变量 commands. e.g. --hivevar AB -i filename Initialization SQL file --在进入交互模式之前运行初始化脚本 -S,--silent Silent mode in interactive shell --静默模式 -v,--verbose Verbose mode (echo executed SQL to the console) --详细模式2、交互式命令行直接使用 hive 命令不加任何参数即可进入交互式命令行。3、非交互式在不进入交互式命令行的情况下可以使用 hive -e 执行 SQL 命令。示例$ hive -e show databases;4、接SQL文件非交互式执行SQL脚本用于执行的 sql 脚本可以在本地文件系统也可以在 HDFS 上。准备一个sql文件test001.sql$ cat test001.sql show databases; show tables;本地文件系统执行hive -f ./test001.sqlHDFS文件系统执行# 先把sql文件传到hdfs上 $ hadoop fs -put test001.sql / $ hadoop fs -ls hdfs://hadoop-node1:8082/test001.sql $ hive -f hdfs://hadoop-node1:8082/test001.sql5、配置Hive变量$ hadoop fs -mkdir -p /user/hive/warehouse/test $ hive -e select * from users / --hiveconf hive.exec.scratchdir/user/hive/warehouse/test / --hiveconf mapred.reduce.tasks4;发现hdfs的目录没有写权限添加权限再执行$ hadoop fs -chmod -R 777 /user/hive/warehouse/test $ hive -e select * from users / --hiveconf hive.exec.scratchdir/user/hive/warehouse/test / --hiveconf mapred.reduce.tasks4;2Beeline CLI推荐HiveServer2Hive 内置了 HiveServer 和 HiveServer2 服务两者都允许客户端使用多种编程语言进行连接但是 HiveServer 不能处理多个客户端的并发请求所以产生了 HiveServer2。HiveServer2HS2允许远程客户端可以使用各种编程语言向 Hive 提交请求并检索结果支持多客户端并发访问和身份验证。HS2 是由多个服务组成的单个进程其包括基于 Thrift 的 Hive 服务TCP 或 HTTP和用于 Web UI 的 Jetty Web 服务器。HiveServer2 拥有自己的 CLI(Beeline)Beeline 是一个基于 SQLLine 的 JDBC 客户端。由于 HiveServer2 是 Hive 开发维护的重点 (Hive0.15 后就不再支持 hiveserver)所以 Hive CLI 已经不推荐使用了官方更加推荐使用 Beeline。1、查看帮助Beeline 拥有更多可使用参数可以使用beeline --help查看完整参数如下$ beeline --helpUsage: java org.apache.hive.cli.beeline.BeeLine -u database url the JDBC URL to connect to -r reconnect to last saved connect url (in conjunction with !save) -n username the username to connect as -p password the password to connect as -d driver class the driver class to use -i init file script file for initialization -e query query that should be executed -f exec file script file that should be executed -w (or) --password-file password file the password file to read password from --hiveconf propertyvalue Use value for given property --hivevar namevalue hive variable name and value This is Hive specific settings in which variables can be set at session level and referenced in Hive commands or queries. --property-fileproperty-file the file to read connection properties (url, driver, user, password) from --color[true/false] control whether color is used for display --showHeader[true/false] show column names in query results --headerIntervalROWS; the interval between which heades are displayed --fastConnect[true/false] skip building table/column list for tab-completion --autoCommit[true/false] enable/disable automatic transaction commit --verbose[true/false] show verbose error messages and debug info --showWarnings[true/false] display connection warnings --showNestedErrs[true/false] display nested errors --numberFormat[pattern] format numbers using DecimalFormat pattern --force[true/false] continue running script even after errors --maxWidthMAXWIDTH the maximum width of the terminal --maxColumnWidthMAXCOLWIDTH the maximum width to use when displaying columns --silent[true/false] be more silent --autosave[true/false] automatically save preferences --outputformat[table/vertical/csv2/tsv2/dsv/csv/tsv] format mode for result display --incrementalBufferRowsNUMROWS the number of rows to buffer when printing rows on stdout, defaults to 1000; only applicable if --incrementaltrue and --outputformattable --truncateTable[true/false] truncate table column when it exceeds length --delimiterForDSVDELIMITER specify the delimiter for delimiter-separated values output format (default: |) --isolationLEVEL set the transaction isolation level --nullemptystring[true/false] set to true to get historic behavior of printing null as empty string --maxHistoryRowsMAXHISTORYROWS The maximum number of rows to store beeline history. --convertBinaryArrayToString[true/false] display binary column data as string or as byte array --help display this message2、常用参数在 Hive CLI 中支持的参数Beeline 都支持常用的参数如下。更多参数说明可以参见官方文档 Beeline Command Options参数说明-u数据库地址-n用户名-p密码-d-e执行 SQL 命令-f执行 SQL 脚本-i (or)–init在进入交互模式之前运行初始化脚本–property-file指定配置文件–hiveconf property**value指定配置属性–hivevar name**value用户自定义属性在会话级别有效3、通过代理用户连接 Hive不需要配置用户名和密码1在hive服务的安装节点的hive-site.xml配置文件中添加以下配置!-- host -- property namehive.server2.thrift.bind.host/name valuehadoop-node1/value descriptionBind host on which to run the HiveServer2 Thrift service./description /property !-- hs2端口 默认是1000为了区别我这里不使用默认端口-- property namehive.server2.thrift.port/name value11000/value /property2修改hadoop配置文件core-site.xml,表示设置可访问的用户及用户组配置hadoop core-site.xml再core-site.xml文件中追加如下内容property namehadoop.proxyuser.root.hosts/name value*/value /property property namehadoop.proxyuser.root.groups/name value*/value /property【注意】hadoop.proxyuser.root.hosts和hadoop.proxyuser.root.hosts其中“root”是连接beeline的用户将“root”替换成自己的用户名即可。这个用户是什么不重要它就是个超级代理。改完hadoop-node1后把配置也推送到其它节点上然后重启hadoop就行$ /opt/bigdata/hadoop/server/hadoop-3.3.1/etc/hadoop $ scp core-site.xml hadoop-node2:/opt/bigdata/hadoop/server/hadoop-3.3.1/etc/hadoop/ $ scp core-site.xml hadoop-node2:/opt/bigdata/hadoop/server/hadoop-3.3.1/etc/hadoop/ # 重启hadoop $ stop-all.sh $ start-all.sh3启动hiveserver2hs2$ nohup hiveserver2 /dev/null 21 $ jobs -l # 启动有点慢可以稍等一段时间再查看端口 $ ss -antlp|grep 110004连接这里root就是上面core-site.xml配置的代理用户【第一种方式】$ beeline beeline !connect jdbc:hive2://hadoop-node1:11000 Enter username for jdbc:hive2://hadoop-node1:11000: root # 密码直接回车就行 Enter password for jdbc:hive2://hadoop-node1:11000: 0: jdbc:hive2://hadoop-node1:11000 show databases;【第二种方式】$ beeline -u jdbc:hive2://hadoop-node1:11000 -n root5在~/.bashrc中添加alias$ alias beelinebeeline -u jdbc:hive2://hadoop-node1:11000 -n root $ beeline除了上面那种连接方式还有以下几种方式默认配置如下!-- hs2端口 -- property namehive.server2.thrift.port/name value10000/value /property !-- hs2用户登录方式NONE表示不登录 -- property namehive.server2.authentication/name valueNONE/value /property这里需要稍微讲一下hive.server2.authentication的这种类型连接方式如下NONE这种类型就是默认值hive没有启用用户安全认证任何登录者都拥有超级权限可以对hive进行任意操作。NOSASL需要任意一个用户名不需要密码不填写或者填写错误用户名会导致报错。KERBEROS用户需要拥有hive的keytab文件类似于ssh-key等密钥有了keytab就相当于拥有了永久的凭证不需要提供密码因此只要linux的系统用户对于该keytab文件有读写权限就能冒充指定用户访问hadoop因此keytab文件需要确保只对owner有读写权限。LDAPhive采用ldap统一认证服务连接访问时需要提供username和password。PAMhive采用pam认证模块同样需要提供username和password只是原理大不相同。PAM(Pluggable Authentication Modules)即可插拔式认证模块它是一种高效而且灵活的用户级别的认证方式它也是当前Linux服务器普遍使用 的认证方式。PAM可以根据用户的网段、时间、用户名、密码等实现认证。并不是所有需要验证的服务都使用PAM来验证如MySQL-Server就没有安 装相应的PAM文件。CUSTOM可以根据自身需求对用户登录认证进行一定客制比如将密码通过md5进行加密等。3DataGrip客户端这里提供一个别人破解安装DataGrip的教程如果没安装DataGrip可以参考一下http://www.32r.com/soft/70050.html1、创建工程2、关联本地目录到工程3、配置连接hive六、实战操作Hive SQL跟mysql等关系型数据库的操作非常相似如果了解过或学习过关系型数据库使用Hive SQL就非常简单学习成本也非常低。1建库建表hive有个默认的数据库default1、建库# 建库 create datatabse test1218 # 查库 show databases; # 查看当前所在库 select current_database(); # 切库 use test1218; select current_database();2、建表分隔符Hive 中没有定义专门的数据格式数据格式可以由用户指定用户定义数据格式需要指定三个属性列分隔符通常为空格、”/t”、”/x001″、行分隔符”/n”以及读取文件数据的方法。/n 每行记录分隔符 ^A 分隔列八进制 /001对应ascii码SOH ^B 分隔ARRAY或者STRUCT中的元素或者MAP中多个键值对之间分隔八进制 /002 ^C 分隔MAP中键值对的“键”和“值”八进制 /003对应sql设置row format delimited fields terminated by /001 collection items terminated by /002 map keys terminated by /003 lines terminated by /n stored as textfile;创建表-- 创建表时指定库,默认分隔符 CREATE TABLE IF NOT EXISTS test1218.person ( id INT, name STRING, age INT, likes ARRAYSTRING, address MAPSTRING,STRING ); -- 创建表时指定库指定分隔符 CREATE TABLE IF NOT EXISTS test1218.person_1 ( id INT COMMENT ID, name STRING COMMENT 名字, age INT COMMENT 年龄, likes ARRAYSTRING COMMENT 爱好, address MAPSTRING,STRING COMMENT 地址 ) ROW FORMAT DELIMITED FIELDS TERMINATED BY , COLLECTION ITEMS TERMINATED BY - MAP KEYS TERMINATED BY : LINES TERMINATED BY /n; show tables;在HDFS页面上查看对应的文件3、上传表数据到HDFSperson/_1表数据1,t1,18,lol-book-movie,地址:广东.深圳.南山 2,t2,20,lol-book-movie,地址:广东.深圳.南山 3,t3,21,lol-book-movie,地址:广东.深圳.南山 4,t4,21,lol-book-movie,地址:广东.深圳.南山 5,t5,21,lol-book-movie,地址:广东.深圳.南山 6,t6,21,lol-book-movie,地址:广东.深圳.南山通过命令上传数据$ hadoop fs -put person_1-data.txt /user/hive_remote/warehouse/test1218.db/person_1/ $ hadoop fs -ls /user/hive_remote/warehouse/test1218.db/person_1/查看数据select * from test1218.person_1;2查看# 显示所有库 show databases ; # 查看当前库 select current_database(); # 查看default库里的表 show tables in default; # 查看当前数据里的表 show tables ; # 查询显示一张表的元数据信息 desc formatted person_1;3注释COMMENT中文乱码解决【原因】元数据保存在mysql中默认不支持中文默认的编码是latin1desc formatted person_1;【解决】修改Hive存储的元数据信息metastore下面语句是在mysql中执行数据库记得换成自己的。use hive_local; show tables; alter table hive_local.COLUMNS_V2 modify column COMMENT varchar(256) character set utf8; alter table hive_local.TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8; alter table hive_local.PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8; alter table hive_local.PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8; alter table hive_local.INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;再查看还是没改过来是因为对已经创建的表是不生效的得删除表重新创建表才会显示正常。# 删表 drop table test1218.person_1; # 创建表 -- 创建表时指定库指定分隔符 CREATE TABLE IF NOT EXISTS test1218.person_1 ( id INT COMMENT ID, name STRING COMMENT 名字, age INT COMMENT 年龄, likes ARRAYSTRING COMMENT 爱好, address MAPSTRING,STRING COMMENT 地址 ) ROW FORMAT DELIMITED FIELDS TERMINATED BY , COLLECTION ITEMS TERMINATED BY - MAP KEYS TERMINATED BY : LINES TERMINATED BY /n;再查看表的元数据信息中文注释信息显示正常了desc formatted person_1;4Load加载数据推荐# 创建表 create table person_local_1(id int,name string,age int) row format delimited fields terminated by ,; create table person_hdfs_1(id int,name string,age int) row format delimited fields terminated by ,; show tables; # 从local加载数据这里的local是指hs2服务所在机器的本地linux文件系统 load data local inpath /opt/bigdata/hadoop/data/hive-data into table person_local_1; # 查询 select * from person_local_1; # 从hdfs中加载数据这里是移动会把hdfs上的文件mv到对应的hive的目录下 load data inpath /person_hdfs.txt into table person_hdfs_1; # 查询 select * from person_hdfs_1;5Insert添加数据特别慢不推荐insert into table person_hdfs_1 values (4,p4,21);上面那条插入语句会启动一个MR任务更多Hive SQL操作可以参考官方文档https://hive.apache.org/《网络安全从零到精通全套学习大礼包》96节从入门到精通的全套视频教程免费领取如果你也想通过学网络安全技术去帮助就业和转行我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取/i-blog.csdnimg.cn/direct/88f12e9068e14b728b215f939a9ed28e.gif)网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取
Hive内容分享(一):Hive介绍
Hive内容分享(一)Hive介绍目录一、概述二、Hive优点与使用场景三、Hive架构四、Hive的工作原理五、安装五、Hive客户端六、实战操作一、概述Hive是基于Hadoop的一个数据仓库Data Aarehouse简称数仓、DW可以将结构化的数据文件映射为一张数据库表并提供类SQL查询功能。是用于存储、分析、报告的数据系统。在Hadoop生态系统中HDFS用于存储数据Yarn用于资源管理MapReduce用于数据处理而Hive是构建在Hadoop之上的数据仓库包括以下方面使用HQL作为查询接口使用HDFS存储使用MapReduce或其它计算框架计算执行程序运行在Yarn上。Hive的本质是将Hive SQL转化成MapReduce程序其灵活性和扩展性比较好支持UDF自定义存储格式等适合离线数据处理。Hive相关网站官网http://hive.apache.org文档https://cwiki.apache.org/confluence/display/Hive/GettingStartedhttps://cwiki.apache.org/confluence/display/Hive/Home下载http://archive.apache.org/dist/hiveGithub地址https://github.com/apache/hive二、Hive优点与使用场景1优点操作接口采用类SQL语法提供快速开发的能力(简单、容易上手)避免了去写MapReduce减少开发人员的学习成本统一的元数据管理可与impala/spark等共享元数据易扩展(HDFSMapReduce可以扩展集群规模支持自定义函数)数据的离线处理比如日志分析海量结构化数据离线分析。2使用场景Hive的执行延迟比较高因此hive常用于数据分析的对实时性要求 不高的场合Hive优势在于处理大数据对于处理小数据没有优势因为Hive的执 行延迟比较高。三、Hive架构由上图可知hadoop和mapreduce是hive架构的根基。Hive架构包括如下组件CLIcommand line interface、JDBC/ODBC、Thrift Server、WEB GUI、metastore和Driver(Complier、Optimizer和Executor)这些组件我可以分为两大类服务端组件和客户端组件。1服务端组件1、Driver组件该组件包括Complier、Optimizer和Executor它的作用是将我们写的HiveQL类SQL语句进行解析、编译优化生成执行计划然后调用底层的mapreduce计算框架。2、Metastore组件Metastore是元数据服务组件这个组件存储hive的元数据hive的元数据存储在关系数据库里hive支持的关系数据库有derby、mysql。元数据对于hive十分重要因此hive支持把metastore服务独立出来安装到远程的服务器集群里从而解耦hive服务和metastore服务保证hive运行的健壮性。3、Thrift服务Thrift是facebook开发的一个软件框架它用来进行可扩展且跨语言的服务的开发hive集成了该服务能让不同的编程语言调用hive的接口。2客户端组件1、CLIcommand line interface命令行接口。2、Thrift客户端上面的架构图里没有写上Thrift客户端但是hive架构的许多客户端接口是建立在Thrift客户端之上包括JDBC和ODBC接口。3、WEBGUIhive客户端提供了一种通过网页的方式访问hive所提供的服务。这个接口对应hive的hwi组件hive web interface使用前要启动hwi服务。3Metastore详解Hive的metastore组件是hive元数据集中存放地。Metastore组件包括两个部分metastore服务和后台数据的存储。后台数据存储的介质就是关系数据库例如hive默认的嵌入式磁盘数据库derby还有mysql数据库。Metastore服务是建立在后台数据存储介质之上并且可以和hive服务进行交互的服务组件默认情况下metastore服务和hive服务是安装在一起的运行在同一个进程当中。我也可以把metastore服务从hive服务里剥离出来metastore独立安装在一个集群里hive远程调用metastore服务这样我们可以把元数据这一层放到防火墙之后客户端访问hive服务就可以连接到元数据这一层从而提供了更好的管理性和安全保障。使用远程的metastore服务可以让metastore服务和hive服务运行在不同的进程里这样也保证了hive的稳定性提升了hive服务的效率。四、Hive的工作原理简单的将就是说sql或者HQLHive SQL会被Hive解释编译优化并生成查询计划一般情况而言查询计划会被转化为MapReduce任务进而执行。具体工作过程如下词法分析/语法分析使用antlr将SQL语句解析成抽象语法树AST语义分析从Megastore获取模式信息验证SQL语句中队表名列名以及数据类型的检查和隐式转换以及Hive提供的函数和用户自定义的函数UDF/UAF逻辑计划生成生成逻辑计划–算子树逻辑计划优化对算子树进行优化包括列剪枝分区剪枝谓词下推等物理计划生成将生成包含由MapReduce任务组成的DAGDirected acyclic graph有向无环图的物理计划物理计划执行将DAG发送到Hadoop集群进行执行最后把查询结果返回【温馨提示】新版本的Hive也支持使用Tez或Spark等作为执行引擎。五、安装1local模式内嵌derby内嵌derby数据库一个会话连接常用于简单测试derby是个in-memory的数据库。安装方法如下1、下载hive地址http://archive.apache.org/dist/hive$ cd /opt/bigdata/hadoop/software # 下载 $ wget http://archive.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz # 解压 $ tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/bigdata/hadoop/server/2、配置环境变量$ cd /opt/bigdata/hadoop/server/apache-hive-3.1.2-bin/conf/ # 把模板文件复制一份 $ cp hive-env.sh.template hive-env.sh在/etc/profile文件中追加如下内容export HIVE_HOME/opt/bigdata/hadoop/server/apache-hive-3.1.2-bin export PATH$HIVE_HOME/bin:$PATHsource 加载生效$ source /etc/profilehive-site.xml这个文件不存在创建文件内容如下# 创建在hdfs存储目录下面配置文件会用到 $ hadoop fs -mkdir -p /user/hive/warehouse # 切到hive conf目录 $ cd /opt/bigdata/hadoop/server/apache-hive-3.1.2-bin/confhive-site.xml?xml version1.0 encodingUTF-8 standaloneno? ?xml-stylesheet typetext/xsl hrefconfiguration.xsl? configuration property namejavax.jdo.option.ConnectionURL/name valuejdbc:derby:;databaseNamemetastore_db;createtrue/value /property property namejavax.jdo.option.ConnectionDriverName/name valueorg.apache.derby.jdbc.EmbeddedDriver/value /property property namehive.metastore.local/name valuetrue/value /property property namehive.metastore.schema.verification/name valuefalse/value /property !-- 数据在hdfs中的存储位置 -- property namehive.metastore.warehouse.dir/name value/user/hive/warehouse/value /property property namedatanucleus.schema.autoCreateAll/name valuetrue/value /property /configurationhive-env.sh #底部追加两行export HADOOP_HOME/opt/bigdata/hadoop/server/hadoop-3.3.1 export HIVE_CONF_DIR/opt/bigdata/hadoop/server/apache-hive-3.1.2-bin/conf export HIV_AUX_JARS_PATH/opt/bigdata/hadoop/server/apache-hive-3.1.2-bin/lib3、启动验证$ hive # 查看数据库 hive show databases; # 查看当前库默认是default库的表 hive show tables; # 查看当前库 hive select current_database();查看当前目录发现多了derby文件和一个metastore/_db目录【注意】使用derby存储方式时运行hive会在当前目录生成一个derby文件和一个metastore/_db目录。这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库否则会提示如下错误2单用户模式mysql该模式下就是客户端和服务端在一个节点上使用关系型数据库mysql、oracle等带jdbc驱动的数据库来对元数据进行存储。这里使用mysqlmysql可以在安装同一台机器上也可以在远程机器上。hive包上面已经下载了这里就不重复了。1、安装mysql数据库yum源安装$ yum -y install mysql-server # 启动数据库 $ systemctl start mysqld $ systemctl status mysqld # 开机自启动 $ systemctl enable mysqld连接mysql8.x授权无密码直接进入$ mysql # 创建可远程连接用户 CREATE USER root% IDENTIFIED BY 123456; # 修改用户密码 ALTER USER root% IDENTIFIED WITH mysql_native_password BY 123456; # 授权给用户 GRANT ALL PRIVILEGES ON *.* TO root% WITH GRANT OPTION; # 查看 select user,host from mysql.user; show grants for root%; # 权限撤回这里不执行了解即可 revoke all privileges on *.* from root%;通过密码登录mysql$ mysql -uroot -h 192.168.0.113 -p 输入密码1234562、解决Hive与Hadoop之间guava版本的差异$ cd /opt/bigdata/hadoop/server $ ls -l apache-hive-3.1.2-bin/lib/guava-*.jar $ ls -l hadoop-3.3.1/share/hadoop/common/lib/guava-*.jar # 删除hive中guava低版本 $ rm -f apache-hive-3.1.2-bin/lib/guava-*.jar # copy hadoop中的guava到hive $ cp hadoop-3.3.1/share/hadoop/common/lib/guava-*.jar apache-hive-3.1.2-bin/lib/ $ ls -l apache-hive-3.1.2-bin/lib/guava-*.jar3、下载对应版本的mysql驱动包# 查看mysql版本 $ mysql --version这里的mysql版本是8.0.26所以就得下载对应版本的驱动包官网下载地址https://dev.mysql.com/downloads/# 包放在这个目录下 $ cd /opt/bigdata/hadoop/software # 解压 $ unzip mysql-connector-java-8.0.26.zip把对应的驱动包copy到hive lib目录下$ cp mysql-connector-java-8.0.26/mysql-connector-java-8.0.26.jar ../server/apache-hive-3.1.2-bin/lib/4、配置$ cd /opt/bigdata/hadoop/server/apache-hive-3.1.2-bin/conf # 先备份一下 $ mv hive-site.xml local-derby-hive-site.xml # 复制一份 $ cp hive-default.xml.template hive-site.xmlhive-site.xml内容如下?xml version1.0? ?xml-stylesheet typetext/xsl hrefconfiguration.xsl? configuration !-- 配置hdfs存储目录 -- property namehive.metastore.warehouse.dir/name value/user/hive_remote/warehouse/value /property !-- 本地模式 -- property namehive.metastore.local/name valuetrue/value /property !-- 所连接的 MySQL 数据库的地址hive_local是数据库程序会自动创建自定义就行 -- property namejavax.jdo.option.ConnectionURL/name valuejdbc:mysql://hadoop-node1:3306/hive_local?createDatabaseIfNotExisttrueamp;useSSLfalseamp;serverTimezoneAsia/Shanghai/value /property !-- MySQL 驱动 -- property namejavax.jdo.option.ConnectionDriverName/name valuecom.mysql.jdbc.Driver/value /property !-- mysql连接用户 -- property namejavax.jdo.option.ConnectionUserName/name valueroot/value /property !-- mysql连接密码 -- property namejavax.jdo.option.ConnectionPassword/name value123456/value /property !--元数据是否校验-- property namehive.metastore.schema.verification/name valuefalse/value /property property namesystem:user.name/name valueroot/value descriptionuser name/description /property /configuration5、初始化元数据# 初始化--verbose查询详情可以不加 $ schematool -initSchema -dbType mysql --verbose出现上图Initialization script completed和schemaTool completed就初始化完成了。通过mysql 客户端工具取连接数据发现新增量了hive/_local这个库里有74张表。6、启动验证# 进入hive $ hive # 查看数据库 hive show databases; # 查看当前库默认是default库的表 hive show tables; # 查看当前库 hive select current_database();3多用户模式mysql该模式下就是客户端和服务端在不同的节点上因此需要单独启动metastore服务。该模式需要hive.metastore.local设置为false并将hive.metastore.uris设置为metastore服务器URI如有多个metastore服务器URI之间用逗号分隔。客户端hadoop-node2和服务端hadoop-node1分布在不同的节点上客户端通过远程的方式连接。客户端hadoop-node2节点操作基本和服务端差不多操作区别是他不需要初始化。在hadoop-node2部署客户端1、copy hive包到客户端hadoop-node2在hadoop-node1服务端执行$ cd /opt/bigdata/hadoop/server $ scp -r apache-hive-3.1.2-bin hadoop-node2:/opt/bigdata/hadoop/server/2、在客户端添加环境变量hadoop-node2在/etc/profile文件中追加如下内容export HIVE_HOME/opt/bigdata/hadoop/server/apache-hive-3.1.2-bin export PATH$HIVE_HOME/bin:$PATHsource 加载生效$ source /etc/profile3、配置hive-site.xmlhadoop-node2$ cd /opt/bigdata/hadoop/server/apache-hive-3.1.2-bin/conf/hive-site.xml内容如下?xml version1.0 encodingUTF-8 standaloneno? ?xml-stylesheet typetext/xsl hrefconfiguration.xsl? configuration property namehive.metastore.warehouse.dir/name value/user/hive/warehouse/value /property property namehive.metastore.local/name valuefalse/value /property property namehive.metastore.schema.verification/name valuefalse/value /property property namehive.metastore.uris/name valuethrift://hadoop-node1:9083/value /property /configuration4、服务端后台开启metastorehadoop-node1$ nohup hive --service metastore $ ss -atnlp|grep 90835、在客户端执行hive操作hadoop-node2# 这里使用新命令beeline跟hive命令差不多 $ hive $ show databases; $ show tables; $ create table users(id int,name string); $ insert into users values(1,zhangsan);通过上面数据的插入操作发现hive的操作最终会变成一个mapreduce任务在运行也正验证了之前所述。五、Hive客户端Hive发展至今总共历经了两代客户端工具第一代客户端deprecated不推荐使用$HIVE/_HOME/bin/hive是一个shellUtil。主要功能一是可用于以交互或批处理运行Hive查询二是用于Hive相关服务的启动比如metastore服务。第二代客户端recommend 推荐使用$HIVE/_HOME/bin/beeline是一个JDBC客户端是官方强烈推荐使用的Hive命令行工具和第一代客户端相比性能加强安全性提高。1Hive CLI1、查看帮助使用 hive -H 或者 hive --help 命令可以查看所有命令的帮助显示如下usage: hive -d,--define keyvalue Variable subsitution to apply to hive commands. e.g. -d AB or --define AB --定义用户自定义变量 --database databasename Specify the database to use -- 指定使用的数据库 -e quoted-query-string SQL from command line -- 执行指定的 SQL -f filename SQL from files --执行 SQL 脚本 -H,--help Print help information -- 打印帮助信息 --hiveconf propertyvalue Use value for given property --自定义配置 --hivevar keyvalue Variable subsitution to apply to hive --自定义变量 commands. e.g. --hivevar AB -i filename Initialization SQL file --在进入交互模式之前运行初始化脚本 -S,--silent Silent mode in interactive shell --静默模式 -v,--verbose Verbose mode (echo executed SQL to the console) --详细模式2、交互式命令行直接使用 hive 命令不加任何参数即可进入交互式命令行。3、非交互式在不进入交互式命令行的情况下可以使用 hive -e 执行 SQL 命令。示例$ hive -e show databases;4、接SQL文件非交互式执行SQL脚本用于执行的 sql 脚本可以在本地文件系统也可以在 HDFS 上。准备一个sql文件test001.sql$ cat test001.sql show databases; show tables;本地文件系统执行hive -f ./test001.sqlHDFS文件系统执行# 先把sql文件传到hdfs上 $ hadoop fs -put test001.sql / $ hadoop fs -ls hdfs://hadoop-node1:8082/test001.sql $ hive -f hdfs://hadoop-node1:8082/test001.sql5、配置Hive变量$ hadoop fs -mkdir -p /user/hive/warehouse/test $ hive -e select * from users / --hiveconf hive.exec.scratchdir/user/hive/warehouse/test / --hiveconf mapred.reduce.tasks4;发现hdfs的目录没有写权限添加权限再执行$ hadoop fs -chmod -R 777 /user/hive/warehouse/test $ hive -e select * from users / --hiveconf hive.exec.scratchdir/user/hive/warehouse/test / --hiveconf mapred.reduce.tasks4;2Beeline CLI推荐HiveServer2Hive 内置了 HiveServer 和 HiveServer2 服务两者都允许客户端使用多种编程语言进行连接但是 HiveServer 不能处理多个客户端的并发请求所以产生了 HiveServer2。HiveServer2HS2允许远程客户端可以使用各种编程语言向 Hive 提交请求并检索结果支持多客户端并发访问和身份验证。HS2 是由多个服务组成的单个进程其包括基于 Thrift 的 Hive 服务TCP 或 HTTP和用于 Web UI 的 Jetty Web 服务器。HiveServer2 拥有自己的 CLI(Beeline)Beeline 是一个基于 SQLLine 的 JDBC 客户端。由于 HiveServer2 是 Hive 开发维护的重点 (Hive0.15 后就不再支持 hiveserver)所以 Hive CLI 已经不推荐使用了官方更加推荐使用 Beeline。1、查看帮助Beeline 拥有更多可使用参数可以使用beeline --help查看完整参数如下$ beeline --helpUsage: java org.apache.hive.cli.beeline.BeeLine -u database url the JDBC URL to connect to -r reconnect to last saved connect url (in conjunction with !save) -n username the username to connect as -p password the password to connect as -d driver class the driver class to use -i init file script file for initialization -e query query that should be executed -f exec file script file that should be executed -w (or) --password-file password file the password file to read password from --hiveconf propertyvalue Use value for given property --hivevar namevalue hive variable name and value This is Hive specific settings in which variables can be set at session level and referenced in Hive commands or queries. --property-fileproperty-file the file to read connection properties (url, driver, user, password) from --color[true/false] control whether color is used for display --showHeader[true/false] show column names in query results --headerIntervalROWS; the interval between which heades are displayed --fastConnect[true/false] skip building table/column list for tab-completion --autoCommit[true/false] enable/disable automatic transaction commit --verbose[true/false] show verbose error messages and debug info --showWarnings[true/false] display connection warnings --showNestedErrs[true/false] display nested errors --numberFormat[pattern] format numbers using DecimalFormat pattern --force[true/false] continue running script even after errors --maxWidthMAXWIDTH the maximum width of the terminal --maxColumnWidthMAXCOLWIDTH the maximum width to use when displaying columns --silent[true/false] be more silent --autosave[true/false] automatically save preferences --outputformat[table/vertical/csv2/tsv2/dsv/csv/tsv] format mode for result display --incrementalBufferRowsNUMROWS the number of rows to buffer when printing rows on stdout, defaults to 1000; only applicable if --incrementaltrue and --outputformattable --truncateTable[true/false] truncate table column when it exceeds length --delimiterForDSVDELIMITER specify the delimiter for delimiter-separated values output format (default: |) --isolationLEVEL set the transaction isolation level --nullemptystring[true/false] set to true to get historic behavior of printing null as empty string --maxHistoryRowsMAXHISTORYROWS The maximum number of rows to store beeline history. --convertBinaryArrayToString[true/false] display binary column data as string or as byte array --help display this message2、常用参数在 Hive CLI 中支持的参数Beeline 都支持常用的参数如下。更多参数说明可以参见官方文档 Beeline Command Options参数说明-u数据库地址-n用户名-p密码-d-e执行 SQL 命令-f执行 SQL 脚本-i (or)–init在进入交互模式之前运行初始化脚本–property-file指定配置文件–hiveconf property**value指定配置属性–hivevar name**value用户自定义属性在会话级别有效3、通过代理用户连接 Hive不需要配置用户名和密码1在hive服务的安装节点的hive-site.xml配置文件中添加以下配置!-- host -- property namehive.server2.thrift.bind.host/name valuehadoop-node1/value descriptionBind host on which to run the HiveServer2 Thrift service./description /property !-- hs2端口 默认是1000为了区别我这里不使用默认端口-- property namehive.server2.thrift.port/name value11000/value /property2修改hadoop配置文件core-site.xml,表示设置可访问的用户及用户组配置hadoop core-site.xml再core-site.xml文件中追加如下内容property namehadoop.proxyuser.root.hosts/name value*/value /property property namehadoop.proxyuser.root.groups/name value*/value /property【注意】hadoop.proxyuser.root.hosts和hadoop.proxyuser.root.hosts其中“root”是连接beeline的用户将“root”替换成自己的用户名即可。这个用户是什么不重要它就是个超级代理。改完hadoop-node1后把配置也推送到其它节点上然后重启hadoop就行$ /opt/bigdata/hadoop/server/hadoop-3.3.1/etc/hadoop $ scp core-site.xml hadoop-node2:/opt/bigdata/hadoop/server/hadoop-3.3.1/etc/hadoop/ $ scp core-site.xml hadoop-node2:/opt/bigdata/hadoop/server/hadoop-3.3.1/etc/hadoop/ # 重启hadoop $ stop-all.sh $ start-all.sh3启动hiveserver2hs2$ nohup hiveserver2 /dev/null 21 $ jobs -l # 启动有点慢可以稍等一段时间再查看端口 $ ss -antlp|grep 110004连接这里root就是上面core-site.xml配置的代理用户【第一种方式】$ beeline beeline !connect jdbc:hive2://hadoop-node1:11000 Enter username for jdbc:hive2://hadoop-node1:11000: root # 密码直接回车就行 Enter password for jdbc:hive2://hadoop-node1:11000: 0: jdbc:hive2://hadoop-node1:11000 show databases;【第二种方式】$ beeline -u jdbc:hive2://hadoop-node1:11000 -n root5在~/.bashrc中添加alias$ alias beelinebeeline -u jdbc:hive2://hadoop-node1:11000 -n root $ beeline除了上面那种连接方式还有以下几种方式默认配置如下!-- hs2端口 -- property namehive.server2.thrift.port/name value10000/value /property !-- hs2用户登录方式NONE表示不登录 -- property namehive.server2.authentication/name valueNONE/value /property这里需要稍微讲一下hive.server2.authentication的这种类型连接方式如下NONE这种类型就是默认值hive没有启用用户安全认证任何登录者都拥有超级权限可以对hive进行任意操作。NOSASL需要任意一个用户名不需要密码不填写或者填写错误用户名会导致报错。KERBEROS用户需要拥有hive的keytab文件类似于ssh-key等密钥有了keytab就相当于拥有了永久的凭证不需要提供密码因此只要linux的系统用户对于该keytab文件有读写权限就能冒充指定用户访问hadoop因此keytab文件需要确保只对owner有读写权限。LDAPhive采用ldap统一认证服务连接访问时需要提供username和password。PAMhive采用pam认证模块同样需要提供username和password只是原理大不相同。PAM(Pluggable Authentication Modules)即可插拔式认证模块它是一种高效而且灵活的用户级别的认证方式它也是当前Linux服务器普遍使用 的认证方式。PAM可以根据用户的网段、时间、用户名、密码等实现认证。并不是所有需要验证的服务都使用PAM来验证如MySQL-Server就没有安 装相应的PAM文件。CUSTOM可以根据自身需求对用户登录认证进行一定客制比如将密码通过md5进行加密等。3DataGrip客户端这里提供一个别人破解安装DataGrip的教程如果没安装DataGrip可以参考一下http://www.32r.com/soft/70050.html1、创建工程2、关联本地目录到工程3、配置连接hive六、实战操作Hive SQL跟mysql等关系型数据库的操作非常相似如果了解过或学习过关系型数据库使用Hive SQL就非常简单学习成本也非常低。1建库建表hive有个默认的数据库default1、建库# 建库 create datatabse test1218 # 查库 show databases; # 查看当前所在库 select current_database(); # 切库 use test1218; select current_database();2、建表分隔符Hive 中没有定义专门的数据格式数据格式可以由用户指定用户定义数据格式需要指定三个属性列分隔符通常为空格、”/t”、”/x001″、行分隔符”/n”以及读取文件数据的方法。/n 每行记录分隔符 ^A 分隔列八进制 /001对应ascii码SOH ^B 分隔ARRAY或者STRUCT中的元素或者MAP中多个键值对之间分隔八进制 /002 ^C 分隔MAP中键值对的“键”和“值”八进制 /003对应sql设置row format delimited fields terminated by /001 collection items terminated by /002 map keys terminated by /003 lines terminated by /n stored as textfile;创建表-- 创建表时指定库,默认分隔符 CREATE TABLE IF NOT EXISTS test1218.person ( id INT, name STRING, age INT, likes ARRAYSTRING, address MAPSTRING,STRING ); -- 创建表时指定库指定分隔符 CREATE TABLE IF NOT EXISTS test1218.person_1 ( id INT COMMENT ID, name STRING COMMENT 名字, age INT COMMENT 年龄, likes ARRAYSTRING COMMENT 爱好, address MAPSTRING,STRING COMMENT 地址 ) ROW FORMAT DELIMITED FIELDS TERMINATED BY , COLLECTION ITEMS TERMINATED BY - MAP KEYS TERMINATED BY : LINES TERMINATED BY /n; show tables;在HDFS页面上查看对应的文件3、上传表数据到HDFSperson/_1表数据1,t1,18,lol-book-movie,地址:广东.深圳.南山 2,t2,20,lol-book-movie,地址:广东.深圳.南山 3,t3,21,lol-book-movie,地址:广东.深圳.南山 4,t4,21,lol-book-movie,地址:广东.深圳.南山 5,t5,21,lol-book-movie,地址:广东.深圳.南山 6,t6,21,lol-book-movie,地址:广东.深圳.南山通过命令上传数据$ hadoop fs -put person_1-data.txt /user/hive_remote/warehouse/test1218.db/person_1/ $ hadoop fs -ls /user/hive_remote/warehouse/test1218.db/person_1/查看数据select * from test1218.person_1;2查看# 显示所有库 show databases ; # 查看当前库 select current_database(); # 查看default库里的表 show tables in default; # 查看当前数据里的表 show tables ; # 查询显示一张表的元数据信息 desc formatted person_1;3注释COMMENT中文乱码解决【原因】元数据保存在mysql中默认不支持中文默认的编码是latin1desc formatted person_1;【解决】修改Hive存储的元数据信息metastore下面语句是在mysql中执行数据库记得换成自己的。use hive_local; show tables; alter table hive_local.COLUMNS_V2 modify column COMMENT varchar(256) character set utf8; alter table hive_local.TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8; alter table hive_local.PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8; alter table hive_local.PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8; alter table hive_local.INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;再查看还是没改过来是因为对已经创建的表是不生效的得删除表重新创建表才会显示正常。# 删表 drop table test1218.person_1; # 创建表 -- 创建表时指定库指定分隔符 CREATE TABLE IF NOT EXISTS test1218.person_1 ( id INT COMMENT ID, name STRING COMMENT 名字, age INT COMMENT 年龄, likes ARRAYSTRING COMMENT 爱好, address MAPSTRING,STRING COMMENT 地址 ) ROW FORMAT DELIMITED FIELDS TERMINATED BY , COLLECTION ITEMS TERMINATED BY - MAP KEYS TERMINATED BY : LINES TERMINATED BY /n;再查看表的元数据信息中文注释信息显示正常了desc formatted person_1;4Load加载数据推荐# 创建表 create table person_local_1(id int,name string,age int) row format delimited fields terminated by ,; create table person_hdfs_1(id int,name string,age int) row format delimited fields terminated by ,; show tables; # 从local加载数据这里的local是指hs2服务所在机器的本地linux文件系统 load data local inpath /opt/bigdata/hadoop/data/hive-data into table person_local_1; # 查询 select * from person_local_1; # 从hdfs中加载数据这里是移动会把hdfs上的文件mv到对应的hive的目录下 load data inpath /person_hdfs.txt into table person_hdfs_1; # 查询 select * from person_hdfs_1;5Insert添加数据特别慢不推荐insert into table person_hdfs_1 values (4,p4,21);上面那条插入语句会启动一个MR任务更多Hive SQL操作可以参考官方文档https://hive.apache.org/《网络安全从零到精通全套学习大礼包》96节从入门到精通的全套视频教程免费领取如果你也想通过学网络安全技术去帮助就业和转行我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取/i-blog.csdnimg.cn/direct/88f12e9068e14b728b215f939a9ed28e.gif)网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取