基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。
主要用于OLAP数据处理
● 运行在Hadoop之上 ● 支持创建索引,优化数据查询。 ● 不同的存储类型,例如,纯文本文件、HBase 中的文件。 ● 将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。(元数据包括表的名字,表的列和分区及其属性) ● 可以直接使用存储在Hadoop 文件系统中的数据。 ● 内置大量用户函数UDF 来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF 函数来完成内置函数无法实现的操作。 ● 类SQL 的查询方式,将SQL 查询转换为MapReduce 的job 在Hadoop集群上执行。
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
# /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
# 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
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://127.0.0.1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
</property>
</configuration>
# 5. 配置HDFS副本数及数据存放路径
mkdir -p /opt/hadoop/hdfs/name
mkdir -p /opt/hadoop/hdfs/data
vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.namenode.data.dir</name>
<value>/opt/hadoop/hdfs/data</value>
</property>
</configuration>
# 6. 修改mapred-site.xml
vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>
/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/*
</value>
</property>
</configuration>
#7. 编辑 yarn-site.xml
vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
# 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
错误解决:
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
# 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配置信息
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>xxxxxxxxxxxxxx</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://xxx.xxx.xxx.xxxx:3306/hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
# 5. 初始化数据库
`schematool -dbType mysql -initSchema`
# 6. 进入hive的命令
hive
Illegal character entity: expansion character ( code 0x8
字符编码导致
vim hive-site.xml +3210
删除字符Exclusive locks for
所在行
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
FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
进入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
hive --service hiveserver2
或者hive --service hiveserver2 1000
(默认端口:10000)hive --service hwi
内部服务帮助命令:hive --service help
vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
增加
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
直接在配置文件修改
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
<description>Port number of HiveServer2 Thrift interface.
Can be overridden by setting $HIVE_SERVER2_THRIFT_PORT</description>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>0.0.0.0</value>
<description>Bind host on which to run the HiveServer2 Thrift interface.
Can be overridden by setting $HIVE_SERVER2_THRIFT_BIND_HOST</description>
</property>
远程连接的账户和密码
Hive的JDBC账户和密码是和hive连接的MySQL相同的,位于配置文件 $HIVE_HOME/conf/hive-site.xml
中
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>xxxxxxxxxxxxxx</value>
</property>
启动远程服务:``
使用Hive自带的工具beeline测试
beeline
beeline> !connect jdbc:hive2://127.0.0.1:10000/testdb
Hive的JDBC所需要的驱动
Jar直接引入(在Hive下的lib目录,需要多个,此次懒得找,直接将lib下的所有jar加载使用)
Maven
**猜测:**例如用Java做开发语言+JDBC连接操作Hive,也应该是“用JDBC实现Hdfs导入到Hive”,而不是使用批量的Insert语句
参考文章:http://www.aboutyun.com/thread-7440-1-1.html
UDF全称为User Defined Function,即用户自定义函数
在Hive使用Java语言开发,编写数据处理逻辑,编译成Jar,再将Jar加载到Hive中,创建函数进行使用
代码示例
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。