# hive-db-jdbc **Repository Path**: mtain/hive-db-jdbc ## Basic Information - **Project Name**: hive-db-jdbc - **Description**: Hive-JDBC示例 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2019-05-17 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Hive-JDBC示例 ## Hive介绍 ### 简介 基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 主要用于**OLAP**数据处理 ### 特点 ● 运行在Hadoop之上 ● 支持创建索引,优化数据查询。 ● 不同的存储类型,例如,纯文本文件、HBase 中的文件。 ● 将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。(元数据包括表的名字,表的列和分区及其属性) ● 可以直接使用存储在Hadoop 文件系统中的数据。 ● 内置大量用户函数UDF 来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF 函数来完成内置函数无法实现的操作。 ● 类SQL 的查询方式,将SQL 查询转换为MapReduce 的job 在Hadoop集群上执行。 ### 结构图 ![20190516152203](http://www.mtain.top/git-pic/20190516152203.jpg) ![20190516152201](http://www.mtain.top/git-pic/20190516152201.jpg) ![20190516152202](http://www.mtain.top/git-pic/20190516152202.jpg) ## 安装 ### 安装包 ```java jdk-8u131-linux-x64.gz hadoop-3.1.2.tar.gz apache-hive-3.1.1-bin.tar.gz mysql-connector-java-5.1.41.jar ``` ### 安装JDK ``` # /opt下解压 tar zxvf jdk-8u131-linux-x64.gz # 配置JDK环境变量 vim + /etc/profile export JAVA_HOME=/opt/jdk1.8.0_131 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar export PATH=$PATH:$JAVA_HOME/bin ``` ### 安装Hadoop(单节点伪分布式) ``` # 1. /opt下解压 tar zxvf tar zxvf hadoop-3.1.2.tar.gz # 2. 配置JDK环境变量 vim + /etc/profile export HADOOP_HOME=/opt/hadoop-3.1.2 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_YARN_HOME=$HADOOP_HOME export HADOOP_INSTALL=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_CONF_DIR=$HADOOP_HOME export HADOOP_PREFIX=$HADOOP_HOME export HADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexec export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop export HDFS_DATANODE_USER=root export HDFS_DATANODE_SECURE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export HDFS_NAMENODE_USER=root # 3. 环境变量生效 source /etc/profile # 4. 配置HDFS地址和临时目录 mkdir -p /opt/hadoop/tmp vim $HADOOP_HOME/etc/hadoop/core-site.xml fs.default.name hdfs://127.0.0.1:9000 hadoop.tmp.dir /opt/hadoop/tmp # 5. 配置HDFS副本数及数据存放路径 mkdir -p /opt/hadoop/hdfs/name mkdir -p /opt/hadoop/hdfs/data vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml dfs.replication 2 dfs.namenode.name.dir /opt/hadoop/hdfs/name dfs.namenode.data.dir /opt/hadoop/hdfs/data # 6. 修改mapred-site.xml vim $HADOOP_HOME/etc/hadoop/mapred-site.xml mapreduce.framework.name yarn mapreduce.application.classpath /opt/hadoop-3.1.2/etc/hadoop, /opt/hadoop-3.1.2/share/hadoop/common/*, /opt/hadoop-3.1.2/share/hadoop/common/lib/*, /opt/hadoop-3.1.2/share/hadoop/hdfs/*, /opt/hadoop-3.1.2/share/hadoop/hdfs/lib/*, /opt/hadoop-3.1.2/share/hadoop/mapreduce/*, /opt/hadoop-3.1.2/share/hadoop/mapreduce/lib/*, /opt/hadoop-3.1.2/share/hadoop/yarn/*, /opt/hadoop-3.1.2/share/hadoop/yarn/lib/* #7. 编辑 yarn-site.xml vim $HADOOP_HOME/etc/hadoop/yarn-site.xml yarn.nodemanager.aux-services mapreduce_shuffle # 7. 修改hadoop-env.sh vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh 头部追加export JAVA_HOME=/opt/jdk1.8.0_131 # 8. 配置localhost免密登录 ssh-keygen cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys ssh root@localhost # 9. 格式化HDFS并启动Hadoop hdfs namenode -format start-auto.sh 浏览器访问: HDFS-NameNode http://127.0.0.1:9870 Hadoop资源管理器yarn http://192.168.64.86:8088 ``` **错误解决:** 1. but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation. `vim $HADOOP_HOME/sbin/start-dfs.sh`和`vim $HADOOP_HOME/sbin/stop-dfs.sh` 顶部追加 ``` HDFS_NAMENODE_USER=root HDFS_DATANODE_USER=root HDFS_SECONDARYNAMENODE_USER=root YARN_RESOURCEMANAGER_USER=root YARN_NODEMANAGER_USER=root ``` `vim $HADOOP_HOME/sbin/start-yarn.sh`和`vim $HADOOP_HOME/sbin/stop-yarn.sh` 顶部追加 ``` YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root ``` ### 安装Hive ``` # 1. /opt 下解压 tar zxvf apache-hive-3.1.1-bin.tar.gz # 2. 配置JDK环境变量 vim + /etc/profile export HIVE_HOME=/opt/apache-hive-3.1.1-bin export PATH=$PATH:$HIVE_HOME/bin export CLASSPATH=$CLASSPATH:/usr/local/Hadoop/lib/*:. export CLASSPATH=$CLASSPATH:/usr/local/hive/lib/*:. source /etc/profile # 3. hive增加MySQL驱动 cd $HIVE_HOME/lib/ 上传mysql-connector-java-5.1.41.jar 并在已经MySQL数据库中创建数据库hive # 4. 修改配置文件 cd $HIVE_HOME/conf/ cp hive-default.xml.template hive-site.xml vim + hive-site.xml 尾部追加,增加MySQL配置信息 javax.jdo.option.ConnectionUserName root javax.jdo.option.ConnectionPassword xxxxxxxxxxxxxx javax.jdo.option.ConnectionURL jdbc:mysql://xxx.xxx.xxx.xxxx:3306/hive javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver # 5. 初始化数据库 `schematool -dbType mysql -initSchema` # 6. 进入hive的命令 hive ``` ### 报错解决 1. Illegal character entity: expansion character ( code 0x8 字符编码导致 vim hive-site.xml +3210 删除字符`Exclusive locks for`所在行 2. Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D 创建目录`mkdir -p /opt/hive/tmp/root` vim hive-site.xml 执行全局替换`:%s/${system:java.io.tmpdir}\/${system:user.name}/\/opt\/hive\/tmp\/root/g` `:%s/${system:java.io.tmpdir}/\/opt\/hive\/tmp/g` 3. FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient ## Hive使用 ### 操作 **进入hive操作** ``` # 创建数据库 create database testdb; # 显示所有库 show databases; # 选中操作库 use testdb; # 创建表 create table table_01 (id int,name string); ``` **Hadoop中查看** ``` HDFS使用情况 hadoop fs -lsr / ``` MySQL数据库hive中查看表`tbls,tab_col_stats等` Web端查看`http://127.0.0.1:9870`中的Browser Directory ### Hive启动方式 1. 命令行:`hive` 2. JDBC远程服务方式启动:`hive --service hiveserver2`或者`hive --service hiveserver2 1000`(默认端口:10000) 3. Web界面:`hive --service hwi` 内部服务帮助命令:`hive --service help` ### Hive开启远程JDBC 1. 修改Hadoop的core-site.xml配置文件,允许所有用户所有主机远程连接 ``` vim $HADOOP_HOME/etc/hadoop/mapred-site.xml 增加 hadoop.proxyuser.root.hosts * hadoop.proxyuser.root.groups * ``` 2. 设置hive2的host和port ``` vim $HADOOP_HOME/etc/hadoop/mapred-site.xml 直接在配置文件修改 hive.server2.thrift.port 10000 Port number of HiveServer2 Thrift interface. Can be overridden by setting $HIVE_SERVER2_THRIFT_PORT hive.server2.thrift.bind.host 0.0.0.0 Bind host on which to run the HiveServer2 Thrift interface. Can be overridden by setting $HIVE_SERVER2_THRIFT_BIND_HOST ``` 3. 远程连接的账户和密码 Hive的JDBC账户和密码是和hive连接的MySQL相同的,位于配置文件` $HIVE_HOME/conf/hive-site.xml`中 ``` javax.jdo.option.ConnectionUserName root javax.jdo.option.ConnectionPassword xxxxxxxxxxxxxx ``` 4. 启动远程服务:`` 5. 使用Hive自带的工具beeline测试 ``` beeline beeline> !connect jdbc:hive2://127.0.0.1:10000/testdb ``` 6. Hive的JDBC所需要的驱动 1. Jar直接引入(在Hive下的lib目录,需要多个,此次懒得找,直接将lib下的所有jar加载使用) 2. Maven ### JDBC远程连接工具 1. JetBrains DataGrip 2. Squirrel ### Hive常见数据导入方式 1. 从本地文件系统中导入数据到Hive表 2. 从HDFS上导入数据到Hive表 3. 从别的表中查询出相应的数据并导入到Hive表中 4. 在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中 **猜测:**例如用Java做开发语言+JDBC连接操作Hive,也应该是“用JDBC实现Hdfs导入到Hive”,而不是使用批量的Insert语句 参考文章:http://www.aboutyun.com/thread-7440-1-1.html ## Hive UDF ### 介绍 UDF全称为User Defined Function,即用户自定义函数 在Hive使用Java语言开发,编写数据处理逻辑,编译成Jar,再将Jar加载到Hive中,创建函数进行使用 **代码示例**